From 1be830dab124e4c9a37831e806ffc8bd6ffe70ab Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 20:26:05 +0200 Subject: [PATCH 001/129] fix(ui): add vitest dep + --passWithNoTests so test script doesn't fail The test script referenced vitest without declaring the devDep, and vitest exits non-zero when no test files match. Adds the missing dep and the flag to keep CI green for empty test suites. Co-Authored-By: Claude Opus 4.7 (1M context) --- packages/ui/package.json | 9 +++++---- pnpm-lock.yaml | 3 +++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/ui/package.json b/packages/ui/package.json index f7e9ec7..cd80b88 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -8,18 +8,19 @@ "scripts": { "build": "echo 'typechecked by consuming app bundler'", "lint": "eslint .", - "test": "vitest run", + "test": "vitest run --passWithNoTests", "typecheck": "tsc --noEmit" }, "dependencies": { "clsx": "^2.1.0", - "tailwind-merge": "^3.0.0", - "react": "^19.0.0" + "react": "^19.0.0", + "tailwind-merge": "^3.0.0" }, "devDependencies": { "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", "@types/react": "^19.0.0", - "tailwindcss": "^4.1.0" + "tailwindcss": "^4.1.0", + "vitest": "^3.1.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 91b01bf..5249f5b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -338,6 +338,9 @@ importers: tailwindcss: specifier: ^4.1.0 version: 4.2.2 + vitest: + specifier: ^3.1.0 + version: 3.2.4(@types/debug@4.1.13)(@types/node@25.5.2)(happy-dom@20.8.9)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(tsx@4.21.0) packages: From fd2a6f12862069149f87c9b264777460ffceb83a Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 20:27:38 +0200 Subject: [PATCH 002/129] build: add root tsconfig.base.json with core-* path aliases --- tsconfig.base.json | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 tsconfig.base.json diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 0000000..27de2de --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@repo/core-shared": ["packages/core-shared/src/index.ts"], + "@repo/core-shared/payload": ["packages/core-shared/src/payload/index.ts"], + "@repo/core-shared/trpc/init": ["packages/core-shared/src/trpc/init.ts"], + "@repo/core-shared/trpc/context": ["packages/core-shared/src/trpc/context.ts"], + "@repo/core-cms": ["packages/core-cms/src/index.ts"], + "@repo/core-cms/generated-types": ["packages/core-cms/src/generated-types.ts"], + "@repo/core-api": ["packages/core-api/src/index.ts"], + "@repo/core-trpc": ["packages/core-trpc/src/index.ts"], + "@repo/core-ui": ["packages/core-ui/src/index.ts"] + } + } +} From b4a9994dc2fe90f7324ea9777379bcd20620bd36 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 20:29:57 +0200 Subject: [PATCH 003/129] feat(core-shared): scaffold empty package with exports + tags --- packages/core-shared/package.json | 30 ++++++++++++++++++++++++++++++ packages/core-shared/src/index.ts | 1 + packages/core-shared/tsconfig.json | 9 +++++++++ packages/core-shared/turbo.json | 4 ++++ 4 files changed, 44 insertions(+) create mode 100644 packages/core-shared/package.json create mode 100644 packages/core-shared/src/index.ts create mode 100644 packages/core-shared/tsconfig.json create mode 100644 packages/core-shared/turbo.json diff --git a/packages/core-shared/package.json b/packages/core-shared/package.json new file mode 100644 index 0000000..d903fd5 --- /dev/null +++ b/packages/core-shared/package.json @@ -0,0 +1,30 @@ +{ + "name": "@repo/core-shared", + "private": true, + "version": "0.0.0", + "type": "module", + "exports": { + ".": "./src/index.ts", + "./payload": "./src/payload/index.ts", + "./trpc/init": "./src/trpc/init.ts", + "./trpc/context": "./src/trpc/context.ts" + }, + "scripts": { + "build": "tsc --noEmit", + "lint": "eslint .", + "test": "vitest run", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@trpc/server": "^11.0.0", + "payload": "^3.14.0", + "superjson": "^2.2.1", + "zod": "^3.24.0" + }, + "devDependencies": { + "@repo/eslint-config": "workspace:*", + "@repo/typescript-config": "workspace:*", + "@types/node": "^22.0.0", + "vitest": "^3.1.0" + } +} diff --git a/packages/core-shared/src/index.ts b/packages/core-shared/src/index.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/packages/core-shared/src/index.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/core-shared/tsconfig.json b/packages/core-shared/tsconfig.json new file mode 100644 index 0000000..b52d4d5 --- /dev/null +++ b/packages/core-shared/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@repo/typescript-config/base.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/core-shared/turbo.json b/packages/core-shared/turbo.json new file mode 100644 index 0000000..dcb8fb3 --- /dev/null +++ b/packages/core-shared/turbo.json @@ -0,0 +1,4 @@ +{ + "extends": ["//"], + "tags": ["core"] +} From cd1aa861a2b0391b2353ed3fc75960a83956c269 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 20:30:12 +0200 Subject: [PATCH 004/129] feat(core-cms): scaffold empty package with exports + tags --- packages/core-cms/package.json | 25 ++++++++++++++++++++++++ packages/core-cms/src/generated-types.ts | 3 +++ packages/core-cms/src/index.ts | 1 + packages/core-cms/tsconfig.json | 10 ++++++++++ packages/core-cms/turbo.json | 4 ++++ 5 files changed, 43 insertions(+) create mode 100644 packages/core-cms/package.json create mode 100644 packages/core-cms/src/generated-types.ts create mode 100644 packages/core-cms/src/index.ts create mode 100644 packages/core-cms/tsconfig.json create mode 100644 packages/core-cms/turbo.json diff --git a/packages/core-cms/package.json b/packages/core-cms/package.json new file mode 100644 index 0000000..279b453 --- /dev/null +++ b/packages/core-cms/package.json @@ -0,0 +1,25 @@ +{ + "name": "@repo/core-cms", + "private": true, + "version": "0.0.0", + "type": "module", + "exports": { + ".": "./src/index.ts", + "./generated-types": "./src/generated-types.ts" + }, + "scripts": { + "build": "tsc --noEmit", + "lint": "eslint .", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "payload": "^3.14.0", + "@payloadcms/db-postgres": "^3.14.0", + "@payloadcms/richtext-lexical": "^3.14.0" + }, + "devDependencies": { + "@repo/eslint-config": "workspace:*", + "@repo/typescript-config": "workspace:*", + "@types/node": "^22.0.0" + } +} diff --git a/packages/core-cms/src/generated-types.ts b/packages/core-cms/src/generated-types.ts new file mode 100644 index 0000000..c1f3ee7 --- /dev/null +++ b/packages/core-cms/src/generated-types.ts @@ -0,0 +1,3 @@ +// Generated by Payload — do not edit by hand. +// This file is regenerated by `pnpm generate:types` in apps/cms. +export {}; diff --git a/packages/core-cms/src/index.ts b/packages/core-cms/src/index.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/packages/core-cms/src/index.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/core-cms/tsconfig.json b/packages/core-cms/tsconfig.json new file mode 100644 index 0000000..794db4f --- /dev/null +++ b/packages/core-cms/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "@repo/typescript-config/base.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src", + "lib": ["ES2022", "DOM"] + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/core-cms/turbo.json b/packages/core-cms/turbo.json new file mode 100644 index 0000000..dcb8fb3 --- /dev/null +++ b/packages/core-cms/turbo.json @@ -0,0 +1,4 @@ +{ + "extends": ["//"], + "tags": ["core"] +} From f55823fc6e20403a8e879a6fafeb35466e61012b Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 20:30:28 +0200 Subject: [PATCH 005/129] feat(core-api): scaffold empty appRouter aggregator --- packages/core-api/package.json | 23 +++++++++++++++++++++++ packages/core-api/src/index.ts | 1 + packages/core-api/src/root.ts | 5 +++++ packages/core-api/tsconfig.json | 9 +++++++++ packages/core-api/turbo.json | 4 ++++ 5 files changed, 42 insertions(+) create mode 100644 packages/core-api/package.json create mode 100644 packages/core-api/src/index.ts create mode 100644 packages/core-api/src/root.ts create mode 100644 packages/core-api/tsconfig.json create mode 100644 packages/core-api/turbo.json diff --git a/packages/core-api/package.json b/packages/core-api/package.json new file mode 100644 index 0000000..d0f7cad --- /dev/null +++ b/packages/core-api/package.json @@ -0,0 +1,23 @@ +{ + "name": "@repo/core-api", + "private": true, + "version": "0.0.0", + "type": "module", + "exports": { + ".": "./src/index.ts" + }, + "scripts": { + "build": "tsc --noEmit", + "lint": "eslint .", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@repo/core-shared": "workspace:*", + "@trpc/server": "^11.0.0" + }, + "devDependencies": { + "@repo/eslint-config": "workspace:*", + "@repo/typescript-config": "workspace:*", + "@types/node": "^22.0.0" + } +} diff --git a/packages/core-api/src/index.ts b/packages/core-api/src/index.ts new file mode 100644 index 0000000..3a906ac --- /dev/null +++ b/packages/core-api/src/index.ts @@ -0,0 +1 @@ +export { appRouter, type AppRouter } from "./root"; diff --git a/packages/core-api/src/root.ts b/packages/core-api/src/root.ts new file mode 100644 index 0000000..8e563d2 --- /dev/null +++ b/packages/core-api/src/root.ts @@ -0,0 +1,5 @@ +import { router } from "@repo/core-shared/trpc/init"; + +export const appRouter = router({}); + +export type AppRouter = typeof appRouter; diff --git a/packages/core-api/tsconfig.json b/packages/core-api/tsconfig.json new file mode 100644 index 0000000..b52d4d5 --- /dev/null +++ b/packages/core-api/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@repo/typescript-config/base.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/core-api/turbo.json b/packages/core-api/turbo.json new file mode 100644 index 0000000..dcb8fb3 --- /dev/null +++ b/packages/core-api/turbo.json @@ -0,0 +1,4 @@ +{ + "extends": ["//"], + "tags": ["core"] +} From a5fa1ff32ba9faf181914ae4e2dff93a548b81ad Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 20:30:46 +0200 Subject: [PATCH 006/129] feat(core-trpc): scaffold empty package (client + providers in Plan 3) --- packages/core-trpc/package.json | 28 ++++++++++++++++++++++++++++ packages/core-trpc/src/index.ts | 1 + packages/core-trpc/tsconfig.json | 11 +++++++++++ packages/core-trpc/turbo.json | 4 ++++ 4 files changed, 44 insertions(+) create mode 100644 packages/core-trpc/package.json create mode 100644 packages/core-trpc/src/index.ts create mode 100644 packages/core-trpc/tsconfig.json create mode 100644 packages/core-trpc/turbo.json diff --git a/packages/core-trpc/package.json b/packages/core-trpc/package.json new file mode 100644 index 0000000..1d0810a --- /dev/null +++ b/packages/core-trpc/package.json @@ -0,0 +1,28 @@ +{ + "name": "@repo/core-trpc", + "private": true, + "version": "0.0.0", + "type": "module", + "exports": { + ".": "./src/index.ts" + }, + "scripts": { + "build": "tsc --noEmit", + "lint": "eslint .", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@repo/core-api": "workspace:*", + "@trpc/client": "^11.0.0", + "@trpc/react-query": "^11.0.0", + "@trpc/server": "^11.0.0", + "@tanstack/react-query": "^5.66.0", + "react": "^19.0.0", + "superjson": "^2.2.1" + }, + "devDependencies": { + "@repo/eslint-config": "workspace:*", + "@repo/typescript-config": "workspace:*", + "@types/react": "^19.0.0" + } +} diff --git a/packages/core-trpc/src/index.ts b/packages/core-trpc/src/index.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/packages/core-trpc/src/index.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/core-trpc/tsconfig.json b/packages/core-trpc/tsconfig.json new file mode 100644 index 0000000..fc252ac --- /dev/null +++ b/packages/core-trpc/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "@repo/typescript-config/base.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src", + "lib": ["ES2022", "DOM"], + "jsx": "preserve" + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/core-trpc/turbo.json b/packages/core-trpc/turbo.json new file mode 100644 index 0000000..dcb8fb3 --- /dev/null +++ b/packages/core-trpc/turbo.json @@ -0,0 +1,4 @@ +{ + "extends": ["//"], + "tags": ["core"] +} From 76ba941252689c71abede5e0251ecea6b46ae995 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 20:30:57 +0200 Subject: [PATCH 007/129] feat(core-ui): scaffold empty package (contents migrated in Plan 3) --- packages/core-ui/package.json | 24 ++++++++++++++++++++++++ packages/core-ui/src/index.ts | 1 + packages/core-ui/tsconfig.json | 11 +++++++++++ packages/core-ui/turbo.json | 4 ++++ 4 files changed, 40 insertions(+) create mode 100644 packages/core-ui/package.json create mode 100644 packages/core-ui/src/index.ts create mode 100644 packages/core-ui/tsconfig.json create mode 100644 packages/core-ui/turbo.json diff --git a/packages/core-ui/package.json b/packages/core-ui/package.json new file mode 100644 index 0000000..18c2682 --- /dev/null +++ b/packages/core-ui/package.json @@ -0,0 +1,24 @@ +{ + "name": "@repo/core-ui", + "private": true, + "version": "0.0.0", + "type": "module", + "exports": { + ".": "./src/index.ts" + }, + "scripts": { + "build": "tsc --noEmit", + "lint": "eslint .", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "clsx": "^2.1.1", + "react": "^19.0.0", + "tailwind-merge": "^3.0.0" + }, + "devDependencies": { + "@repo/eslint-config": "workspace:*", + "@repo/typescript-config": "workspace:*", + "@types/react": "^19.0.0" + } +} diff --git a/packages/core-ui/src/index.ts b/packages/core-ui/src/index.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/packages/core-ui/src/index.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/core-ui/tsconfig.json b/packages/core-ui/tsconfig.json new file mode 100644 index 0000000..fc252ac --- /dev/null +++ b/packages/core-ui/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "@repo/typescript-config/base.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src", + "lib": ["ES2022", "DOM"], + "jsx": "preserve" + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/core-ui/turbo.json b/packages/core-ui/turbo.json new file mode 100644 index 0000000..dcb8fb3 --- /dev/null +++ b/packages/core-ui/turbo.json @@ -0,0 +1,4 @@ +{ + "extends": ["//"], + "tags": ["core"] +} From 7c9bf5c5465e1299c0765f09999645d38ab25ceb Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 20:32:53 +0200 Subject: [PATCH 008/129] build: update lockfile for new core-* packages Co-Authored-By: Claude Opus 4.7 (1M context) --- pnpm-lock.yaml | 252 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 252 insertions(+) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5249f5b..8b616a0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -288,6 +288,131 @@ importers: specifier: ^3.1.0 version: 3.2.4(@types/debug@4.1.13)(@types/node@25.5.2)(happy-dom@20.8.9)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(tsx@4.21.0) + packages/core-api: + dependencies: + '@repo/core-shared': + specifier: workspace:* + version: link:../core-shared + '@trpc/server': + specifier: ^11.0.0 + version: 11.16.0(typescript@5.9.3) + devDependencies: + '@repo/eslint-config': + specifier: workspace:* + version: link:../eslint-config + '@repo/typescript-config': + specifier: workspace:* + version: link:../typescript-config + '@types/node': + specifier: ^22.0.0 + version: 22.19.17 + + packages/core-cms: + dependencies: + '@payloadcms/db-postgres': + specifier: ^3.14.0 + version: 3.81.0(payload@3.81.0(graphql@16.13.2)(typescript@5.9.3)) + '@payloadcms/richtext-lexical': + specifier: ^3.14.0 + version: 3.81.0(@faceless-ui/modal@3.0.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@faceless-ui/scroll-info@2.0.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@payloadcms/next@3.81.0(graphql@16.13.2)(next@16.2.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.99.0))(payload@3.81.0(graphql@16.13.2)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(next@16.2.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.99.0))(payload@3.81.0(graphql@16.13.2)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)(yjs@13.6.30) + payload: + specifier: ^3.14.0 + version: 3.81.0(graphql@16.13.2)(typescript@5.9.3) + devDependencies: + '@repo/eslint-config': + specifier: workspace:* + version: link:../eslint-config + '@repo/typescript-config': + specifier: workspace:* + version: link:../typescript-config + '@types/node': + specifier: ^22.0.0 + version: 22.19.17 + + packages/core-shared: + dependencies: + '@trpc/server': + specifier: ^11.0.0 + version: 11.16.0(typescript@5.9.3) + payload: + specifier: ^3.14.0 + version: 3.81.0(graphql@16.13.2)(typescript@5.9.3) + superjson: + specifier: ^2.2.1 + version: 2.2.6 + zod: + specifier: ^3.24.0 + version: 3.25.76 + devDependencies: + '@repo/eslint-config': + specifier: workspace:* + version: link:../eslint-config + '@repo/typescript-config': + specifier: workspace:* + version: link:../typescript-config + '@types/node': + specifier: ^22.0.0 + version: 22.19.17 + vitest: + specifier: ^3.1.0 + version: 3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(happy-dom@20.8.9)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(tsx@4.21.0) + + packages/core-trpc: + dependencies: + '@repo/core-api': + specifier: workspace:* + version: link:../core-api + '@tanstack/react-query': + specifier: ^5.66.0 + version: 5.96.2(react@19.2.4) + '@trpc/client': + specifier: ^11.0.0 + version: 11.16.0(@trpc/server@11.16.0(typescript@5.9.3))(typescript@5.9.3) + '@trpc/react-query': + specifier: ^11.0.0 + version: 11.17.0(@tanstack/react-query@5.96.2(react@19.2.4))(@trpc/client@11.16.0(@trpc/server@11.16.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.16.0(typescript@5.9.3))(react@19.2.4)(typescript@5.9.3) + '@trpc/server': + specifier: ^11.0.0 + version: 11.16.0(typescript@5.9.3) + react: + specifier: ^19.0.0 + version: 19.2.4 + superjson: + specifier: ^2.2.1 + version: 2.2.6 + devDependencies: + '@repo/eslint-config': + specifier: workspace:* + version: link:../eslint-config + '@repo/typescript-config': + specifier: workspace:* + version: link:../typescript-config + '@types/react': + specifier: ^19.0.0 + version: 19.2.14 + + packages/core-ui: + dependencies: + clsx: + specifier: ^2.1.1 + version: 2.1.1 + react: + specifier: ^19.0.0 + version: 19.2.4 + tailwind-merge: + specifier: ^3.0.0 + version: 3.5.0 + devDependencies: + '@repo/eslint-config': + specifier: workspace:* + version: link:../eslint-config + '@repo/typescript-config': + specifier: workspace:* + version: link:../typescript-config + '@types/react': + specifier: ^19.0.0 + version: 19.2.14 + packages/eslint-config: devDependencies: '@eslint/js': @@ -2097,6 +2222,15 @@ packages: '@trpc/server': 11.16.0 typescript: '>=5.7.2' + '@trpc/react-query@11.17.0': + resolution: {integrity: sha512-AGcl5YAF8NnhBmyJ6PqJqKb1M5VTGSoNRNqJ3orct4o4epdcg0GWhW+qT9q6gPzs/2ImIwYCdfFpgNGdZ9yLHA==} + peerDependencies: + '@tanstack/react-query': ^5.80.3 + '@trpc/client': 11.17.0 + '@trpc/server': 11.17.0 + react: '>=18.2.0' + typescript: '>=5.7.2' + '@trpc/server@11.16.0': resolution: {integrity: sha512-XgGuUMddrUTd04+za/WE5GFuZ1/YU9XQG0t3VL5WOIu2JspkOlq6k4RYEiqS6HSJt+S0RXaPdIoE2anIP/BBRQ==} hasBin: true @@ -2555,6 +2689,10 @@ packages: cookie-es@2.0.1: resolution: {integrity: sha512-aVf4A4hI2w70LnF7GG+7xDQUkliwiXWXFvTjkip4+b64ygDQ2sJPRSKFDHbxn8o0xu9QzPkMuuiWIXyFSE2slA==} + copy-anything@4.0.5: + resolution: {integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==} + engines: {node: '>=18'} + cosmiconfig@7.1.0: resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} engines: {node: '>=10'} @@ -3180,6 +3318,10 @@ packages: resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} + is-what@5.5.0: + resolution: {integrity: sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==} + engines: {node: '>=18'} + is-wsl@2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} @@ -4110,6 +4252,10 @@ packages: stylis@4.2.0: resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + superjson@2.2.6: + resolution: {integrity: sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==} + engines: {node: '>=16'} + supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -6206,6 +6352,14 @@ snapshots: '@trpc/server': 11.16.0(typescript@5.9.3) typescript: 5.9.3 + '@trpc/react-query@11.17.0(@tanstack/react-query@5.96.2(react@19.2.4))(@trpc/client@11.16.0(@trpc/server@11.16.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.16.0(typescript@5.9.3))(react@19.2.4)(typescript@5.9.3)': + dependencies: + '@tanstack/react-query': 5.96.2(react@19.2.4) + '@trpc/client': 11.16.0(@trpc/server@11.16.0(typescript@5.9.3))(typescript@5.9.3) + '@trpc/server': 11.16.0(typescript@5.9.3) + react: 19.2.4 + typescript: 5.9.3 + '@trpc/server@11.16.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 @@ -6446,6 +6600,14 @@ snapshots: chai: 5.3.3 tinyrainbow: 2.0.0 + '@vitest/mocker@3.2.4(vite@6.4.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(tsx@4.21.0))': + dependencies: + '@vitest/spy': 3.2.4 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 6.4.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(tsx@4.21.0) + '@vitest/mocker@3.2.4(vite@6.4.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(tsx@4.21.0))': dependencies: '@vitest/spy': 3.2.4 @@ -6688,6 +6850,10 @@ snapshots: cookie-es@2.0.1: {} + copy-anything@4.0.5: + dependencies: + is-what: 5.5.0 + cosmiconfig@7.1.0: dependencies: '@types/parse-json': 4.0.2 @@ -7272,6 +7438,8 @@ snapshots: dependencies: which-typed-array: 1.1.20 + is-what@5.5.0: {} + is-wsl@2.2.0: dependencies: is-docker: 2.2.1 @@ -8388,6 +8556,10 @@ snapshots: stylis@4.2.0: {} + superjson@2.2.6: + dependencies: + copy-anything: 4.0.5 + supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -8578,6 +8750,27 @@ snapshots: '@types/unist': 3.0.3 unist-util-stringify-position: 4.0.0 + vite-node@3.2.4(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(tsx@4.21.0): + dependencies: + cac: 6.7.14 + debug: 4.4.3 + es-module-lexer: 1.7.0 + pathe: 2.0.3 + vite: 6.4.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(tsx@4.21.0) + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + vite-node@3.2.4(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(tsx@4.21.0): dependencies: cac: 6.7.14 @@ -8599,6 +8792,22 @@ snapshots: - tsx - yaml + vite@6.4.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(tsx@4.21.0): + dependencies: + esbuild: 0.25.12 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + postcss: 8.5.8 + rollup: 4.60.1 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 22.19.17 + fsevents: 2.3.3 + jiti: 2.6.1 + lightningcss: 1.32.0 + sass: 1.99.0 + tsx: 4.21.0 + vite@6.4.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(tsx@4.21.0): dependencies: esbuild: 0.25.12 @@ -8615,6 +8824,49 @@ snapshots: sass: 1.99.0 tsx: 4.21.0 + vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(happy-dom@20.8.9)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(tsx@4.21.0): + dependencies: + '@types/chai': 5.2.3 + '@vitest/expect': 3.2.4 + '@vitest/mocker': 3.2.4(vite@6.4.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(tsx@4.21.0)) + '@vitest/pretty-format': 3.2.4 + '@vitest/runner': 3.2.4 + '@vitest/snapshot': 3.2.4 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.3.3 + debug: 4.4.3 + expect-type: 1.3.0 + magic-string: 0.30.21 + pathe: 2.0.3 + picomatch: 4.0.4 + std-env: 3.10.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.15 + tinypool: 1.1.1 + tinyrainbow: 2.0.0 + vite: 6.4.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(tsx@4.21.0) + vite-node: 3.2.4(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(tsx@4.21.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/debug': 4.1.13 + '@types/node': 22.19.17 + happy-dom: 20.8.9 + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + vitest@3.2.4(@types/debug@4.1.13)(@types/node@25.5.2)(happy-dom@20.8.9)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(tsx@4.21.0): dependencies: '@types/chai': 5.2.3 From afc76754f83ca660ef71662be4d3200a536abdc2 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 20:33:34 +0200 Subject: [PATCH 009/129] build(typescript-config): add shared vitest base config --- packages/typescript-config/package.json | 10 +++++++++- packages/typescript-config/vitest.base.ts | 15 +++++++++++++++ pnpm-lock.yaml | 6 +++++- 3 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 packages/typescript-config/vitest.base.ts diff --git a/packages/typescript-config/package.json b/packages/typescript-config/package.json index 1b9354b..84ec97c 100644 --- a/packages/typescript-config/package.json +++ b/packages/typescript-config/package.json @@ -1,5 +1,13 @@ { "name": "@repo/typescript-config", "private": true, - "version": "0.0.0" + "version": "0.0.0", + "type": "module", + "exports": { + "./base.json": "./base.json", + "./vitest.base": "./vitest.base.ts" + }, + "devDependencies": { + "vitest": "^3.1.0" + } } diff --git a/packages/typescript-config/vitest.base.ts b/packages/typescript-config/vitest.base.ts new file mode 100644 index 0000000..4f69a34 --- /dev/null +++ b/packages/typescript-config/vitest.base.ts @@ -0,0 +1,15 @@ +import { defineConfig } from "vitest/config"; + +export const baseVitestConfig = defineConfig({ + test: { + globals: true, + environment: "node", + include: ["src/**/*.test.ts", "src/**/*.test.tsx", "tests/**/*.test.ts"], + coverage: { + provider: "v8", + reporter: ["text", "html"], + include: ["src/**"], + exclude: ["src/**/*.test.{ts,tsx}", "src/**/index.ts"], + }, + }, +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8b616a0..c807aae 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -437,7 +437,11 @@ importers: specifier: ^8.25.0 version: 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - packages/typescript-config: {} + packages/typescript-config: + devDependencies: + vitest: + specifier: ^3.1.0 + version: 3.2.4(@types/debug@4.1.13)(@types/node@25.5.2)(happy-dom@20.8.9)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(tsx@4.21.0) packages/ui: dependencies: From 9a2158211bc129dae61d11c8789752a6f4efa597 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 20:34:08 +0200 Subject: [PATCH 010/129] test(core-shared): wire shared vitest base --- packages/core-shared/vitest.config.ts | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 packages/core-shared/vitest.config.ts diff --git a/packages/core-shared/vitest.config.ts b/packages/core-shared/vitest.config.ts new file mode 100644 index 0000000..f115cc9 --- /dev/null +++ b/packages/core-shared/vitest.config.ts @@ -0,0 +1,3 @@ +import { baseVitestConfig } from "@repo/typescript-config/vitest.base"; + +export default baseVitestConfig; From 59423172224a40b060fa3463217aaefb83791ac6 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 20:35:36 +0200 Subject: [PATCH 011/129] feat(core-shared): add isAdmin access helper --- .../src/payload/access/is-admin.test.ts | 20 +++++++++++++++++++ .../src/payload/access/is-admin.ts | 7 +++++++ 2 files changed, 27 insertions(+) create mode 100644 packages/core-shared/src/payload/access/is-admin.test.ts create mode 100644 packages/core-shared/src/payload/access/is-admin.ts diff --git a/packages/core-shared/src/payload/access/is-admin.test.ts b/packages/core-shared/src/payload/access/is-admin.test.ts new file mode 100644 index 0000000..a8f9456 --- /dev/null +++ b/packages/core-shared/src/payload/access/is-admin.test.ts @@ -0,0 +1,20 @@ +import { describe, expect, it } from "vitest"; +import { isAdmin } from "./is-admin"; + +describe("isAdmin", () => { + it("returns true when user role is 'admin'", () => { + expect(isAdmin({ req: { user: { role: "admin" } } })).toBe(true); + }); + + it("returns false when user role is not 'admin'", () => { + expect(isAdmin({ req: { user: { role: "editor" } } })).toBe(false); + }); + + it("returns false when user has no role", () => { + expect(isAdmin({ req: { user: {} } })).toBe(false); + }); + + it("returns false when there is no user", () => { + expect(isAdmin({ req: {} })).toBe(false); + }); +}); diff --git a/packages/core-shared/src/payload/access/is-admin.ts b/packages/core-shared/src/payload/access/is-admin.ts new file mode 100644 index 0000000..3b480b2 --- /dev/null +++ b/packages/core-shared/src/payload/access/is-admin.ts @@ -0,0 +1,7 @@ +export function isAdmin({ + req, +}: { + req: { user?: { role?: string } }; +}): boolean { + return req.user?.role === "admin"; +} From f2f8e2b3b3480fb17c07e42bbf0d965491ab7e18 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 20:35:59 +0200 Subject: [PATCH 012/129] feat(core-shared): add slugField helper --- .../src/payload/fields/slug-field.test.ts | 18 ++++++++++++++++++ .../src/payload/fields/slug-field.ts | 11 +++++++++++ 2 files changed, 29 insertions(+) create mode 100644 packages/core-shared/src/payload/fields/slug-field.test.ts create mode 100644 packages/core-shared/src/payload/fields/slug-field.ts diff --git a/packages/core-shared/src/payload/fields/slug-field.test.ts b/packages/core-shared/src/payload/fields/slug-field.test.ts new file mode 100644 index 0000000..32e4ab1 --- /dev/null +++ b/packages/core-shared/src/payload/fields/slug-field.test.ts @@ -0,0 +1,18 @@ +import { describe, expect, it } from "vitest"; +import { slugField } from "./slug-field"; + +describe("slugField", () => { + it("returns a Payload Field with default name 'slug'", () => { + const field = slugField(); + expect(field.name).toBe("slug"); + expect(field.type).toBe("text"); + expect(field.required).toBe(true); + expect(field.unique).toBe(true); + expect(field.index).toBe(true); + }); + + it("accepts a custom field name", () => { + const field = slugField("permalink"); + expect(field.name).toBe("permalink"); + }); +}); diff --git a/packages/core-shared/src/payload/fields/slug-field.ts b/packages/core-shared/src/payload/fields/slug-field.ts new file mode 100644 index 0000000..213d6f4 --- /dev/null +++ b/packages/core-shared/src/payload/fields/slug-field.ts @@ -0,0 +1,11 @@ +import type { Field } from "payload"; + +export function slugField(name = "slug"): Field { + return { + name, + type: "text", + required: true, + unique: true, + index: true, + }; +} From 2d838b2dcf9edc5af006334d33b3213d92d505a9 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 20:36:17 +0200 Subject: [PATCH 013/129] feat(core-shared): add seoFields group --- .../src/payload/fields/seo-fields.test.ts | 27 +++++++++++++++++++ .../src/payload/fields/seo-fields.ts | 10 +++++++ 2 files changed, 37 insertions(+) create mode 100644 packages/core-shared/src/payload/fields/seo-fields.test.ts create mode 100644 packages/core-shared/src/payload/fields/seo-fields.ts diff --git a/packages/core-shared/src/payload/fields/seo-fields.test.ts b/packages/core-shared/src/payload/fields/seo-fields.test.ts new file mode 100644 index 0000000..3cf05fc --- /dev/null +++ b/packages/core-shared/src/payload/fields/seo-fields.test.ts @@ -0,0 +1,27 @@ +import { describe, expect, it } from "vitest"; +import { seoFields } from "./seo-fields"; + +describe("seoFields", () => { + it("is a group field named 'seo'", () => { + expect(seoFields.name).toBe("seo"); + expect(seoFields.type).toBe("group"); + }); + + it("contains required title and optional description", () => { + if (seoFields.type !== "group") { + throw new Error("seoFields must be a group"); + } + const fieldNames = seoFields.fields.map((f) => + "name" in f ? f.name : null, + ); + expect(fieldNames).toContain("title"); + expect(fieldNames).toContain("description"); + + const titleField = seoFields.fields.find( + (f) => "name" in f && f.name === "title", + ); + expect(titleField && "required" in titleField && titleField.required).toBe( + true, + ); + }); +}); diff --git a/packages/core-shared/src/payload/fields/seo-fields.ts b/packages/core-shared/src/payload/fields/seo-fields.ts new file mode 100644 index 0000000..f02a2e0 --- /dev/null +++ b/packages/core-shared/src/payload/fields/seo-fields.ts @@ -0,0 +1,10 @@ +import type { Field } from "payload"; + +export const seoFields: Field = { + name: "seo", + type: "group", + fields: [ + { name: "title", type: "text", required: true }, + { name: "description", type: "textarea" }, + ], +}; From 6bd428214f59dcc5b404c8a0efd5c4213ae90045 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 20:36:30 +0200 Subject: [PATCH 014/129] feat(core-shared): add cta block --- .../core-shared/src/payload/blocks/cta.test.ts | 16 ++++++++++++++++ packages/core-shared/src/payload/blocks/cta.ts | 10 ++++++++++ 2 files changed, 26 insertions(+) create mode 100644 packages/core-shared/src/payload/blocks/cta.test.ts create mode 100644 packages/core-shared/src/payload/blocks/cta.ts diff --git a/packages/core-shared/src/payload/blocks/cta.test.ts b/packages/core-shared/src/payload/blocks/cta.test.ts new file mode 100644 index 0000000..5e0546b --- /dev/null +++ b/packages/core-shared/src/payload/blocks/cta.test.ts @@ -0,0 +1,16 @@ +import { describe, expect, it } from "vitest"; +import { cta } from "./cta"; + +describe("cta block", () => { + it("has slug 'cta'", () => { + expect(cta.slug).toBe("cta"); + }); + + it("requires title, buttonLabel, and href", () => { + const fieldNames = cta.fields.map((f) => ("name" in f ? f.name : null)); + expect(fieldNames).toEqual(["title", "buttonLabel", "href"]); + cta.fields.forEach((f) => { + if ("required" in f) expect(f.required).toBe(true); + }); + }); +}); diff --git a/packages/core-shared/src/payload/blocks/cta.ts b/packages/core-shared/src/payload/blocks/cta.ts new file mode 100644 index 0000000..13cc399 --- /dev/null +++ b/packages/core-shared/src/payload/blocks/cta.ts @@ -0,0 +1,10 @@ +import type { Block } from "payload"; + +export const cta: Block = { + slug: "cta", + fields: [ + { name: "title", type: "text", required: true }, + { name: "buttonLabel", type: "text", required: true }, + { name: "href", type: "text", required: true }, + ], +}; From 124ccabc5f67946ba9c9c5ea33c8533d4b04ec93 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 20:36:45 +0200 Subject: [PATCH 015/129] feat(core-shared): add setPublishedAt hook --- .../payload/hooks/set-published-at.test.ts | 34 +++++++++++++++++++ .../src/payload/hooks/set-published-at.ts | 13 +++++++ 2 files changed, 47 insertions(+) create mode 100644 packages/core-shared/src/payload/hooks/set-published-at.test.ts create mode 100644 packages/core-shared/src/payload/hooks/set-published-at.ts diff --git a/packages/core-shared/src/payload/hooks/set-published-at.test.ts b/packages/core-shared/src/payload/hooks/set-published-at.test.ts new file mode 100644 index 0000000..40fdd50 --- /dev/null +++ b/packages/core-shared/src/payload/hooks/set-published-at.test.ts @@ -0,0 +1,34 @@ +import { describe, expect, it, beforeEach, afterEach, vi } from "vitest"; +import { setPublishedAt } from "./set-published-at"; + +describe("setPublishedAt", () => { + beforeEach(() => { + vi.useFakeTimers(); + vi.setSystemTime(new Date("2026-05-04T12:00:00.000Z")); + }); + + afterEach(() => { + vi.useRealTimers(); + }); + + it("sets publishedAt to now when status is published and publishedAt is missing", () => { + const result = setPublishedAt({ data: { status: "published" } }); + expect(result?.publishedAt).toBe("2026-05-04T12:00:00.000Z"); + }); + + it("does not overwrite an existing publishedAt", () => { + const result = setPublishedAt({ + data: { status: "published", publishedAt: "2025-01-01T00:00:00.000Z" }, + }); + expect(result?.publishedAt).toBe("2025-01-01T00:00:00.000Z"); + }); + + it("does not set publishedAt when status is not published", () => { + const result = setPublishedAt({ data: { status: "draft" } }); + expect(result?.publishedAt).toBeUndefined(); + }); + + it("returns data unchanged when data is missing", () => { + expect(setPublishedAt({})).toBeUndefined(); + }); +}); diff --git a/packages/core-shared/src/payload/hooks/set-published-at.ts b/packages/core-shared/src/payload/hooks/set-published-at.ts new file mode 100644 index 0000000..d7e4093 --- /dev/null +++ b/packages/core-shared/src/payload/hooks/set-published-at.ts @@ -0,0 +1,13 @@ +export function setPublishedAt({ + data, +}: { + data?: { status?: string; publishedAt?: string | null }; +}) { + if (!data) return data; + + if (data.status === "published" && !data.publishedAt) { + data.publishedAt = new Date().toISOString(); + } + + return data; +} From 2b2de66b5dcaa8e82f6e2a70700a0af20f39a84b Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 20:37:00 +0200 Subject: [PATCH 016/129] feat(core-shared): add slugifyIfMissing hook --- .../payload/hooks/slugify-if-missing.test.ts | 44 +++++++++++++++++++ .../src/payload/hooks/slugify-if-missing.ts | 19 ++++++++ 2 files changed, 63 insertions(+) create mode 100644 packages/core-shared/src/payload/hooks/slugify-if-missing.test.ts create mode 100644 packages/core-shared/src/payload/hooks/slugify-if-missing.ts diff --git a/packages/core-shared/src/payload/hooks/slugify-if-missing.test.ts b/packages/core-shared/src/payload/hooks/slugify-if-missing.test.ts new file mode 100644 index 0000000..0d75e22 --- /dev/null +++ b/packages/core-shared/src/payload/hooks/slugify-if-missing.test.ts @@ -0,0 +1,44 @@ +import { describe, expect, it } from "vitest"; +import { slugifyIfMissing } from "./slugify-if-missing"; + +describe("slugifyIfMissing", () => { + it("derives slug from title on create when slug is empty", () => { + const result = slugifyIfMissing({ + data: { title: "Hello World" }, + operation: "create", + }); + expect(result?.slug).toBe("hello-world"); + }); + + it("does not overwrite an existing slug", () => { + const result = slugifyIfMissing({ + data: { title: "New Title", slug: "kept-slug" }, + operation: "create", + }); + expect(result?.slug).toBe("kept-slug"); + }); + + it("does nothing on update", () => { + const result = slugifyIfMissing({ + data: { title: "Hello World" }, + operation: "update", + }); + expect(result?.slug).toBeUndefined(); + }); + + it("strips non-alphanumerics and trims hyphens", () => { + const result = slugifyIfMissing({ + data: { title: " Hello, World!! 2026 " }, + operation: "create", + }); + expect(result?.slug).toBe("hello-world-2026"); + }); + + it("returns data unchanged when title is missing", () => { + const result = slugifyIfMissing({ + data: {}, + operation: "create", + }); + expect(result?.slug).toBeUndefined(); + }); +}); diff --git a/packages/core-shared/src/payload/hooks/slugify-if-missing.ts b/packages/core-shared/src/payload/hooks/slugify-if-missing.ts new file mode 100644 index 0000000..891c525 --- /dev/null +++ b/packages/core-shared/src/payload/hooks/slugify-if-missing.ts @@ -0,0 +1,19 @@ +export function slugifyIfMissing({ + data, + operation, +}: { + data?: { title?: string; slug?: string }; + operation?: string; +}) { + if (!data) return data; + if (operation !== "create") return data; + if (data.slug) return data; + if (!data.title) return data; + + data.slug = data.title + .toLowerCase() + .replace(/[^a-z0-9]+/g, "-") + .replace(/^-+|-+$/g, ""); + + return data; +} From 3ffe752c7ad9c6b0258ef4b9d74236c0ffb40d23 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 20:37:12 +0200 Subject: [PATCH 017/129] feat(core-shared): add requireEnv helper --- packages/core-shared/src/lib/env.test.ts | 28 ++++++++++++++++++++++++ packages/core-shared/src/lib/env.ts | 7 ++++++ 2 files changed, 35 insertions(+) create mode 100644 packages/core-shared/src/lib/env.test.ts create mode 100644 packages/core-shared/src/lib/env.ts diff --git a/packages/core-shared/src/lib/env.test.ts b/packages/core-shared/src/lib/env.test.ts new file mode 100644 index 0000000..a586a55 --- /dev/null +++ b/packages/core-shared/src/lib/env.test.ts @@ -0,0 +1,28 @@ +import { describe, expect, it, afterEach } from "vitest"; +import { requireEnv } from "./env"; + +describe("requireEnv", () => { + const originalEnv = process.env.SOME_KEY; + + afterEach(() => { + if (originalEnv === undefined) delete process.env.SOME_KEY; + else process.env.SOME_KEY = originalEnv; + }); + + it("returns the value when set", () => { + process.env.SOME_KEY = "value"; + expect(requireEnv("SOME_KEY")).toBe("value"); + }); + + it("throws when missing", () => { + delete process.env.SOME_KEY; + expect(() => requireEnv("SOME_KEY")).toThrow( + /Missing required env var: SOME_KEY/, + ); + }); + + it("throws when empty string", () => { + process.env.SOME_KEY = ""; + expect(() => requireEnv("SOME_KEY")).toThrow(); + }); +}); diff --git a/packages/core-shared/src/lib/env.ts b/packages/core-shared/src/lib/env.ts new file mode 100644 index 0000000..8721f93 --- /dev/null +++ b/packages/core-shared/src/lib/env.ts @@ -0,0 +1,7 @@ +export function requireEnv(name: string): string { + const value = process.env[name]; + if (!value) { + throw new Error(`Missing required env var: ${name}`); + } + return value; +} From 520a792b7fe6bfb52deff74b55ad22e86a3196bc Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 20:37:26 +0200 Subject: [PATCH 018/129] feat(core-shared): add toIsoString helper --- packages/core-shared/src/lib/date.test.ts | 23 +++++++++++++++++++++++ packages/core-shared/src/lib/date.ts | 5 +++++ 2 files changed, 28 insertions(+) create mode 100644 packages/core-shared/src/lib/date.test.ts create mode 100644 packages/core-shared/src/lib/date.ts diff --git a/packages/core-shared/src/lib/date.test.ts b/packages/core-shared/src/lib/date.test.ts new file mode 100644 index 0000000..bfcc316 --- /dev/null +++ b/packages/core-shared/src/lib/date.test.ts @@ -0,0 +1,23 @@ +import { describe, expect, it } from "vitest"; +import { toIsoString } from "./date"; + +describe("toIsoString", () => { + it("converts a Date to ISO string", () => { + const d = new Date("2026-05-04T12:00:00.000Z"); + expect(toIsoString(d)).toBe("2026-05-04T12:00:00.000Z"); + }); + + it("passes through an existing ISO string", () => { + expect(toIsoString("2026-05-04T12:00:00.000Z")).toBe( + "2026-05-04T12:00:00.000Z", + ); + }); + + it("returns null for null input", () => { + expect(toIsoString(null)).toBeNull(); + }); + + it("returns null for undefined input", () => { + expect(toIsoString(undefined)).toBeNull(); + }); +}); diff --git a/packages/core-shared/src/lib/date.ts b/packages/core-shared/src/lib/date.ts new file mode 100644 index 0000000..6e3ee48 --- /dev/null +++ b/packages/core-shared/src/lib/date.ts @@ -0,0 +1,5 @@ +export function toIsoString(input: Date | string | null | undefined): string | null { + if (input === null || input === undefined) return null; + if (input instanceof Date) return input.toISOString(); + return input; +} From a9a8d327269b0ca94017d044bee43561fbddafd7 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 20:39:54 +0200 Subject: [PATCH 019/129] feat(core-shared): add payload barrel export --- packages/core-shared/src/payload/index.ts | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 packages/core-shared/src/payload/index.ts diff --git a/packages/core-shared/src/payload/index.ts b/packages/core-shared/src/payload/index.ts new file mode 100644 index 0000000..c7c1937 --- /dev/null +++ b/packages/core-shared/src/payload/index.ts @@ -0,0 +1,6 @@ +export { isAdmin } from "./access/is-admin"; +export { slugField } from "./fields/slug-field"; +export { seoFields } from "./fields/seo-fields"; +export { cta } from "./blocks/cta"; +export { setPublishedAt } from "./hooks/set-published-at"; +export { slugifyIfMissing } from "./hooks/slugify-if-missing"; From cd2f3b1fffa0e2cf8cb463ec793ef781df9bca48 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 20:40:42 +0200 Subject: [PATCH 020/129] feat(core-shared): add tRPC init with superjson --- packages/core-shared/src/trpc/init.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 packages/core-shared/src/trpc/init.ts diff --git a/packages/core-shared/src/trpc/init.ts b/packages/core-shared/src/trpc/init.ts new file mode 100644 index 0000000..1a4a034 --- /dev/null +++ b/packages/core-shared/src/trpc/init.ts @@ -0,0 +1,10 @@ +import { initTRPC } from "@trpc/server"; +import superjson from "superjson"; + +const t = initTRPC.create({ + transformer: superjson, +}); + +export const router = t.router; +export const publicProcedure = t.procedure; +export const middleware = t.middleware; From 428346a36db20cde228d0d333b710c2fed803982 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 20:40:52 +0200 Subject: [PATCH 021/129] feat(core-shared): add tRPC context factory --- packages/core-shared/src/trpc/context.ts | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 packages/core-shared/src/trpc/context.ts diff --git a/packages/core-shared/src/trpc/context.ts b/packages/core-shared/src/trpc/context.ts new file mode 100644 index 0000000..d38a5cb --- /dev/null +++ b/packages/core-shared/src/trpc/context.ts @@ -0,0 +1,5 @@ +export async function createTrpcContext() { + return {}; +} + +export type TrpcContext = Awaited>; From 884b0c01e8de77525a06980aef52c5ce58efc805 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 20:43:23 +0200 Subject: [PATCH 022/129] fix(core-shared): narrow Payload Field union before accessing name in tests Payload's Field type is a discriminated union; field.name only exists on named variants. Tests now narrow on type (and 'name' in field for groups) before reading variant-specific properties. Co-Authored-By: Claude Opus 4.7 (1M context) --- packages/core-shared/src/payload/fields/seo-fields.test.ts | 3 +++ packages/core-shared/src/payload/fields/slug-field.test.ts | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/core-shared/src/payload/fields/seo-fields.test.ts b/packages/core-shared/src/payload/fields/seo-fields.test.ts index 3cf05fc..f894e8f 100644 --- a/packages/core-shared/src/payload/fields/seo-fields.test.ts +++ b/packages/core-shared/src/payload/fields/seo-fields.test.ts @@ -3,6 +3,9 @@ import { seoFields } from "./seo-fields"; describe("seoFields", () => { it("is a group field named 'seo'", () => { + if (seoFields.type !== "group" || !("name" in seoFields)) { + throw new Error("seoFields must be a named group"); + } expect(seoFields.name).toBe("seo"); expect(seoFields.type).toBe("group"); }); diff --git a/packages/core-shared/src/payload/fields/slug-field.test.ts b/packages/core-shared/src/payload/fields/slug-field.test.ts index 32e4ab1..a0fbb08 100644 --- a/packages/core-shared/src/payload/fields/slug-field.test.ts +++ b/packages/core-shared/src/payload/fields/slug-field.test.ts @@ -4,8 +4,8 @@ import { slugField } from "./slug-field"; describe("slugField", () => { it("returns a Payload Field with default name 'slug'", () => { const field = slugField(); + if (field.type !== "text") throw new Error("expected text field"); expect(field.name).toBe("slug"); - expect(field.type).toBe("text"); expect(field.required).toBe(true); expect(field.unique).toBe(true); expect(field.index).toBe(true); @@ -13,6 +13,7 @@ describe("slugField", () => { it("accepts a custom field name", () => { const field = slugField("permalink"); + if (field.type !== "text") throw new Error("expected text field"); expect(field.name).toBe("permalink"); }); }); From 614b0178a073e18b416c8880608a1f3e63cc6cae Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 20:45:09 +0200 Subject: [PATCH 023/129] feat(core-shared): wire root index.ts barrel --- packages/core-shared/src/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/core-shared/src/index.ts b/packages/core-shared/src/index.ts index cb0ff5c..d491b0b 100644 --- a/packages/core-shared/src/index.ts +++ b/packages/core-shared/src/index.ts @@ -1 +1,2 @@ -export {}; +export { requireEnv } from "./lib/env"; +export { toIsoString } from "./lib/date"; From 0be9e4beb4744d4422c85c1b11ce559b06eec63d Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 20:53:48 +0200 Subject: [PATCH 024/129] feat(core-cms): add stub payload.config (empty collections/globals) --- packages/core-cms/src/index.ts | 2 +- packages/core-cms/src/payload.config.ts | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 packages/core-cms/src/payload.config.ts diff --git a/packages/core-cms/src/index.ts b/packages/core-cms/src/index.ts index cb0ff5c..a31fc36 100644 --- a/packages/core-cms/src/index.ts +++ b/packages/core-cms/src/index.ts @@ -1 +1 @@ -export {}; +export { default } from "./payload.config"; diff --git a/packages/core-cms/src/payload.config.ts b/packages/core-cms/src/payload.config.ts new file mode 100644 index 0000000..b166388 --- /dev/null +++ b/packages/core-cms/src/payload.config.ts @@ -0,0 +1,25 @@ +import { buildConfig } from "payload"; +import { postgresAdapter } from "@payloadcms/db-postgres"; +import { lexicalEditor } from "@payloadcms/richtext-lexical"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const filename = fileURLToPath(import.meta.url); +const dirname = path.dirname(filename); + +export default buildConfig({ + editor: lexicalEditor(), + collections: [], + globals: [], + secret: process.env.PAYLOAD_SECRET || "default-secret-change-me", + db: postgresAdapter({ + pool: { + connectionString: + process.env.DATABASE_URL || + "postgresql://postgres:postgres@localhost:5432/template", + }, + }), + typescript: { + outputFile: path.resolve(dirname, "generated-types.ts"), + }, +}); From 9c8ca61fc948d4c2ab6ecc704aa11efe236d4a60 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 20:54:27 +0200 Subject: [PATCH 025/129] feat(cms): repoint @payload-config from cms-core to core-cms --- apps/cms/package.json | 1 + apps/cms/src/payload.config.ts | 6 +++--- pnpm-lock.yaml | 3 +++ 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/apps/cms/package.json b/apps/cms/package.json index e83e2cb..2b91f48 100644 --- a/apps/cms/package.json +++ b/apps/cms/package.json @@ -14,6 +14,7 @@ "@payloadcms/next": "^3.14.0", "@payloadcms/ui": "^3.14.0", "@repo/cms-core": "workspace:*", + "@repo/core-cms": "workspace:*", "next": "^15.3.0", "payload": "^3.14.0", "react": "^19.0.0", diff --git a/apps/cms/src/payload.config.ts b/apps/cms/src/payload.config.ts index b434100..08643eb 100644 --- a/apps/cms/src/payload.config.ts +++ b/apps/cms/src/payload.config.ts @@ -1,3 +1,3 @@ -// Re-export Payload config from @repo/cms-core -// This file exists so @payload-config resolves correctly in the CMS app -export { default } from "@repo/cms-core/src/payload.config"; +// Re-export Payload config from @repo/core-cms. +// This file exists so @payload-config resolves correctly in the CMS app. +export { default } from "@repo/core-cms"; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c807aae..1900a2f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,6 +29,9 @@ importers: '@repo/cms-core': specifier: workspace:* version: link:../../packages/cms-core + '@repo/core-cms': + specifier: workspace:* + version: link:../../packages/core-cms next: specifier: ^15.3.0 version: 15.5.14(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.99.0) From dd4edce61de835dfb9cfb07d93fbbd15dbc37024 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 20:55:34 +0200 Subject: [PATCH 026/129] fix(typescript-config): expose nextjs.json + react-library.json in exports map The prior commit added an exports map that only listed base.json and vitest.base, accidentally hiding nextjs.json and react-library.json from packages that extend them via tsconfig.json. Adds them back. Co-Authored-By: Claude Opus 4.7 (1M context) --- packages/typescript-config/package.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/typescript-config/package.json b/packages/typescript-config/package.json index 84ec97c..acfc057 100644 --- a/packages/typescript-config/package.json +++ b/packages/typescript-config/package.json @@ -5,6 +5,8 @@ "type": "module", "exports": { "./base.json": "./base.json", + "./nextjs.json": "./nextjs.json", + "./react-library.json": "./react-library.json", "./vitest.base": "./vitest.base.ts" }, "devDependencies": { From 76dbe71a75f9aea7ff9a4adecada81c56e88f798 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 21:56:44 +0200 Subject: [PATCH 027/129] feat(core-cms): generate initial (empty) Payload types Co-Authored-By: Claude Opus 4.7 (1M context) --- packages/core-cms/src/generated-types.ts | 298 ++++++++++++++++++++++- 1 file changed, 295 insertions(+), 3 deletions(-) diff --git a/packages/core-cms/src/generated-types.ts b/packages/core-cms/src/generated-types.ts index c1f3ee7..703fa14 100644 --- a/packages/core-cms/src/generated-types.ts +++ b/packages/core-cms/src/generated-types.ts @@ -1,3 +1,295 @@ -// Generated by Payload — do not edit by hand. -// This file is regenerated by `pnpm generate:types` in apps/cms. -export {}; +/* tslint:disable */ +/* eslint-disable */ +/** + * This file was automatically generated by Payload. + * DO NOT MODIFY IT BY HAND. Instead, modify your source Payload config, + * and re-run `payload generate:types` to regenerate this file. + */ + +/** + * Supported timezones in IANA format. + * + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "supportedTimezones". + */ +export type SupportedTimezones = + | 'Pacific/Midway' + | 'Pacific/Niue' + | 'Pacific/Honolulu' + | 'Pacific/Rarotonga' + | 'America/Anchorage' + | 'Pacific/Gambier' + | 'America/Los_Angeles' + | 'America/Tijuana' + | 'America/Denver' + | 'America/Phoenix' + | 'America/Chicago' + | 'America/Guatemala' + | 'America/New_York' + | 'America/Bogota' + | 'America/Caracas' + | 'America/Santiago' + | 'America/Buenos_Aires' + | 'America/Sao_Paulo' + | 'Atlantic/South_Georgia' + | 'Atlantic/Azores' + | 'Atlantic/Cape_Verde' + | 'Europe/London' + | 'Europe/Berlin' + | 'Africa/Lagos' + | 'Europe/Athens' + | 'Africa/Cairo' + | 'Europe/Moscow' + | 'Asia/Riyadh' + | 'Asia/Dubai' + | 'Asia/Baku' + | 'Asia/Karachi' + | 'Asia/Tashkent' + | 'Asia/Calcutta' + | 'Asia/Dhaka' + | 'Asia/Almaty' + | 'Asia/Jakarta' + | 'Asia/Bangkok' + | 'Asia/Shanghai' + | 'Asia/Singapore' + | 'Asia/Tokyo' + | 'Asia/Seoul' + | 'Australia/Brisbane' + | 'Australia/Sydney' + | 'Pacific/Guam' + | 'Pacific/Noumea' + | 'Pacific/Auckland' + | 'Pacific/Fiji'; + +export interface Config { + auth: { + users: UserAuthOperations; + }; + blocks: {}; + collections: { + 'payload-kv': PayloadKv; + users: User; + 'payload-locked-documents': PayloadLockedDocument; + 'payload-preferences': PayloadPreference; + 'payload-migrations': PayloadMigration; + }; + collectionsJoins: {}; + collectionsSelect: { + 'payload-kv': PayloadKvSelect | PayloadKvSelect; + users: UsersSelect | UsersSelect; + 'payload-locked-documents': PayloadLockedDocumentsSelect | PayloadLockedDocumentsSelect; + 'payload-preferences': PayloadPreferencesSelect | PayloadPreferencesSelect; + 'payload-migrations': PayloadMigrationsSelect | PayloadMigrationsSelect; + }; + db: { + defaultIDType: number; + }; + fallbackLocale: null; + globals: {}; + globalsSelect: {}; + locale: null; + widgets: { + collections: CollectionsWidget; + }; + user: User; + jobs: { + tasks: unknown; + workflows: unknown; + }; +} +export interface UserAuthOperations { + forgotPassword: { + email: string; + password: string; + }; + login: { + email: string; + password: string; + }; + registerFirstUser: { + email: string; + password: string; + }; + unlock: { + email: string; + password: string; + }; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "payload-kv". + */ +export interface PayloadKv { + id: number; + key: string; + data: + | { + [k: string]: unknown; + } + | unknown[] + | string + | number + | boolean + | null; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "users". + */ +export interface User { + id: number; + updatedAt: string; + createdAt: string; + email: string; + resetPasswordToken?: string | null; + resetPasswordExpiration?: string | null; + salt?: string | null; + hash?: string | null; + loginAttempts?: number | null; + lockUntil?: string | null; + sessions?: + | { + id: string; + createdAt?: string | null; + expiresAt: string; + }[] + | null; + password?: string | null; + collection: 'users'; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "payload-locked-documents". + */ +export interface PayloadLockedDocument { + id: number; + document?: { + relationTo: 'users'; + value: number | User; + } | null; + globalSlug?: string | null; + user: { + relationTo: 'users'; + value: number | User; + }; + updatedAt: string; + createdAt: string; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "payload-preferences". + */ +export interface PayloadPreference { + id: number; + user: { + relationTo: 'users'; + value: number | User; + }; + key?: string | null; + value?: + | { + [k: string]: unknown; + } + | unknown[] + | string + | number + | boolean + | null; + updatedAt: string; + createdAt: string; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "payload-migrations". + */ +export interface PayloadMigration { + id: number; + name?: string | null; + batch?: number | null; + updatedAt: string; + createdAt: string; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "payload-kv_select". + */ +export interface PayloadKvSelect { + key?: T; + data?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "users_select". + */ +export interface UsersSelect { + updatedAt?: T; + createdAt?: T; + email?: T; + resetPasswordToken?: T; + resetPasswordExpiration?: T; + salt?: T; + hash?: T; + loginAttempts?: T; + lockUntil?: T; + sessions?: + | T + | { + id?: T; + createdAt?: T; + expiresAt?: T; + }; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "payload-locked-documents_select". + */ +export interface PayloadLockedDocumentsSelect { + document?: T; + globalSlug?: T; + user?: T; + updatedAt?: T; + createdAt?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "payload-preferences_select". + */ +export interface PayloadPreferencesSelect { + user?: T; + key?: T; + value?: T; + updatedAt?: T; + createdAt?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "payload-migrations_select". + */ +export interface PayloadMigrationsSelect { + name?: T; + batch?: T; + updatedAt?: T; + createdAt?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "collections_widget". + */ +export interface CollectionsWidget { + data?: { + [k: string]: unknown; + }; + width: 'full'; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "auth". + */ +export interface Auth { + [k: string]: unknown; +} + + +declare module 'payload' { + export interface GeneratedTypes extends Config {} +} \ No newline at end of file From 74cb9bd29aaaff32af272dae0702bc3b466e94b0 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 22:07:00 +0200 Subject: [PATCH 028/129] docs(plan): add Plan 2 (Blog feature canonical migration) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 17 tasks migrating the existing content/articles domain into a new @repo/blog package with full canonical layer shape. Per-feature InversifyJS container, payload-articles repository using getPayload + core-cms config, simplified schema (author as text, no featuredImage) with TODOs to restore in Plan 3 when auth + media features are migrated. Wires blog/cms into core-cms and blog/api into core-api. Plan 2 of 6 — total revised from original 4 during execution to keep each plan digestible (Plan 1 in-flight numbering preserved). Co-Authored-By: Claude Opus 4.7 (1M context) --- .../plans/2026-05-04-plan-2-blog-feature.md | 1824 +++++++++++++++++ 1 file changed, 1824 insertions(+) create mode 100644 docs/superpowers/plans/2026-05-04-plan-2-blog-feature.md diff --git a/docs/superpowers/plans/2026-05-04-plan-2-blog-feature.md b/docs/superpowers/plans/2026-05-04-plan-2-blog-feature.md new file mode 100644 index 0000000..45825f8 --- /dev/null +++ b/docs/superpowers/plans/2026-05-04-plan-2-blog-feature.md @@ -0,0 +1,1824 @@ +# Vertical Refactor — Plan 2: Blog Feature (Canonical Migration) + +> **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:** Migrate the existing `content/articles` domain (currently inside `packages/core` and `packages/cms-core`) into a new vertical `packages/blog` feature package with the full canonical layered shape: entities → application → infrastructure → interface-adapters → di → integrations/cms → integrations/api → ui. Wire the feature's `/cms` export into `core-cms` composition and its `/api` export into `core-api` composition. Establish the per-feature InversifyJS container pattern. Pattern proven here will be replicated for `auth`, `media`, `marketing-pages`, and `navigation` in subsequent plans. + +**Architecture:** One new package (`@repo/blog`) with the full canonical structure. Per-feature InversifyJS container holds the `IArticlesRepository` binding (mock by default for tests; payload-backed in production via `getPayload({ config })` from `@repo/core-cms`). tRPC procedures in `integrations/api/router.ts` call controllers, which Zod-parse and delegate to use-cases, which resolve the repo via the feature container. Articles collection moves from `cms-core` into `blog/integrations/cms/collections/`. + +**Tech Stack:** InversifyJS 6.x with reflect-metadata, Vitest 3.x, Zod 3, tRPC 11, Payload 3.14 Local API. + +**Plan position:** Plan 2 of 6 in the vertical-refactor sequence (revised from original 4 during execution to keep each plan digestible): +- Plan 1 ✅ Foundation — core-* package scaffolds + core-shared primitives + core-cms stub +- **Plan 2 (this doc):** Blog feature (canonical) — full layered shape, simplified schema (no cross-feature relationships) +- Plan 3: Auth + Media features + restore blog's `author` relationship and `featuredImage` +- Plan 4: Marketing-pages + Navigation features +- Plan 5: App + UI integration — core-trpc client/providers, route handlers, example pages +- Plan 6: Cleanup + boundary enforcement + Playwright + docs rewrite + +**Spec reference:** `docs/superpowers/specs/2026-04-21-vertical-monorepo-refactor-design.md` + +--- + +## Schema simplifications in this plan + +The existing `Articles` collection in `packages/cms-core/src/collections/articles/fields.ts` declares two cross-feature references: +- `author: relationship → users` (users collection is owned by the auth feature, migrated in Plan 3) +- `featuredImage: upload → media` (media collection is owned by the media feature, migrated in Plan 3) + +To keep Plan 2 atomic, the migrated `articles.ts` collection here uses **simplified placeholders**: +- `author` becomes a `text` field (string). +- `featuredImage` is omitted entirely. + +**Plan 3 restores both fields to their relationship/upload form.** This is called out explicitly in those Plan 3 tasks. The simplification is also documented in a TODO comment in the new `articles.ts` so an engineer reading the file later understands. + +The domain `Article.content` field is also widened: the existing entity has `content: z.string()` but Payload's actual storage is rich-text JSON. New entity uses `content: z.unknown()` to honestly model rich-text content (matches spec §11.9's `body: unknown` pattern). The mock repository's tests are adjusted accordingly. + +--- + +## File Structure (this plan creates/modifies) + +**Create — new `@repo/blog` package:** +- `packages/blog/{package.json,tsconfig.json,turbo.json,vitest.config.ts}` +- `packages/blog/src/index.ts` — barrel export +- `packages/blog/src/entities/article.ts` + `article.test.ts` +- `packages/blog/src/entities/errors.ts` +- `packages/blog/src/application/repositories/articles-repository.interface.ts` +- `packages/blog/src/application/use-cases/get-articles.use-case.ts` + `get-articles.use-case.test.ts` +- `packages/blog/src/application/use-cases/create-article.use-case.ts` + `create-article.use-case.test.ts` +- `packages/blog/src/infrastructure/repositories/mock-articles.repository.ts` +- `packages/blog/src/infrastructure/repositories/payload-articles.repository.ts` + `payload-articles.repository.test.ts` +- `packages/blog/src/interface-adapters/controllers/articles.controller.ts` + `articles.controller.test.ts` +- `packages/blog/src/di/symbols.ts` +- `packages/blog/src/di/module.ts` +- `packages/blog/src/di/container.ts` + `container.test.ts` +- `packages/blog/src/integrations/cms/collections/articles.ts` +- `packages/blog/src/integrations/cms/index.ts` +- `packages/blog/src/integrations/api/router.ts` +- `packages/blog/src/ui/query.ts` +- `packages/blog/tests/articles.feature.test.ts` + +**Modify:** +- `packages/core-cms/src/payload.config.ts` — import + register `articles` from `@repo/blog/cms` +- `packages/core-api/src/root.ts` — import + register `blogRouter` from `@repo/blog/api` +- `tsconfig.base.json` — add `@repo/blog`, `@repo/blog/cms`, `@repo/blog/api` aliases +- `apps/cms/package.json` — add `@repo/blog` dependency (so the workspace resolves the schema import) + +**Do NOT touch:** +- `packages/core/` (still owns auth domain — left intact for Plan 3) +- `packages/api/` (still wires the old content router; orphaned but unused after Plan 2 — actually used by ZERO consumers since reference apps are empty) +- `packages/cms-core/src/collections/articles/` — the OLD location. After Plan 2, both old and new exist; Plan 6 deletes `cms-core` entirely. Apps/cms reads from `core-cms` which only sees the NEW location. + +--- + +## Phase 1: Blog package skeleton + entity layer + +### Task 2.1: Scaffold @repo/blog package + +**Files:** +- Create: `packages/blog/package.json` +- Create: `packages/blog/tsconfig.json` +- Create: `packages/blog/turbo.json` +- Create: `packages/blog/vitest.config.ts` +- Create: `packages/blog/src/index.ts` + +- [ ] **Step 1: Create package.json** + +```json +{ + "name": "@repo/blog", + "private": true, + "version": "0.0.0", + "type": "module", + "exports": { + ".": "./src/index.ts", + "./cms": "./src/integrations/cms/index.ts", + "./api": "./src/integrations/api/router.ts" + }, + "scripts": { + "build": "tsc --noEmit", + "lint": "eslint .", + "test": "vitest run --passWithNoTests", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@repo/core-cms": "workspace:*", + "@repo/core-shared": "workspace:*", + "@trpc/server": "^11.0.0", + "inversify": "^6.2.0", + "payload": "^3.14.0", + "reflect-metadata": "^0.2.2", + "zod": "^3.24.0" + }, + "devDependencies": { + "@repo/eslint-config": "workspace:*", + "@repo/typescript-config": "workspace:*", + "@types/node": "^22.0.0", + "vitest": "^3.1.0" + } +} +``` + +- [ ] **Step 2: Create tsconfig.json** + +```json +{ + "extends": "@repo/typescript-config/base.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src", + "lib": ["ES2022", "DOM"], + "jsx": "preserve", + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["src/**/*", "tests/**/*"], + "exclude": ["node_modules", "dist"] +} +``` + +> Note: `@/*` path alias is feature-local (resolves to `packages/blog/src/*`). This is the same pattern `packages/core/tsconfig.json` already uses. + +- [ ] **Step 3: Create turbo.json** + +```json +{ + "extends": ["//"], + "tags": ["feature"] +} +``` + +- [ ] **Step 4: Create vitest.config.ts** + +```typescript +import { baseVitestConfig } from "@repo/typescript-config/vitest.base"; + +export default baseVitestConfig; +``` + +- [ ] **Step 5: Create empty index.ts** + +```typescript +export {}; +``` + +- [ ] **Step 6: Add path aliases to root tsconfig.base.json** + +Read the current `tsconfig.base.json`. Add three new entries to `compilerOptions.paths` (alphabetically — between `@repo/core-ui` and `@repo/core-shared` if existing list is sorted; otherwise just at the end of the paths object before the closing brace): + +```json +"@repo/blog": ["packages/blog/src/index.ts"], +"@repo/blog/cms": ["packages/blog/src/integrations/cms/index.ts"], +"@repo/blog/api": ["packages/blog/src/integrations/api/router.ts"] +``` + +- [ ] **Step 7: Install + verify** + +Run: `pnpm install` +Expected: `@repo/blog` registered in workspace; lockfile updated. + +- [ ] **Step 8: Commit** + +```bash +git add packages/blog tsconfig.base.json pnpm-lock.yaml +git commit -m "feat(blog): scaffold empty package with feature tag + path aliases" +``` + +--- + +### Task 2.2: Port Article entity (with content widened to unknown) + +**Files:** +- Create: `packages/blog/src/entities/article.ts` +- Create: `packages/blog/src/entities/article.test.ts` +- Create: `packages/blog/src/entities/errors.ts` + +- [ ] **Step 1: Write the failing test** + +```typescript +// packages/blog/src/entities/article.test.ts +import { describe, expect, it } from "vitest"; +import { articleSchema, articleStatusSchema, type Article } from "./article"; + +describe("articleSchema", () => { + it("accepts a minimal valid article with default status", () => { + const result = articleSchema.parse({ + id: "abc", + title: "Hello", + slug: "hello", + content: { type: "doc", children: [] }, + authorId: "u1", + createdAt: new Date(), + updatedAt: new Date(), + }); + expect(result.status).toBe("draft"); + }); + + it("accepts unknown rich-text content", () => { + const result = articleSchema.parse({ + id: "abc", + title: "Hello", + slug: "hello", + content: "any string is also fine", + authorId: "u1", + createdAt: new Date(), + updatedAt: new Date(), + }); + expect(result.content).toBe("any string is also fine"); + }); + + it("rejects empty title", () => { + expect(() => + articleSchema.parse({ + id: "a", + title: "", + slug: "s", + content: null, + authorId: "u", + createdAt: new Date(), + updatedAt: new Date(), + }), + ).toThrow(); + }); + + it("rejects title over 255 chars", () => { + expect(() => + articleSchema.parse({ + id: "a", + title: "x".repeat(256), + slug: "s", + content: null, + authorId: "u", + createdAt: new Date(), + updatedAt: new Date(), + }), + ).toThrow(); + }); +}); + +describe("articleStatusSchema", () => { + it("accepts 'draft' and 'published'", () => { + expect(articleStatusSchema.parse("draft")).toBe("draft"); + expect(articleStatusSchema.parse("published")).toBe("published"); + }); + + it("rejects unknown status", () => { + expect(() => articleStatusSchema.parse("archived")).toThrow(); + }); +}); + +describe("Article type", () => { + it("widens content to unknown", () => { + const _example: Article = { + id: "x", + title: "t", + slug: "s", + content: { whatever: true }, + status: "draft", + authorId: "u", + createdAt: new Date(), + updatedAt: new Date(), + }; + expect(_example).toBeDefined(); + }); +}); +``` + +- [ ] **Step 2: Run — expect failure** + +Run: `cd packages/blog && pnpm vitest run src/entities/article.test.ts` +Expected: FAIL — "Cannot find module './article'" + +- [ ] **Step 3: Implement article entity** + +```typescript +// packages/blog/src/entities/article.ts +import { z } from "zod"; + +export const articleStatusSchema = z.enum(["draft", "published"]); + +export const articleSchema = z.object({ + id: z.string(), + title: z.string().min(1).max(255), + slug: z.string().min(1).max(255), + content: z.unknown(), + status: articleStatusSchema.default("draft"), + authorId: z.string(), + createdAt: z.date(), + updatedAt: z.date(), +}); + +export type Article = z.infer; +export type ArticleStatus = z.infer; +``` + +- [ ] **Step 4: Create errors.ts (domain-specific errors)** + +```typescript +// packages/blog/src/entities/errors.ts +export class ArticleNotFoundError extends Error { + constructor(message = "Article not found", options?: ErrorOptions) { + super(message, options); + } +} + +export class InputParseError extends Error { + constructor(message: string, options?: ErrorOptions) { + super(message, options); + } +} +``` + +> Note: `InputParseError` is duplicated here because the new architecture has each feature own its errors (no shared `@repo/core/entities/errors`). The class is small. + +- [ ] **Step 5: Run — expect pass** + +Run: `cd packages/blog && pnpm vitest run src/entities/article.test.ts` +Expected: PASS — 7 tests. + +- [ ] **Step 6: Commit** + +```bash +git add packages/blog/src/entities +git commit -m "feat(blog): add Article entity with rich-text content + domain errors" +``` + +--- + +## Phase 2: Application layer (use-cases + repository interface) + +### Task 2.3: Define IArticlesRepository interface + +**Files:** +- Create: `packages/blog/src/application/repositories/articles-repository.interface.ts` + +- [ ] **Step 1: Implement** (no test — interface has no behavior; exercised through use-case tests) + +```typescript +// packages/blog/src/application/repositories/articles-repository.interface.ts +import type { Article } from "@/entities/article"; + +export interface IArticlesRepository { + getArticle(id: string): Promise
; + getArticleBySlug(slug: string): Promise
; + getArticles(options?: { + status?: string; + authorId?: string; + limit?: number; + offset?: number; + }): Promise; + createArticle(input: Article): Promise
; + updateArticle( + id: string, + input: Partial
, + ): Promise
; +} +``` + +> Note: `getArticleBySlug` is added beyond the original `packages/core` interface — needed by `articleBySlug` tRPC procedure (the canonical example query in spec §11.15). + +- [ ] **Step 2: Verify it compiles** + +Run: `cd packages/blog && pnpm typecheck` +Expected: PASS. + +- [ ] **Step 3: Commit** + +```bash +git add packages/blog/src/application/repositories +git commit -m "feat(blog): add IArticlesRepository interface" +``` + +--- + +### Task 2.4: Implement getArticles use-case + tests + +**Files:** +- Create: `packages/blog/src/application/use-cases/get-articles.use-case.ts` +- Create: `packages/blog/src/application/use-cases/get-articles.use-case.test.ts` + +- [ ] **Step 1: Write the failing test** + +```typescript +// packages/blog/src/application/use-cases/get-articles.use-case.test.ts +import { beforeEach, describe, expect, it } from "vitest"; +import { blogContainer } from "@/di/container"; +import { BLOG_SYMBOLS } from "@/di/symbols"; +import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; +import { MockArticlesRepository } from "@/infrastructure/repositories/mock-articles.repository"; +import { getArticlesUseCase } from "./get-articles.use-case"; + +describe("getArticlesUseCase", () => { + let repo: MockArticlesRepository; + + beforeEach(() => { + if (blogContainer.isBound(BLOG_SYMBOLS.IArticlesRepository)) { + blogContainer.unbind(BLOG_SYMBOLS.IArticlesRepository); + } + repo = new MockArticlesRepository(); + blogContainer + .bind(BLOG_SYMBOLS.IArticlesRepository) + .toConstantValue(repo); + }); + + it("returns all articles with no filters", async () => { + const now = new Date(); + await repo.createArticle({ + id: "1", + title: "A", + slug: "a", + content: null, + status: "draft", + authorId: "u1", + createdAt: now, + updatedAt: now, + }); + const result = await getArticlesUseCase(); + expect(result).toHaveLength(1); + expect(result[0]?.id).toBe("1"); + }); + + it("filters by status", async () => { + const now = new Date(); + await repo.createArticle({ + id: "1", + title: "A", + slug: "a", + content: null, + status: "draft", + authorId: "u1", + createdAt: now, + updatedAt: now, + }); + await repo.createArticle({ + id: "2", + title: "B", + slug: "b", + content: null, + status: "published", + authorId: "u1", + createdAt: now, + updatedAt: now, + }); + const result = await getArticlesUseCase({ status: "published" }); + expect(result).toHaveLength(1); + expect(result[0]?.id).toBe("2"); + }); +}); +``` + +- [ ] **Step 2: Run — expect failure** + +Run: `cd packages/blog && pnpm vitest run src/application/use-cases/get-articles.use-case.test.ts` +Expected: FAIL — multiple "Cannot find module" errors (the test imports from `@/di/container`, `@/di/symbols`, `@/infrastructure/repositories/mock-articles.repository`, none of which exist yet). + +> This is intentional: TDD here means the use-case test exercises the full DI container shape AND the mock repo. Both will be implemented in subsequent tasks. For now, just write the use-case to satisfy its direct dependencies. + +- [ ] **Step 3: Implement use-case** + +```typescript +// packages/blog/src/application/use-cases/get-articles.use-case.ts +import type { Article } from "@/entities/article"; +import { blogContainer } from "@/di/container"; +import { BLOG_SYMBOLS } from "@/di/symbols"; +import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; + +export async function getArticlesUseCase(options?: { + status?: string; + authorId?: string; + limit?: number; + offset?: number; +}): Promise { + const repo = blogContainer.get( + BLOG_SYMBOLS.IArticlesRepository, + ); + return repo.getArticles(options); +} +``` + +> Note: This still won't compile or run because `@/di/container`, `@/di/symbols`, `@/infrastructure/repositories/mock-articles.repository` don't exist yet. Test will continue to fail. That's expected — Tasks 2.5-2.7 implement those, then this test passes. + +- [ ] **Step 4: Commit (test + impl, both currently failing — establishes the contract)** + +```bash +git add packages/blog/src/application/use-cases/get-articles.use-case.ts packages/blog/src/application/use-cases/get-articles.use-case.test.ts +git commit -m "feat(blog): add getArticlesUseCase (test red until DI + mock repo exist)" +``` + +--- + +### Task 2.5: Implement createArticle use-case + tests + +**Files:** +- Create: `packages/blog/src/application/use-cases/create-article.use-case.ts` +- Create: `packages/blog/src/application/use-cases/create-article.use-case.test.ts` + +- [ ] **Step 1: Write the failing test** + +```typescript +// packages/blog/src/application/use-cases/create-article.use-case.test.ts +import { beforeEach, describe, expect, it } from "vitest"; +import { blogContainer } from "@/di/container"; +import { BLOG_SYMBOLS } from "@/di/symbols"; +import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; +import { MockArticlesRepository } from "@/infrastructure/repositories/mock-articles.repository"; +import { createArticleUseCase } from "./create-article.use-case"; + +describe("createArticleUseCase", () => { + let repo: MockArticlesRepository; + + beforeEach(() => { + if (blogContainer.isBound(BLOG_SYMBOLS.IArticlesRepository)) { + blogContainer.unbind(BLOG_SYMBOLS.IArticlesRepository); + } + repo = new MockArticlesRepository(); + blogContainer + .bind(BLOG_SYMBOLS.IArticlesRepository) + .toConstantValue(repo); + }); + + it("creates an article in draft status with auto-generated slug", async () => { + const result = await createArticleUseCase({ + title: "Hello World", + content: "body", + authorId: "u1", + }); + expect(result.title).toBe("Hello World"); + expect(result.slug).toBe("hello-world"); + expect(result.status).toBe("draft"); + expect(result.id).toBeTruthy(); + + const stored = await repo.getArticle(result.id); + expect(stored).toBeDefined(); + }); + + it("uses provided slug when supplied", async () => { + const result = await createArticleUseCase({ + title: "Whatever", + content: "body", + authorId: "u1", + slug: "custom-slug", + }); + expect(result.slug).toBe("custom-slug"); + }); +}); +``` + +- [ ] **Step 2: Run — expect failure** + +Run: `cd packages/blog && pnpm vitest run src/application/use-cases/create-article.use-case.test.ts` +Expected: FAIL — module-not-found errors. + +- [ ] **Step 3: Implement use-case** + +```typescript +// packages/blog/src/application/use-cases/create-article.use-case.ts +import type { Article } from "@/entities/article"; +import { blogContainer } from "@/di/container"; +import { BLOG_SYMBOLS } from "@/di/symbols"; +import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; + +function generateSlug(title: string): string { + return title + .toLowerCase() + .replace(/[^a-z0-9]+/g, "-") + .replace(/^-+|-+$/g, ""); +} + +export async function createArticleUseCase(input: { + title: string; + content: unknown; + authorId: string; + slug?: string; +}): Promise
{ + const repo = blogContainer.get( + BLOG_SYMBOLS.IArticlesRepository, + ); + + const now = new Date(); + const article: Article = { + id: crypto.randomUUID(), + title: input.title, + slug: input.slug ?? generateSlug(input.title), + content: input.content, + status: "draft", + authorId: input.authorId, + createdAt: now, + updatedAt: now, + }; + + return repo.createArticle(article); +} +``` + +- [ ] **Step 4: Commit (test still failing — DI not yet implemented)** + +```bash +git add packages/blog/src/application/use-cases/create-article.use-case.ts packages/blog/src/application/use-cases/create-article.use-case.test.ts +git commit -m "feat(blog): add createArticleUseCase (test red until DI + mock repo exist)" +``` + +--- + +## Phase 3: Infrastructure layer (mock + payload repos) + +### Task 2.6: Mock articles repository + +**Files:** +- Create: `packages/blog/src/infrastructure/repositories/mock-articles.repository.ts` + +- [ ] **Step 1: Implement** (no separate test — exercised by use-case tests) + +```typescript +// packages/blog/src/infrastructure/repositories/mock-articles.repository.ts +import "reflect-metadata"; +import { injectable } from "inversify"; + +import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; +import type { Article } from "@/entities/article"; + +@injectable() +export class MockArticlesRepository implements IArticlesRepository { + private _articles: Article[] = []; + + async getArticle(id: string): Promise
{ + return this._articles.find((a) => a.id === id); + } + + async getArticleBySlug(slug: string): Promise
{ + return this._articles.find((a) => a.slug === slug); + } + + async getArticles(options?: { + status?: string; + authorId?: string; + limit?: number; + offset?: number; + }): Promise { + let result = [...this._articles]; + if (options?.status) { + result = result.filter((a) => a.status === options.status); + } + if (options?.authorId) { + result = result.filter((a) => a.authorId === options.authorId); + } + const offset = options?.offset ?? 0; + const limit = options?.limit ?? 50; + return result.slice(offset, offset + limit); + } + + async createArticle(input: Article): Promise
{ + this._articles.push(input); + return input; + } + + async updateArticle( + id: string, + input: Partial
, + ): Promise
{ + const index = this._articles.findIndex((a) => a.id === id); + if (index === -1) return undefined; + const current = this._articles[index]; + if (!current) return undefined; + const updated: Article = { ...current, ...input, id: current.id }; + this._articles[index] = updated; + return updated; + } +} +``` + +- [ ] **Step 2: Verify it compiles** (use-case tests still won't pass — DI container not yet implemented) + +Run: `cd packages/blog && pnpm typecheck` +Expected: PASS. + +- [ ] **Step 3: Commit** + +```bash +git add packages/blog/src/infrastructure/repositories/mock-articles.repository.ts +git commit -m "feat(blog): add MockArticlesRepository for tests" +``` + +--- + +### Task 2.7: Per-feature DI container (symbols, module, container) + +**Files:** +- Create: `packages/blog/src/di/symbols.ts` +- Create: `packages/blog/src/di/module.ts` +- Create: `packages/blog/src/di/container.ts` +- Create: `packages/blog/src/di/container.test.ts` + +- [ ] **Step 1: Write the failing test** + +```typescript +// packages/blog/src/di/container.test.ts +import { afterEach, beforeEach, describe, expect, it } from "vitest"; +import { blogContainer } from "./container"; +import { BLOG_SYMBOLS } from "./symbols"; +import { BlogModule } from "./module"; +import { MockArticlesRepository } from "@/infrastructure/repositories/mock-articles.repository"; +import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; + +describe("blogContainer", () => { + beforeEach(() => { + blogContainer.unbindAll(); + blogContainer.load(BlogModule); + }); + + afterEach(() => { + blogContainer.unbindAll(); + }); + + it("resolves IArticlesRepository to MockArticlesRepository by default binding", () => { + const repo = blogContainer.get( + BLOG_SYMBOLS.IArticlesRepository, + ); + expect(repo).toBeInstanceOf(MockArticlesRepository); + }); + + it("supports rebinding to a custom repo", () => { + blogContainer.unbind(BLOG_SYMBOLS.IArticlesRepository); + const custom = new MockArticlesRepository(); + blogContainer + .bind(BLOG_SYMBOLS.IArticlesRepository) + .toConstantValue(custom); + const resolved = blogContainer.get( + BLOG_SYMBOLS.IArticlesRepository, + ); + expect(resolved).toBe(custom); + }); +}); +``` + +- [ ] **Step 2: Run — expect failure** + +Run: `cd packages/blog && pnpm vitest run src/di/container.test.ts` +Expected: FAIL — module-not-found errors. + +- [ ] **Step 3: Implement symbols.ts** + +```typescript +// packages/blog/src/di/symbols.ts +export const BLOG_SYMBOLS = { + IArticlesRepository: Symbol.for("blog:IArticlesRepository"), +} as const; +``` + +> Note: Symbol descriptions are namespaced (`blog:IArticlesRepository`) so debug output is clear and there's no collision with other features' symbols at the JavaScript level (each feature has its own container, so collisions can't actually happen — this is just hygiene). + +- [ ] **Step 4: Implement module.ts** + +```typescript +// packages/blog/src/di/module.ts +import { ContainerModule, type interfaces } from "inversify"; + +import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; +import { MockArticlesRepository } from "@/infrastructure/repositories/mock-articles.repository"; +import { BLOG_SYMBOLS } from "./symbols"; + +export const BlogModule = new ContainerModule((bind: interfaces.Bind) => { + bind(BLOG_SYMBOLS.IArticlesRepository).to( + MockArticlesRepository, + ); +}); +``` + +> Note: Default binding is `MockArticlesRepository`. The payload-backed repo (Task 2.8) is bound at app boot (Plan 5) by rebinding before serving requests. Tests rebind per `beforeEach`. This keeps the package usable in isolation (e.g., for unit tests, Storybook dev) without requiring a database. + +- [ ] **Step 5: Implement container.ts** + +```typescript +// packages/blog/src/di/container.ts +import "reflect-metadata"; +import { Container } from "inversify"; +import { BlogModule } from "./module"; + +export const blogContainer = new Container({ defaultScope: "Singleton" }); +blogContainer.load(BlogModule); +``` + +- [ ] **Step 6: Run — expect pass** + +Run: `cd packages/blog && pnpm vitest run src/di/container.test.ts` +Expected: PASS — 2 tests. + +- [ ] **Step 7: Run the previously-red use-case tests** + +Run: `cd packages/blog && pnpm vitest run src/application/use-cases` +Expected: PASS — 4 tests (2 from `getArticles`, 2 from `createArticle`). + +- [ ] **Step 8: Commit** + +```bash +git add packages/blog/src/di +git commit -m "feat(blog): add per-feature InversifyJS container (symbols, module, container)" +``` + +--- + +### Task 2.8: Payload articles repository + +**Files:** +- Create: `packages/blog/src/infrastructure/repositories/payload-articles.repository.ts` +- Create: `packages/blog/src/infrastructure/repositories/payload-articles.repository.test.ts` + +- [ ] **Step 1: Write the failing test** + +```typescript +// packages/blog/src/infrastructure/repositories/payload-articles.repository.test.ts +import { describe, expect, it, vi } from "vitest"; +import { PayloadArticlesRepository } from "./payload-articles.repository"; + +// Mock the payload module so we don't need a real DB +vi.mock("payload", () => ({ + getPayload: vi.fn(), +})); + +vi.mock("@repo/core-cms", () => ({ + default: {} as never, +})); + +describe("PayloadArticlesRepository", () => { + it("maps a Payload doc to a domain Article on getArticleBySlug", async () => { + const { getPayload } = await import("payload"); + const findMock = vi.fn().mockResolvedValue({ + docs: [ + { + id: "p-123", + title: "Hello", + slug: "hello", + content: { type: "doc", children: [] }, + status: "published", + author: "u1", + createdAt: "2026-05-04T12:00:00.000Z", + updatedAt: "2026-05-04T12:00:00.000Z", + }, + ], + }); + (getPayload as ReturnType).mockResolvedValue({ + find: findMock, + }); + + const repo = new PayloadArticlesRepository(); + const result = await repo.getArticleBySlug("hello"); + + expect(findMock).toHaveBeenCalledWith({ + collection: "articles", + where: { slug: { equals: "hello" } }, + limit: 1, + overrideAccess: false, + }); + expect(result?.id).toBe("p-123"); + expect(result?.slug).toBe("hello"); + expect(result?.status).toBe("published"); + expect(result?.authorId).toBe("u1"); + expect(result?.createdAt).toBeInstanceOf(Date); + }); + + it("returns undefined when slug is not found", async () => { + const { getPayload } = await import("payload"); + (getPayload as ReturnType).mockResolvedValue({ + find: vi.fn().mockResolvedValue({ docs: [] }), + }); + + const repo = new PayloadArticlesRepository(); + const result = await repo.getArticleBySlug("missing"); + expect(result).toBeUndefined(); + }); +}); +``` + +- [ ] **Step 2: Run — expect failure** + +Run: `cd packages/blog && pnpm vitest run src/infrastructure/repositories/payload-articles.repository.test.ts` +Expected: FAIL — "Cannot find module './payload-articles.repository'" + +- [ ] **Step 3: Implement payload-articles repository** + +```typescript +// packages/blog/src/infrastructure/repositories/payload-articles.repository.ts +import "reflect-metadata"; +import { injectable } from "inversify"; +import { getPayload } from "payload"; + +import config from "@repo/core-cms"; +import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; +import type { Article } from "@/entities/article"; + +type PayloadArticleDoc = { + id: string | number; + title?: string | null; + slug?: string | null; + content?: unknown; + status?: string | null; + author?: string | number | { id: string | number } | null; + createdAt?: string | null; + updatedAt?: string | null; +}; + +function mapDoc(doc: PayloadArticleDoc): Article { + const authorId = + typeof doc.author === "object" && doc.author !== null + ? String(doc.author.id) + : doc.author != null + ? String(doc.author) + : ""; + return { + id: String(doc.id), + title: doc.title ?? "", + slug: doc.slug ?? "", + content: doc.content ?? null, + status: (doc.status === "published" ? "published" : "draft"), + authorId, + createdAt: doc.createdAt ? new Date(doc.createdAt) : new Date(0), + updatedAt: doc.updatedAt ? new Date(doc.updatedAt) : new Date(0), + }; +} + +@injectable() +export class PayloadArticlesRepository implements IArticlesRepository { + async getArticle(id: string): Promise
{ + const payload = await getPayload({ config }); + try { + const doc = await payload.findByID({ + collection: "articles", + id, + overrideAccess: false, + }); + return mapDoc(doc as PayloadArticleDoc); + } catch { + return undefined; + } + } + + async getArticleBySlug(slug: string): Promise
{ + const payload = await getPayload({ config }); + const result = await payload.find({ + collection: "articles", + where: { slug: { equals: slug } }, + limit: 1, + overrideAccess: false, + }); + const doc = result.docs[0] as PayloadArticleDoc | undefined; + return doc ? mapDoc(doc) : undefined; + } + + async getArticles(options?: { + status?: string; + authorId?: string; + limit?: number; + offset?: number; + }): Promise { + const payload = await getPayload({ config }); + const where: Record = {}; + if (options?.status) where.status = { equals: options.status }; + if (options?.authorId) where.author = { equals: options.authorId }; + + const result = await payload.find({ + collection: "articles", + where, + limit: options?.limit ?? 50, + page: options?.offset + ? Math.floor(options.offset / (options.limit ?? 50)) + 1 + : 1, + overrideAccess: false, + }); + return result.docs.map((d) => mapDoc(d as PayloadArticleDoc)); + } + + async createArticle(input: Article): Promise
{ + const payload = await getPayload({ config }); + const created = await payload.create({ + collection: "articles", + data: { + title: input.title, + slug: input.slug, + content: input.content, + status: input.status, + author: input.authorId, + } as never, + overrideAccess: false, + }); + return mapDoc(created as PayloadArticleDoc); + } + + async updateArticle( + id: string, + input: Partial
, + ): Promise
{ + const payload = await getPayload({ config }); + try { + const updated = await payload.update({ + collection: "articles", + id, + data: { + ...(input.title !== undefined && { title: input.title }), + ...(input.slug !== undefined && { slug: input.slug }), + ...(input.content !== undefined && { content: input.content }), + ...(input.status !== undefined && { status: input.status }), + ...(input.authorId !== undefined && { author: input.authorId }), + } as never, + overrideAccess: false, + }); + return mapDoc(updated as PayloadArticleDoc); + } catch { + return undefined; + } + } +} +``` + +> Note: `as never` casts on the Payload `data` arguments are needed because Payload's generated types (which we don't have for the empty-collection core-cms config) would normally constrain these. With empty `collections: []`, the generated types don't include `'articles'`, so we cast through `never`. After Plan 3 wires articles into core-cms.collections AND `pnpm generate:types` runs, these casts can potentially be removed — but for Plan 2's purpose (decoupled feature with deferred wiring) the casts are correct. + +- [ ] **Step 4: Run — expect pass** + +Run: `cd packages/blog && pnpm vitest run src/infrastructure/repositories/payload-articles.repository.test.ts` +Expected: PASS — 2 tests. + +- [ ] **Step 5: Commit** + +```bash +git add packages/blog/src/infrastructure/repositories/payload-articles.repository.ts packages/blog/src/infrastructure/repositories/payload-articles.repository.test.ts +git commit -m "feat(blog): add PayloadArticlesRepository with doc-to-entity mapping" +``` + +--- + +## Phase 4: Interface-adapters (controllers) + +### Task 2.9: Articles controller + tests + +**Files:** +- Create: `packages/blog/src/interface-adapters/controllers/articles.controller.ts` +- Create: `packages/blog/src/interface-adapters/controllers/articles.controller.test.ts` + +- [ ] **Step 1: Write the failing test** + +```typescript +// packages/blog/src/interface-adapters/controllers/articles.controller.test.ts +import { beforeEach, describe, expect, it } from "vitest"; +import { blogContainer } from "@/di/container"; +import { BLOG_SYMBOLS } from "@/di/symbols"; +import { MockArticlesRepository } from "@/infrastructure/repositories/mock-articles.repository"; +import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; +import { InputParseError } from "@/entities/errors"; +import { + createArticleController, + getArticlesController, + getArticleBySlugController, +} from "./articles.controller"; + +describe("articles controller", () => { + let repo: MockArticlesRepository; + + beforeEach(() => { + if (blogContainer.isBound(BLOG_SYMBOLS.IArticlesRepository)) { + blogContainer.unbind(BLOG_SYMBOLS.IArticlesRepository); + } + repo = new MockArticlesRepository(); + blogContainer + .bind(BLOG_SYMBOLS.IArticlesRepository) + .toConstantValue(repo); + }); + + describe("createArticleController", () => { + it("creates an article on valid input", async () => { + const result = await createArticleController({ + title: "Hello", + content: "body", + authorId: "u1", + }); + expect(result.title).toBe("Hello"); + }); + + it("throws InputParseError on missing title", async () => { + await expect( + createArticleController({ content: "body", authorId: "u1" }), + ).rejects.toBeInstanceOf(InputParseError); + }); + }); + + describe("getArticlesController", () => { + it("returns array on valid input", async () => { + const result = await getArticlesController({}); + expect(result).toEqual([]); + }); + + it("throws InputParseError on invalid input shape", async () => { + await expect( + getArticlesController({ limit: "not a number" } as unknown as Record< + string, + unknown + >), + ).rejects.toBeInstanceOf(InputParseError); + }); + }); + + describe("getArticleBySlugController", () => { + it("returns undefined for missing slug", async () => { + const result = await getArticleBySlugController({ slug: "nope" }); + expect(result).toBeUndefined(); + }); + + it("throws InputParseError on missing slug", async () => { + await expect( + getArticleBySlugController({} as { slug: string }), + ).rejects.toBeInstanceOf(InputParseError); + }); + }); +}); +``` + +- [ ] **Step 2: Run — expect failure** + +Run: `cd packages/blog && pnpm vitest run src/interface-adapters/controllers/articles.controller.test.ts` +Expected: FAIL — "Cannot find module './articles.controller'" + +- [ ] **Step 3: Implement controller** + +```typescript +// packages/blog/src/interface-adapters/controllers/articles.controller.ts +import { z } from "zod"; + +import { InputParseError } from "@/entities/errors"; +import type { Article } from "@/entities/article"; +import { blogContainer } from "@/di/container"; +import { BLOG_SYMBOLS } from "@/di/symbols"; +import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; +import { getArticlesUseCase } from "@/application/use-cases/get-articles.use-case"; +import { createArticleUseCase } from "@/application/use-cases/create-article.use-case"; + +const createInputSchema = z.object({ + title: z.string().min(1).max(255), + content: z.unknown(), + authorId: z.string(), + slug: z.string().optional(), +}); + +const getInputSchema = z.object({ + status: z.string().optional(), + authorId: z.string().optional(), + limit: z.number().optional(), + offset: z.number().optional(), +}); + +const getBySlugInputSchema = z.object({ + slug: z.string().min(1), +}); + +export async function createArticleController( + input: Partial>, +): Promise
{ + const parsed = createInputSchema.safeParse(input); + if (!parsed.success) { + throw new InputParseError("Invalid create-article input", { + cause: parsed.error, + }); + } + return createArticleUseCase(parsed.data); +} + +export async function getArticlesController( + input: Partial>, +): Promise { + const parsed = getInputSchema.safeParse(input); + if (!parsed.success) { + throw new InputParseError("Invalid get-articles input", { + cause: parsed.error, + }); + } + return getArticlesUseCase(parsed.data); +} + +export async function getArticleBySlugController(input: { + slug: string; +}): Promise
{ + const parsed = getBySlugInputSchema.safeParse(input); + if (!parsed.success) { + throw new InputParseError("Invalid get-article-by-slug input", { + cause: parsed.error, + }); + } + const repo = blogContainer.get( + BLOG_SYMBOLS.IArticlesRepository, + ); + return repo.getArticleBySlug(parsed.data.slug); +} +``` + +> Note: `getArticleBySlugController` calls the repo directly rather than going through a separate `getArticleBySlug.use-case.ts`. This is acceptable per spec addendum v5 — for trivial pass-through reads, a use-case file would be empty ceremony. The pattern emerges if/when this read needs caching, authorization decisions, or other application logic. (Plan 3 leaves it as-is; create one in a later plan if behavior justifies it.) + +- [ ] **Step 4: Run — expect pass** + +Run: `cd packages/blog && pnpm vitest run src/interface-adapters/controllers/articles.controller.test.ts` +Expected: PASS — 6 tests. + +- [ ] **Step 5: Commit** + +```bash +git add packages/blog/src/interface-adapters +git commit -m "feat(blog): add articles controller with Zod validation" +``` + +--- + +## Phase 5: Integrations (CMS schema + tRPC API) + +### Task 2.10: Articles collection (simplified — no cross-feature relations) + +**Files:** +- Create: `packages/blog/src/integrations/cms/collections/articles.ts` +- Create: `packages/blog/src/integrations/cms/index.ts` + +- [ ] **Step 1: Implement collection (simplified — see schema simplifications section)** + +```typescript +// packages/blog/src/integrations/cms/collections/articles.ts +import type { CollectionConfig } from "payload"; +import { slugifyIfMissing } from "@repo/core-shared/payload"; + +export const articles: CollectionConfig = { + slug: "articles", + admin: { + useAsTitle: "title", + defaultColumns: ["title", "status", "author", "updatedAt"], + }, + hooks: { + beforeChange: [slugifyIfMissing], + }, + versions: { + drafts: true, + }, + fields: [ + { + name: "title", + type: "text", + required: true, + maxLength: 255, + }, + { + name: "slug", + type: "text", + unique: true, + admin: { + position: "sidebar", + description: "Auto-generated from title if left empty", + }, + }, + { + name: "content", + type: "richText", + }, + { + name: "status", + type: "select", + options: [ + { label: "Draft", value: "draft" }, + { label: "Published", value: "published" }, + ], + defaultValue: "draft", + required: true, + admin: { + position: "sidebar", + }, + }, + // TODO(plan-3): Restore as `relationship → users` once auth feature is migrated. + { + name: "author", + type: "text", + required: true, + admin: { + position: "sidebar", + description: + "Temporary text field; restored to users relationship in Plan 3.", + }, + }, + // TODO(plan-3): Restore `featuredImage: upload → media` once media feature is migrated. + { + name: "publishedAt", + type: "date", + admin: { + position: "sidebar", + date: { + pickerAppearance: "dayAndTime", + }, + }, + }, + ], +}; +``` + +> Note: `slugifyIfMissing` from `@repo/core-shared/payload` replaces the inline `autoGenerateSlug` hook from `packages/cms-core/src/collections/articles/hooks/before-change.ts`. Same behavior, generic helper. + +- [ ] **Step 2: Implement integrations/cms barrel** + +```typescript +// packages/blog/src/integrations/cms/index.ts +export { articles } from "./collections/articles"; +``` + +- [ ] **Step 3: Verify it compiles** + +Run: `cd packages/blog && pnpm typecheck` +Expected: PASS. + +- [ ] **Step 4: Commit** + +```bash +git add packages/blog/src/integrations/cms +git commit -m "feat(blog): add articles collection (simplified — no cross-feature refs)" +``` + +--- + +### Task 2.11: Wire articles into core-cms composition + +**Files:** +- Modify: `packages/core-cms/src/payload.config.ts` +- Modify: `packages/core-cms/package.json` (add `@repo/blog` dependency) + +- [ ] **Step 1: Add @repo/blog to core-cms dependencies** + +Add inside `packages/core-cms/package.json`'s `dependencies` block: + +```json +"@repo/blog": "workspace:*", +``` + +> Note: This is the spec §4.2 composition exception — `core-cms` may import feature `/cms` exports. + +- [ ] **Step 2: Update payload.config.ts to register articles** + +Read current `packages/core-cms/src/payload.config.ts`. Replace it with: + +```typescript +import { buildConfig } from "payload"; +import { postgresAdapter } from "@payloadcms/db-postgres"; +import { lexicalEditor } from "@payloadcms/richtext-lexical"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +import { articles } from "@repo/blog/cms"; + +const filename = fileURLToPath(import.meta.url); +const dirname = path.dirname(filename); + +export default buildConfig({ + editor: lexicalEditor(), + collections: [articles], + globals: [], + secret: process.env.PAYLOAD_SECRET || "default-secret-change-me", + db: postgresAdapter({ + pool: { + connectionString: + process.env.DATABASE_URL || + "postgresql://postgres:postgres@localhost:5432/template", + }, + }), + typescript: { + outputFile: path.resolve(dirname, "generated-types.ts"), + }, +}); +``` + +- [ ] **Step 3: Install (picks up workspace dep)** + +Run: `pnpm install` +Expected: install completes; `@repo/blog` available to `@repo/core-cms`. + +- [ ] **Step 4: Verify core-cms typechecks** + +Run: `pnpm typecheck --filter @repo/core-cms --filter @repo/blog` +Expected: PASS for both. + +- [ ] **Step 5: Regenerate Payload types** (now articles is in the config; types should include `Article`-shaped doc) + +Run: `cd apps/cms && pnpm generate:types` +Expected: writes new `packages/core-cms/src/generated-types.ts` containing an `Articles` interface. + +- [ ] **Step 6: Verify generated types compile** + +Run: `pnpm typecheck --filter @repo/core-cms` +Expected: PASS. + +- [ ] **Step 7: Commit** + +```bash +git add packages/core-cms packages/blog pnpm-lock.yaml +git commit -m "feat(core-cms): compose @repo/blog/cms into payload config" +``` + +--- + +### Task 2.12: tRPC router (integrations/api) + +**Files:** +- Create: `packages/blog/src/integrations/api/router.ts` +- Create: `packages/blog/src/integrations/api/router.test.ts` + +- [ ] **Step 1: Write the failing test** + +```typescript +// packages/blog/src/integrations/api/router.test.ts +import { beforeEach, describe, expect, it } from "vitest"; +import { blogContainer } from "@/di/container"; +import { BLOG_SYMBOLS } from "@/di/symbols"; +import { MockArticlesRepository } from "@/infrastructure/repositories/mock-articles.repository"; +import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; +import { blogRouter } from "./router"; + +describe("blogRouter", () => { + let repo: MockArticlesRepository; + + beforeEach(() => { + if (blogContainer.isBound(BLOG_SYMBOLS.IArticlesRepository)) { + blogContainer.unbind(BLOG_SYMBOLS.IArticlesRepository); + } + repo = new MockArticlesRepository(); + blogContainer + .bind(BLOG_SYMBOLS.IArticlesRepository) + .toConstantValue(repo); + }); + + it("exposes articleBySlug, listArticles, createArticle procedures", () => { + const procedureNames = Object.keys(blogRouter._def.procedures); + expect(procedureNames).toContain("articleBySlug"); + expect(procedureNames).toContain("listArticles"); + expect(procedureNames).toContain("createArticle"); + }); + + it("articleBySlug returns the article when present", async () => { + const now = new Date(); + await repo.createArticle({ + id: "1", + title: "T", + slug: "t", + content: null, + status: "draft", + authorId: "u1", + createdAt: now, + updatedAt: now, + }); + + const caller = blogRouter.createCaller({}); + const result = await caller.articleBySlug({ slug: "t" }); + expect(result?.id).toBe("1"); + }); + + it("listArticles returns all articles when no input is given", async () => { + const caller = blogRouter.createCaller({}); + const result = await caller.listArticles(); + expect(result).toEqual([]); + }); +}); +``` + +- [ ] **Step 2: Run — expect failure** + +Run: `cd packages/blog && pnpm vitest run src/integrations/api/router.test.ts` +Expected: FAIL — "Cannot find module './router'" + +- [ ] **Step 3: Implement router** + +```typescript +// packages/blog/src/integrations/api/router.ts +import { z } from "zod"; +import { router, publicProcedure } from "@repo/core-shared/trpc/init"; +import { + createArticleController, + getArticlesController, + getArticleBySlugController, +} from "@/interface-adapters/controllers/articles.controller"; + +export const blogRouter = router({ + articleBySlug: publicProcedure + .input(z.object({ slug: z.string().min(1) })) + .query(({ input }) => getArticleBySlugController(input)), + + listArticles: publicProcedure + .input( + z + .object({ + status: z.string().optional(), + authorId: z.string().optional(), + limit: z.number().optional(), + offset: z.number().optional(), + }) + .optional(), + ) + .query(({ input }) => getArticlesController(input ?? {})), + + createArticle: publicProcedure + .input( + z.object({ + title: z.string().min(1).max(255), + content: z.unknown(), + authorId: z.string(), + slug: z.string().optional(), + }), + ) + .mutation(({ input }) => createArticleController(input)), +}); + +export type BlogRouter = typeof blogRouter; +``` + +- [ ] **Step 4: Run — expect pass** + +Run: `cd packages/blog && pnpm vitest run src/integrations/api/router.test.ts` +Expected: PASS — 3 tests. + +- [ ] **Step 5: Commit** + +```bash +git add packages/blog/src/integrations/api +git commit -m "feat(blog): add tRPC router with articleBySlug + listArticles + createArticle" +``` + +--- + +### Task 2.13: Wire blogRouter into core-api + +**Files:** +- Modify: `packages/core-api/src/root.ts` +- Modify: `packages/core-api/package.json` (add `@repo/blog`) + +- [ ] **Step 1: Add @repo/blog to core-api dependencies** + +Add inside `packages/core-api/package.json`'s `dependencies` block: + +```json +"@repo/blog": "workspace:*", +``` + +- [ ] **Step 2: Update root.ts** + +Replace `packages/core-api/src/root.ts` with: + +```typescript +import { router } from "@repo/core-shared/trpc/init"; +import { blogRouter } from "@repo/blog/api"; + +export const appRouter = router({ + blog: blogRouter, +}); + +export type AppRouter = typeof appRouter; +``` + +- [ ] **Step 3: Install + verify** + +Run: `pnpm install` then `pnpm typecheck --filter @repo/core-api --filter @repo/blog` +Expected: both PASS. + +- [ ] **Step 4: Commit** + +```bash +git add packages/core-api packages/blog pnpm-lock.yaml +git commit -m "feat(core-api): compose @repo/blog/api into appRouter under 'blog' namespace" +``` + +--- + +## Phase 6: UI helpers (deferred render — apps wire in Plan 5) + +### Task 2.14: ui/query.ts helper + +**Files:** +- Create: `packages/blog/src/ui/query.ts` + +- [ ] **Step 1: Implement** (no test — exercised when apps consume in Plan 5) + +```typescript +// packages/blog/src/ui/query.ts +// React Query option builders for blog feature procedures. +// Consumed by apps via the @repo/core-trpc client (wired in Plan 5). +// +// Example consumer (Plan 5): +// import { useQuery } from '@tanstack/react-query' +// import { trpc } from '@repo/core-trpc' +// import { articleBySlugQuery } from '@repo/blog/src/ui/query' +// const { data } = useQuery(articleBySlugQuery(trpc, slug)) +// +// Kept framework-agnostic here: takes the typed `trpc` client as an argument +// rather than importing it. This avoids importing @repo/core-trpc (which is +// a frontend platform package — feature shouldn't depend on it). + +type TrpcClient = { + blog: { + articleBySlug: { + queryOptions: (input: { slug: string }) => unknown; + }; + listArticles: { + queryOptions: (input?: { + status?: string; + authorId?: string; + limit?: number; + offset?: number; + }) => unknown; + }; + }; +}; + +export function articleBySlugQuery(client: TrpcClient, slug: string) { + return client.blog.articleBySlug.queryOptions({ slug }); +} + +export function listArticlesQuery( + client: TrpcClient, + options?: { status?: string; authorId?: string; limit?: number; offset?: number }, +) { + return client.blog.listArticles.queryOptions(options); +} +``` + +> Note: `TrpcClient` is locally typed structurally because `@repo/core-trpc` doesn't ship the React-aware client until Plan 5. The structural type is sufficient: when Plan 5 lands and apps call `articleBySlugQuery(trpc, slug)` with the real typed client, structural compatibility holds. Plan 5 may revise this to import from `@repo/core-trpc` once that's available. + +- [ ] **Step 2: Verify it compiles** + +Run: `cd packages/blog && pnpm typecheck` +Expected: PASS. + +- [ ] **Step 3: Commit** + +```bash +git add packages/blog/src/ui +git commit -m "feat(blog): add ui/query.ts (framework-agnostic React Query option builders)" +``` + +--- + +## Phase 7: Wiring + barrel + feature test + +### Task 2.15: Wire blog package barrel + +**Files:** +- Modify: `packages/blog/src/index.ts` + +- [ ] **Step 1: Replace empty index.ts** + +```typescript +// packages/blog/src/index.ts +export type { Article, ArticleStatus } from "./entities/article"; +export { ArticleNotFoundError, InputParseError } from "./entities/errors"; +export { articleBySlugQuery, listArticlesQuery } from "./ui/query"; +``` + +- [ ] **Step 2: Verify it compiles** + +Run: `cd packages/blog && pnpm typecheck` +Expected: PASS. + +- [ ] **Step 3: Commit** + +```bash +git add packages/blog/src/index.ts +git commit -m "feat(blog): wire root barrel (entity types + ui query helpers)" +``` + +--- + +### Task 2.16: Feature-level test (cross-layer) + +**Files:** +- Create: `packages/blog/tests/articles.feature.test.ts` + +- [ ] **Step 1: Write the test** + +```typescript +// packages/blog/tests/articles.feature.test.ts +// +// Feature-level test: exercises the full slice +// tRPC procedure -> controller -> use-case -> mock repo +// without going through a network or the actual Payload Local API. +// Verifies that the layers are correctly wired through the per-feature DI container. + +import { beforeEach, describe, expect, it } from "vitest"; +import { blogContainer } from "@/di/container"; +import { BLOG_SYMBOLS } from "@/di/symbols"; +import { MockArticlesRepository } from "@/infrastructure/repositories/mock-articles.repository"; +import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; +import { blogRouter } from "@/integrations/api/router"; + +describe("blog feature: article-by-slug end-to-end", () => { + let repo: MockArticlesRepository; + + beforeEach(() => { + if (blogContainer.isBound(BLOG_SYMBOLS.IArticlesRepository)) { + blogContainer.unbind(BLOG_SYMBOLS.IArticlesRepository); + } + repo = new MockArticlesRepository(); + blogContainer + .bind(BLOG_SYMBOLS.IArticlesRepository) + .toConstantValue(repo); + }); + + it("creates an article via tRPC, then fetches it back by slug", async () => { + const caller = blogRouter.createCaller({}); + + const created = await caller.createArticle({ + title: "The Vertical Refactor", + content: { type: "doc", children: [] }, + authorId: "u1", + slug: "vertical-refactor", + }); + expect(created.id).toBeTruthy(); + expect(created.slug).toBe("vertical-refactor"); + + const fetched = await caller.articleBySlug({ slug: "vertical-refactor" }); + expect(fetched?.id).toBe(created.id); + expect(fetched?.title).toBe("The Vertical Refactor"); + }); + + it("listArticles filters by status", async () => { + const caller = blogRouter.createCaller({}); + await caller.createArticle({ + title: "Draft One", + content: null, + authorId: "u1", + }); + const draftOnly = await caller.listArticles({ status: "draft" }); + expect(draftOnly).toHaveLength(1); + + const publishedOnly = await caller.listArticles({ status: "published" }); + expect(publishedOnly).toHaveLength(0); + }); +}); +``` + +- [ ] **Step 2: Verify the path alias works for tests/ folder** + +The test uses `@/` paths. Confirm `packages/blog/tsconfig.json` includes `"tests/**/*"` (it does per Task 2.1). + +- [ ] **Step 3: Run** + +Run: `cd packages/blog && pnpm vitest run tests/` +Expected: PASS — 2 tests. + +- [ ] **Step 4: Commit** + +```bash +git add packages/blog/tests +git commit -m "test(blog): add feature-level test exercising router → controller → use-case → repo" +``` + +--- + +### Task 2.17: Final verification + apps/cms boot smoke test + +- [ ] **Step 1: Run all blog tests** + +Run: `pnpm test --filter @repo/blog` +Expected: PASS — exact count: entities (7) + di container (2) + use-cases (2 + 2) + payload-articles repo (2) + controller (6) + router (3) + feature (2) = 26 tests. + +- [ ] **Step 2: Run repo-wide typecheck** + +Run: `pnpm typecheck` +Expected: PASS for all the packages we touched. Pre-existing failures in `@repo/api` and `@repo/ui` remain (will be addressed in Plans 5/6). + +- [ ] **Step 3: Boot apps/cms to verify articles collection registers** + +Ensure Postgres is running (`docker compose up -d postgres`). + +Run: `pnpm dev --filter @repo/cms` (in background; wait ~10s for "Ready"). + +Run: `curl -sf -o /dev/null -w "%{http_code}\n" http://localhost:3001/admin` +Expected: `200`. + +Run: `curl -sf -o /dev/null -w "%{http_code}\n" http://localhost:3001/admin/collections/articles` +Expected: `200`. + +Stop the dev server. + +> Note: When the dev server first connects, Payload may again offer to push schema changes (drop the OLD `users` and `media` columns since core-cms now only knows about `articles` — those collections come back in Plan 3). Answer N to the prompt or accept — for the smoke test we only care that admin responds 200, so the dev server can stay paused on the prompt. + +- [ ] **Step 4: Regenerate types one more time and confirm it includes Articles** + +Run: `cd apps/cms && pnpm generate:types` + +Run: `grep -c "Article" packages/core-cms/src/generated-types.ts` +Expected: at least 5 occurrences (Articles interface, references in Config, etc.). + +- [ ] **Step 5: Commit regenerated types** + +```bash +git add packages/core-cms/src/generated-types.ts +git commit -m "feat(core-cms): regenerate types — now includes Articles" +``` + +--- + +## Plan 2 Done Criteria + +- [ ] All 26 tests in `@repo/blog` pass +- [ ] `@repo/blog`, `@repo/core-cms`, `@repo/core-api` all typecheck +- [ ] `apps/cms` admin UI serves `/admin` and `/admin/collections/articles` with 200 +- [ ] `pnpm generate:types` in `apps/cms` produces a `generated-types.ts` containing `Articles` +- [ ] `core-cms/src/payload.config.ts` references `@repo/blog/cms` (not the old `cms-core`'s articles) +- [ ] `core-api/src/root.ts` references `@repo/blog/api` and exposes `blog.*` procedures +- [ ] `tsconfig.base.json` includes the three `@repo/blog*` aliases +- [ ] No deletions yet — `packages/core/src/entities/models/article.ts` and friends still exist (drained in Plan 6) + +**Next plan:** Plan 3 — Auth + Media features. Migrates the Users collection (auth feature) and Media collection (media feature). Restores `articles.author` to a `relationship → users` and adds back `featuredImage: upload → media`. Demonstrates that the per-feature DI pattern scales beyond one feature. From 161c858f32da7594fa2c14453f20c44c2ce6c73b Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 22:09:58 +0200 Subject: [PATCH 029/129] feat(blog): scaffold empty package with feature tag + path aliases --- packages/blog/package.json | 32 +++++++++++++++++++++++++++++ packages/blog/src/index.ts | 1 + packages/blog/tsconfig.json | 14 +++++++++++++ packages/blog/turbo.json | 4 ++++ packages/blog/vitest.config.ts | 3 +++ pnpm-lock.yaml | 37 ++++++++++++++++++++++++++++++++++ tsconfig.base.json | 3 +++ 7 files changed, 94 insertions(+) create mode 100644 packages/blog/package.json create mode 100644 packages/blog/src/index.ts create mode 100644 packages/blog/tsconfig.json create mode 100644 packages/blog/turbo.json create mode 100644 packages/blog/vitest.config.ts diff --git a/packages/blog/package.json b/packages/blog/package.json new file mode 100644 index 0000000..32c7877 --- /dev/null +++ b/packages/blog/package.json @@ -0,0 +1,32 @@ +{ + "name": "@repo/blog", + "private": true, + "version": "0.0.0", + "type": "module", + "exports": { + ".": "./src/index.ts", + "./cms": "./src/integrations/cms/index.ts", + "./api": "./src/integrations/api/router.ts" + }, + "scripts": { + "build": "tsc --noEmit", + "lint": "eslint .", + "test": "vitest run --passWithNoTests", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@repo/core-cms": "workspace:*", + "@repo/core-shared": "workspace:*", + "@trpc/server": "^11.0.0", + "inversify": "^6.2.0", + "payload": "^3.14.0", + "reflect-metadata": "^0.2.2", + "zod": "^3.24.0" + }, + "devDependencies": { + "@repo/eslint-config": "workspace:*", + "@repo/typescript-config": "workspace:*", + "@types/node": "^22.0.0", + "vitest": "^3.1.0" + } +} diff --git a/packages/blog/src/index.ts b/packages/blog/src/index.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/packages/blog/src/index.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/blog/tsconfig.json b/packages/blog/tsconfig.json new file mode 100644 index 0000000..4a2efe1 --- /dev/null +++ b/packages/blog/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "@repo/typescript-config/base.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src", + "lib": ["ES2022", "DOM"], + "jsx": "preserve", + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["src/**/*", "tests/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/blog/turbo.json b/packages/blog/turbo.json new file mode 100644 index 0000000..8a1d41a --- /dev/null +++ b/packages/blog/turbo.json @@ -0,0 +1,4 @@ +{ + "extends": ["//"], + "tags": ["feature"] +} diff --git a/packages/blog/vitest.config.ts b/packages/blog/vitest.config.ts new file mode 100644 index 0000000..f115cc9 --- /dev/null +++ b/packages/blog/vitest.config.ts @@ -0,0 +1,3 @@ +import { baseVitestConfig } from "@repo/typescript-config/vitest.base"; + +export default baseVitestConfig; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1900a2f..5c3b9cc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -228,6 +228,43 @@ importers: specifier: ^19.0.0 version: 19.2.14 + packages/blog: + dependencies: + '@repo/core-cms': + specifier: workspace:* + version: link:../core-cms + '@repo/core-shared': + specifier: workspace:* + version: link:../core-shared + '@trpc/server': + specifier: ^11.0.0 + version: 11.16.0(typescript@5.9.3) + inversify: + specifier: ^6.2.0 + version: 6.2.2(reflect-metadata@0.2.2) + payload: + specifier: ^3.14.0 + version: 3.81.0(graphql@16.13.2)(typescript@5.9.3) + reflect-metadata: + specifier: ^0.2.2 + version: 0.2.2 + zod: + specifier: ^3.24.0 + version: 3.25.76 + devDependencies: + '@repo/eslint-config': + specifier: workspace:* + version: link:../eslint-config + '@repo/typescript-config': + specifier: workspace:* + version: link:../typescript-config + '@types/node': + specifier: ^22.0.0 + version: 22.19.17 + vitest: + specifier: ^3.1.0 + version: 3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(happy-dom@20.8.9)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(tsx@4.21.0) + packages/cms-client: dependencies: payload: diff --git a/tsconfig.base.json b/tsconfig.base.json index 27de2de..efd80f9 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -9,6 +9,9 @@ "@repo/core-shared/trpc/context": ["packages/core-shared/src/trpc/context.ts"], "@repo/core-cms": ["packages/core-cms/src/index.ts"], "@repo/core-cms/generated-types": ["packages/core-cms/src/generated-types.ts"], + "@repo/blog": ["packages/blog/src/index.ts"], + "@repo/blog/cms": ["packages/blog/src/integrations/cms/index.ts"], + "@repo/blog/api": ["packages/blog/src/integrations/api/router.ts"], "@repo/core-api": ["packages/core-api/src/index.ts"], "@repo/core-trpc": ["packages/core-trpc/src/index.ts"], "@repo/core-ui": ["packages/core-ui/src/index.ts"] From 692ee5836572bebdcabc3ab95aa31bb950f3974f Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 22:11:08 +0200 Subject: [PATCH 030/129] feat(blog): add Article entity with rich-text content + domain errors --- packages/blog/src/entities/article.test.ts | 85 ++++++++++++++++++++++ packages/blog/src/entities/article.ts | 17 +++++ packages/blog/src/entities/errors.ts | 11 +++ 3 files changed, 113 insertions(+) create mode 100644 packages/blog/src/entities/article.test.ts create mode 100644 packages/blog/src/entities/article.ts create mode 100644 packages/blog/src/entities/errors.ts diff --git a/packages/blog/src/entities/article.test.ts b/packages/blog/src/entities/article.test.ts new file mode 100644 index 0000000..e5e9727 --- /dev/null +++ b/packages/blog/src/entities/article.test.ts @@ -0,0 +1,85 @@ +import { describe, expect, it } from "vitest"; +import { articleSchema, articleStatusSchema, type Article } from "./article"; + +describe("articleSchema", () => { + it("accepts a minimal valid article with default status", () => { + const result = articleSchema.parse({ + id: "abc", + title: "Hello", + slug: "hello", + content: { type: "doc", children: [] }, + authorId: "u1", + createdAt: new Date(), + updatedAt: new Date(), + }); + expect(result.status).toBe("draft"); + }); + + it("accepts unknown rich-text content", () => { + const result = articleSchema.parse({ + id: "abc", + title: "Hello", + slug: "hello", + content: "any string is also fine", + authorId: "u1", + createdAt: new Date(), + updatedAt: new Date(), + }); + expect(result.content).toBe("any string is also fine"); + }); + + it("rejects empty title", () => { + expect(() => + articleSchema.parse({ + id: "a", + title: "", + slug: "s", + content: null, + authorId: "u", + createdAt: new Date(), + updatedAt: new Date(), + }), + ).toThrow(); + }); + + it("rejects title over 255 chars", () => { + expect(() => + articleSchema.parse({ + id: "a", + title: "x".repeat(256), + slug: "s", + content: null, + authorId: "u", + createdAt: new Date(), + updatedAt: new Date(), + }), + ).toThrow(); + }); +}); + +describe("articleStatusSchema", () => { + it("accepts 'draft' and 'published'", () => { + expect(articleStatusSchema.parse("draft")).toBe("draft"); + expect(articleStatusSchema.parse("published")).toBe("published"); + }); + + it("rejects unknown status", () => { + expect(() => articleStatusSchema.parse("archived")).toThrow(); + }); +}); + +describe("Article type", () => { + it("widens content to unknown", () => { + const _example: Article = { + id: "x", + title: "t", + slug: "s", + content: { whatever: true }, + status: "draft", + authorId: "u", + createdAt: new Date(), + updatedAt: new Date(), + }; + expect(_example).toBeDefined(); + }); +}); diff --git a/packages/blog/src/entities/article.ts b/packages/blog/src/entities/article.ts new file mode 100644 index 0000000..9f3354b --- /dev/null +++ b/packages/blog/src/entities/article.ts @@ -0,0 +1,17 @@ +import { z } from "zod"; + +export const articleStatusSchema = z.enum(["draft", "published"]); + +export const articleSchema = z.object({ + id: z.string(), + title: z.string().min(1).max(255), + slug: z.string().min(1).max(255), + content: z.unknown(), + status: articleStatusSchema.default("draft"), + authorId: z.string(), + createdAt: z.date(), + updatedAt: z.date(), +}); + +export type Article = z.infer; +export type ArticleStatus = z.infer; diff --git a/packages/blog/src/entities/errors.ts b/packages/blog/src/entities/errors.ts new file mode 100644 index 0000000..628de66 --- /dev/null +++ b/packages/blog/src/entities/errors.ts @@ -0,0 +1,11 @@ +export class ArticleNotFoundError extends Error { + constructor(message = "Article not found", options?: ErrorOptions) { + super(message, options); + } +} + +export class InputParseError extends Error { + constructor(message: string, options?: ErrorOptions) { + super(message, options); + } +} From ab11f42e8db0accc4d91817e71bd2e9ec764c067 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 22:11:17 +0200 Subject: [PATCH 031/129] feat(blog): add IArticlesRepository interface --- .../articles-repository.interface.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 packages/blog/src/application/repositories/articles-repository.interface.ts diff --git a/packages/blog/src/application/repositories/articles-repository.interface.ts b/packages/blog/src/application/repositories/articles-repository.interface.ts new file mode 100644 index 0000000..3678bb9 --- /dev/null +++ b/packages/blog/src/application/repositories/articles-repository.interface.ts @@ -0,0 +1,17 @@ +import type { Article } from "@/entities/article"; + +export interface IArticlesRepository { + getArticle(id: string): Promise
; + getArticleBySlug(slug: string): Promise
; + getArticles(options?: { + status?: string; + authorId?: string; + limit?: number; + offset?: number; + }): Promise; + createArticle(input: Article): Promise
; + updateArticle( + id: string, + input: Partial
, + ): Promise
; +} From b0dab254d1e22356e8fd479635d0f0f578bef1ea Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 22:13:00 +0200 Subject: [PATCH 032/129] feat(blog): add getArticlesUseCase (test red until DI + mock repo exist) --- .../use-cases/get-articles.use-case.test.ts | 64 +++++++++++++++++++ .../use-cases/get-articles.use-case.ts | 16 +++++ 2 files changed, 80 insertions(+) create mode 100644 packages/blog/src/application/use-cases/get-articles.use-case.test.ts create mode 100644 packages/blog/src/application/use-cases/get-articles.use-case.ts diff --git a/packages/blog/src/application/use-cases/get-articles.use-case.test.ts b/packages/blog/src/application/use-cases/get-articles.use-case.test.ts new file mode 100644 index 0000000..1807af4 --- /dev/null +++ b/packages/blog/src/application/use-cases/get-articles.use-case.test.ts @@ -0,0 +1,64 @@ +import { beforeEach, describe, expect, it } from "vitest"; +import { blogContainer } from "@/di/container"; +import { BLOG_SYMBOLS } from "@/di/symbols"; +import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; +import { MockArticlesRepository } from "@/infrastructure/repositories/mock-articles.repository"; +import { getArticlesUseCase } from "./get-articles.use-case"; + +describe("getArticlesUseCase", () => { + let repo: MockArticlesRepository; + + beforeEach(() => { + if (blogContainer.isBound(BLOG_SYMBOLS.IArticlesRepository)) { + blogContainer.unbind(BLOG_SYMBOLS.IArticlesRepository); + } + repo = new MockArticlesRepository(); + blogContainer + .bind(BLOG_SYMBOLS.IArticlesRepository) + .toConstantValue(repo); + }); + + it("returns all articles with no filters", async () => { + const now = new Date(); + await repo.createArticle({ + id: "1", + title: "A", + slug: "a", + content: null, + status: "draft", + authorId: "u1", + createdAt: now, + updatedAt: now, + }); + const result = await getArticlesUseCase(); + expect(result).toHaveLength(1); + expect(result[0]?.id).toBe("1"); + }); + + it("filters by status", async () => { + const now = new Date(); + await repo.createArticle({ + id: "1", + title: "A", + slug: "a", + content: null, + status: "draft", + authorId: "u1", + createdAt: now, + updatedAt: now, + }); + await repo.createArticle({ + id: "2", + title: "B", + slug: "b", + content: null, + status: "published", + authorId: "u1", + createdAt: now, + updatedAt: now, + }); + const result = await getArticlesUseCase({ status: "published" }); + expect(result).toHaveLength(1); + expect(result[0]?.id).toBe("2"); + }); +}); diff --git a/packages/blog/src/application/use-cases/get-articles.use-case.ts b/packages/blog/src/application/use-cases/get-articles.use-case.ts new file mode 100644 index 0000000..8a8b70f --- /dev/null +++ b/packages/blog/src/application/use-cases/get-articles.use-case.ts @@ -0,0 +1,16 @@ +import type { Article } from "@/entities/article"; +import { blogContainer } from "@/di/container"; +import { BLOG_SYMBOLS } from "@/di/symbols"; +import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; + +export async function getArticlesUseCase(options?: { + status?: string; + authorId?: string; + limit?: number; + offset?: number; +}): Promise { + const repo = blogContainer.get( + BLOG_SYMBOLS.IArticlesRepository, + ); + return repo.getArticles(options); +} From 86228f2d3e691fc7c8ce7511681b81561f6fec61 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 22:13:31 +0200 Subject: [PATCH 033/129] feat(blog): add createArticleUseCase (test red until DI + mock repo exist) --- .../use-cases/create-article.use-case.test.ts | 45 +++++++++++++++++++ .../use-cases/create-article.use-case.ts | 36 +++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 packages/blog/src/application/use-cases/create-article.use-case.test.ts create mode 100644 packages/blog/src/application/use-cases/create-article.use-case.ts diff --git a/packages/blog/src/application/use-cases/create-article.use-case.test.ts b/packages/blog/src/application/use-cases/create-article.use-case.test.ts new file mode 100644 index 0000000..2cc7289 --- /dev/null +++ b/packages/blog/src/application/use-cases/create-article.use-case.test.ts @@ -0,0 +1,45 @@ +import { beforeEach, describe, expect, it } from "vitest"; +import { blogContainer } from "@/di/container"; +import { BLOG_SYMBOLS } from "@/di/symbols"; +import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; +import { MockArticlesRepository } from "@/infrastructure/repositories/mock-articles.repository"; +import { createArticleUseCase } from "./create-article.use-case"; + +describe("createArticleUseCase", () => { + let repo: MockArticlesRepository; + + beforeEach(() => { + if (blogContainer.isBound(BLOG_SYMBOLS.IArticlesRepository)) { + blogContainer.unbind(BLOG_SYMBOLS.IArticlesRepository); + } + repo = new MockArticlesRepository(); + blogContainer + .bind(BLOG_SYMBOLS.IArticlesRepository) + .toConstantValue(repo); + }); + + it("creates an article in draft status with auto-generated slug", async () => { + const result = await createArticleUseCase({ + title: "Hello World", + content: "body", + authorId: "u1", + }); + expect(result.title).toBe("Hello World"); + expect(result.slug).toBe("hello-world"); + expect(result.status).toBe("draft"); + expect(result.id).toBeTruthy(); + + const stored = await repo.getArticle(result.id); + expect(stored).toBeDefined(); + }); + + it("uses provided slug when supplied", async () => { + const result = await createArticleUseCase({ + title: "Whatever", + content: "body", + authorId: "u1", + slug: "custom-slug", + }); + expect(result.slug).toBe("custom-slug"); + }); +}); diff --git a/packages/blog/src/application/use-cases/create-article.use-case.ts b/packages/blog/src/application/use-cases/create-article.use-case.ts new file mode 100644 index 0000000..1b77fc5 --- /dev/null +++ b/packages/blog/src/application/use-cases/create-article.use-case.ts @@ -0,0 +1,36 @@ +import type { Article } from "@/entities/article"; +import { blogContainer } from "@/di/container"; +import { BLOG_SYMBOLS } from "@/di/symbols"; +import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; + +function generateSlug(title: string): string { + return title + .toLowerCase() + .replace(/[^a-z0-9]+/g, "-") + .replace(/^-+|-+$/g, ""); +} + +export async function createArticleUseCase(input: { + title: string; + content: unknown; + authorId: string; + slug?: string; +}): Promise
{ + const repo = blogContainer.get( + BLOG_SYMBOLS.IArticlesRepository, + ); + + const now = new Date(); + const article: Article = { + id: crypto.randomUUID(), + title: input.title, + slug: input.slug ?? generateSlug(input.title), + content: input.content, + status: "draft", + authorId: input.authorId, + createdAt: now, + updatedAt: now, + }; + + return repo.createArticle(article); +} From 41d7883e7aea53e4b065ce51c378fca4f0569d8d Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 22:14:14 +0200 Subject: [PATCH 034/129] feat(blog): add MockArticlesRepository for tests --- .../repositories/mock-articles.repository.ts | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 packages/blog/src/infrastructure/repositories/mock-articles.repository.ts diff --git a/packages/blog/src/infrastructure/repositories/mock-articles.repository.ts b/packages/blog/src/infrastructure/repositories/mock-articles.repository.ts new file mode 100644 index 0000000..269e30b --- /dev/null +++ b/packages/blog/src/infrastructure/repositories/mock-articles.repository.ts @@ -0,0 +1,54 @@ +import "reflect-metadata"; +import { injectable } from "inversify"; + +import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; +import type { Article } from "@/entities/article"; + +@injectable() +export class MockArticlesRepository implements IArticlesRepository { + private _articles: Article[] = []; + + async getArticle(id: string): Promise
{ + return this._articles.find((a) => a.id === id); + } + + async getArticleBySlug(slug: string): Promise
{ + return this._articles.find((a) => a.slug === slug); + } + + async getArticles(options?: { + status?: string; + authorId?: string; + limit?: number; + offset?: number; + }): Promise { + let result = [...this._articles]; + if (options?.status) { + result = result.filter((a) => a.status === options.status); + } + if (options?.authorId) { + result = result.filter((a) => a.authorId === options.authorId); + } + const offset = options?.offset ?? 0; + const limit = options?.limit ?? 50; + return result.slice(offset, offset + limit); + } + + async createArticle(input: Article): Promise
{ + this._articles.push(input); + return input; + } + + async updateArticle( + id: string, + input: Partial
, + ): Promise
{ + const index = this._articles.findIndex((a) => a.id === id); + if (index === -1) return undefined; + const current = this._articles[index]; + if (!current) return undefined; + const updated: Article = { ...current, ...input, id: current.id }; + this._articles[index] = updated; + return updated; + } +} From c00283506c95d6e74558163cdfd8468133d5f552 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 22:14:56 +0200 Subject: [PATCH 035/129] feat(blog): add per-feature InversifyJS container (symbols, module, container) --- packages/blog/src/di/container.test.ts | 36 ++++++++++++++++++++++++++ packages/blog/src/di/container.ts | 6 +++++ packages/blog/src/di/module.ts | 11 ++++++++ packages/blog/src/di/symbols.ts | 3 +++ packages/blog/vitest.config.ts | 10 ++++++- 5 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 packages/blog/src/di/container.test.ts create mode 100644 packages/blog/src/di/container.ts create mode 100644 packages/blog/src/di/module.ts create mode 100644 packages/blog/src/di/symbols.ts diff --git a/packages/blog/src/di/container.test.ts b/packages/blog/src/di/container.test.ts new file mode 100644 index 0000000..8ccd394 --- /dev/null +++ b/packages/blog/src/di/container.test.ts @@ -0,0 +1,36 @@ +import { afterEach, beforeEach, describe, expect, it } from "vitest"; +import { blogContainer } from "./container"; +import { BLOG_SYMBOLS } from "./symbols"; +import { BlogModule } from "./module"; +import { MockArticlesRepository } from "@/infrastructure/repositories/mock-articles.repository"; +import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; + +describe("blogContainer", () => { + beforeEach(() => { + blogContainer.unbindAll(); + blogContainer.load(BlogModule); + }); + + afterEach(() => { + blogContainer.unbindAll(); + }); + + it("resolves IArticlesRepository to MockArticlesRepository by default binding", () => { + const repo = blogContainer.get( + BLOG_SYMBOLS.IArticlesRepository, + ); + expect(repo).toBeInstanceOf(MockArticlesRepository); + }); + + it("supports rebinding to a custom repo", () => { + blogContainer.unbind(BLOG_SYMBOLS.IArticlesRepository); + const custom = new MockArticlesRepository(); + blogContainer + .bind(BLOG_SYMBOLS.IArticlesRepository) + .toConstantValue(custom); + const resolved = blogContainer.get( + BLOG_SYMBOLS.IArticlesRepository, + ); + expect(resolved).toBe(custom); + }); +}); diff --git a/packages/blog/src/di/container.ts b/packages/blog/src/di/container.ts new file mode 100644 index 0000000..1624894 --- /dev/null +++ b/packages/blog/src/di/container.ts @@ -0,0 +1,6 @@ +import "reflect-metadata"; +import { Container } from "inversify"; +import { BlogModule } from "./module"; + +export const blogContainer = new Container({ defaultScope: "Singleton" }); +blogContainer.load(BlogModule); diff --git a/packages/blog/src/di/module.ts b/packages/blog/src/di/module.ts new file mode 100644 index 0000000..5bd4bcc --- /dev/null +++ b/packages/blog/src/di/module.ts @@ -0,0 +1,11 @@ +import { ContainerModule, type interfaces } from "inversify"; + +import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; +import { MockArticlesRepository } from "@/infrastructure/repositories/mock-articles.repository"; +import { BLOG_SYMBOLS } from "./symbols"; + +export const BlogModule = new ContainerModule((bind: interfaces.Bind) => { + bind(BLOG_SYMBOLS.IArticlesRepository).to( + MockArticlesRepository, + ); +}); diff --git a/packages/blog/src/di/symbols.ts b/packages/blog/src/di/symbols.ts new file mode 100644 index 0000000..2033cfe --- /dev/null +++ b/packages/blog/src/di/symbols.ts @@ -0,0 +1,3 @@ +export const BLOG_SYMBOLS = { + IArticlesRepository: Symbol.for("blog:IArticlesRepository"), +} as const; diff --git a/packages/blog/vitest.config.ts b/packages/blog/vitest.config.ts index f115cc9..705772c 100644 --- a/packages/blog/vitest.config.ts +++ b/packages/blog/vitest.config.ts @@ -1,3 +1,11 @@ +import path from "path"; import { baseVitestConfig } from "@repo/typescript-config/vitest.base"; -export default baseVitestConfig; +export default { + ...baseVitestConfig, + resolve: { + alias: { + "@": path.resolve(__dirname, "./src"), + }, + }, +}; From 1da0c060851f8d55b7a50ed4aab7475dbb04d90f Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 22:22:05 +0200 Subject: [PATCH 036/129] docs(plan-2): fix vitest.config.ts to include @/ alias Vitest doesn't read tsconfig paths automatically; the alias must be declared in vitest.config.ts via resolve.alias. Discovered during execution and fixed in the live blog package; updating the source plan so future feature plans (auth, media, etc.) start correct. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../plans/2026-05-04-plan-2-blog-feature.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/superpowers/plans/2026-05-04-plan-2-blog-feature.md b/docs/superpowers/plans/2026-05-04-plan-2-blog-feature.md index 45825f8..eb1d156 100644 --- a/docs/superpowers/plans/2026-05-04-plan-2-blog-feature.md +++ b/docs/superpowers/plans/2026-05-04-plan-2-blog-feature.md @@ -152,11 +152,21 @@ The domain `Article.content` field is also widened: the existing entity has `con - [ ] **Step 4: Create vitest.config.ts** ```typescript +import path from "node:path"; import { baseVitestConfig } from "@repo/typescript-config/vitest.base"; -export default baseVitestConfig; +export default { + ...baseVitestConfig, + resolve: { + alias: { + "@": path.resolve(__dirname, "./src"), + }, + }, +}; ``` +> Note: Vitest does NOT automatically read tsconfig `paths`. The `@/` alias used in `src/**/*.ts` source/test files must be declared explicitly in vitest.config.ts via `resolve.alias`. Same pattern repeats for every feature package's vitest.config.ts. + - [ ] **Step 5: Create empty index.ts** ```typescript From b250cdff80c4bdec521b661ac9ae782693e9ef4c Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 22:23:31 +0200 Subject: [PATCH 037/129] feat(blog): add PayloadArticlesRepository with doc-to-entity mapping --- .../payload-articles.repository.test.ts | 59 ++++++++ .../payload-articles.repository.ts | 129 ++++++++++++++++++ 2 files changed, 188 insertions(+) create mode 100644 packages/blog/src/infrastructure/repositories/payload-articles.repository.test.ts create mode 100644 packages/blog/src/infrastructure/repositories/payload-articles.repository.ts diff --git a/packages/blog/src/infrastructure/repositories/payload-articles.repository.test.ts b/packages/blog/src/infrastructure/repositories/payload-articles.repository.test.ts new file mode 100644 index 0000000..658dc52 --- /dev/null +++ b/packages/blog/src/infrastructure/repositories/payload-articles.repository.test.ts @@ -0,0 +1,59 @@ +import { describe, expect, it, vi } from "vitest"; +import { PayloadArticlesRepository } from "./payload-articles.repository"; + +vi.mock("payload", () => ({ + getPayload: vi.fn(), +})); + +vi.mock("@repo/core-cms", () => ({ + default: {} as never, +})); + +describe("PayloadArticlesRepository", () => { + it("maps a Payload doc to a domain Article on getArticleBySlug", async () => { + const { getPayload } = await import("payload"); + const findMock = vi.fn().mockResolvedValue({ + docs: [ + { + id: "p-123", + title: "Hello", + slug: "hello", + content: { type: "doc", children: [] }, + status: "published", + author: "u1", + createdAt: "2026-05-04T12:00:00.000Z", + updatedAt: "2026-05-04T12:00:00.000Z", + }, + ], + }); + (getPayload as ReturnType).mockResolvedValue({ + find: findMock, + }); + + const repo = new PayloadArticlesRepository(); + const result = await repo.getArticleBySlug("hello"); + + expect(findMock).toHaveBeenCalledWith({ + collection: "articles", + where: { slug: { equals: "hello" } }, + limit: 1, + overrideAccess: false, + }); + expect(result?.id).toBe("p-123"); + expect(result?.slug).toBe("hello"); + expect(result?.status).toBe("published"); + expect(result?.authorId).toBe("u1"); + expect(result?.createdAt).toBeInstanceOf(Date); + }); + + it("returns undefined when slug is not found", async () => { + const { getPayload } = await import("payload"); + (getPayload as ReturnType).mockResolvedValue({ + find: vi.fn().mockResolvedValue({ docs: [] }), + }); + + const repo = new PayloadArticlesRepository(); + const result = await repo.getArticleBySlug("missing"); + expect(result).toBeUndefined(); + }); +}); diff --git a/packages/blog/src/infrastructure/repositories/payload-articles.repository.ts b/packages/blog/src/infrastructure/repositories/payload-articles.repository.ts new file mode 100644 index 0000000..a7a8409 --- /dev/null +++ b/packages/blog/src/infrastructure/repositories/payload-articles.repository.ts @@ -0,0 +1,129 @@ +import "reflect-metadata"; +import { injectable } from "inversify"; +import { getPayload } from "payload"; + +import config from "@repo/core-cms"; +import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; +import type { Article } from "@/entities/article"; + +type PayloadArticleDoc = { + id: string | number; + title?: string | null; + slug?: string | null; + content?: unknown; + status?: string | null; + author?: string | number | { id: string | number } | null; + createdAt?: string | null; + updatedAt?: string | null; +}; + +function mapDoc(doc: PayloadArticleDoc): Article { + const authorId = + typeof doc.author === "object" && doc.author !== null + ? String(doc.author.id) + : doc.author != null + ? String(doc.author) + : ""; + return { + id: String(doc.id), + title: doc.title ?? "", + slug: doc.slug ?? "", + content: doc.content ?? null, + status: doc.status === "published" ? "published" : "draft", + authorId, + createdAt: doc.createdAt ? new Date(doc.createdAt) : new Date(0), + updatedAt: doc.updatedAt ? new Date(doc.updatedAt) : new Date(0), + }; +} + +@injectable() +export class PayloadArticlesRepository implements IArticlesRepository { + async getArticle(id: string): Promise
{ + const payload = await getPayload({ config }); + try { + const doc = await payload.findByID({ + collection: "articles", + id, + overrideAccess: false, + }); + return mapDoc(doc as PayloadArticleDoc); + } catch { + return undefined; + } + } + + async getArticleBySlug(slug: string): Promise
{ + const payload = await getPayload({ config }); + const result = await payload.find({ + collection: "articles", + where: { slug: { equals: slug } }, + limit: 1, + overrideAccess: false, + }); + const doc = result.docs[0] as PayloadArticleDoc | undefined; + return doc ? mapDoc(doc) : undefined; + } + + async getArticles(options?: { + status?: string; + authorId?: string; + limit?: number; + offset?: number; + }): Promise { + const payload = await getPayload({ config }); + const where: Record = {}; + if (options?.status) where.status = { equals: options.status }; + if (options?.authorId) where.author = { equals: options.authorId }; + + const result = await payload.find({ + collection: "articles", + where: where as never, + limit: options?.limit ?? 50, + page: options?.offset + ? Math.floor(options.offset / (options.limit ?? 50)) + 1 + : 1, + overrideAccess: false, + }); + return result.docs.map((d) => mapDoc(d as PayloadArticleDoc)); + } + + async createArticle(input: Article): Promise
{ + const payload = await getPayload({ config }); + const created = await payload.create({ + collection: "articles", + data: { + title: input.title, + slug: input.slug, + content: input.content, + status: input.status, + author: input.authorId, + } as never, + overrideAccess: false, + }); + return mapDoc(created as PayloadArticleDoc); + } + + async updateArticle( + id: string, + input: Partial
, + ): Promise
{ + const payload = await getPayload({ config }); + try { + const updated = await payload.update({ + collection: "articles", + id, + data: { + ...(input.title !== undefined && { title: input.title }), + ...(input.slug !== undefined && { slug: input.slug }), + ...(input.content !== undefined && { content: input.content }), + ...(input.status !== undefined && { status: input.status }), + ...(input.authorId !== undefined && { author: input.authorId }), + } as never, + overrideAccess: false, + }); + return mapDoc(updated as PayloadArticleDoc); + } catch { + return undefined; + } + } +} From f041ae54734a3a2bf883839340ed19d3a8f010d0 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 22:25:10 +0200 Subject: [PATCH 038/129] feat(blog): add articles controller with Zod validation --- .../controllers/articles.controller.test.ts | 71 +++++++++++++++++++ .../controllers/articles.controller.ts | 66 +++++++++++++++++ 2 files changed, 137 insertions(+) create mode 100644 packages/blog/src/interface-adapters/controllers/articles.controller.test.ts create mode 100644 packages/blog/src/interface-adapters/controllers/articles.controller.ts diff --git a/packages/blog/src/interface-adapters/controllers/articles.controller.test.ts b/packages/blog/src/interface-adapters/controllers/articles.controller.test.ts new file mode 100644 index 0000000..1e8940c --- /dev/null +++ b/packages/blog/src/interface-adapters/controllers/articles.controller.test.ts @@ -0,0 +1,71 @@ +import { beforeEach, describe, expect, it } from "vitest"; +import { blogContainer } from "@/di/container"; +import { BLOG_SYMBOLS } from "@/di/symbols"; +import { MockArticlesRepository } from "@/infrastructure/repositories/mock-articles.repository"; +import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; +import { InputParseError } from "@/entities/errors"; +import { + createArticleController, + getArticlesController, + getArticleBySlugController, +} from "./articles.controller"; + +describe("articles controller", () => { + let repo: MockArticlesRepository; + + beforeEach(() => { + if (blogContainer.isBound(BLOG_SYMBOLS.IArticlesRepository)) { + blogContainer.unbind(BLOG_SYMBOLS.IArticlesRepository); + } + repo = new MockArticlesRepository(); + blogContainer + .bind(BLOG_SYMBOLS.IArticlesRepository) + .toConstantValue(repo); + }); + + describe("createArticleController", () => { + it("creates an article on valid input", async () => { + const result = await createArticleController({ + title: "Hello", + content: "body", + authorId: "u1", + }); + expect(result.title).toBe("Hello"); + }); + + it("throws InputParseError on missing title", async () => { + await expect( + createArticleController({ content: "body", authorId: "u1" }), + ).rejects.toBeInstanceOf(InputParseError); + }); + }); + + describe("getArticlesController", () => { + it("returns array on valid input", async () => { + const result = await getArticlesController({}); + expect(result).toEqual([]); + }); + + it("throws InputParseError on invalid input shape", async () => { + await expect( + getArticlesController({ limit: "not a number" } as unknown as Record< + string, + unknown + >), + ).rejects.toBeInstanceOf(InputParseError); + }); + }); + + describe("getArticleBySlugController", () => { + it("returns undefined for missing slug", async () => { + const result = await getArticleBySlugController({ slug: "nope" }); + expect(result).toBeUndefined(); + }); + + it("throws InputParseError on missing slug", async () => { + await expect( + getArticleBySlugController({} as { slug: string }), + ).rejects.toBeInstanceOf(InputParseError); + }); + }); +}); diff --git a/packages/blog/src/interface-adapters/controllers/articles.controller.ts b/packages/blog/src/interface-adapters/controllers/articles.controller.ts new file mode 100644 index 0000000..5d04e29 --- /dev/null +++ b/packages/blog/src/interface-adapters/controllers/articles.controller.ts @@ -0,0 +1,66 @@ +import { z } from "zod"; + +import { InputParseError } from "@/entities/errors"; +import type { Article } from "@/entities/article"; +import { blogContainer } from "@/di/container"; +import { BLOG_SYMBOLS } from "@/di/symbols"; +import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; +import { getArticlesUseCase } from "@/application/use-cases/get-articles.use-case"; +import { createArticleUseCase } from "@/application/use-cases/create-article.use-case"; + +const createInputSchema = z.object({ + title: z.string().min(1).max(255), + content: z.unknown(), + authorId: z.string(), + slug: z.string().optional(), +}); + +const getInputSchema = z.object({ + status: z.string().optional(), + authorId: z.string().optional(), + limit: z.number().optional(), + offset: z.number().optional(), +}); + +const getBySlugInputSchema = z.object({ + slug: z.string().min(1), +}); + +export async function createArticleController( + input: Partial>, +): Promise
{ + const parsed = createInputSchema.safeParse(input); + if (!parsed.success) { + throw new InputParseError("Invalid create-article input", { + cause: parsed.error, + }); + } + return createArticleUseCase(parsed.data); +} + +export async function getArticlesController( + input: Partial>, +): Promise { + const parsed = getInputSchema.safeParse(input); + if (!parsed.success) { + throw new InputParseError("Invalid get-articles input", { + cause: parsed.error, + }); + } + return getArticlesUseCase(parsed.data); +} + +export async function getArticleBySlugController(input: { + slug: string; +}): Promise
{ + const parsed = getBySlugInputSchema.safeParse(input); + if (!parsed.success) { + throw new InputParseError("Invalid get-article-by-slug input", { + cause: parsed.error, + }); + } + const repo = blogContainer.get( + BLOG_SYMBOLS.IArticlesRepository, + ); + return repo.getArticleBySlug(parsed.data.slug); +} From 1d59698ebe4c3b27744f43d616507b19b5bbea5c Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 22:27:03 +0200 Subject: [PATCH 039/129] =?UTF-8?q?feat(blog):=20add=20articles=20collecti?= =?UTF-8?q?on=20(simplified=20=E2=80=94=20no=20cross-feature=20refs)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../integrations/cms/collections/articles.ts | 72 +++++++++++++++++++ packages/blog/src/integrations/cms/index.ts | 1 + 2 files changed, 73 insertions(+) create mode 100644 packages/blog/src/integrations/cms/collections/articles.ts create mode 100644 packages/blog/src/integrations/cms/index.ts diff --git a/packages/blog/src/integrations/cms/collections/articles.ts b/packages/blog/src/integrations/cms/collections/articles.ts new file mode 100644 index 0000000..027c134 --- /dev/null +++ b/packages/blog/src/integrations/cms/collections/articles.ts @@ -0,0 +1,72 @@ +import type { CollectionConfig } from "payload"; +import { slugifyIfMissing } from "@repo/core-shared/payload"; + +export const articles: CollectionConfig = { + slug: "articles", + admin: { + useAsTitle: "title", + defaultColumns: ["title", "status", "author", "updatedAt"], + }, + hooks: { + beforeChange: [slugifyIfMissing], + }, + versions: { + drafts: true, + }, + fields: [ + { + name: "title", + type: "text", + required: true, + maxLength: 255, + }, + { + name: "slug", + type: "text", + unique: true, + admin: { + position: "sidebar", + description: "Auto-generated from title if left empty", + }, + }, + { + name: "content", + type: "richText", + }, + { + name: "status", + type: "select", + options: [ + { label: "Draft", value: "draft" }, + { label: "Published", value: "published" }, + ], + defaultValue: "draft", + required: true, + admin: { + position: "sidebar", + }, + }, + // TODO(plan-3): Restore as `relationship → users` once auth feature is migrated. + { + name: "author", + type: "text", + required: true, + admin: { + position: "sidebar", + description: + "Temporary text field; restored to users relationship in Plan 3.", + }, + }, + // TODO(plan-3): Restore `featuredImage: upload → media` once media feature is migrated. + { + name: "publishedAt", + type: "date", + admin: { + position: "sidebar", + date: { + pickerAppearance: "dayAndTime", + }, + }, + }, + ], +}; diff --git a/packages/blog/src/integrations/cms/index.ts b/packages/blog/src/integrations/cms/index.ts new file mode 100644 index 0000000..5db37d5 --- /dev/null +++ b/packages/blog/src/integrations/cms/index.ts @@ -0,0 +1 @@ +export { articles } from "./collections/articles"; From a92341fb74180074c7cd702a6b2699e8139f5fb4 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 22:29:50 +0200 Subject: [PATCH 040/129] feat(core-cms): compose @repo/blog/cms into payload config --- packages/blog/package.json | 1 - .../use-cases/create-article.use-case.ts | 2 +- .../payload-articles.repository.test.ts | 10 ++- .../payload-articles.repository.ts | 18 +++-- .../controllers/articles.controller.ts | 9 ++- packages/core-cms/package.json | 1 + packages/core-cms/src/generated-types.ts | 66 +++++++++++++++++-- packages/core-cms/src/payload.config.ts | 4 +- pnpm-lock.yaml | 6 +- 9 files changed, 93 insertions(+), 24 deletions(-) diff --git a/packages/blog/package.json b/packages/blog/package.json index 32c7877..ba59be2 100644 --- a/packages/blog/package.json +++ b/packages/blog/package.json @@ -15,7 +15,6 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@repo/core-cms": "workspace:*", "@repo/core-shared": "workspace:*", "@trpc/server": "^11.0.0", "inversify": "^6.2.0", diff --git a/packages/blog/src/application/use-cases/create-article.use-case.ts b/packages/blog/src/application/use-cases/create-article.use-case.ts index 1b77fc5..e55565d 100644 --- a/packages/blog/src/application/use-cases/create-article.use-case.ts +++ b/packages/blog/src/application/use-cases/create-article.use-case.ts @@ -12,7 +12,7 @@ function generateSlug(title: string): string { export async function createArticleUseCase(input: { title: string; - content: unknown; + content?: unknown; authorId: string; slug?: string; }): Promise
{ diff --git a/packages/blog/src/infrastructure/repositories/payload-articles.repository.test.ts b/packages/blog/src/infrastructure/repositories/payload-articles.repository.test.ts index 658dc52..55f5b70 100644 --- a/packages/blog/src/infrastructure/repositories/payload-articles.repository.test.ts +++ b/packages/blog/src/infrastructure/repositories/payload-articles.repository.test.ts @@ -5,11 +5,9 @@ vi.mock("payload", () => ({ getPayload: vi.fn(), })); -vi.mock("@repo/core-cms", () => ({ - default: {} as never, -})); - describe("PayloadArticlesRepository", () => { + const mockConfig = {} as never; + it("maps a Payload doc to a domain Article on getArticleBySlug", async () => { const { getPayload } = await import("payload"); const findMock = vi.fn().mockResolvedValue({ @@ -30,7 +28,7 @@ describe("PayloadArticlesRepository", () => { find: findMock, }); - const repo = new PayloadArticlesRepository(); + const repo = new PayloadArticlesRepository(mockConfig); const result = await repo.getArticleBySlug("hello"); expect(findMock).toHaveBeenCalledWith({ @@ -52,7 +50,7 @@ describe("PayloadArticlesRepository", () => { find: vi.fn().mockResolvedValue({ docs: [] }), }); - const repo = new PayloadArticlesRepository(); + const repo = new PayloadArticlesRepository(mockConfig); const result = await repo.getArticleBySlug("missing"); expect(result).toBeUndefined(); }); diff --git a/packages/blog/src/infrastructure/repositories/payload-articles.repository.ts b/packages/blog/src/infrastructure/repositories/payload-articles.repository.ts index a7a8409..da7912c 100644 --- a/packages/blog/src/infrastructure/repositories/payload-articles.repository.ts +++ b/packages/blog/src/infrastructure/repositories/payload-articles.repository.ts @@ -1,8 +1,8 @@ import "reflect-metadata"; import { injectable } from "inversify"; import { getPayload } from "payload"; +import type { SanitizedConfig } from "payload"; -import config from "@repo/core-cms"; import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; import type { Article } from "@/entities/article"; @@ -38,8 +38,14 @@ function mapDoc(doc: PayloadArticleDoc): Article { @injectable() export class PayloadArticlesRepository implements IArticlesRepository { + private config: SanitizedConfig; + + constructor(config: SanitizedConfig) { + this.config = config; + } + async getArticle(id: string): Promise
{ - const payload = await getPayload({ config }); + const payload = await getPayload({ config: this.config }); try { const doc = await payload.findByID({ collection: "articles", @@ -53,7 +59,7 @@ export class PayloadArticlesRepository implements IArticlesRepository { } async getArticleBySlug(slug: string): Promise
{ - const payload = await getPayload({ config }); + const payload = await getPayload({ config: this.config }); const result = await payload.find({ collection: "articles", where: { slug: { equals: slug } }, @@ -70,7 +76,7 @@ export class PayloadArticlesRepository implements IArticlesRepository { limit?: number; offset?: number; }): Promise { - const payload = await getPayload({ config }); + const payload = await getPayload({ config: this.config }); const where: Record = {}; if (options?.status) where.status = { equals: options.status }; if (options?.authorId) where.author = { equals: options.authorId }; @@ -88,7 +94,7 @@ export class PayloadArticlesRepository implements IArticlesRepository { } async createArticle(input: Article): Promise
{ - const payload = await getPayload({ config }); + const payload = await getPayload({ config: this.config }); const created = await payload.create({ collection: "articles", data: { @@ -107,7 +113,7 @@ export class PayloadArticlesRepository implements IArticlesRepository { id: string, input: Partial
, ): Promise
{ - const payload = await getPayload({ config }); + const payload = await getPayload({ config: this.config }); try { const updated = await payload.update({ collection: "articles", diff --git a/packages/blog/src/interface-adapters/controllers/articles.controller.ts b/packages/blog/src/interface-adapters/controllers/articles.controller.ts index 5d04e29..2aaefd8 100644 --- a/packages/blog/src/interface-adapters/controllers/articles.controller.ts +++ b/packages/blog/src/interface-adapters/controllers/articles.controller.ts @@ -10,7 +10,7 @@ import { createArticleUseCase } from "@/application/use-cases/create-article.use const createInputSchema = z.object({ title: z.string().min(1).max(255), - content: z.unknown(), + content: z.unknown().optional(), authorId: z.string(), slug: z.string().optional(), }); @@ -35,7 +35,12 @@ export async function createArticleController( cause: parsed.error, }); } - return createArticleUseCase(parsed.data); + return createArticleUseCase({ + title: parsed.data.title, + content: parsed.data.content ?? null, + authorId: parsed.data.authorId, + slug: parsed.data.slug, + }); } export async function getArticlesController( diff --git a/packages/core-cms/package.json b/packages/core-cms/package.json index 279b453..af0b774 100644 --- a/packages/core-cms/package.json +++ b/packages/core-cms/package.json @@ -13,6 +13,7 @@ "typecheck": "tsc --noEmit" }, "dependencies": { + "@repo/blog": "workspace:*", "payload": "^3.14.0", "@payloadcms/db-postgres": "^3.14.0", "@payloadcms/richtext-lexical": "^3.14.0" diff --git a/packages/core-cms/src/generated-types.ts b/packages/core-cms/src/generated-types.ts index 703fa14..520f18e 100644 --- a/packages/core-cms/src/generated-types.ts +++ b/packages/core-cms/src/generated-types.ts @@ -67,6 +67,7 @@ export interface Config { }; blocks: {}; collections: { + articles: Article; 'payload-kv': PayloadKv; users: User; 'payload-locked-documents': PayloadLockedDocument; @@ -75,6 +76,7 @@ export interface Config { }; collectionsJoins: {}; collectionsSelect: { + articles: ArticlesSelect | ArticlesSelect; 'payload-kv': PayloadKvSelect | PayloadKvSelect; users: UsersSelect | UsersSelect; 'payload-locked-documents': PayloadLockedDocumentsSelect | PayloadLockedDocumentsSelect; @@ -115,6 +117,42 @@ export interface UserAuthOperations { password: string; }; } +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "articles". + */ +export interface Article { + id: number; + title: string; + /** + * Auto-generated from title if left empty + */ + slug?: string | null; + content?: { + root: { + type: string; + children: { + type: any; + version: number; + [k: string]: unknown; + }[]; + direction: ('ltr' | 'rtl') | null; + format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; + indent: number; + version: number; + }; + [k: string]: unknown; + } | null; + status: 'draft' | 'published'; + /** + * Temporary text field; restored to users relationship in Plan 3. + */ + author: string; + publishedAt?: string | null; + updatedAt: string; + createdAt: string; + _status?: ('draft' | 'published') | null; +} /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "payload-kv". @@ -163,10 +201,15 @@ export interface User { */ export interface PayloadLockedDocument { id: number; - document?: { - relationTo: 'users'; - value: number | User; - } | null; + document?: + | ({ + relationTo: 'articles'; + value: number | Article; + } | null) + | ({ + relationTo: 'users'; + value: number | User; + } | null); globalSlug?: string | null; user: { relationTo: 'users'; @@ -209,6 +252,21 @@ export interface PayloadMigration { updatedAt: string; createdAt: string; } +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "articles_select". + */ +export interface ArticlesSelect { + title?: T; + slug?: T; + content?: T; + status?: T; + author?: T; + publishedAt?: T; + updatedAt?: T; + createdAt?: T; + _status?: T; +} /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "payload-kv_select". diff --git a/packages/core-cms/src/payload.config.ts b/packages/core-cms/src/payload.config.ts index b166388..c77e2e9 100644 --- a/packages/core-cms/src/payload.config.ts +++ b/packages/core-cms/src/payload.config.ts @@ -4,12 +4,14 @@ import { lexicalEditor } from "@payloadcms/richtext-lexical"; import path from "node:path"; import { fileURLToPath } from "node:url"; +import { articles } from "@repo/blog/cms"; + const filename = fileURLToPath(import.meta.url); const dirname = path.dirname(filename); export default buildConfig({ editor: lexicalEditor(), - collections: [], + collections: [articles], globals: [], secret: process.env.PAYLOAD_SECRET || "default-secret-change-me", db: postgresAdapter({ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5c3b9cc..6c5a54f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -230,9 +230,6 @@ importers: packages/blog: dependencies: - '@repo/core-cms': - specifier: workspace:* - version: link:../core-cms '@repo/core-shared': specifier: workspace:* version: link:../core-shared @@ -355,6 +352,9 @@ importers: '@payloadcms/richtext-lexical': specifier: ^3.14.0 version: 3.81.0(@faceless-ui/modal@3.0.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@faceless-ui/scroll-info@2.0.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@payloadcms/next@3.81.0(graphql@16.13.2)(next@16.2.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.99.0))(payload@3.81.0(graphql@16.13.2)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(next@16.2.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.99.0))(payload@3.81.0(graphql@16.13.2)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)(yjs@13.6.30) + '@repo/blog': + specifier: workspace:* + version: link:../blog payload: specifier: ^3.14.0 version: 3.81.0(graphql@16.13.2)(typescript@5.9.3) From 81fe4aa3b221687fc1c728a4f1594ddaac4b7f1f Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 22:32:01 +0200 Subject: [PATCH 041/129] docs(plan-2): document constructor-injection pattern for payload repos Revises Task 2.8's note: spec example used `import config from '@repo/core-cms'` which creates a workspace dependency cycle (blog deps on core-cms; core-cms deps on blog/cms). Constructor injection breaks the cycle at the package graph. Apply to all payload-backed feature repos. Co-Authored-By: Claude Opus 4.7 (1M context) --- docs/superpowers/plans/2026-05-04-plan-2-blog-feature.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/superpowers/plans/2026-05-04-plan-2-blog-feature.md b/docs/superpowers/plans/2026-05-04-plan-2-blog-feature.md index eb1d156..392ea0e 100644 --- a/docs/superpowers/plans/2026-05-04-plan-2-blog-feature.md +++ b/docs/superpowers/plans/2026-05-04-plan-2-blog-feature.md @@ -1042,6 +1042,14 @@ export class PayloadArticlesRepository implements IArticlesRepository { > Note: `as never` casts on the Payload `data` arguments are needed because Payload's generated types (which we don't have for the empty-collection core-cms config) would normally constrain these. With empty `collections: []`, the generated types don't include `'articles'`, so we cast through `never`. After Plan 3 wires articles into core-cms.collections AND `pnpm generate:types` runs, these casts can potentially be removed — but for Plan 2's purpose (decoupled feature with deferred wiring) the casts are correct. +> **Critical architectural note (revised after execution):** The repo takes `SanitizedConfig` via its constructor instead of `import config from '@repo/core-cms'` (which would create a workspace dependency cycle: blog ↔ core-cms). Constructor injection breaks the cycle at the package-graph level. The DI binding for production (Plan 5, app boot) supplies the config: +> ```ts +> import config from '@repo/core-cms' +> blogContainer.bind(BLOG_SYMBOLS.IArticlesRepository) +> .toDynamicValue(() => new PayloadArticlesRepository(config)) +> ``` +> The blog `package.json` does NOT declare `@repo/core-cms` as a dependency. Apply this pattern to every payload-backed feature repository. + - [ ] **Step 4: Run — expect pass** Run: `cd packages/blog && pnpm vitest run src/infrastructure/repositories/payload-articles.repository.test.ts` From fde58f2d3d3f6ea5eb6a37cfa36f7b3cde585f97 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 22:32:53 +0200 Subject: [PATCH 042/129] feat(blog): add tRPC router with articleBySlug + listArticles + createArticle --- .../blog/src/integrations/api/router.test.ts | 51 +++++++++++++++++++ packages/blog/src/integrations/api/router.ts | 39 ++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 packages/blog/src/integrations/api/router.test.ts create mode 100644 packages/blog/src/integrations/api/router.ts diff --git a/packages/blog/src/integrations/api/router.test.ts b/packages/blog/src/integrations/api/router.test.ts new file mode 100644 index 0000000..7bf8187 --- /dev/null +++ b/packages/blog/src/integrations/api/router.test.ts @@ -0,0 +1,51 @@ +import { beforeEach, describe, expect, it } from "vitest"; +import { blogContainer } from "@/di/container"; +import { BLOG_SYMBOLS } from "@/di/symbols"; +import { MockArticlesRepository } from "@/infrastructure/repositories/mock-articles.repository"; +import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; +import { blogRouter } from "./router"; + +describe("blogRouter", () => { + let repo: MockArticlesRepository; + + beforeEach(() => { + if (blogContainer.isBound(BLOG_SYMBOLS.IArticlesRepository)) { + blogContainer.unbind(BLOG_SYMBOLS.IArticlesRepository); + } + repo = new MockArticlesRepository(); + blogContainer + .bind(BLOG_SYMBOLS.IArticlesRepository) + .toConstantValue(repo); + }); + + it("exposes articleBySlug, listArticles, createArticle procedures", () => { + const procedureNames = Object.keys(blogRouter._def.procedures); + expect(procedureNames).toContain("articleBySlug"); + expect(procedureNames).toContain("listArticles"); + expect(procedureNames).toContain("createArticle"); + }); + + it("articleBySlug returns the article when present", async () => { + const now = new Date(); + await repo.createArticle({ + id: "1", + title: "T", + slug: "t", + content: null, + status: "draft", + authorId: "u1", + createdAt: now, + updatedAt: now, + }); + + const caller = blogRouter.createCaller({}); + const result = await caller.articleBySlug({ slug: "t" }); + expect(result?.id).toBe("1"); + }); + + it("listArticles returns all articles when no input is given", async () => { + const caller = blogRouter.createCaller({}); + const result = await caller.listArticles(); + expect(result).toEqual([]); + }); +}); diff --git a/packages/blog/src/integrations/api/router.ts b/packages/blog/src/integrations/api/router.ts new file mode 100644 index 0000000..a25bac8 --- /dev/null +++ b/packages/blog/src/integrations/api/router.ts @@ -0,0 +1,39 @@ +import { z } from "zod"; +import { router, publicProcedure } from "@repo/core-shared/trpc/init"; +import { + createArticleController, + getArticlesController, + getArticleBySlugController, +} from "@/interface-adapters/controllers/articles.controller"; + +export const blogRouter = router({ + articleBySlug: publicProcedure + .input(z.object({ slug: z.string().min(1) })) + .query(({ input }) => getArticleBySlugController(input)), + + listArticles: publicProcedure + .input( + z + .object({ + status: z.string().optional(), + authorId: z.string().optional(), + limit: z.number().optional(), + offset: z.number().optional(), + }) + .optional(), + ) + .query(({ input }) => getArticlesController(input ?? {})), + + createArticle: publicProcedure + .input( + z.object({ + title: z.string().min(1).max(255), + content: z.unknown().optional(), + authorId: z.string(), + slug: z.string().optional(), + }), + ) + .mutation(({ input }) => createArticleController(input)), +}); + +export type BlogRouter = typeof blogRouter; From 1ae170278639fb6778207a47ca1a4e81bb2d6ddd Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 22:34:43 +0200 Subject: [PATCH 043/129] feat(core-api): compose @repo/blog/api into appRouter under 'blog' namespace --- .../repositories/articles-repository.interface.ts | 2 +- .../use-cases/create-article.use-case.test.ts | 8 ++++---- .../use-cases/create-article.use-case.ts | 8 ++++---- .../use-cases/get-articles.use-case.test.ts | 8 ++++---- .../application/use-cases/get-articles.use-case.ts | 8 ++++---- packages/blog/src/di/container.test.ts | 4 ++-- packages/blog/src/di/module.ts | 4 ++-- .../repositories/mock-articles.repository.ts | 4 ++-- .../repositories/payload-articles.repository.ts | 4 ++-- packages/blog/src/integrations/api/router.test.ts | 8 ++++---- packages/blog/src/integrations/api/router.ts | 2 +- .../controllers/articles.controller.test.ts | 10 +++++----- .../controllers/articles.controller.ts | 14 +++++++------- packages/core-api/package.json | 1 + packages/core-api/src/root.ts | 5 ++++- pnpm-lock.yaml | 3 +++ 16 files changed, 50 insertions(+), 43 deletions(-) diff --git a/packages/blog/src/application/repositories/articles-repository.interface.ts b/packages/blog/src/application/repositories/articles-repository.interface.ts index 3678bb9..f059aa3 100644 --- a/packages/blog/src/application/repositories/articles-repository.interface.ts +++ b/packages/blog/src/application/repositories/articles-repository.interface.ts @@ -1,4 +1,4 @@ -import type { Article } from "@/entities/article"; +import type { Article } from "../../entities/article"; export interface IArticlesRepository { getArticle(id: string): Promise
; diff --git a/packages/blog/src/application/use-cases/create-article.use-case.test.ts b/packages/blog/src/application/use-cases/create-article.use-case.test.ts index 2cc7289..0387f3b 100644 --- a/packages/blog/src/application/use-cases/create-article.use-case.test.ts +++ b/packages/blog/src/application/use-cases/create-article.use-case.test.ts @@ -1,8 +1,8 @@ import { beforeEach, describe, expect, it } from "vitest"; -import { blogContainer } from "@/di/container"; -import { BLOG_SYMBOLS } from "@/di/symbols"; -import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; -import { MockArticlesRepository } from "@/infrastructure/repositories/mock-articles.repository"; +import { blogContainer } from "../../di/container"; +import { BLOG_SYMBOLS } from "../../di/symbols"; +import type { IArticlesRepository } from "../../application/repositories/articles-repository.interface"; +import { MockArticlesRepository } from "../../infrastructure/repositories/mock-articles.repository"; import { createArticleUseCase } from "./create-article.use-case"; describe("createArticleUseCase", () => { diff --git a/packages/blog/src/application/use-cases/create-article.use-case.ts b/packages/blog/src/application/use-cases/create-article.use-case.ts index e55565d..80f6066 100644 --- a/packages/blog/src/application/use-cases/create-article.use-case.ts +++ b/packages/blog/src/application/use-cases/create-article.use-case.ts @@ -1,7 +1,7 @@ -import type { Article } from "@/entities/article"; -import { blogContainer } from "@/di/container"; -import { BLOG_SYMBOLS } from "@/di/symbols"; -import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; +import type { Article } from "../../entities/article"; +import { blogContainer } from "../../di/container"; +import { BLOG_SYMBOLS } from "../../di/symbols"; +import type { IArticlesRepository } from "../repositories/articles-repository.interface"; function generateSlug(title: string): string { return title diff --git a/packages/blog/src/application/use-cases/get-articles.use-case.test.ts b/packages/blog/src/application/use-cases/get-articles.use-case.test.ts index 1807af4..f88b334 100644 --- a/packages/blog/src/application/use-cases/get-articles.use-case.test.ts +++ b/packages/blog/src/application/use-cases/get-articles.use-case.test.ts @@ -1,8 +1,8 @@ import { beforeEach, describe, expect, it } from "vitest"; -import { blogContainer } from "@/di/container"; -import { BLOG_SYMBOLS } from "@/di/symbols"; -import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; -import { MockArticlesRepository } from "@/infrastructure/repositories/mock-articles.repository"; +import { blogContainer } from "../../di/container"; +import { BLOG_SYMBOLS } from "../../di/symbols"; +import type { IArticlesRepository } from "../../application/repositories/articles-repository.interface"; +import { MockArticlesRepository } from "../../infrastructure/repositories/mock-articles.repository"; import { getArticlesUseCase } from "./get-articles.use-case"; describe("getArticlesUseCase", () => { diff --git a/packages/blog/src/application/use-cases/get-articles.use-case.ts b/packages/blog/src/application/use-cases/get-articles.use-case.ts index 8a8b70f..580b09c 100644 --- a/packages/blog/src/application/use-cases/get-articles.use-case.ts +++ b/packages/blog/src/application/use-cases/get-articles.use-case.ts @@ -1,7 +1,7 @@ -import type { Article } from "@/entities/article"; -import { blogContainer } from "@/di/container"; -import { BLOG_SYMBOLS } from "@/di/symbols"; -import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; +import type { Article } from "../../entities/article"; +import { blogContainer } from "../../di/container"; +import { BLOG_SYMBOLS } from "../../di/symbols"; +import type { IArticlesRepository } from "../repositories/articles-repository.interface"; export async function getArticlesUseCase(options?: { status?: string; diff --git a/packages/blog/src/di/container.test.ts b/packages/blog/src/di/container.test.ts index 8ccd394..49c9d88 100644 --- a/packages/blog/src/di/container.test.ts +++ b/packages/blog/src/di/container.test.ts @@ -2,8 +2,8 @@ import { afterEach, beforeEach, describe, expect, it } from "vitest"; import { blogContainer } from "./container"; import { BLOG_SYMBOLS } from "./symbols"; import { BlogModule } from "./module"; -import { MockArticlesRepository } from "@/infrastructure/repositories/mock-articles.repository"; -import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; +import { MockArticlesRepository } from "../infrastructure/repositories/mock-articles.repository"; +import type { IArticlesRepository } from "../application/repositories/articles-repository.interface"; describe("blogContainer", () => { beforeEach(() => { diff --git a/packages/blog/src/di/module.ts b/packages/blog/src/di/module.ts index 5bd4bcc..7634673 100644 --- a/packages/blog/src/di/module.ts +++ b/packages/blog/src/di/module.ts @@ -1,7 +1,7 @@ import { ContainerModule, type interfaces } from "inversify"; -import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; -import { MockArticlesRepository } from "@/infrastructure/repositories/mock-articles.repository"; +import type { IArticlesRepository } from "../application/repositories/articles-repository.interface"; +import { MockArticlesRepository } from "../infrastructure/repositories/mock-articles.repository"; import { BLOG_SYMBOLS } from "./symbols"; export const BlogModule = new ContainerModule((bind: interfaces.Bind) => { diff --git a/packages/blog/src/infrastructure/repositories/mock-articles.repository.ts b/packages/blog/src/infrastructure/repositories/mock-articles.repository.ts index 269e30b..50355f0 100644 --- a/packages/blog/src/infrastructure/repositories/mock-articles.repository.ts +++ b/packages/blog/src/infrastructure/repositories/mock-articles.repository.ts @@ -1,8 +1,8 @@ import "reflect-metadata"; import { injectable } from "inversify"; -import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; -import type { Article } from "@/entities/article"; +import type { IArticlesRepository } from "../../application/repositories/articles-repository.interface"; +import type { Article } from "../../entities/article"; @injectable() export class MockArticlesRepository implements IArticlesRepository { diff --git a/packages/blog/src/infrastructure/repositories/payload-articles.repository.ts b/packages/blog/src/infrastructure/repositories/payload-articles.repository.ts index da7912c..7c7f9a4 100644 --- a/packages/blog/src/infrastructure/repositories/payload-articles.repository.ts +++ b/packages/blog/src/infrastructure/repositories/payload-articles.repository.ts @@ -3,8 +3,8 @@ import { injectable } from "inversify"; import { getPayload } from "payload"; import type { SanitizedConfig } from "payload"; -import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; -import type { Article } from "@/entities/article"; +import type { IArticlesRepository } from "../../application/repositories/articles-repository.interface"; +import type { Article } from "../../entities/article"; type PayloadArticleDoc = { id: string | number; diff --git a/packages/blog/src/integrations/api/router.test.ts b/packages/blog/src/integrations/api/router.test.ts index 7bf8187..86faf1c 100644 --- a/packages/blog/src/integrations/api/router.test.ts +++ b/packages/blog/src/integrations/api/router.test.ts @@ -1,8 +1,8 @@ import { beforeEach, describe, expect, it } from "vitest"; -import { blogContainer } from "@/di/container"; -import { BLOG_SYMBOLS } from "@/di/symbols"; -import { MockArticlesRepository } from "@/infrastructure/repositories/mock-articles.repository"; -import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; +import { blogContainer } from "../../di/container"; +import { BLOG_SYMBOLS } from "../../di/symbols"; +import { MockArticlesRepository } from "../../infrastructure/repositories/mock-articles.repository"; +import type { IArticlesRepository } from "../../application/repositories/articles-repository.interface"; import { blogRouter } from "./router"; describe("blogRouter", () => { diff --git a/packages/blog/src/integrations/api/router.ts b/packages/blog/src/integrations/api/router.ts index a25bac8..ec0c6f2 100644 --- a/packages/blog/src/integrations/api/router.ts +++ b/packages/blog/src/integrations/api/router.ts @@ -4,7 +4,7 @@ import { createArticleController, getArticlesController, getArticleBySlugController, -} from "@/interface-adapters/controllers/articles.controller"; +} from "../../interface-adapters/controllers/articles.controller"; export const blogRouter = router({ articleBySlug: publicProcedure diff --git a/packages/blog/src/interface-adapters/controllers/articles.controller.test.ts b/packages/blog/src/interface-adapters/controllers/articles.controller.test.ts index 1e8940c..4550d46 100644 --- a/packages/blog/src/interface-adapters/controllers/articles.controller.test.ts +++ b/packages/blog/src/interface-adapters/controllers/articles.controller.test.ts @@ -1,9 +1,9 @@ import { beforeEach, describe, expect, it } from "vitest"; -import { blogContainer } from "@/di/container"; -import { BLOG_SYMBOLS } from "@/di/symbols"; -import { MockArticlesRepository } from "@/infrastructure/repositories/mock-articles.repository"; -import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; -import { InputParseError } from "@/entities/errors"; +import { blogContainer } from "../../di/container"; +import { BLOG_SYMBOLS } from "../../di/symbols"; +import { MockArticlesRepository } from "../../infrastructure/repositories/mock-articles.repository"; +import type { IArticlesRepository } from "../../application/repositories/articles-repository.interface"; +import { InputParseError } from "../../entities/errors"; import { createArticleController, getArticlesController, diff --git a/packages/blog/src/interface-adapters/controllers/articles.controller.ts b/packages/blog/src/interface-adapters/controllers/articles.controller.ts index 2aaefd8..2fc15ee 100644 --- a/packages/blog/src/interface-adapters/controllers/articles.controller.ts +++ b/packages/blog/src/interface-adapters/controllers/articles.controller.ts @@ -1,12 +1,12 @@ import { z } from "zod"; -import { InputParseError } from "@/entities/errors"; -import type { Article } from "@/entities/article"; -import { blogContainer } from "@/di/container"; -import { BLOG_SYMBOLS } from "@/di/symbols"; -import type { IArticlesRepository } from "@/application/repositories/articles-repository.interface"; -import { getArticlesUseCase } from "@/application/use-cases/get-articles.use-case"; -import { createArticleUseCase } from "@/application/use-cases/create-article.use-case"; +import { InputParseError } from "../../entities/errors"; +import type { Article } from "../../entities/article"; +import { blogContainer } from "../../di/container"; +import { BLOG_SYMBOLS } from "../../di/symbols"; +import type { IArticlesRepository } from "../../application/repositories/articles-repository.interface"; +import { getArticlesUseCase } from "../../application/use-cases/get-articles.use-case"; +import { createArticleUseCase } from "../../application/use-cases/create-article.use-case"; const createInputSchema = z.object({ title: z.string().min(1).max(255), diff --git a/packages/core-api/package.json b/packages/core-api/package.json index d0f7cad..d7cceb5 100644 --- a/packages/core-api/package.json +++ b/packages/core-api/package.json @@ -12,6 +12,7 @@ "typecheck": "tsc --noEmit" }, "dependencies": { + "@repo/blog": "workspace:*", "@repo/core-shared": "workspace:*", "@trpc/server": "^11.0.0" }, diff --git a/packages/core-api/src/root.ts b/packages/core-api/src/root.ts index 8e563d2..f940fe8 100644 --- a/packages/core-api/src/root.ts +++ b/packages/core-api/src/root.ts @@ -1,5 +1,8 @@ import { router } from "@repo/core-shared/trpc/init"; +import { blogRouter } from "@repo/blog/api"; -export const appRouter = router({}); +export const appRouter = router({ + blog: blogRouter, +}); export type AppRouter = typeof appRouter; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6c5a54f..3f2dc23 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -327,6 +327,9 @@ importers: packages/core-api: dependencies: + '@repo/blog': + specifier: workspace:* + version: link:../blog '@repo/core-shared': specifier: workspace:* version: link:../core-shared From 82ef7c9ef6f2ed060a30929b545255c94383ab7d Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 22:34:53 +0200 Subject: [PATCH 044/129] feat(blog): add ui/query.ts (framework-agnostic React Query option builders) --- packages/blog/src/ui/query.ts | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 packages/blog/src/ui/query.ts diff --git a/packages/blog/src/ui/query.ts b/packages/blog/src/ui/query.ts new file mode 100644 index 0000000..85c46b7 --- /dev/null +++ b/packages/blog/src/ui/query.ts @@ -0,0 +1,29 @@ +// React Query option builders for blog feature procedures. +// Consumed by apps via the @repo/core-trpc client (wired in Plan 5). + +type TrpcClient = { + blog: { + articleBySlug: { + queryOptions: (input: { slug: string }) => unknown; + }; + listArticles: { + queryOptions: (input?: { + status?: string; + authorId?: string; + limit?: number; + offset?: number; + }) => unknown; + }; + }; +}; + +export function articleBySlugQuery(client: TrpcClient, slug: string) { + return client.blog.articleBySlug.queryOptions({ slug }); +} + +export function listArticlesQuery( + client: TrpcClient, + options?: { status?: string; authorId?: string; limit?: number; offset?: number }, +) { + return client.blog.listArticles.queryOptions(options); +} From 87f43924be7ceead0316cd6b31aaa840be10bac4 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 22:35:01 +0200 Subject: [PATCH 045/129] feat(blog): wire root barrel (entity types + ui query helpers) --- packages/blog/src/index.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/blog/src/index.ts b/packages/blog/src/index.ts index cb0ff5c..b4f6235 100644 --- a/packages/blog/src/index.ts +++ b/packages/blog/src/index.ts @@ -1 +1,3 @@ -export {}; +export type { Article, ArticleStatus } from "./entities/article"; +export { ArticleNotFoundError, InputParseError } from "./entities/errors"; +export { articleBySlugQuery, listArticlesQuery } from "./ui/query"; From ed4d204a7eb8d03501d3d80c8dd38715e5a21a63 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 22:36:10 +0200 Subject: [PATCH 046/129] docs(plan-2): document relative-imports-in-source rule for feature packages Discovered during execution: when downstream packages like @repo/core-api typecheck and follow imports into a feature, they don't have the feature's @/ alias and fail with TS2307. Source files use relative imports; @/ is reserved for test files within the feature's own context. Co-Authored-By: Claude Opus 4.7 (1M context) --- docs/superpowers/plans/2026-05-04-plan-2-blog-feature.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/superpowers/plans/2026-05-04-plan-2-blog-feature.md b/docs/superpowers/plans/2026-05-04-plan-2-blog-feature.md index 392ea0e..08cfaae 100644 --- a/docs/superpowers/plans/2026-05-04-plan-2-blog-feature.md +++ b/docs/superpowers/plans/2026-05-04-plan-2-blog-feature.md @@ -138,7 +138,7 @@ The domain `Article.content` field is also widened: the existing entity has `con } ``` -> Note: `@/*` path alias is feature-local (resolves to `packages/blog/src/*`). This is the same pattern `packages/core/tsconfig.json` already uses. +> Note: `@/*` path alias is defined here for use in **test files** only. Source files inside `src/` should use **relative imports** (`../../entities/article` etc.). Reason: when a downstream package like `@repo/core-api` typechecks and follows imports into `@repo/blog`, it descends into blog's source files but doesn't have blog's `@/` alias in its own tsconfig — causing TS2307 errors. Relative imports in source files avoid this. Tests stay in `tests/` or alongside source where they use the same package context, so `@/` works there. Same convention applies to all feature packages in subsequent plans. - [ ] **Step 3: Create turbo.json** From 3e6f632c4bc094042e2ffc05cabdb292a646dc57 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 22:37:18 +0200 Subject: [PATCH 047/129] =?UTF-8?q?test(blog):=20add=20feature-level=20tes?= =?UTF-8?q?t=20exercising=20router=20=E2=86=92=20controller=20=E2=86=92=20?= =?UTF-8?q?use-case=20=E2=86=92=20repo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/blog/tests/articles.feature.test.ts | 56 ++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 packages/blog/tests/articles.feature.test.ts diff --git a/packages/blog/tests/articles.feature.test.ts b/packages/blog/tests/articles.feature.test.ts new file mode 100644 index 0000000..b9c0066 --- /dev/null +++ b/packages/blog/tests/articles.feature.test.ts @@ -0,0 +1,56 @@ +// Feature-level test: exercises the full slice +// tRPC procedure -> controller -> use-case -> mock repo +// without going through a network or the actual Payload Local API. +// Verifies that the layers are correctly wired through the per-feature DI container. + +import { beforeEach, describe, expect, it } from "vitest"; +import { blogContainer } from "../src/di/container"; +import { BLOG_SYMBOLS } from "../src/di/symbols"; +import { MockArticlesRepository } from "../src/infrastructure/repositories/mock-articles.repository"; +import type { IArticlesRepository } from "../src/application/repositories/articles-repository.interface"; +import { blogRouter } from "../src/integrations/api/router"; + +describe("blog feature: article-by-slug end-to-end", () => { + let repo: MockArticlesRepository; + + beforeEach(() => { + if (blogContainer.isBound(BLOG_SYMBOLS.IArticlesRepository)) { + blogContainer.unbind(BLOG_SYMBOLS.IArticlesRepository); + } + repo = new MockArticlesRepository(); + blogContainer + .bind(BLOG_SYMBOLS.IArticlesRepository) + .toConstantValue(repo); + }); + + it("creates an article via tRPC, then fetches it back by slug", async () => { + const caller = blogRouter.createCaller({}); + + const created = await caller.createArticle({ + title: "The Vertical Refactor", + content: { type: "doc", children: [] }, + authorId: "u1", + slug: "vertical-refactor", + }); + expect(created.id).toBeTruthy(); + expect(created.slug).toBe("vertical-refactor"); + + const fetched = await caller.articleBySlug({ slug: "vertical-refactor" }); + expect(fetched?.id).toBe(created.id); + expect(fetched?.title).toBe("The Vertical Refactor"); + }); + + it("listArticles filters by status", async () => { + const caller = blogRouter.createCaller({}); + await caller.createArticle({ + title: "Draft One", + content: null, + authorId: "u1", + }); + const draftOnly = await caller.listArticles({ status: "draft" }); + expect(draftOnly).toHaveLength(1); + + const publishedOnly = await caller.listArticles({ status: "published" }); + expect(publishedOnly).toHaveLength(0); + }); +}); From e217652a8768d0331f12981607913bec2c3545ae Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 00:27:25 +0200 Subject: [PATCH 048/129] fix(blog): remove rootDir constraint to allow tests/**/* inclusion in typecheck --- packages/blog/tsconfig.json | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/blog/tsconfig.json b/packages/blog/tsconfig.json index 4a2efe1..ee87524 100644 --- a/packages/blog/tsconfig.json +++ b/packages/blog/tsconfig.json @@ -2,7 +2,6 @@ "extends": "@repo/typescript-config/base.json", "compilerOptions": { "outDir": "dist", - "rootDir": "src", "lib": ["ES2022", "DOM"], "jsx": "preserve", "paths": { From 42ef78bcfde73eecd3ee4d003adaa27539ae0cdd Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 00:35:51 +0200 Subject: [PATCH 049/129] docs(plan): add Plan 3 (Auth + Media + restore blog relations) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 17 tasks: full auth feature canonical migration (entities, services, use-cases, DI with constructor-injected service, controllers, users collection, tRPC router); skeleton media feature (collection only); restore blog's author→users relation and featuredImage→media upload. Bakes in all Plan-2 lessons (vitest alias, no rootDir, relative imports in src, no @repo/core-cms in feature deps). Co-Authored-By: Claude Opus 4.7 (1M context) --- .../plans/2026-05-04-plan-3-auth-media.md | 1881 +++++++++++++++++ 1 file changed, 1881 insertions(+) create mode 100644 docs/superpowers/plans/2026-05-04-plan-3-auth-media.md diff --git a/docs/superpowers/plans/2026-05-04-plan-3-auth-media.md b/docs/superpowers/plans/2026-05-04-plan-3-auth-media.md new file mode 100644 index 0000000..4aadc7f --- /dev/null +++ b/docs/superpowers/plans/2026-05-04-plan-3-auth-media.md @@ -0,0 +1,1881 @@ +# Vertical Refactor — Plan 3: Auth + Media + Restore Blog Cross-Feature Relations + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. + +**Goal:** Migrate the existing `auth` domain (Users collection, sign-in/up/out flows) into a new `@repo/auth` feature package, migrate the Media collection into a new `@repo/media` feature package, and restore the cross-feature relationships in `@repo/blog/integrations/cms/collections/articles.ts` (`author` → relationship to users, `featuredImage` → upload to media). Demonstrates that the per-feature DI pattern + composition exception (`core-cms` aggregating multiple feature `/cms` exports) scales beyond one feature. + +**Architecture:** Two new feature packages following the canonical pattern proven in Plan 2. Auth has multiple use-cases, two services (auth, dropping the unused telemetry), and depends on InversifyJS constructor injection (auth service takes users repo). Media is minimal — collection + barrel only (no use-cases or DI yet; spec addendum v5 "no empty folders"). + +**Tech Stack:** Same as Plan 2. + +**Plan position:** Plan 3 of 6. +- Plan 1 ✅ Foundation +- Plan 2 ✅ Blog feature +- **Plan 3 (this doc):** Auth + Media + restore blog relations +- Plan 4: Marketing-pages + Navigation features +- Plan 5: App + UI integration (core-trpc client/providers, route handlers, example pages) +- Plan 6: Cleanup + boundary enforcement + Playwright + docs rewrite + +**Spec reference:** `docs/superpowers/specs/2026-04-21-vertical-monorepo-refactor-design.md` + +**Lessons from Plan 2 (apply throughout):** +1. **Vitest config**: each new feature's `vitest.config.ts` MUST include `resolve.alias: { "@": path.resolve(__dirname, "./src") }` — vitest doesn't read tsconfig paths. +2. **No `rootDir` in tsconfig**: removed in blog because `tests/**/*` is outside `src/`. Same for new features. +3. **Source files use relative imports** (NOT `@/`). `@/` reserved for test files within the feature's own context. Reason: when a downstream package typechecks and follows imports into the feature, it can't resolve the feature's `@/` alias. +4. **Payload-backed repos take `SanitizedConfig` via constructor**, NOT `import config from '@repo/core-cms'`. Avoids workspace cycle. Feature `package.json` does NOT depend on `@repo/core-cms`. App boot (Plan 5) supplies the config when binding the prod repo. +5. **`z.unknown()` in input schemas should be `.optional()`** — Zod treats `unknown` as accepting `undefined` anyway; explicit is more honest. + +--- + +## Decisions taken in this plan + +- **Drop `ITelemetryService`** — currently unused in any auth use-case. Spec addendum v5 says don't carry dead code. If telemetry is needed later, add it back via `core-shared/src/telemetry/` (cross-cutting concern, not auth-specific). +- **Auth domain entity stays `User { id, username, passwordHash }`** — the existing model. The Payload `Users` collection (with `email`, `displayName`, `role`) is a SEPARATE, parallel concept used for Payload admin login. The two are deliberately not wired in this plan; reconciling them is future work. The `author` relationship in blog points at the Payload Users collection (i.e., admin-side users), which is consistent with the existing template. +- **Media is a "skeleton-only" feature** — collection + barrel only. No entities/use-cases/repos yet. Add when something needs them. +- **Blog's `author` field becomes `relationship → users`** with `relationTo: "users"` (the Payload collection slug). Blog package doesn't import auth — relationship is by slug, satisfied at Payload runtime when both collections are registered in `core-cms`. + +--- + +## File Structure + +**Create — new `@repo/auth` package:** +- `packages/auth/{package.json,tsconfig.json,turbo.json,vitest.config.ts}` +- `packages/auth/src/index.ts` +- `packages/auth/src/config.ts` (SESSION_COOKIE constant) +- `packages/auth/src/entities/user.ts` + `user.test.ts` +- `packages/auth/src/entities/cookie.ts` +- `packages/auth/src/entities/session.ts` + `session.test.ts` +- `packages/auth/src/entities/errors.ts` +- `packages/auth/src/application/repositories/users-repository.interface.ts` +- `packages/auth/src/application/services/authentication-service.interface.ts` +- `packages/auth/src/application/use-cases/sign-in.use-case.ts` + `.test.ts` +- `packages/auth/src/application/use-cases/sign-up.use-case.ts` + `.test.ts` +- `packages/auth/src/application/use-cases/sign-out.use-case.ts` + `.test.ts` +- `packages/auth/src/infrastructure/repositories/mock-users.repository.ts` +- `packages/auth/src/infrastructure/services/mock-authentication.service.ts` +- `packages/auth/src/di/symbols.ts` +- `packages/auth/src/di/module.ts` +- `packages/auth/src/di/container.ts` + `container.test.ts` +- `packages/auth/src/interface-adapters/controllers/sign-in.controller.ts` + `.test.ts` +- `packages/auth/src/interface-adapters/controllers/sign-up.controller.ts` + `.test.ts` +- `packages/auth/src/interface-adapters/controllers/sign-out.controller.ts` + `.test.ts` +- `packages/auth/src/integrations/cms/collections/users.ts` +- `packages/auth/src/integrations/cms/index.ts` +- `packages/auth/src/integrations/api/router.ts` + `router.test.ts` +- `packages/auth/src/ui/query.ts` +- `packages/auth/tests/sign-in-flow.feature.test.ts` + +**Create — new `@repo/media` package:** +- `packages/media/{package.json,tsconfig.json,turbo.json}` +- `packages/media/src/index.ts` +- `packages/media/src/integrations/cms/collections/media.ts` +- `packages/media/src/integrations/cms/index.ts` + +**Modify:** +- `packages/blog/src/integrations/cms/collections/articles.ts` — restore `author: relationship → users`, add `featuredImage: upload → media` +- `packages/core-cms/src/payload.config.ts` — register `users`, `media` collections; depend on `@repo/auth` and `@repo/media` +- `packages/core-cms/package.json` — add `@repo/auth`, `@repo/media` +- `packages/core-api/src/root.ts` — add `auth: authRouter` to appRouter +- `packages/core-api/package.json` — add `@repo/auth` +- `tsconfig.base.json` — add `@repo/auth*`, `@repo/media*` aliases +- `apps/cms/package.json` — add `@repo/auth`, `@repo/media` (for schema visibility) + +--- + +## Phase A: Auth feature + +### Task 3.1: Scaffold @repo/auth package + +**Files:** `packages/auth/{package.json,tsconfig.json,turbo.json,vitest.config.ts,src/index.ts}` + path aliases. + +- [ ] **Step 1: Create `packages/auth/package.json`** + +```json +{ + "name": "@repo/auth", + "private": true, + "version": "0.0.0", + "type": "module", + "exports": { + ".": "./src/index.ts", + "./cms": "./src/integrations/cms/index.ts", + "./api": "./src/integrations/api/router.ts" + }, + "scripts": { + "build": "tsc --noEmit", + "lint": "eslint .", + "test": "vitest run --passWithNoTests", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@repo/core-shared": "workspace:*", + "@trpc/server": "^11.0.0", + "inversify": "^6.2.0", + "payload": "^3.14.0", + "reflect-metadata": "^0.2.2", + "zod": "^3.24.0" + }, + "devDependencies": { + "@repo/eslint-config": "workspace:*", + "@repo/typescript-config": "workspace:*", + "@types/node": "^22.0.0", + "vitest": "^3.1.0" + } +} +``` + +> Note: NO `@repo/core-cms` dep (cycle avoidance per Plan 2 lesson #4). + +- [ ] **Step 2: Create `packages/auth/tsconfig.json`** + +```json +{ + "extends": "@repo/typescript-config/base.json", + "compilerOptions": { + "outDir": "dist", + "lib": ["ES2022", "DOM"], + "jsx": "preserve", + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["src/**/*", "tests/**/*"], + "exclude": ["node_modules", "dist"] +} +``` + +> Note: NO `rootDir` (Plan 2 lesson #2). Path alias `@/` declared but only used in test files (Plan 2 lesson #3). + +- [ ] **Step 3: Create `packages/auth/turbo.json`** + +```json +{ + "extends": ["//"], + "tags": ["feature"] +} +``` + +- [ ] **Step 4: Create `packages/auth/vitest.config.ts`** + +```typescript +import path from "node:path"; +import { baseVitestConfig } from "@repo/typescript-config/vitest.base"; + +export default { + ...baseVitestConfig, + resolve: { + alias: { + "@": path.resolve(__dirname, "./src"), + }, + }, +}; +``` + +- [ ] **Step 5: Create `packages/auth/src/index.ts`** + +```typescript +export {}; +``` + +- [ ] **Step 6: Add path aliases to `tsconfig.base.json`** + +Add three lines inside `compilerOptions.paths`: + +```json +"@repo/auth": ["packages/auth/src/index.ts"], +"@repo/auth/cms": ["packages/auth/src/integrations/cms/index.ts"], +"@repo/auth/api": ["packages/auth/src/integrations/api/router.ts"] +``` + +- [ ] **Step 7: Install + verify** + +Run: `pnpm install` +Verify: `pnpm list --recursive --depth=-1 | grep "@repo/auth"` + +- [ ] **Step 8: Commit** + +```bash +git add packages/auth tsconfig.base.json pnpm-lock.yaml +git commit -m "feat(auth): scaffold empty package with feature tag + path aliases" +``` + +--- + +### Task 3.2: Auth entities (User, Cookie, Session, errors) + tests + +**Files:** `packages/auth/src/entities/{user.ts,cookie.ts,session.ts,errors.ts}` + tests, `packages/auth/src/config.ts`. + +- [ ] **Step 1: Write `packages/auth/src/entities/user.test.ts`** + +```typescript +import { describe, expect, it } from "vitest"; +import { userSchema } from "./user"; + +describe("userSchema", () => { + it("accepts a valid user", () => { + const result = userSchema.parse({ + id: "1", + username: "alice", + passwordHash: "hashed_password_1", + }); + expect(result.username).toBe("alice"); + }); + + it("rejects username shorter than 3 chars", () => { + expect(() => + userSchema.parse({ + id: "1", + username: "ab", + passwordHash: "hashed_password_1", + }), + ).toThrow(); + }); + + it("rejects passwordHash shorter than 6 chars", () => { + expect(() => + userSchema.parse({ + id: "1", + username: "alice", + passwordHash: "abc", + }), + ).toThrow(); + }); +}); +``` + +- [ ] **Step 2: Run — expect failure** + +Run: `cd packages/auth && pnpm vitest run src/entities/user.test.ts` +Expected: FAIL — Cannot find module './user'. + +- [ ] **Step 3: Implement `packages/auth/src/entities/user.ts`** + +```typescript +import { z } from "zod"; + +export const userSchema = z.object({ + id: z.string(), + username: z.string().min(3).max(31), + passwordHash: z.string().min(6).max(255), +}); + +export type User = z.infer; +``` + +- [ ] **Step 4: Implement `packages/auth/src/entities/cookie.ts`** + +```typescript +type CookieAttributes = { + secure?: boolean; + path?: string; + domain?: string; + sameSite?: "lax" | "strict" | "none"; + httpOnly?: boolean; + maxAge?: number; + expires?: Date; +}; + +export type Cookie = { + name: string; + value: string; + attributes: CookieAttributes; +}; +``` + +- [ ] **Step 5: Write `packages/auth/src/entities/session.test.ts`** + +```typescript +import { describe, expect, it } from "vitest"; +import { sessionSchema } from "./session"; + +describe("sessionSchema", () => { + it("accepts a valid session", () => { + const result = sessionSchema.parse({ + id: "session_1", + userId: "1", + expiresAt: new Date(), + }); + expect(result.userId).toBe("1"); + }); + + it("rejects non-Date expiresAt", () => { + expect(() => + sessionSchema.parse({ + id: "session_1", + userId: "1", + expiresAt: "2026-05-04", + }), + ).toThrow(); + }); +}); +``` + +- [ ] **Step 6: Implement `packages/auth/src/entities/session.ts`** + +```typescript +import { z } from "zod"; + +export const sessionSchema = z.object({ + id: z.string(), + userId: z.string(), + expiresAt: z.date(), +}); + +export type Session = z.infer; +``` + +- [ ] **Step 7: Implement `packages/auth/src/entities/errors.ts`** + +```typescript +export class AuthenticationError extends Error { + constructor(message: string, options?: ErrorOptions) { + super(message, options); + } +} + +export class UnauthenticatedError extends Error { + constructor(message: string, options?: ErrorOptions) { + super(message, options); + } +} + +export class UnauthorizedError extends Error { + constructor(message: string, options?: ErrorOptions) { + super(message, options); + } +} + +export class InputParseError extends Error { + constructor(message: string, options?: ErrorOptions) { + super(message, options); + } +} +``` + +- [ ] **Step 8: Implement `packages/auth/src/config.ts`** + +```typescript +export const SESSION_COOKIE = "session"; +``` + +- [ ] **Step 9: Run all entity tests — expect 5 PASS** + +Run: `cd packages/auth && pnpm vitest run src/entities` +Expected: 5 tests pass (user 3 + session 2). + +- [ ] **Step 10: Commit** + +```bash +git add packages/auth/src/entities packages/auth/src/config.ts +git commit -m "feat(auth): add User, Cookie, Session entities + errors + config" +``` + +--- + +### Task 3.3: Auth application interfaces (repository + service) + +- [ ] **Step 1: Create `packages/auth/src/application/repositories/users-repository.interface.ts`** + +```typescript +import type { User } from "../../entities/user"; + +export interface IUsersRepository { + getUser(id: string): Promise; + getUserByUsername(username: string): Promise; + createUser(input: User): Promise; +} +``` + +- [ ] **Step 2: Create `packages/auth/src/application/services/authentication-service.interface.ts`** + +```typescript +import type { Cookie } from "../../entities/cookie"; +import type { Session } from "../../entities/session"; +import type { User } from "../../entities/user"; + +export interface IAuthenticationService { + generateUserId(): string; + hashPassword(password: string): Promise; + verifyPassword(hash: string, password: string): Promise; + validateSession( + sessionId: string, + ): Promise<{ user: User; session: Session }>; + createSession(user: User): Promise<{ session: Session; cookie: Cookie }>; + invalidateSession(sessionId: string): Promise<{ blankCookie: Cookie }>; +} +``` + +- [ ] **Step 3: Verify compiles** + +Run: `cd packages/auth && pnpm typecheck` +Expected: PASS. + +- [ ] **Step 4: Commit** + +```bash +git add packages/auth/src/application +git commit -m "feat(auth): add IUsersRepository + IAuthenticationService interfaces" +``` + +--- + +### Task 3.4: Auth use-cases (sign-in, sign-up, sign-out) + tests + +**Files:** 3 use-case files + 3 test files. Tests will be RED until DI container lands in Task 3.7. + +- [ ] **Step 1: Create test `packages/auth/src/application/use-cases/sign-in.use-case.test.ts`** + +```typescript +import { beforeEach, describe, expect, it } from "vitest"; +import { authContainer } from "@/di/container"; +import { AUTH_SYMBOLS } from "@/di/symbols"; +import { MockUsersRepository } from "@/infrastructure/repositories/mock-users.repository"; +import { MockAuthenticationService } from "@/infrastructure/services/mock-authentication.service"; +import type { IUsersRepository } from "@/application/repositories/users-repository.interface"; +import type { IAuthenticationService } from "@/application/services/authentication-service.interface"; +import { AuthenticationError } from "@/entities/errors"; +import { signInUseCase } from "./sign-in.use-case"; + +describe("signInUseCase", () => { + let usersRepo: MockUsersRepository; + let authService: MockAuthenticationService; + + beforeEach(() => { + if (authContainer.isBound(AUTH_SYMBOLS.IUsersRepository)) { + authContainer.unbind(AUTH_SYMBOLS.IUsersRepository); + } + if (authContainer.isBound(AUTH_SYMBOLS.IAuthenticationService)) { + authContainer.unbind(AUTH_SYMBOLS.IAuthenticationService); + } + usersRepo = new MockUsersRepository(); + authService = new MockAuthenticationService(usersRepo); + authContainer + .bind(AUTH_SYMBOLS.IUsersRepository) + .toConstantValue(usersRepo); + authContainer + .bind(AUTH_SYMBOLS.IAuthenticationService) + .toConstantValue(authService); + }); + + it("returns a session + cookie on valid credentials", async () => { + const result = await signInUseCase({ + username: "alice", + password: "password_alice", + }); + expect(result.session.userId).toBe("1"); + expect(result.cookie.name).toBe("session"); + }); + + it("throws AuthenticationError when user does not exist", async () => { + await expect( + signInUseCase({ username: "ghost", password: "anything" }), + ).rejects.toBeInstanceOf(AuthenticationError); + }); + + it("throws AuthenticationError on wrong password", async () => { + await expect( + signInUseCase({ username: "alice", password: "wrong" }), + ).rejects.toBeInstanceOf(AuthenticationError); + }); +}); +``` + +- [ ] **Step 2: Implement `packages/auth/src/application/use-cases/sign-in.use-case.ts`** + +```typescript +import { AuthenticationError } from "../../entities/errors"; +import type { Cookie } from "../../entities/cookie"; +import type { Session } from "../../entities/session"; +import { authContainer } from "../../di/container"; +import { AUTH_SYMBOLS } from "../../di/symbols"; +import type { IUsersRepository } from "../repositories/users-repository.interface"; +import type { IAuthenticationService } from "../services/authentication-service.interface"; + +export async function signInUseCase(input: { + username: string; + password: string; +}): Promise<{ session: Session; cookie: Cookie }> { + const usersRepository = authContainer.get( + AUTH_SYMBOLS.IUsersRepository, + ); + const authService = authContainer.get( + AUTH_SYMBOLS.IAuthenticationService, + ); + + const existingUser = await usersRepository.getUserByUsername(input.username); + if (!existingUser) { + throw new AuthenticationError("User does not exist"); + } + + const validPassword = await authService.verifyPassword( + existingUser.passwordHash, + input.password, + ); + if (!validPassword) { + throw new AuthenticationError("Incorrect username or password"); + } + + return await authService.createSession(existingUser); +} +``` + +- [ ] **Step 3: Commit (test RED until 3.7)** + +```bash +git add packages/auth/src/application/use-cases/sign-in.use-case.ts packages/auth/src/application/use-cases/sign-in.use-case.test.ts +git commit -m "feat(auth): add signInUseCase (test red until DI lands)" +``` + +- [ ] **Step 4: Create test `packages/auth/src/application/use-cases/sign-up.use-case.test.ts`** + +```typescript +import { beforeEach, describe, expect, it } from "vitest"; +import { authContainer } from "@/di/container"; +import { AUTH_SYMBOLS } from "@/di/symbols"; +import { MockUsersRepository } from "@/infrastructure/repositories/mock-users.repository"; +import { MockAuthenticationService } from "@/infrastructure/services/mock-authentication.service"; +import type { IUsersRepository } from "@/application/repositories/users-repository.interface"; +import type { IAuthenticationService } from "@/application/services/authentication-service.interface"; +import { AuthenticationError } from "@/entities/errors"; +import { signUpUseCase } from "./sign-up.use-case"; + +describe("signUpUseCase", () => { + let usersRepo: MockUsersRepository; + let authService: MockAuthenticationService; + + beforeEach(() => { + if (authContainer.isBound(AUTH_SYMBOLS.IUsersRepository)) { + authContainer.unbind(AUTH_SYMBOLS.IUsersRepository); + } + if (authContainer.isBound(AUTH_SYMBOLS.IAuthenticationService)) { + authContainer.unbind(AUTH_SYMBOLS.IAuthenticationService); + } + usersRepo = new MockUsersRepository(); + authService = new MockAuthenticationService(usersRepo); + authContainer + .bind(AUTH_SYMBOLS.IUsersRepository) + .toConstantValue(usersRepo); + authContainer + .bind(AUTH_SYMBOLS.IAuthenticationService) + .toConstantValue(authService); + }); + + it("creates a new user and returns session + cookie + user", async () => { + const result = await signUpUseCase({ + username: "carol", + password: "secret_password", + }); + expect(result.user.username).toBe("carol"); + expect(result.session.userId).toBe(result.user.id); + expect(result.cookie.name).toBe("session"); + }); + + it("throws AuthenticationError when username taken", async () => { + await expect( + signUpUseCase({ username: "alice", password: "secret_password" }), + ).rejects.toBeInstanceOf(AuthenticationError); + }); +}); +``` + +- [ ] **Step 5: Implement `packages/auth/src/application/use-cases/sign-up.use-case.ts`** + +```typescript +import { AuthenticationError } from "../../entities/errors"; +import type { Cookie } from "../../entities/cookie"; +import type { Session } from "../../entities/session"; +import type { User } from "../../entities/user"; +import { authContainer } from "../../di/container"; +import { AUTH_SYMBOLS } from "../../di/symbols"; +import type { IUsersRepository } from "../repositories/users-repository.interface"; +import type { IAuthenticationService } from "../services/authentication-service.interface"; + +export async function signUpUseCase(input: { + username: string; + password: string; +}): Promise<{ + session: Session; + cookie: Cookie; + user: Pick; +}> { + const usersRepository = authContainer.get( + AUTH_SYMBOLS.IUsersRepository, + ); + const authService = authContainer.get( + AUTH_SYMBOLS.IAuthenticationService, + ); + + const existingUser = await usersRepository.getUserByUsername(input.username); + if (existingUser) { + throw new AuthenticationError("Username taken"); + } + + const passwordHash = await authService.hashPassword(input.password); + const userId = authService.generateUserId(); + + const newUser = await usersRepository.createUser({ + id: userId, + username: input.username, + passwordHash, + }); + + const { cookie, session } = await authService.createSession(newUser); + + return { + cookie, + session, + user: { id: newUser.id, username: newUser.username }, + }; +} +``` + +- [ ] **Step 6: Commit (test RED)** + +```bash +git add packages/auth/src/application/use-cases/sign-up.use-case.ts packages/auth/src/application/use-cases/sign-up.use-case.test.ts +git commit -m "feat(auth): add signUpUseCase (test red until DI lands)" +``` + +- [ ] **Step 7: Create test `packages/auth/src/application/use-cases/sign-out.use-case.test.ts`** + +```typescript +import { beforeEach, describe, expect, it } from "vitest"; +import { authContainer } from "@/di/container"; +import { AUTH_SYMBOLS } from "@/di/symbols"; +import { MockUsersRepository } from "@/infrastructure/repositories/mock-users.repository"; +import { MockAuthenticationService } from "@/infrastructure/services/mock-authentication.service"; +import type { IUsersRepository } from "@/application/repositories/users-repository.interface"; +import type { IAuthenticationService } from "@/application/services/authentication-service.interface"; +import { signOutUseCase } from "./sign-out.use-case"; + +describe("signOutUseCase", () => { + let usersRepo: MockUsersRepository; + let authService: MockAuthenticationService; + + beforeEach(() => { + if (authContainer.isBound(AUTH_SYMBOLS.IUsersRepository)) { + authContainer.unbind(AUTH_SYMBOLS.IUsersRepository); + } + if (authContainer.isBound(AUTH_SYMBOLS.IAuthenticationService)) { + authContainer.unbind(AUTH_SYMBOLS.IAuthenticationService); + } + usersRepo = new MockUsersRepository(); + authService = new MockAuthenticationService(usersRepo); + authContainer + .bind(AUTH_SYMBOLS.IUsersRepository) + .toConstantValue(usersRepo); + authContainer + .bind(AUTH_SYMBOLS.IAuthenticationService) + .toConstantValue(authService); + }); + + it("returns a blank cookie", async () => { + const result = await signOutUseCase("session_1"); + expect(result.blankCookie.name).toBe("session"); + expect(result.blankCookie.value).toBe(""); + }); +}); +``` + +- [ ] **Step 8: Implement `packages/auth/src/application/use-cases/sign-out.use-case.ts`** + +```typescript +import type { Cookie } from "../../entities/cookie"; +import { authContainer } from "../../di/container"; +import { AUTH_SYMBOLS } from "../../di/symbols"; +import type { IAuthenticationService } from "../services/authentication-service.interface"; + +export async function signOutUseCase( + sessionId: string, +): Promise<{ blankCookie: Cookie }> { + const authService = authContainer.get( + AUTH_SYMBOLS.IAuthenticationService, + ); + return await authService.invalidateSession(sessionId); +} +``` + +- [ ] **Step 9: Commit** + +```bash +git add packages/auth/src/application/use-cases/sign-out.use-case.ts packages/auth/src/application/use-cases/sign-out.use-case.test.ts +git commit -m "feat(auth): add signOutUseCase (test red until DI lands)" +``` + +--- + +### Task 3.5: Mock users repository + +- [ ] **Step 1: Create `packages/auth/src/infrastructure/repositories/mock-users.repository.ts`** + +```typescript +import "reflect-metadata"; +import { injectable } from "inversify"; + +import type { IUsersRepository } from "../../application/repositories/users-repository.interface"; +import type { User } from "../../entities/user"; + +@injectable() +export class MockUsersRepository implements IUsersRepository { + private _users: User[] = [ + { id: "1", username: "alice", passwordHash: "hashed_password_alice" }, + { id: "2", username: "bob", passwordHash: "hashed_password_bob" }, + ]; + + async getUser(id: string): Promise { + return this._users.find((u) => u.id === id); + } + + async getUserByUsername(username: string): Promise { + return this._users.find((u) => u.username === username); + } + + async createUser(input: User): Promise { + this._users.push(input); + return input; + } +} +``` + +- [ ] **Step 2: Verify compiles** + +Run: `cd packages/auth && pnpm typecheck` +Expected: PASS. + +- [ ] **Step 3: Commit** + +```bash +git add packages/auth/src/infrastructure/repositories +git commit -m "feat(auth): add MockUsersRepository with seed users" +``` + +--- + +### Task 3.6: Mock authentication service + +- [ ] **Step 1: Create `packages/auth/src/infrastructure/services/mock-authentication.service.ts`** + +```typescript +import "reflect-metadata"; +import { inject, injectable } from "inversify"; + +import type { IAuthenticationService } from "../../application/services/authentication-service.interface"; +import type { IUsersRepository } from "../../application/repositories/users-repository.interface"; +import { UnauthenticatedError } from "../../entities/errors"; +import { sessionSchema, type Session } from "../../entities/session"; +import type { Cookie } from "../../entities/cookie"; +import type { User } from "../../entities/user"; +import { AUTH_SYMBOLS } from "../../di/symbols"; +import { SESSION_COOKIE } from "../../config"; + +@injectable() +export class MockAuthenticationService implements IAuthenticationService { + private _sessions: Record = {}; + + constructor( + @inject(AUTH_SYMBOLS.IUsersRepository) + private _usersRepository: IUsersRepository, + ) {} + + generateUserId(): string { + return (Math.random() + 1).toString(36).substring(7); + } + + async hashPassword(password: string): Promise { + return `hashed_${password}`; + } + + async verifyPassword(hash: string, password: string): Promise { + return hash === `hashed_${password}`; + } + + async validateSession( + sessionId: string, + ): Promise<{ user: User; session: Session }> { + const result = this._sessions[sessionId]; + if (!result) { + throw new UnauthenticatedError("Unauthenticated"); + } + const user = await this._usersRepository.getUser(result.user.id); + if (!user) { + throw new UnauthenticatedError("Unauthenticated"); + } + return { user, session: result.session }; + } + + async createSession( + user: User, + ): Promise<{ session: Session; cookie: Cookie }> { + const session = sessionSchema.parse({ + id: "session_" + user.id, + userId: user.id, + expiresAt: new Date(Date.now() + 86400000 * 7), + }); + const cookie: Cookie = { + name: SESSION_COOKIE, + value: session.id, + attributes: {}, + }; + this._sessions[session.id] = { session, user }; + return { session, cookie }; + } + + async invalidateSession( + sessionId: string, + ): Promise<{ blankCookie: Cookie }> { + delete this._sessions[sessionId]; + return { + blankCookie: { name: SESSION_COOKIE, value: "", attributes: {} }, + }; + } +} +``` + +- [ ] **Step 2: Verify compiles** + +Run: `cd packages/auth && pnpm typecheck` +Expected: PASS. + +- [ ] **Step 3: Commit** + +```bash +git add packages/auth/src/infrastructure/services +git commit -m "feat(auth): add MockAuthenticationService with constructor-injected users repo" +``` + +--- + +### Task 3.7: Per-feature DI container (symbols, module, container) + test + +- [ ] **Step 1: Write `packages/auth/src/di/container.test.ts`** + +```typescript +import { afterEach, beforeEach, describe, expect, it } from "vitest"; +import { authContainer } from "./container"; +import { AUTH_SYMBOLS } from "./symbols"; +import { AuthModule } from "./module"; +import { MockUsersRepository } from "@/infrastructure/repositories/mock-users.repository"; +import { MockAuthenticationService } from "@/infrastructure/services/mock-authentication.service"; +import type { IUsersRepository } from "@/application/repositories/users-repository.interface"; +import type { IAuthenticationService } from "@/application/services/authentication-service.interface"; + +describe("authContainer", () => { + beforeEach(() => { + authContainer.unbindAll(); + authContainer.load(AuthModule); + }); + + afterEach(() => { + authContainer.unbindAll(); + }); + + it("resolves IUsersRepository to MockUsersRepository by default", () => { + const repo = authContainer.get( + AUTH_SYMBOLS.IUsersRepository, + ); + expect(repo).toBeInstanceOf(MockUsersRepository); + }); + + it("resolves IAuthenticationService to MockAuthenticationService by default", () => { + const service = authContainer.get( + AUTH_SYMBOLS.IAuthenticationService, + ); + expect(service).toBeInstanceOf(MockAuthenticationService); + }); + + it("authentication service receives users repository via constructor injection", async () => { + const service = authContainer.get( + AUTH_SYMBOLS.IAuthenticationService, + ); + // The service should be able to validate against the seeded users + const { session, cookie } = await service.createSession({ + id: "1", + username: "alice", + passwordHash: "hashed_password_alice", + }); + expect(session.userId).toBe("1"); + expect(cookie.value).toBe(session.id); + + // After session creation, validateSession should resolve user via the repo + const validated = await service.validateSession(session.id); + expect(validated.user.username).toBe("alice"); + }); +}); +``` + +- [ ] **Step 2: Implement `packages/auth/src/di/symbols.ts`** + +```typescript +export const AUTH_SYMBOLS = { + IUsersRepository: Symbol.for("auth:IUsersRepository"), + IAuthenticationService: Symbol.for("auth:IAuthenticationService"), +} as const; +``` + +- [ ] **Step 3: Implement `packages/auth/src/di/module.ts`** + +```typescript +import { ContainerModule, type interfaces } from "inversify"; + +import type { IUsersRepository } from "../application/repositories/users-repository.interface"; +import type { IAuthenticationService } from "../application/services/authentication-service.interface"; +import { MockUsersRepository } from "../infrastructure/repositories/mock-users.repository"; +import { MockAuthenticationService } from "../infrastructure/services/mock-authentication.service"; +import { AUTH_SYMBOLS } from "./symbols"; + +export const AuthModule = new ContainerModule((bind: interfaces.Bind) => { + bind(AUTH_SYMBOLS.IUsersRepository).to(MockUsersRepository); + bind(AUTH_SYMBOLS.IAuthenticationService).to( + MockAuthenticationService, + ); +}); +``` + +- [ ] **Step 4: Implement `packages/auth/src/di/container.ts`** + +```typescript +import "reflect-metadata"; +import { Container } from "inversify"; +import { AuthModule } from "./module"; + +export const authContainer = new Container({ defaultScope: "Singleton" }); +authContainer.load(AuthModule); +``` + +- [ ] **Step 5: Run container test — expect 3 PASS** + +Run: `cd packages/auth && pnpm vitest run src/di/container.test.ts` +Expected: PASS — 3 tests. + +- [ ] **Step 6: Run previously-RED use-case tests — expect 6 PASS** + +Run: `cd packages/auth && pnpm vitest run src/application/use-cases` +Expected: PASS — 6 tests (sign-in 3 + sign-up 2 + sign-out 1). + +- [ ] **Step 7: Commit** + +```bash +git add packages/auth/src/di +git commit -m "feat(auth): add per-feature InversifyJS container with constructor-injected service" +``` + +--- + +### Task 3.8: Auth controllers + tests + +- [ ] **Step 1: Write test `packages/auth/src/interface-adapters/controllers/sign-in.controller.test.ts`** + +```typescript +import { beforeEach, describe, expect, it } from "vitest"; +import { authContainer } from "@/di/container"; +import { AUTH_SYMBOLS } from "@/di/symbols"; +import { MockUsersRepository } from "@/infrastructure/repositories/mock-users.repository"; +import { MockAuthenticationService } from "@/infrastructure/services/mock-authentication.service"; +import type { IUsersRepository } from "@/application/repositories/users-repository.interface"; +import type { IAuthenticationService } from "@/application/services/authentication-service.interface"; +import { InputParseError } from "@/entities/errors"; +import { signInController } from "./sign-in.controller"; + +describe("signInController", () => { + let usersRepo: MockUsersRepository; + let authService: MockAuthenticationService; + + beforeEach(() => { + if (authContainer.isBound(AUTH_SYMBOLS.IUsersRepository)) { + authContainer.unbind(AUTH_SYMBOLS.IUsersRepository); + } + if (authContainer.isBound(AUTH_SYMBOLS.IAuthenticationService)) { + authContainer.unbind(AUTH_SYMBOLS.IAuthenticationService); + } + usersRepo = new MockUsersRepository(); + authService = new MockAuthenticationService(usersRepo); + authContainer + .bind(AUTH_SYMBOLS.IUsersRepository) + .toConstantValue(usersRepo); + authContainer + .bind(AUTH_SYMBOLS.IAuthenticationService) + .toConstantValue(authService); + }); + + it("returns a cookie on valid credentials", async () => { + const cookie = await signInController({ + username: "alice", + password: "password_alice", + }); + expect(cookie.name).toBe("session"); + }); + + it("throws InputParseError on missing username", async () => { + await expect( + signInController({ password: "anything" }), + ).rejects.toBeInstanceOf(InputParseError); + }); + + it("throws InputParseError on too-short password", async () => { + await expect( + signInController({ username: "alice", password: "abc" }), + ).rejects.toBeInstanceOf(InputParseError); + }); +}); +``` + +- [ ] **Step 2: Implement `packages/auth/src/interface-adapters/controllers/sign-in.controller.ts`** + +```typescript +import { z } from "zod"; + +import { InputParseError } from "../../entities/errors"; +import type { Cookie } from "../../entities/cookie"; +import { signInUseCase } from "../../application/use-cases/sign-in.use-case"; + +const inputSchema = z.object({ + username: z.string().min(3).max(31), + password: z.string().min(6).max(255), +}); + +export async function signInController( + input: Partial>, +): Promise { + const parsed = inputSchema.safeParse(input); + if (!parsed.success) { + throw new InputParseError("Invalid sign-in input", { cause: parsed.error }); + } + const { cookie } = await signInUseCase(parsed.data); + return cookie; +} +``` + +- [ ] **Step 3: Run — expect 3 PASS** + +Run: `cd packages/auth && pnpm vitest run src/interface-adapters/controllers/sign-in.controller.test.ts` +Expected: PASS — 3 tests. + +- [ ] **Step 4: Write test `packages/auth/src/interface-adapters/controllers/sign-up.controller.test.ts`** + +```typescript +import { beforeEach, describe, expect, it } from "vitest"; +import { authContainer } from "@/di/container"; +import { AUTH_SYMBOLS } from "@/di/symbols"; +import { MockUsersRepository } from "@/infrastructure/repositories/mock-users.repository"; +import { MockAuthenticationService } from "@/infrastructure/services/mock-authentication.service"; +import type { IUsersRepository } from "@/application/repositories/users-repository.interface"; +import type { IAuthenticationService } from "@/application/services/authentication-service.interface"; +import { InputParseError } from "@/entities/errors"; +import { signUpController } from "./sign-up.controller"; + +describe("signUpController", () => { + let usersRepo: MockUsersRepository; + let authService: MockAuthenticationService; + + beforeEach(() => { + if (authContainer.isBound(AUTH_SYMBOLS.IUsersRepository)) { + authContainer.unbind(AUTH_SYMBOLS.IUsersRepository); + } + if (authContainer.isBound(AUTH_SYMBOLS.IAuthenticationService)) { + authContainer.unbind(AUTH_SYMBOLS.IAuthenticationService); + } + usersRepo = new MockUsersRepository(); + authService = new MockAuthenticationService(usersRepo); + authContainer + .bind(AUTH_SYMBOLS.IUsersRepository) + .toConstantValue(usersRepo); + authContainer + .bind(AUTH_SYMBOLS.IAuthenticationService) + .toConstantValue(authService); + }); + + it("creates a new user when passwords match", async () => { + const result = await signUpController({ + username: "carol", + password: "secret_password", + confirmPassword: "secret_password", + }); + expect(result.user.username).toBe("carol"); + }); + + it("throws InputParseError when passwords do not match", async () => { + await expect( + signUpController({ + username: "dave", + password: "secret_password", + confirmPassword: "different_password", + }), + ).rejects.toBeInstanceOf(InputParseError); + }); +}); +``` + +- [ ] **Step 5: Implement `packages/auth/src/interface-adapters/controllers/sign-up.controller.ts`** + +```typescript +import { z } from "zod"; + +import { InputParseError } from "../../entities/errors"; +import { signUpUseCase } from "../../application/use-cases/sign-up.use-case"; + +const inputSchema = z + .object({ + username: z.string().min(3).max(31), + password: z.string().min(6).max(255), + confirmPassword: z.string().min(6).max(255), + }) + .superRefine(({ password, confirmPassword }, ctx) => { + if (confirmPassword !== password) { + ctx.addIssue({ + code: "custom", + message: "The passwords did not match", + path: ["password"], + }); + ctx.addIssue({ + code: "custom", + message: "The passwords did not match", + path: ["confirmPassword"], + }); + } + }); + +export async function signUpController( + input: Partial>, +): Promise> { + const parsed = inputSchema.safeParse(input); + if (!parsed.success) { + throw new InputParseError("Invalid sign-up input", { cause: parsed.error }); + } + return await signUpUseCase(parsed.data); +} +``` + +- [ ] **Step 6: Run — expect 2 PASS** + +Run: `cd packages/auth && pnpm vitest run src/interface-adapters/controllers/sign-up.controller.test.ts` +Expected: PASS — 2 tests. + +- [ ] **Step 7: Write test `packages/auth/src/interface-adapters/controllers/sign-out.controller.test.ts`** + +```typescript +import { beforeEach, describe, expect, it } from "vitest"; +import { authContainer } from "@/di/container"; +import { AUTH_SYMBOLS } from "@/di/symbols"; +import { MockUsersRepository } from "@/infrastructure/repositories/mock-users.repository"; +import { MockAuthenticationService } from "@/infrastructure/services/mock-authentication.service"; +import type { IUsersRepository } from "@/application/repositories/users-repository.interface"; +import type { IAuthenticationService } from "@/application/services/authentication-service.interface"; +import { InputParseError } from "@/entities/errors"; +import { signOutController } from "./sign-out.controller"; + +describe("signOutController", () => { + beforeEach(() => { + if (authContainer.isBound(AUTH_SYMBOLS.IUsersRepository)) { + authContainer.unbind(AUTH_SYMBOLS.IUsersRepository); + } + if (authContainer.isBound(AUTH_SYMBOLS.IAuthenticationService)) { + authContainer.unbind(AUTH_SYMBOLS.IAuthenticationService); + } + const usersRepo = new MockUsersRepository(); + const authService = new MockAuthenticationService(usersRepo); + authContainer + .bind(AUTH_SYMBOLS.IUsersRepository) + .toConstantValue(usersRepo); + authContainer + .bind(AUTH_SYMBOLS.IAuthenticationService) + .toConstantValue(authService); + }); + + it("returns a blank cookie", async () => { + const cookie = await signOutController("session_anything"); + expect(cookie.name).toBe("session"); + expect(cookie.value).toBe(""); + }); + + it("throws InputParseError when sessionId is missing", async () => { + await expect(signOutController(undefined)).rejects.toBeInstanceOf( + InputParseError, + ); + }); +}); +``` + +- [ ] **Step 8: Implement `packages/auth/src/interface-adapters/controllers/sign-out.controller.ts`** + +```typescript +import { InputParseError } from "../../entities/errors"; +import type { Cookie } from "../../entities/cookie"; +import { signOutUseCase } from "../../application/use-cases/sign-out.use-case"; + +export async function signOutController( + sessionId: string | undefined, +): Promise { + if (!sessionId) { + throw new InputParseError("Must provide a session ID"); + } + const { blankCookie } = await signOutUseCase(sessionId); + return blankCookie; +} +``` + +- [ ] **Step 9: Run — expect 2 PASS** + +Run: `cd packages/auth && pnpm vitest run src/interface-adapters/controllers/sign-out.controller.test.ts` +Expected: PASS — 2 tests. + +- [ ] **Step 10: Single commit for all 3 controllers** + +```bash +git add packages/auth/src/interface-adapters +git commit -m "feat(auth): add sign-in/sign-up/sign-out controllers with Zod validation" +``` + +--- + +### Task 3.9: Auth CMS integration (Users collection) + +- [ ] **Step 1: Create `packages/auth/src/integrations/cms/collections/users.ts`** + +```typescript +import type { CollectionConfig } from "payload"; + +export const users: CollectionConfig = { + slug: "users", + auth: true, + admin: { + useAsTitle: "email", + }, + fields: [ + { + name: "displayName", + type: "text", + }, + { + name: "role", + type: "select", + options: [ + { label: "Admin", value: "admin" }, + { label: "Editor", value: "editor" }, + { label: "Author", value: "author" }, + ], + defaultValue: "author", + required: true, + }, + ], +}; +``` + +> Note: This is the Payload-managed admin auth collection. It is intentionally separate from the domain `User` entity (id/username/passwordHash) used by the auth feature's use-cases. Reconciling the two is future work; for now they coexist. + +- [ ] **Step 2: Create `packages/auth/src/integrations/cms/index.ts`** + +```typescript +export { users } from "./collections/users"; +``` + +- [ ] **Step 3: Verify compiles** + +Run: `cd packages/auth && pnpm typecheck` +Expected: PASS. + +- [ ] **Step 4: Commit** + +```bash +git add packages/auth/src/integrations/cms +git commit -m "feat(auth): add users collection with role + displayName fields" +``` + +--- + +### Task 3.10: Auth API integration (tRPC router) + tests + +- [ ] **Step 1: Write test `packages/auth/src/integrations/api/router.test.ts`** + +```typescript +import { beforeEach, describe, expect, it } from "vitest"; +import { authContainer } from "@/di/container"; +import { AUTH_SYMBOLS } from "@/di/symbols"; +import { MockUsersRepository } from "@/infrastructure/repositories/mock-users.repository"; +import { MockAuthenticationService } from "@/infrastructure/services/mock-authentication.service"; +import type { IUsersRepository } from "@/application/repositories/users-repository.interface"; +import type { IAuthenticationService } from "@/application/services/authentication-service.interface"; +import { authRouter } from "./router"; + +describe("authRouter", () => { + beforeEach(() => { + if (authContainer.isBound(AUTH_SYMBOLS.IUsersRepository)) { + authContainer.unbind(AUTH_SYMBOLS.IUsersRepository); + } + if (authContainer.isBound(AUTH_SYMBOLS.IAuthenticationService)) { + authContainer.unbind(AUTH_SYMBOLS.IAuthenticationService); + } + const usersRepo = new MockUsersRepository(); + const authService = new MockAuthenticationService(usersRepo); + authContainer + .bind(AUTH_SYMBOLS.IUsersRepository) + .toConstantValue(usersRepo); + authContainer + .bind(AUTH_SYMBOLS.IAuthenticationService) + .toConstantValue(authService); + }); + + it("exposes signIn, signUp, signOut procedures", () => { + const names = Object.keys(authRouter._def.procedures); + expect(names).toContain("signIn"); + expect(names).toContain("signUp"); + expect(names).toContain("signOut"); + }); + + it("signIn returns a cookie", async () => { + const caller = authRouter.createCaller({}); + const result = await caller.signIn({ + username: "alice", + password: "password_alice", + }); + expect(result.name).toBe("session"); + }); +}); +``` + +- [ ] **Step 2: Implement `packages/auth/src/integrations/api/router.ts`** + +```typescript +import { z } from "zod"; +import { router, publicProcedure } from "@repo/core-shared/trpc/init"; +import { signInController } from "../../interface-adapters/controllers/sign-in.controller"; +import { signUpController } from "../../interface-adapters/controllers/sign-up.controller"; +import { signOutController } from "../../interface-adapters/controllers/sign-out.controller"; + +export const authRouter = router({ + signIn: publicProcedure + .input( + z.object({ + username: z.string().min(3).max(31), + password: z.string().min(6).max(255), + }), + ) + .mutation(({ input }) => signInController(input)), + + signUp: publicProcedure + .input( + z.object({ + username: z.string().min(3).max(31), + password: z.string().min(6).max(255), + confirmPassword: z.string().min(6).max(255), + }), + ) + .mutation(({ input }) => signUpController(input)), + + signOut: publicProcedure + .input(z.object({ sessionId: z.string() })) + .mutation(({ input }) => signOutController(input.sessionId)), +}); + +export type AuthRouter = typeof authRouter; +``` + +- [ ] **Step 3: Run — expect 2 PASS** + +Run: `cd packages/auth && pnpm vitest run src/integrations/api/router.test.ts` +Expected: PASS — 2 tests. + +- [ ] **Step 4: Commit** + +```bash +git add packages/auth/src/integrations/api +git commit -m "feat(auth): add tRPC router with signIn + signUp + signOut" +``` + +--- + +### Task 3.11: ui/query.ts (placeholder for Plan 5 consumers) + barrel + +- [ ] **Step 1: Create `packages/auth/src/ui/query.ts`** + +```typescript +// React Query option builders for auth feature procedures. +// Sign-in/up/out are mutations — no query options needed. +// This file is intentionally minimal; expand if read procedures get added. + +export {}; +``` + +- [ ] **Step 2: Replace `packages/auth/src/index.ts` with public surface** + +```typescript +export type { User } from "./entities/user"; +export type { Session } from "./entities/session"; +export type { Cookie } from "./entities/cookie"; +export { + AuthenticationError, + UnauthenticatedError, + UnauthorizedError, + InputParseError, +} from "./entities/errors"; +export { SESSION_COOKIE } from "./config"; +``` + +- [ ] **Step 3: Verify compiles** + +Run: `cd packages/auth && pnpm typecheck` +Expected: PASS. + +- [ ] **Step 4: Commit** + +```bash +git add packages/auth/src/ui packages/auth/src/index.ts +git commit -m "feat(auth): wire root barrel + ui/query stub" +``` + +--- + +### Task 3.12: Auth feature-level test + +- [ ] **Step 1: Create `packages/auth/tests/sign-in-flow.feature.test.ts`** + +```typescript +// Feature-level test: sign-up, then sign-in with the new credentials, then sign-out. + +import { beforeEach, describe, expect, it } from "vitest"; +import { authContainer } from "../src/di/container"; +import { AUTH_SYMBOLS } from "../src/di/symbols"; +import { MockUsersRepository } from "../src/infrastructure/repositories/mock-users.repository"; +import { MockAuthenticationService } from "../src/infrastructure/services/mock-authentication.service"; +import type { IUsersRepository } from "../src/application/repositories/users-repository.interface"; +import type { IAuthenticationService } from "../src/application/services/authentication-service.interface"; +import { authRouter } from "../src/integrations/api/router"; + +describe("auth feature: sign-up → sign-in → sign-out", () => { + beforeEach(() => { + if (authContainer.isBound(AUTH_SYMBOLS.IUsersRepository)) { + authContainer.unbind(AUTH_SYMBOLS.IUsersRepository); + } + if (authContainer.isBound(AUTH_SYMBOLS.IAuthenticationService)) { + authContainer.unbind(AUTH_SYMBOLS.IAuthenticationService); + } + const usersRepo = new MockUsersRepository(); + const authService = new MockAuthenticationService(usersRepo); + authContainer + .bind(AUTH_SYMBOLS.IUsersRepository) + .toConstantValue(usersRepo); + authContainer + .bind(AUTH_SYMBOLS.IAuthenticationService) + .toConstantValue(authService); + }); + + it("a new user can sign up, then sign in, then sign out", async () => { + const caller = authRouter.createCaller({}); + + const signUpResult = await caller.signUp({ + username: "newperson", + password: "verysecret", + confirmPassword: "verysecret", + }); + expect(signUpResult.user.username).toBe("newperson"); + const userId = signUpResult.user.id; + + const signInCookie = await caller.signIn({ + username: "newperson", + password: "verysecret", + }); + expect(signInCookie.value).toBe("session_" + userId); + + const signOutResult = await caller.signOut({ + sessionId: signInCookie.value, + }); + expect(signOutResult.value).toBe(""); + }); +}); +``` + +- [ ] **Step 2: Run** + +Run: `cd packages/auth && pnpm vitest run tests/` +Expected: PASS — 1 test. + +- [ ] **Step 3: Commit** + +```bash +git add packages/auth/tests +git commit -m "test(auth): add feature test for sign-up → sign-in → sign-out flow" +``` + +--- + +## Phase B: Media feature (skeleton-only) + +### Task 3.13: Scaffold @repo/media package + +- [ ] **Step 1: Create `packages/media/package.json`** + +```json +{ + "name": "@repo/media", + "private": true, + "version": "0.0.0", + "type": "module", + "exports": { + ".": "./src/index.ts", + "./cms": "./src/integrations/cms/index.ts" + }, + "scripts": { + "build": "tsc --noEmit", + "lint": "eslint .", + "test": "vitest run --passWithNoTests", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "payload": "^3.14.0" + }, + "devDependencies": { + "@repo/eslint-config": "workspace:*", + "@repo/typescript-config": "workspace:*", + "vitest": "^3.1.0" + } +} +``` + +> Note: NO `./api` export — media has no tRPC procedures yet (no use-cases). Add when needed. + +- [ ] **Step 2: Create `packages/media/tsconfig.json`** + +```json +{ + "extends": "@repo/typescript-config/base.json", + "compilerOptions": { + "outDir": "dist", + "lib": ["ES2022", "DOM"] + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} +``` + +- [ ] **Step 3: Create `packages/media/turbo.json`** + +```json +{ + "extends": ["//"], + "tags": ["feature"] +} +``` + +- [ ] **Step 4: Create `packages/media/src/integrations/cms/collections/media.ts`** + +```typescript +import type { CollectionConfig } from "payload"; + +export const media: CollectionConfig = { + slug: "media", + upload: { + mimeTypes: ["image/*", "application/pdf"], + }, + admin: { + useAsTitle: "filename", + }, + fields: [ + { + name: "alt", + type: "text", + required: true, + }, + ], +}; +``` + +- [ ] **Step 5: Create `packages/media/src/integrations/cms/index.ts`** + +```typescript +export { media } from "./collections/media"; +``` + +- [ ] **Step 6: Create `packages/media/src/index.ts`** + +```typescript +export {}; +``` + +- [ ] **Step 7: Add path aliases to `tsconfig.base.json`** + +Add to `compilerOptions.paths`: + +```json +"@repo/media": ["packages/media/src/index.ts"], +"@repo/media/cms": ["packages/media/src/integrations/cms/index.ts"] +``` + +- [ ] **Step 8: Install + verify** + +Run: `pnpm install` then `pnpm typecheck --filter @repo/media` +Expected: PASS. + +- [ ] **Step 9: Commit** + +```bash +git add packages/media tsconfig.base.json pnpm-lock.yaml +git commit -m "feat(media): scaffold feature package with media collection only" +``` + +--- + +## Phase C: Compose into core-cms + core-api, restore blog cross-feature relations + +### Task 3.14: Wire users + media into core-cms + +- [ ] **Step 1: Add `@repo/auth` and `@repo/media` to `packages/core-cms/package.json`** + +Edit `dependencies` block — add both lines: + +```json +"@repo/auth": "workspace:*", +"@repo/media": "workspace:*", +``` + +- [ ] **Step 2: Replace `packages/core-cms/src/payload.config.ts`** + +```typescript +import { buildConfig } from "payload"; +import { postgresAdapter } from "@payloadcms/db-postgres"; +import { lexicalEditor } from "@payloadcms/richtext-lexical"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +import { users } from "@repo/auth/cms"; +import { articles } from "@repo/blog/cms"; +import { media } from "@repo/media/cms"; + +const filename = fileURLToPath(import.meta.url); +const dirname = path.dirname(filename); + +export default buildConfig({ + editor: lexicalEditor(), + collections: [users, articles, media], + globals: [], + secret: process.env.PAYLOAD_SECRET || "default-secret-change-me", + db: postgresAdapter({ + pool: { + connectionString: + process.env.DATABASE_URL || + "postgresql://postgres:postgres@localhost:5432/template", + }, + }), + typescript: { + outputFile: path.resolve(dirname, "generated-types.ts"), + }, +}); +``` + +- [ ] **Step 3: Install + typecheck** + +Run: `pnpm install` then `pnpm typecheck --filter @repo/core-cms` +Expected: PASS. + +- [ ] **Step 4: Commit** + +```bash +git add packages/core-cms pnpm-lock.yaml +git commit -m "feat(core-cms): compose users + media into payload config alongside articles" +``` + +--- + +### Task 3.15: Restore blog's author + featuredImage relations + +- [ ] **Step 1: Replace `packages/blog/src/integrations/cms/collections/articles.ts`** + +```typescript +import type { CollectionConfig } from "payload"; +import { slugifyIfMissing } from "@repo/core-shared/payload"; + +export const articles: CollectionConfig = { + slug: "articles", + admin: { + useAsTitle: "title", + defaultColumns: ["title", "status", "author", "updatedAt"], + }, + hooks: { + beforeChange: [slugifyIfMissing], + }, + versions: { + drafts: true, + }, + fields: [ + { + name: "title", + type: "text", + required: true, + maxLength: 255, + }, + { + name: "slug", + type: "text", + unique: true, + admin: { + position: "sidebar", + description: "Auto-generated from title if left empty", + }, + }, + { + name: "content", + type: "richText", + }, + { + name: "status", + type: "select", + options: [ + { label: "Draft", value: "draft" }, + { label: "Published", value: "published" }, + ], + defaultValue: "draft", + required: true, + admin: { + position: "sidebar", + }, + }, + { + name: "author", + type: "relationship", + relationTo: "users", + required: true, + admin: { + position: "sidebar", + }, + }, + { + name: "featuredImage", + type: "upload", + relationTo: "media", + }, + { + name: "publishedAt", + type: "date", + admin: { + position: "sidebar", + date: { + pickerAppearance: "dayAndTime", + }, + }, + }, + ], +}; +``` + +> Note: `relationTo: "users"` and `relationTo: "media"` are slug references — they don't require importing `@repo/auth` or `@repo/media` from blog. Payload resolves them at runtime by looking up the collection slug in the assembled config. + +- [ ] **Step 2: Verify blog still compiles + tests pass** + +Run: `cd packages/blog && pnpm typecheck && pnpm test` +Expected: PASS — 26 tests. + +- [ ] **Step 3: Commit** + +```bash +git add packages/blog/src/integrations/cms/collections/articles.ts +git commit -m "feat(blog): restore author relationship → users + featuredImage upload → media" +``` + +--- + +### Task 3.16: Wire authRouter into core-api + +- [ ] **Step 1: Add `@repo/auth` to `packages/core-api/package.json`** + +Add inside `dependencies`: + +```json +"@repo/auth": "workspace:*", +``` + +- [ ] **Step 2: Replace `packages/core-api/src/root.ts`** + +```typescript +import { router } from "@repo/core-shared/trpc/init"; +import { authRouter } from "@repo/auth/api"; +import { blogRouter } from "@repo/blog/api"; + +export const appRouter = router({ + auth: authRouter, + blog: blogRouter, +}); + +export type AppRouter = typeof appRouter; +``` + +- [ ] **Step 3: Install + typecheck** + +Run: `pnpm install` then `pnpm typecheck --filter @repo/core-api --filter @repo/auth` +Expected: BOTH PASS. + +- [ ] **Step 4: Commit** + +```bash +git add packages/core-api pnpm-lock.yaml +git commit -m "feat(core-api): compose @repo/auth/api into appRouter under 'auth' namespace" +``` + +--- + +### Task 3.17: Final verification + apps/cms boot smoke + +- [ ] **Step 1: Run all tests** + +Run: `pnpm test --filter @repo/auth --filter @repo/blog --filter @repo/core-shared` +Expected: PASS. Auth: ~14 tests (entities 5 + DI container 3 + use-cases 6 + controllers 7 + router 2 + feature 1 = 24 — check actual count). Blog: 26. Core-shared: 26. + +- [ ] **Step 2: Repo-wide typecheck** + +Run: `pnpm typecheck` +Expected: PASS for blog, auth, media, core-shared, core-cms, core-api, core-trpc, core-ui, cms, cms-core. PRE-EXISTING failures remain in `@repo/api` and `@repo/ui`. + +- [ ] **Step 3: Boot apps/cms admin smoke test** + +Postgres: `docker ps | grep postgres` — should be running. + +Start cms in background: +```bash +pnpm dev --filter @repo/cms & +DEV_PID=$! +sleep 15 +``` + +Test endpoints: +```bash +curl -sf -o /dev/null -w "%{http_code}\n" http://localhost:3001/admin +curl -sf -o /dev/null -w "%{http_code}\n" http://localhost:3001/admin/collections/articles +curl -sf -o /dev/null -w "%{http_code}\n" http://localhost:3001/admin/collections/users +curl -sf -o /dev/null -w "%{http_code}\n" http://localhost:3001/admin/collections/media +``` +Expected: ALL return `200`. + +> Note: Payload may again offer schema push (drop article fields not in current config or add new user/media tables). Smoke test only cares about 200 responses; kill dev server after. + +Kill: `kill $DEV_PID 2>/dev/null; pkill -f "next.*3001" 2>/dev/null` + +- [ ] **Step 4: Regenerate types** + +Run: `cd apps/cms && pnpm generate:types` + +Verify both Articles + Users + Media types are present: +```bash +cd /Users/danijel/Documents/Projects/template-vertical/.worktrees/vertical-refactor +grep -c "Article\|User\|Media" packages/core-cms/src/generated-types.ts +``` +Expected: count >= 10 (multiple references each). + +- [ ] **Step 5: Commit regenerated types if changed** + +```bash +git add packages/core-cms/src/generated-types.ts +git diff --cached --quiet || git commit -m "feat(core-cms): regenerate types — now includes Articles, Users, Media" +``` + +--- + +## Plan 3 Done Criteria + +- [ ] All auth tests pass (~24 tests in `@repo/auth`) +- [ ] All blog tests pass (26) +- [ ] Media compiles (no tests yet — skeleton only) +- [ ] `apps/cms` admin serves all four endpoints (`/admin`, `/admin/collections/articles`, `/users`, `/media`) with 200 +- [ ] `pnpm generate:types` produces a `generated-types.ts` containing Articles + Users + Media +- [ ] `core-cms/src/payload.config.ts` registers `users`, `articles`, `media` collections +- [ ] `core-api/src/root.ts` exposes both `auth.*` and `blog.*` namespaces +- [ ] Blog's `articles.ts` has `author: relationship → users` and `featuredImage: upload → media` +- [ ] No deletions yet (old `packages/core/src/entities/models/user.ts` etc. still exist — drained in Plan 6) + +**Next plan:** Plan 4 — Marketing-pages + Navigation features. Adds the `pages` collection (with `featuredImage` relation to media), the `header` global, and the `siteSettings` global. No new cross-feature dependencies; should be quicker than Plan 3 since the patterns are well-established. From 54dc9d33d5f37da0589f72917e9776314db03e88 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 00:37:13 +0200 Subject: [PATCH 050/129] feat(auth): scaffold empty package with feature tag + path aliases --- packages/auth/package.json | 31 +++++++++++++++++++++++++++++++ packages/auth/src/index.ts | 1 + packages/auth/tsconfig.json | 13 +++++++++++++ packages/auth/turbo.json | 4 ++++ packages/auth/vitest.config.ts | 11 +++++++++++ pnpm-lock.yaml | 34 ++++++++++++++++++++++++++++++++++ tsconfig.base.json | 5 ++++- 7 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 packages/auth/package.json create mode 100644 packages/auth/src/index.ts create mode 100644 packages/auth/tsconfig.json create mode 100644 packages/auth/turbo.json create mode 100644 packages/auth/vitest.config.ts diff --git a/packages/auth/package.json b/packages/auth/package.json new file mode 100644 index 0000000..03dad97 --- /dev/null +++ b/packages/auth/package.json @@ -0,0 +1,31 @@ +{ + "name": "@repo/auth", + "private": true, + "version": "0.0.0", + "type": "module", + "exports": { + ".": "./src/index.ts", + "./cms": "./src/integrations/cms/index.ts", + "./api": "./src/integrations/api/router.ts" + }, + "scripts": { + "build": "tsc --noEmit", + "lint": "eslint .", + "test": "vitest run --passWithNoTests", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@repo/core-shared": "workspace:*", + "@trpc/server": "^11.0.0", + "inversify": "^6.2.0", + "payload": "^3.14.0", + "reflect-metadata": "^0.2.2", + "zod": "^3.24.0" + }, + "devDependencies": { + "@repo/eslint-config": "workspace:*", + "@repo/typescript-config": "workspace:*", + "@types/node": "^22.0.0", + "vitest": "^3.1.0" + } +} diff --git a/packages/auth/src/index.ts b/packages/auth/src/index.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/packages/auth/src/index.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/auth/tsconfig.json b/packages/auth/tsconfig.json new file mode 100644 index 0000000..ee87524 --- /dev/null +++ b/packages/auth/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "@repo/typescript-config/base.json", + "compilerOptions": { + "outDir": "dist", + "lib": ["ES2022", "DOM"], + "jsx": "preserve", + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["src/**/*", "tests/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/auth/turbo.json b/packages/auth/turbo.json new file mode 100644 index 0000000..8a1d41a --- /dev/null +++ b/packages/auth/turbo.json @@ -0,0 +1,4 @@ +{ + "extends": ["//"], + "tags": ["feature"] +} diff --git a/packages/auth/vitest.config.ts b/packages/auth/vitest.config.ts new file mode 100644 index 0000000..dfa8265 --- /dev/null +++ b/packages/auth/vitest.config.ts @@ -0,0 +1,11 @@ +import path from "node:path"; +import { baseVitestConfig } from "@repo/typescript-config/vitest.base"; + +export default { + ...baseVitestConfig, + resolve: { + alias: { + "@": path.resolve(__dirname, "./src"), + }, + }, +}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3f2dc23..1ae23b4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -228,6 +228,40 @@ importers: specifier: ^19.0.0 version: 19.2.14 + packages/auth: + dependencies: + '@repo/core-shared': + specifier: workspace:* + version: link:../core-shared + '@trpc/server': + specifier: ^11.0.0 + version: 11.16.0(typescript@5.9.3) + inversify: + specifier: ^6.2.0 + version: 6.2.2(reflect-metadata@0.2.2) + payload: + specifier: ^3.14.0 + version: 3.81.0(graphql@16.13.2)(typescript@5.9.3) + reflect-metadata: + specifier: ^0.2.2 + version: 0.2.2 + zod: + specifier: ^3.24.0 + version: 3.25.76 + devDependencies: + '@repo/eslint-config': + specifier: workspace:* + version: link:../eslint-config + '@repo/typescript-config': + specifier: workspace:* + version: link:../typescript-config + '@types/node': + specifier: ^22.0.0 + version: 22.19.17 + vitest: + specifier: ^3.1.0 + version: 3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(happy-dom@20.8.9)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(tsx@4.21.0) + packages/blog: dependencies: '@repo/core-shared': diff --git a/tsconfig.base.json b/tsconfig.base.json index efd80f9..ff4ceba 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -14,7 +14,10 @@ "@repo/blog/api": ["packages/blog/src/integrations/api/router.ts"], "@repo/core-api": ["packages/core-api/src/index.ts"], "@repo/core-trpc": ["packages/core-trpc/src/index.ts"], - "@repo/core-ui": ["packages/core-ui/src/index.ts"] + "@repo/core-ui": ["packages/core-ui/src/index.ts"], + "@repo/auth": ["packages/auth/src/index.ts"], + "@repo/auth/cms": ["packages/auth/src/integrations/cms/index.ts"], + "@repo/auth/api": ["packages/auth/src/integrations/api/router.ts"] } } } From ceffd05063a35d0c92a87885d8b251a0dd9c703a Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 00:38:49 +0200 Subject: [PATCH 051/129] feat(auth): add User, Cookie, Session entities + errors + config --- packages/auth/src/config.ts | 1 + packages/auth/src/entities/cookie.ts | 15 ++++++++++ packages/auth/src/entities/errors.ts | 23 +++++++++++++++ packages/auth/src/entities/session.test.ts | 23 +++++++++++++++ packages/auth/src/entities/session.ts | 9 ++++++ packages/auth/src/entities/user.test.ts | 33 ++++++++++++++++++++++ packages/auth/src/entities/user.ts | 9 ++++++ 7 files changed, 113 insertions(+) create mode 100644 packages/auth/src/config.ts create mode 100644 packages/auth/src/entities/cookie.ts create mode 100644 packages/auth/src/entities/errors.ts create mode 100644 packages/auth/src/entities/session.test.ts create mode 100644 packages/auth/src/entities/session.ts create mode 100644 packages/auth/src/entities/user.test.ts create mode 100644 packages/auth/src/entities/user.ts diff --git a/packages/auth/src/config.ts b/packages/auth/src/config.ts new file mode 100644 index 0000000..c438fb3 --- /dev/null +++ b/packages/auth/src/config.ts @@ -0,0 +1 @@ +export const SESSION_COOKIE = "session"; diff --git a/packages/auth/src/entities/cookie.ts b/packages/auth/src/entities/cookie.ts new file mode 100644 index 0000000..f3dfa4a --- /dev/null +++ b/packages/auth/src/entities/cookie.ts @@ -0,0 +1,15 @@ +type CookieAttributes = { + secure?: boolean; + path?: string; + domain?: string; + sameSite?: "lax" | "strict" | "none"; + httpOnly?: boolean; + maxAge?: number; + expires?: Date; +}; + +export type Cookie = { + name: string; + value: string; + attributes: CookieAttributes; +}; diff --git a/packages/auth/src/entities/errors.ts b/packages/auth/src/entities/errors.ts new file mode 100644 index 0000000..285bc0f --- /dev/null +++ b/packages/auth/src/entities/errors.ts @@ -0,0 +1,23 @@ +export class AuthenticationError extends Error { + constructor(message: string, options?: ErrorOptions) { + super(message, options); + } +} + +export class UnauthenticatedError extends Error { + constructor(message: string, options?: ErrorOptions) { + super(message, options); + } +} + +export class UnauthorizedError extends Error { + constructor(message: string, options?: ErrorOptions) { + super(message, options); + } +} + +export class InputParseError extends Error { + constructor(message: string, options?: ErrorOptions) { + super(message, options); + } +} diff --git a/packages/auth/src/entities/session.test.ts b/packages/auth/src/entities/session.test.ts new file mode 100644 index 0000000..39c86be --- /dev/null +++ b/packages/auth/src/entities/session.test.ts @@ -0,0 +1,23 @@ +import { describe, expect, it } from "vitest"; +import { sessionSchema } from "./session"; + +describe("sessionSchema", () => { + it("accepts a valid session", () => { + const result = sessionSchema.parse({ + id: "session_1", + userId: "1", + expiresAt: new Date(), + }); + expect(result.userId).toBe("1"); + }); + + it("rejects non-Date expiresAt", () => { + expect(() => + sessionSchema.parse({ + id: "session_1", + userId: "1", + expiresAt: "2026-05-04", + }), + ).toThrow(); + }); +}); diff --git a/packages/auth/src/entities/session.ts b/packages/auth/src/entities/session.ts new file mode 100644 index 0000000..cedf8a9 --- /dev/null +++ b/packages/auth/src/entities/session.ts @@ -0,0 +1,9 @@ +import { z } from "zod"; + +export const sessionSchema = z.object({ + id: z.string(), + userId: z.string(), + expiresAt: z.date(), +}); + +export type Session = z.infer; diff --git a/packages/auth/src/entities/user.test.ts b/packages/auth/src/entities/user.test.ts new file mode 100644 index 0000000..b2911c2 --- /dev/null +++ b/packages/auth/src/entities/user.test.ts @@ -0,0 +1,33 @@ +import { describe, expect, it } from "vitest"; +import { userSchema } from "./user"; + +describe("userSchema", () => { + it("accepts a valid user", () => { + const result = userSchema.parse({ + id: "1", + username: "alice", + passwordHash: "hashed_password_1", + }); + expect(result.username).toBe("alice"); + }); + + it("rejects username shorter than 3 chars", () => { + expect(() => + userSchema.parse({ + id: "1", + username: "ab", + passwordHash: "hashed_password_1", + }), + ).toThrow(); + }); + + it("rejects passwordHash shorter than 6 chars", () => { + expect(() => + userSchema.parse({ + id: "1", + username: "alice", + passwordHash: "abc", + }), + ).toThrow(); + }); +}); diff --git a/packages/auth/src/entities/user.ts b/packages/auth/src/entities/user.ts new file mode 100644 index 0000000..3de2240 --- /dev/null +++ b/packages/auth/src/entities/user.ts @@ -0,0 +1,9 @@ +import { z } from "zod"; + +export const userSchema = z.object({ + id: z.string(), + username: z.string().min(3).max(31), + passwordHash: z.string().min(6).max(255), +}); + +export type User = z.infer; From 95e80ef62c3c9d048659ec9237942eeaab9c8b4b Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 00:39:01 +0200 Subject: [PATCH 052/129] feat(auth): add IUsersRepository + IAuthenticationService interfaces --- .../repositories/users-repository.interface.ts | 7 +++++++ .../services/authentication-service.interface.ts | 14 ++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 packages/auth/src/application/repositories/users-repository.interface.ts create mode 100644 packages/auth/src/application/services/authentication-service.interface.ts diff --git a/packages/auth/src/application/repositories/users-repository.interface.ts b/packages/auth/src/application/repositories/users-repository.interface.ts new file mode 100644 index 0000000..9e03e0a --- /dev/null +++ b/packages/auth/src/application/repositories/users-repository.interface.ts @@ -0,0 +1,7 @@ +import type { User } from "../../entities/user"; + +export interface IUsersRepository { + getUser(id: string): Promise; + getUserByUsername(username: string): Promise; + createUser(input: User): Promise; +} diff --git a/packages/auth/src/application/services/authentication-service.interface.ts b/packages/auth/src/application/services/authentication-service.interface.ts new file mode 100644 index 0000000..0e5f873 --- /dev/null +++ b/packages/auth/src/application/services/authentication-service.interface.ts @@ -0,0 +1,14 @@ +import type { Cookie } from "../../entities/cookie"; +import type { Session } from "../../entities/session"; +import type { User } from "../../entities/user"; + +export interface IAuthenticationService { + generateUserId(): string; + hashPassword(password: string): Promise; + verifyPassword(hash: string, password: string): Promise; + validateSession( + sessionId: string, + ): Promise<{ user: User; session: Session }>; + createSession(user: User): Promise<{ session: Session; cookie: Cookie }>; + invalidateSession(sessionId: string): Promise<{ blankCookie: Cookie }>; +} From bc430ea5a0b6839c30a642314b5f193c422ea175 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 00:39:11 +0200 Subject: [PATCH 053/129] feat(auth): add signInUseCase (test red until DI lands) --- .../use-cases/sign-in.use-case.test.ts | 52 +++++++++++++++++++ .../application/use-cases/sign-in.use-case.ts | 34 ++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 packages/auth/src/application/use-cases/sign-in.use-case.test.ts create mode 100644 packages/auth/src/application/use-cases/sign-in.use-case.ts diff --git a/packages/auth/src/application/use-cases/sign-in.use-case.test.ts b/packages/auth/src/application/use-cases/sign-in.use-case.test.ts new file mode 100644 index 0000000..df07299 --- /dev/null +++ b/packages/auth/src/application/use-cases/sign-in.use-case.test.ts @@ -0,0 +1,52 @@ +import { beforeEach, describe, expect, it } from "vitest"; +import { authContainer } from "@/di/container"; +import { AUTH_SYMBOLS } from "@/di/symbols"; +import { MockUsersRepository } from "@/infrastructure/repositories/mock-users.repository"; +import { MockAuthenticationService } from "@/infrastructure/services/mock-authentication.service"; +import type { IUsersRepository } from "@/application/repositories/users-repository.interface"; +import type { IAuthenticationService } from "@/application/services/authentication-service.interface"; +import { AuthenticationError } from "@/entities/errors"; +import { signInUseCase } from "./sign-in.use-case"; + +describe("signInUseCase", () => { + let usersRepo: MockUsersRepository; + let authService: MockAuthenticationService; + + beforeEach(() => { + if (authContainer.isBound(AUTH_SYMBOLS.IUsersRepository)) { + authContainer.unbind(AUTH_SYMBOLS.IUsersRepository); + } + if (authContainer.isBound(AUTH_SYMBOLS.IAuthenticationService)) { + authContainer.unbind(AUTH_SYMBOLS.IAuthenticationService); + } + usersRepo = new MockUsersRepository(); + authService = new MockAuthenticationService(usersRepo); + authContainer + .bind(AUTH_SYMBOLS.IUsersRepository) + .toConstantValue(usersRepo); + authContainer + .bind(AUTH_SYMBOLS.IAuthenticationService) + .toConstantValue(authService); + }); + + it("returns a session + cookie on valid credentials", async () => { + const result = await signInUseCase({ + username: "alice", + password: "password_alice", + }); + expect(result.session.userId).toBe("1"); + expect(result.cookie.name).toBe("session"); + }); + + it("throws AuthenticationError when user does not exist", async () => { + await expect( + signInUseCase({ username: "ghost", password: "anything" }), + ).rejects.toBeInstanceOf(AuthenticationError); + }); + + it("throws AuthenticationError on wrong password", async () => { + await expect( + signInUseCase({ username: "alice", password: "wrong" }), + ).rejects.toBeInstanceOf(AuthenticationError); + }); +}); diff --git a/packages/auth/src/application/use-cases/sign-in.use-case.ts b/packages/auth/src/application/use-cases/sign-in.use-case.ts new file mode 100644 index 0000000..3a2c0b3 --- /dev/null +++ b/packages/auth/src/application/use-cases/sign-in.use-case.ts @@ -0,0 +1,34 @@ +import { AuthenticationError } from "../../entities/errors"; +import type { Cookie } from "../../entities/cookie"; +import type { Session } from "../../entities/session"; +import { authContainer } from "../../di/container"; +import { AUTH_SYMBOLS } from "../../di/symbols"; +import type { IUsersRepository } from "../repositories/users-repository.interface"; +import type { IAuthenticationService } from "../services/authentication-service.interface"; + +export async function signInUseCase(input: { + username: string; + password: string; +}): Promise<{ session: Session; cookie: Cookie }> { + const usersRepository = authContainer.get( + AUTH_SYMBOLS.IUsersRepository, + ); + const authService = authContainer.get( + AUTH_SYMBOLS.IAuthenticationService, + ); + + const existingUser = await usersRepository.getUserByUsername(input.username); + if (!existingUser) { + throw new AuthenticationError("User does not exist"); + } + + const validPassword = await authService.verifyPassword( + existingUser.passwordHash, + input.password, + ); + if (!validPassword) { + throw new AuthenticationError("Incorrect username or password"); + } + + return await authService.createSession(existingUser); +} From c989df41d5474c41db41bdaf43c375d666d226fc Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 00:39:22 +0200 Subject: [PATCH 054/129] feat(auth): add signUpUseCase (test red until DI lands) --- .../use-cases/sign-up.use-case.test.ts | 47 +++++++++++++++++++ .../application/use-cases/sign-up.use-case.ts | 46 ++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 packages/auth/src/application/use-cases/sign-up.use-case.test.ts create mode 100644 packages/auth/src/application/use-cases/sign-up.use-case.ts diff --git a/packages/auth/src/application/use-cases/sign-up.use-case.test.ts b/packages/auth/src/application/use-cases/sign-up.use-case.test.ts new file mode 100644 index 0000000..22a40c6 --- /dev/null +++ b/packages/auth/src/application/use-cases/sign-up.use-case.test.ts @@ -0,0 +1,47 @@ +import { beforeEach, describe, expect, it } from "vitest"; +import { authContainer } from "@/di/container"; +import { AUTH_SYMBOLS } from "@/di/symbols"; +import { MockUsersRepository } from "@/infrastructure/repositories/mock-users.repository"; +import { MockAuthenticationService } from "@/infrastructure/services/mock-authentication.service"; +import type { IUsersRepository } from "@/application/repositories/users-repository.interface"; +import type { IAuthenticationService } from "@/application/services/authentication-service.interface"; +import { AuthenticationError } from "@/entities/errors"; +import { signUpUseCase } from "./sign-up.use-case"; + +describe("signUpUseCase", () => { + let usersRepo: MockUsersRepository; + let authService: MockAuthenticationService; + + beforeEach(() => { + if (authContainer.isBound(AUTH_SYMBOLS.IUsersRepository)) { + authContainer.unbind(AUTH_SYMBOLS.IUsersRepository); + } + if (authContainer.isBound(AUTH_SYMBOLS.IAuthenticationService)) { + authContainer.unbind(AUTH_SYMBOLS.IAuthenticationService); + } + usersRepo = new MockUsersRepository(); + authService = new MockAuthenticationService(usersRepo); + authContainer + .bind(AUTH_SYMBOLS.IUsersRepository) + .toConstantValue(usersRepo); + authContainer + .bind(AUTH_SYMBOLS.IAuthenticationService) + .toConstantValue(authService); + }); + + it("creates a new user and returns session + cookie + user", async () => { + const result = await signUpUseCase({ + username: "carol", + password: "secret_password", + }); + expect(result.user.username).toBe("carol"); + expect(result.session.userId).toBe(result.user.id); + expect(result.cookie.name).toBe("session"); + }); + + it("throws AuthenticationError when username taken", async () => { + await expect( + signUpUseCase({ username: "alice", password: "secret_password" }), + ).rejects.toBeInstanceOf(AuthenticationError); + }); +}); diff --git a/packages/auth/src/application/use-cases/sign-up.use-case.ts b/packages/auth/src/application/use-cases/sign-up.use-case.ts new file mode 100644 index 0000000..5c89f9a --- /dev/null +++ b/packages/auth/src/application/use-cases/sign-up.use-case.ts @@ -0,0 +1,46 @@ +import { AuthenticationError } from "../../entities/errors"; +import type { Cookie } from "../../entities/cookie"; +import type { Session } from "../../entities/session"; +import type { User } from "../../entities/user"; +import { authContainer } from "../../di/container"; +import { AUTH_SYMBOLS } from "../../di/symbols"; +import type { IUsersRepository } from "../repositories/users-repository.interface"; +import type { IAuthenticationService } from "../services/authentication-service.interface"; + +export async function signUpUseCase(input: { + username: string; + password: string; +}): Promise<{ + session: Session; + cookie: Cookie; + user: Pick; +}> { + const usersRepository = authContainer.get( + AUTH_SYMBOLS.IUsersRepository, + ); + const authService = authContainer.get( + AUTH_SYMBOLS.IAuthenticationService, + ); + + const existingUser = await usersRepository.getUserByUsername(input.username); + if (existingUser) { + throw new AuthenticationError("Username taken"); + } + + const passwordHash = await authService.hashPassword(input.password); + const userId = authService.generateUserId(); + + const newUser = await usersRepository.createUser({ + id: userId, + username: input.username, + passwordHash, + }); + + const { cookie, session } = await authService.createSession(newUser); + + return { + cookie, + session, + user: { id: newUser.id, username: newUser.username }, + }; +} From 786f3c34204e452c19b462a7db2b4da44b59e077 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 00:39:31 +0200 Subject: [PATCH 055/129] feat(auth): add signOutUseCase (test red until DI lands) --- .../use-cases/sign-out.use-case.test.ts | 36 +++++++++++++++++++ .../use-cases/sign-out.use-case.ts | 13 +++++++ 2 files changed, 49 insertions(+) create mode 100644 packages/auth/src/application/use-cases/sign-out.use-case.test.ts create mode 100644 packages/auth/src/application/use-cases/sign-out.use-case.ts diff --git a/packages/auth/src/application/use-cases/sign-out.use-case.test.ts b/packages/auth/src/application/use-cases/sign-out.use-case.test.ts new file mode 100644 index 0000000..45e9f1b --- /dev/null +++ b/packages/auth/src/application/use-cases/sign-out.use-case.test.ts @@ -0,0 +1,36 @@ +import { beforeEach, describe, expect, it } from "vitest"; +import { authContainer } from "@/di/container"; +import { AUTH_SYMBOLS } from "@/di/symbols"; +import { MockUsersRepository } from "@/infrastructure/repositories/mock-users.repository"; +import { MockAuthenticationService } from "@/infrastructure/services/mock-authentication.service"; +import type { IUsersRepository } from "@/application/repositories/users-repository.interface"; +import type { IAuthenticationService } from "@/application/services/authentication-service.interface"; +import { signOutUseCase } from "./sign-out.use-case"; + +describe("signOutUseCase", () => { + let usersRepo: MockUsersRepository; + let authService: MockAuthenticationService; + + beforeEach(() => { + if (authContainer.isBound(AUTH_SYMBOLS.IUsersRepository)) { + authContainer.unbind(AUTH_SYMBOLS.IUsersRepository); + } + if (authContainer.isBound(AUTH_SYMBOLS.IAuthenticationService)) { + authContainer.unbind(AUTH_SYMBOLS.IAuthenticationService); + } + usersRepo = new MockUsersRepository(); + authService = new MockAuthenticationService(usersRepo); + authContainer + .bind(AUTH_SYMBOLS.IUsersRepository) + .toConstantValue(usersRepo); + authContainer + .bind(AUTH_SYMBOLS.IAuthenticationService) + .toConstantValue(authService); + }); + + it("returns a blank cookie", async () => { + const result = await signOutUseCase("session_1"); + expect(result.blankCookie.name).toBe("session"); + expect(result.blankCookie.value).toBe(""); + }); +}); diff --git a/packages/auth/src/application/use-cases/sign-out.use-case.ts b/packages/auth/src/application/use-cases/sign-out.use-case.ts new file mode 100644 index 0000000..9b3ec4c --- /dev/null +++ b/packages/auth/src/application/use-cases/sign-out.use-case.ts @@ -0,0 +1,13 @@ +import type { Cookie } from "../../entities/cookie"; +import { authContainer } from "../../di/container"; +import { AUTH_SYMBOLS } from "../../di/symbols"; +import type { IAuthenticationService } from "../services/authentication-service.interface"; + +export async function signOutUseCase( + sessionId: string, +): Promise<{ blankCookie: Cookie }> { + const authService = authContainer.get( + AUTH_SYMBOLS.IAuthenticationService, + ); + return await authService.invalidateSession(sessionId); +} From 1becc238432eeaa8706f23a74faca1149c6f3e99 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 00:39:46 +0200 Subject: [PATCH 056/129] feat(auth): add MockUsersRepository with seed users --- .../repositories/mock-users.repository.ts | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 packages/auth/src/infrastructure/repositories/mock-users.repository.ts diff --git a/packages/auth/src/infrastructure/repositories/mock-users.repository.ts b/packages/auth/src/infrastructure/repositories/mock-users.repository.ts new file mode 100644 index 0000000..4c4f194 --- /dev/null +++ b/packages/auth/src/infrastructure/repositories/mock-users.repository.ts @@ -0,0 +1,26 @@ +import "reflect-metadata"; +import { injectable } from "inversify"; + +import type { IUsersRepository } from "../../application/repositories/users-repository.interface"; +import type { User } from "../../entities/user"; + +@injectable() +export class MockUsersRepository implements IUsersRepository { + private _users: User[] = [ + { id: "1", username: "alice", passwordHash: "hashed_password_alice" }, + { id: "2", username: "bob", passwordHash: "hashed_password_bob" }, + ]; + + async getUser(id: string): Promise { + return this._users.find((u) => u.id === id); + } + + async getUserByUsername(username: string): Promise { + return this._users.find((u) => u.username === username); + } + + async createUser(input: User): Promise { + this._users.push(input); + return input; + } +} From b8cfe0e1f2f1f774d12d52281bd562ed79b26816 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 00:39:48 +0200 Subject: [PATCH 057/129] feat(auth): add MockAuthenticationService with constructor-injected users repo --- .../services/mock-authentication.service.ts | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 packages/auth/src/infrastructure/services/mock-authentication.service.ts diff --git a/packages/auth/src/infrastructure/services/mock-authentication.service.ts b/packages/auth/src/infrastructure/services/mock-authentication.service.ts new file mode 100644 index 0000000..365d841 --- /dev/null +++ b/packages/auth/src/infrastructure/services/mock-authentication.service.ts @@ -0,0 +1,73 @@ +import "reflect-metadata"; +import { inject, injectable } from "inversify"; + +import type { IAuthenticationService } from "../../application/services/authentication-service.interface"; +import type { IUsersRepository } from "../../application/repositories/users-repository.interface"; +import { UnauthenticatedError } from "../../entities/errors"; +import { sessionSchema, type Session } from "../../entities/session"; +import type { Cookie } from "../../entities/cookie"; +import type { User } from "../../entities/user"; +import { AUTH_SYMBOLS } from "../../di/symbols"; +import { SESSION_COOKIE } from "../../config"; + +@injectable() +export class MockAuthenticationService implements IAuthenticationService { + private _sessions: Record = {}; + + constructor( + @inject(AUTH_SYMBOLS.IUsersRepository) + private _usersRepository: IUsersRepository, + ) {} + + generateUserId(): string { + return (Math.random() + 1).toString(36).substring(7); + } + + async hashPassword(password: string): Promise { + return `hashed_${password}`; + } + + async verifyPassword(hash: string, password: string): Promise { + return hash === `hashed_${password}`; + } + + async validateSession( + sessionId: string, + ): Promise<{ user: User; session: Session }> { + const result = this._sessions[sessionId]; + if (!result) { + throw new UnauthenticatedError("Unauthenticated"); + } + const user = await this._usersRepository.getUser(result.user.id); + if (!user) { + throw new UnauthenticatedError("Unauthenticated"); + } + return { user, session: result.session }; + } + + async createSession( + user: User, + ): Promise<{ session: Session; cookie: Cookie }> { + const session = sessionSchema.parse({ + id: "session_" + user.id, + userId: user.id, + expiresAt: new Date(Date.now() + 86400000 * 7), + }); + const cookie: Cookie = { + name: SESSION_COOKIE, + value: session.id, + attributes: {}, + }; + this._sessions[session.id] = { session, user }; + return { session, cookie }; + } + + async invalidateSession( + sessionId: string, + ): Promise<{ blankCookie: Cookie }> { + delete this._sessions[sessionId]; + return { + blankCookie: { name: SESSION_COOKIE, value: "", attributes: {} }, + }; + } +} From 2ad6b21f17baacd1ed32072d38853405fff6e4d4 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 00:40:09 +0200 Subject: [PATCH 058/129] feat(auth): add per-feature InversifyJS container with constructor-injected service --- packages/auth/src/di/container.test.ts | 51 ++++++++++++++++++++++++++ packages/auth/src/di/container.ts | 6 +++ packages/auth/src/di/module.ts | 14 +++++++ packages/auth/src/di/symbols.ts | 4 ++ 4 files changed, 75 insertions(+) create mode 100644 packages/auth/src/di/container.test.ts create mode 100644 packages/auth/src/di/container.ts create mode 100644 packages/auth/src/di/module.ts create mode 100644 packages/auth/src/di/symbols.ts diff --git a/packages/auth/src/di/container.test.ts b/packages/auth/src/di/container.test.ts new file mode 100644 index 0000000..73399e3 --- /dev/null +++ b/packages/auth/src/di/container.test.ts @@ -0,0 +1,51 @@ +import { afterEach, beforeEach, describe, expect, it } from "vitest"; +import { authContainer } from "./container"; +import { AUTH_SYMBOLS } from "./symbols"; +import { AuthModule } from "./module"; +import { MockUsersRepository } from "@/infrastructure/repositories/mock-users.repository"; +import { MockAuthenticationService } from "@/infrastructure/services/mock-authentication.service"; +import type { IUsersRepository } from "@/application/repositories/users-repository.interface"; +import type { IAuthenticationService } from "@/application/services/authentication-service.interface"; + +describe("authContainer", () => { + beforeEach(() => { + authContainer.unbindAll(); + authContainer.load(AuthModule); + }); + + afterEach(() => { + authContainer.unbindAll(); + }); + + it("resolves IUsersRepository to MockUsersRepository by default", () => { + const repo = authContainer.get( + AUTH_SYMBOLS.IUsersRepository, + ); + expect(repo).toBeInstanceOf(MockUsersRepository); + }); + + it("resolves IAuthenticationService to MockAuthenticationService by default", () => { + const service = authContainer.get( + AUTH_SYMBOLS.IAuthenticationService, + ); + expect(service).toBeInstanceOf(MockAuthenticationService); + }); + + it("authentication service receives users repository via constructor injection", async () => { + const service = authContainer.get( + AUTH_SYMBOLS.IAuthenticationService, + ); + // The service should be able to validate against the seeded users + const { session, cookie } = await service.createSession({ + id: "1", + username: "alice", + passwordHash: "hashed_password_alice", + }); + expect(session.userId).toBe("1"); + expect(cookie.value).toBe(session.id); + + // After session creation, validateSession should resolve user via the repo + const validated = await service.validateSession(session.id); + expect(validated.user.username).toBe("alice"); + }); +}); diff --git a/packages/auth/src/di/container.ts b/packages/auth/src/di/container.ts new file mode 100644 index 0000000..209254b --- /dev/null +++ b/packages/auth/src/di/container.ts @@ -0,0 +1,6 @@ +import "reflect-metadata"; +import { Container } from "inversify"; +import { AuthModule } from "./module"; + +export const authContainer = new Container({ defaultScope: "Singleton" }); +authContainer.load(AuthModule); diff --git a/packages/auth/src/di/module.ts b/packages/auth/src/di/module.ts new file mode 100644 index 0000000..a6cbd2c --- /dev/null +++ b/packages/auth/src/di/module.ts @@ -0,0 +1,14 @@ +import { ContainerModule, type interfaces } from "inversify"; + +import type { IUsersRepository } from "../application/repositories/users-repository.interface"; +import type { IAuthenticationService } from "../application/services/authentication-service.interface"; +import { MockUsersRepository } from "../infrastructure/repositories/mock-users.repository"; +import { MockAuthenticationService } from "../infrastructure/services/mock-authentication.service"; +import { AUTH_SYMBOLS } from "./symbols"; + +export const AuthModule = new ContainerModule((bind: interfaces.Bind) => { + bind(AUTH_SYMBOLS.IUsersRepository).to(MockUsersRepository); + bind(AUTH_SYMBOLS.IAuthenticationService).to( + MockAuthenticationService, + ); +}); diff --git a/packages/auth/src/di/symbols.ts b/packages/auth/src/di/symbols.ts new file mode 100644 index 0000000..759f31d --- /dev/null +++ b/packages/auth/src/di/symbols.ts @@ -0,0 +1,4 @@ +export const AUTH_SYMBOLS = { + IUsersRepository: Symbol.for("auth:IUsersRepository"), + IAuthenticationService: Symbol.for("auth:IAuthenticationService"), +} as const; From 29dea75a620cbda7b8035a7e5579924f7c94645b Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 07:19:19 +0200 Subject: [PATCH 059/129] feat(auth): add sign-in/sign-up/sign-out controllers with Zod validation --- .../controllers/sign-in.controller.test.ts | 51 +++++++++++++++++++ .../controllers/sign-in.controller.ts | 21 ++++++++ .../controllers/sign-out.controller.test.ts | 40 +++++++++++++++ .../controllers/sign-out.controller.ts | 13 +++++ .../controllers/sign-up.controller.test.ts | 50 ++++++++++++++++++ .../controllers/sign-up.controller.ts | 35 +++++++++++++ 6 files changed, 210 insertions(+) create mode 100644 packages/auth/src/interface-adapters/controllers/sign-in.controller.test.ts create mode 100644 packages/auth/src/interface-adapters/controllers/sign-in.controller.ts create mode 100644 packages/auth/src/interface-adapters/controllers/sign-out.controller.test.ts create mode 100644 packages/auth/src/interface-adapters/controllers/sign-out.controller.ts create mode 100644 packages/auth/src/interface-adapters/controllers/sign-up.controller.test.ts create mode 100644 packages/auth/src/interface-adapters/controllers/sign-up.controller.ts diff --git a/packages/auth/src/interface-adapters/controllers/sign-in.controller.test.ts b/packages/auth/src/interface-adapters/controllers/sign-in.controller.test.ts new file mode 100644 index 0000000..1959d02 --- /dev/null +++ b/packages/auth/src/interface-adapters/controllers/sign-in.controller.test.ts @@ -0,0 +1,51 @@ +import { beforeEach, describe, expect, it } from "vitest"; +import { authContainer } from "@/di/container"; +import { AUTH_SYMBOLS } from "@/di/symbols"; +import { MockUsersRepository } from "@/infrastructure/repositories/mock-users.repository"; +import { MockAuthenticationService } from "@/infrastructure/services/mock-authentication.service"; +import type { IUsersRepository } from "@/application/repositories/users-repository.interface"; +import type { IAuthenticationService } from "@/application/services/authentication-service.interface"; +import { InputParseError } from "@/entities/errors"; +import { signInController } from "./sign-in.controller"; + +describe("signInController", () => { + let usersRepo: MockUsersRepository; + let authService: MockAuthenticationService; + + beforeEach(() => { + if (authContainer.isBound(AUTH_SYMBOLS.IUsersRepository)) { + authContainer.unbind(AUTH_SYMBOLS.IUsersRepository); + } + if (authContainer.isBound(AUTH_SYMBOLS.IAuthenticationService)) { + authContainer.unbind(AUTH_SYMBOLS.IAuthenticationService); + } + usersRepo = new MockUsersRepository(); + authService = new MockAuthenticationService(usersRepo); + authContainer + .bind(AUTH_SYMBOLS.IUsersRepository) + .toConstantValue(usersRepo); + authContainer + .bind(AUTH_SYMBOLS.IAuthenticationService) + .toConstantValue(authService); + }); + + it("returns a cookie on valid credentials", async () => { + const cookie = await signInController({ + username: "alice", + password: "password_alice", + }); + expect(cookie.name).toBe("session"); + }); + + it("throws InputParseError on missing username", async () => { + await expect( + signInController({ password: "anything" }), + ).rejects.toBeInstanceOf(InputParseError); + }); + + it("throws InputParseError on too-short password", async () => { + await expect( + signInController({ username: "alice", password: "abc" }), + ).rejects.toBeInstanceOf(InputParseError); + }); +}); diff --git a/packages/auth/src/interface-adapters/controllers/sign-in.controller.ts b/packages/auth/src/interface-adapters/controllers/sign-in.controller.ts new file mode 100644 index 0000000..a6fd143 --- /dev/null +++ b/packages/auth/src/interface-adapters/controllers/sign-in.controller.ts @@ -0,0 +1,21 @@ +import { z } from "zod"; + +import { InputParseError } from "../../entities/errors"; +import type { Cookie } from "../../entities/cookie"; +import { signInUseCase } from "../../application/use-cases/sign-in.use-case"; + +const inputSchema = z.object({ + username: z.string().min(3).max(31), + password: z.string().min(6).max(255), +}); + +export async function signInController( + input: Partial>, +): Promise { + const parsed = inputSchema.safeParse(input); + if (!parsed.success) { + throw new InputParseError("Invalid sign-in input", { cause: parsed.error }); + } + const { cookie } = await signInUseCase(parsed.data); + return cookie; +} diff --git a/packages/auth/src/interface-adapters/controllers/sign-out.controller.test.ts b/packages/auth/src/interface-adapters/controllers/sign-out.controller.test.ts new file mode 100644 index 0000000..29dd561 --- /dev/null +++ b/packages/auth/src/interface-adapters/controllers/sign-out.controller.test.ts @@ -0,0 +1,40 @@ +import { beforeEach, describe, expect, it } from "vitest"; +import { authContainer } from "@/di/container"; +import { AUTH_SYMBOLS } from "@/di/symbols"; +import { MockUsersRepository } from "@/infrastructure/repositories/mock-users.repository"; +import { MockAuthenticationService } from "@/infrastructure/services/mock-authentication.service"; +import type { IUsersRepository } from "@/application/repositories/users-repository.interface"; +import type { IAuthenticationService } from "@/application/services/authentication-service.interface"; +import { InputParseError } from "@/entities/errors"; +import { signOutController } from "./sign-out.controller"; + +describe("signOutController", () => { + beforeEach(() => { + if (authContainer.isBound(AUTH_SYMBOLS.IUsersRepository)) { + authContainer.unbind(AUTH_SYMBOLS.IUsersRepository); + } + if (authContainer.isBound(AUTH_SYMBOLS.IAuthenticationService)) { + authContainer.unbind(AUTH_SYMBOLS.IAuthenticationService); + } + const usersRepo = new MockUsersRepository(); + const authService = new MockAuthenticationService(usersRepo); + authContainer + .bind(AUTH_SYMBOLS.IUsersRepository) + .toConstantValue(usersRepo); + authContainer + .bind(AUTH_SYMBOLS.IAuthenticationService) + .toConstantValue(authService); + }); + + it("returns a blank cookie", async () => { + const cookie = await signOutController("session_anything"); + expect(cookie.name).toBe("session"); + expect(cookie.value).toBe(""); + }); + + it("throws InputParseError when sessionId is missing", async () => { + await expect(signOutController(undefined)).rejects.toBeInstanceOf( + InputParseError, + ); + }); +}); diff --git a/packages/auth/src/interface-adapters/controllers/sign-out.controller.ts b/packages/auth/src/interface-adapters/controllers/sign-out.controller.ts new file mode 100644 index 0000000..7017f57 --- /dev/null +++ b/packages/auth/src/interface-adapters/controllers/sign-out.controller.ts @@ -0,0 +1,13 @@ +import { InputParseError } from "../../entities/errors"; +import type { Cookie } from "../../entities/cookie"; +import { signOutUseCase } from "../../application/use-cases/sign-out.use-case"; + +export async function signOutController( + sessionId: string | undefined, +): Promise { + if (!sessionId) { + throw new InputParseError("Must provide a session ID"); + } + const { blankCookie } = await signOutUseCase(sessionId); + return blankCookie; +} diff --git a/packages/auth/src/interface-adapters/controllers/sign-up.controller.test.ts b/packages/auth/src/interface-adapters/controllers/sign-up.controller.test.ts new file mode 100644 index 0000000..04d2e45 --- /dev/null +++ b/packages/auth/src/interface-adapters/controllers/sign-up.controller.test.ts @@ -0,0 +1,50 @@ +import { beforeEach, describe, expect, it } from "vitest"; +import { authContainer } from "@/di/container"; +import { AUTH_SYMBOLS } from "@/di/symbols"; +import { MockUsersRepository } from "@/infrastructure/repositories/mock-users.repository"; +import { MockAuthenticationService } from "@/infrastructure/services/mock-authentication.service"; +import type { IUsersRepository } from "@/application/repositories/users-repository.interface"; +import type { IAuthenticationService } from "@/application/services/authentication-service.interface"; +import { InputParseError } from "@/entities/errors"; +import { signUpController } from "./sign-up.controller"; + +describe("signUpController", () => { + let usersRepo: MockUsersRepository; + let authService: MockAuthenticationService; + + beforeEach(() => { + if (authContainer.isBound(AUTH_SYMBOLS.IUsersRepository)) { + authContainer.unbind(AUTH_SYMBOLS.IUsersRepository); + } + if (authContainer.isBound(AUTH_SYMBOLS.IAuthenticationService)) { + authContainer.unbind(AUTH_SYMBOLS.IAuthenticationService); + } + usersRepo = new MockUsersRepository(); + authService = new MockAuthenticationService(usersRepo); + authContainer + .bind(AUTH_SYMBOLS.IUsersRepository) + .toConstantValue(usersRepo); + authContainer + .bind(AUTH_SYMBOLS.IAuthenticationService) + .toConstantValue(authService); + }); + + it("creates a new user when passwords match", async () => { + const result = await signUpController({ + username: "carol", + password: "secret_password", + confirmPassword: "secret_password", + }); + expect(result.user.username).toBe("carol"); + }); + + it("throws InputParseError when passwords do not match", async () => { + await expect( + signUpController({ + username: "dave", + password: "secret_password", + confirmPassword: "different_password", + }), + ).rejects.toBeInstanceOf(InputParseError); + }); +}); diff --git a/packages/auth/src/interface-adapters/controllers/sign-up.controller.ts b/packages/auth/src/interface-adapters/controllers/sign-up.controller.ts new file mode 100644 index 0000000..8455cd4 --- /dev/null +++ b/packages/auth/src/interface-adapters/controllers/sign-up.controller.ts @@ -0,0 +1,35 @@ +import { z } from "zod"; + +import { InputParseError } from "../../entities/errors"; +import { signUpUseCase } from "../../application/use-cases/sign-up.use-case"; + +const inputSchema = z + .object({ + username: z.string().min(3).max(31), + password: z.string().min(6).max(255), + confirmPassword: z.string().min(6).max(255), + }) + .superRefine(({ password, confirmPassword }, ctx) => { + if (confirmPassword !== password) { + ctx.addIssue({ + code: "custom", + message: "The passwords did not match", + path: ["password"], + }); + ctx.addIssue({ + code: "custom", + message: "The passwords did not match", + path: ["confirmPassword"], + }); + } + }); + +export async function signUpController( + input: Partial>, +): Promise> { + const parsed = inputSchema.safeParse(input); + if (!parsed.success) { + throw new InputParseError("Invalid sign-up input", { cause: parsed.error }); + } + return await signUpUseCase(parsed.data); +} From 2e445b9c5bcf60623abdfbed6d568aeb355cf437 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 07:57:16 +0200 Subject: [PATCH 060/129] feat(auth): add users collection with role + displayName fields --- .../src/integrations/cms/collections/users.ts | 26 +++++++++++++++++++ packages/auth/src/integrations/cms/index.ts | 1 + 2 files changed, 27 insertions(+) create mode 100644 packages/auth/src/integrations/cms/collections/users.ts create mode 100644 packages/auth/src/integrations/cms/index.ts diff --git a/packages/auth/src/integrations/cms/collections/users.ts b/packages/auth/src/integrations/cms/collections/users.ts new file mode 100644 index 0000000..e9f772e --- /dev/null +++ b/packages/auth/src/integrations/cms/collections/users.ts @@ -0,0 +1,26 @@ +import type { CollectionConfig } from "payload"; + +export const users: CollectionConfig = { + slug: "users", + auth: true, + admin: { + useAsTitle: "email", + }, + fields: [ + { + name: "displayName", + type: "text", + }, + { + name: "role", + type: "select", + options: [ + { label: "Admin", value: "admin" }, + { label: "Editor", value: "editor" }, + { label: "Author", value: "author" }, + ], + defaultValue: "author", + required: true, + }, + ], +}; diff --git a/packages/auth/src/integrations/cms/index.ts b/packages/auth/src/integrations/cms/index.ts new file mode 100644 index 0000000..be3aff4 --- /dev/null +++ b/packages/auth/src/integrations/cms/index.ts @@ -0,0 +1 @@ +export { users } from "./collections/users"; From 30b49ca19b8625e70104ce27f977d3cb9a603afd Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 07:58:20 +0200 Subject: [PATCH 061/129] feat(auth): add tRPC router with signIn + signUp + signOut --- .../auth/src/integrations/api/router.test.ts | 43 +++++++++++++++++++ packages/auth/src/integrations/api/router.ts | 32 ++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 packages/auth/src/integrations/api/router.test.ts create mode 100644 packages/auth/src/integrations/api/router.ts diff --git a/packages/auth/src/integrations/api/router.test.ts b/packages/auth/src/integrations/api/router.test.ts new file mode 100644 index 0000000..c230916 --- /dev/null +++ b/packages/auth/src/integrations/api/router.test.ts @@ -0,0 +1,43 @@ +import { beforeEach, describe, expect, it } from "vitest"; +import { authContainer } from "@/di/container"; +import { AUTH_SYMBOLS } from "@/di/symbols"; +import { MockUsersRepository } from "@/infrastructure/repositories/mock-users.repository"; +import { MockAuthenticationService } from "@/infrastructure/services/mock-authentication.service"; +import type { IUsersRepository } from "@/application/repositories/users-repository.interface"; +import type { IAuthenticationService } from "@/application/services/authentication-service.interface"; +import { authRouter } from "./router"; + +describe("authRouter", () => { + beforeEach(() => { + if (authContainer.isBound(AUTH_SYMBOLS.IUsersRepository)) { + authContainer.unbind(AUTH_SYMBOLS.IUsersRepository); + } + if (authContainer.isBound(AUTH_SYMBOLS.IAuthenticationService)) { + authContainer.unbind(AUTH_SYMBOLS.IAuthenticationService); + } + const usersRepo = new MockUsersRepository(); + const authService = new MockAuthenticationService(usersRepo); + authContainer + .bind(AUTH_SYMBOLS.IUsersRepository) + .toConstantValue(usersRepo); + authContainer + .bind(AUTH_SYMBOLS.IAuthenticationService) + .toConstantValue(authService); + }); + + it("exposes signIn, signUp, signOut procedures", () => { + const names = Object.keys(authRouter._def.procedures); + expect(names).toContain("signIn"); + expect(names).toContain("signUp"); + expect(names).toContain("signOut"); + }); + + it("signIn returns a cookie", async () => { + const caller = authRouter.createCaller({}); + const result = await caller.signIn({ + username: "alice", + password: "password_alice", + }); + expect(result.name).toBe("session"); + }); +}); diff --git a/packages/auth/src/integrations/api/router.ts b/packages/auth/src/integrations/api/router.ts new file mode 100644 index 0000000..1c36a04 --- /dev/null +++ b/packages/auth/src/integrations/api/router.ts @@ -0,0 +1,32 @@ +import { z } from "zod"; +import { router, publicProcedure } from "@repo/core-shared/trpc/init"; +import { signInController } from "../../interface-adapters/controllers/sign-in.controller"; +import { signUpController } from "../../interface-adapters/controllers/sign-up.controller"; +import { signOutController } from "../../interface-adapters/controllers/sign-out.controller"; + +export const authRouter = router({ + signIn: publicProcedure + .input( + z.object({ + username: z.string().min(3).max(31), + password: z.string().min(6).max(255), + }), + ) + .mutation(({ input }) => signInController(input)), + + signUp: publicProcedure + .input( + z.object({ + username: z.string().min(3).max(31), + password: z.string().min(6).max(255), + confirmPassword: z.string().min(6).max(255), + }), + ) + .mutation(({ input }) => signUpController(input)), + + signOut: publicProcedure + .input(z.object({ sessionId: z.string() })) + .mutation(({ input }) => signOutController(input.sessionId)), +}); + +export type AuthRouter = typeof authRouter; From 9b59c734574f6b23669d1669cbdd1fc15eb5d105 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 07:58:38 +0200 Subject: [PATCH 062/129] feat(auth): wire root barrel + ui/query stub --- packages/auth/src/index.ts | 11 ++++++++++- packages/auth/src/ui/query.ts | 5 +++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 packages/auth/src/ui/query.ts diff --git a/packages/auth/src/index.ts b/packages/auth/src/index.ts index cb0ff5c..c7e8309 100644 --- a/packages/auth/src/index.ts +++ b/packages/auth/src/index.ts @@ -1 +1,10 @@ -export {}; +export type { User } from "./entities/user"; +export type { Session } from "./entities/session"; +export type { Cookie } from "./entities/cookie"; +export { + AuthenticationError, + UnauthenticatedError, + UnauthorizedError, + InputParseError, +} from "./entities/errors"; +export { SESSION_COOKIE } from "./config"; diff --git a/packages/auth/src/ui/query.ts b/packages/auth/src/ui/query.ts new file mode 100644 index 0000000..ebb110c --- /dev/null +++ b/packages/auth/src/ui/query.ts @@ -0,0 +1,5 @@ +// React Query option builders for auth feature procedures. +// Sign-in/up/out are mutations — no query options needed. +// This file is intentionally minimal; expand if read procedures get added. + +export {}; From 3770764ac5a229e378a5d94eacdc7d285620dc9d Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 07:58:53 +0200 Subject: [PATCH 063/129] =?UTF-8?q?test(auth):=20add=20feature=20test=20fo?= =?UTF-8?q?r=20sign-up=20=E2=86=92=20sign-in=20=E2=86=92=20sign-out=20flow?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/tests/sign-in-flow.feature.test.ts | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 packages/auth/tests/sign-in-flow.feature.test.ts diff --git a/packages/auth/tests/sign-in-flow.feature.test.ts b/packages/auth/tests/sign-in-flow.feature.test.ts new file mode 100644 index 0000000..b9d8998 --- /dev/null +++ b/packages/auth/tests/sign-in-flow.feature.test.ts @@ -0,0 +1,52 @@ +// Feature-level test: sign-up, then sign-in with the new credentials, then sign-out. + +import { beforeEach, describe, expect, it } from "vitest"; +import { authContainer } from "../src/di/container"; +import { AUTH_SYMBOLS } from "../src/di/symbols"; +import { MockUsersRepository } from "../src/infrastructure/repositories/mock-users.repository"; +import { MockAuthenticationService } from "../src/infrastructure/services/mock-authentication.service"; +import type { IUsersRepository } from "../src/application/repositories/users-repository.interface"; +import type { IAuthenticationService } from "../src/application/services/authentication-service.interface"; +import { authRouter } from "../src/integrations/api/router"; + +describe("auth feature: sign-up → sign-in → sign-out", () => { + beforeEach(() => { + if (authContainer.isBound(AUTH_SYMBOLS.IUsersRepository)) { + authContainer.unbind(AUTH_SYMBOLS.IUsersRepository); + } + if (authContainer.isBound(AUTH_SYMBOLS.IAuthenticationService)) { + authContainer.unbind(AUTH_SYMBOLS.IAuthenticationService); + } + const usersRepo = new MockUsersRepository(); + const authService = new MockAuthenticationService(usersRepo); + authContainer + .bind(AUTH_SYMBOLS.IUsersRepository) + .toConstantValue(usersRepo); + authContainer + .bind(AUTH_SYMBOLS.IAuthenticationService) + .toConstantValue(authService); + }); + + it("a new user can sign up, then sign in, then sign out", async () => { + const caller = authRouter.createCaller({}); + + const signUpResult = await caller.signUp({ + username: "newperson", + password: "verysecret", + confirmPassword: "verysecret", + }); + expect(signUpResult.user.username).toBe("newperson"); + const userId = signUpResult.user.id; + + const signInCookie = await caller.signIn({ + username: "newperson", + password: "verysecret", + }); + expect(signInCookie.value).toBe("session_" + userId); + + const signOutResult = await caller.signOut({ + sessionId: signInCookie.value, + }); + expect(signOutResult.value).toBe(""); + }); +}); From 50b687c43e1cabdb4ad6904a70ad6aa2c5e80d47 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:11:50 +0200 Subject: [PATCH 064/129] feat(media): scaffold feature package with media collection only --- packages/media/package.json | 24 +++++++++++++++++++ packages/media/src/index.ts | 1 + .../src/integrations/cms/collections/media.ts | 18 ++++++++++++++ packages/media/src/integrations/cms/index.ts | 1 + packages/media/tsconfig.json | 9 +++++++ packages/media/turbo.json | 4 ++++ pnpm-lock.yaml | 16 +++++++++++++ tsconfig.base.json | 4 +++- 8 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 packages/media/package.json create mode 100644 packages/media/src/index.ts create mode 100644 packages/media/src/integrations/cms/collections/media.ts create mode 100644 packages/media/src/integrations/cms/index.ts create mode 100644 packages/media/tsconfig.json create mode 100644 packages/media/turbo.json diff --git a/packages/media/package.json b/packages/media/package.json new file mode 100644 index 0000000..fd007f9 --- /dev/null +++ b/packages/media/package.json @@ -0,0 +1,24 @@ +{ + "name": "@repo/media", + "private": true, + "version": "0.0.0", + "type": "module", + "exports": { + ".": "./src/index.ts", + "./cms": "./src/integrations/cms/index.ts" + }, + "scripts": { + "build": "tsc --noEmit", + "lint": "eslint .", + "test": "vitest run --passWithNoTests", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "payload": "^3.14.0" + }, + "devDependencies": { + "@repo/eslint-config": "workspace:*", + "@repo/typescript-config": "workspace:*", + "vitest": "^3.1.0" + } +} diff --git a/packages/media/src/index.ts b/packages/media/src/index.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/packages/media/src/index.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/media/src/integrations/cms/collections/media.ts b/packages/media/src/integrations/cms/collections/media.ts new file mode 100644 index 0000000..742d8d9 --- /dev/null +++ b/packages/media/src/integrations/cms/collections/media.ts @@ -0,0 +1,18 @@ +import type { CollectionConfig } from "payload"; + +export const media: CollectionConfig = { + slug: "media", + upload: { + mimeTypes: ["image/*", "application/pdf"], + }, + admin: { + useAsTitle: "filename", + }, + fields: [ + { + name: "alt", + type: "text", + required: true, + }, + ], +}; diff --git a/packages/media/src/integrations/cms/index.ts b/packages/media/src/integrations/cms/index.ts new file mode 100644 index 0000000..5cc0e7c --- /dev/null +++ b/packages/media/src/integrations/cms/index.ts @@ -0,0 +1 @@ +export { media } from "./collections/media"; diff --git a/packages/media/tsconfig.json b/packages/media/tsconfig.json new file mode 100644 index 0000000..23bc66f --- /dev/null +++ b/packages/media/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@repo/typescript-config/base.json", + "compilerOptions": { + "outDir": "dist", + "lib": ["ES2022", "DOM"] + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/media/turbo.json b/packages/media/turbo.json new file mode 100644 index 0000000..8a1d41a --- /dev/null +++ b/packages/media/turbo.json @@ -0,0 +1,4 @@ +{ + "extends": ["//"], + "tags": ["feature"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1ae23b4..40f1c44 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -514,6 +514,22 @@ importers: specifier: ^8.25.0 version: 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + packages/media: + dependencies: + payload: + specifier: ^3.14.0 + version: 3.81.0(graphql@16.13.2)(typescript@5.9.3) + devDependencies: + '@repo/eslint-config': + specifier: workspace:* + version: link:../eslint-config + '@repo/typescript-config': + specifier: workspace:* + version: link:../typescript-config + vitest: + specifier: ^3.1.0 + version: 3.2.4(@types/debug@4.1.13)(@types/node@25.5.2)(happy-dom@20.8.9)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(tsx@4.21.0) + packages/typescript-config: devDependencies: vitest: diff --git a/tsconfig.base.json b/tsconfig.base.json index ff4ceba..d9ead9a 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -17,7 +17,9 @@ "@repo/core-ui": ["packages/core-ui/src/index.ts"], "@repo/auth": ["packages/auth/src/index.ts"], "@repo/auth/cms": ["packages/auth/src/integrations/cms/index.ts"], - "@repo/auth/api": ["packages/auth/src/integrations/api/router.ts"] + "@repo/auth/api": ["packages/auth/src/integrations/api/router.ts"], + "@repo/media": ["packages/media/src/index.ts"], + "@repo/media/cms": ["packages/media/src/integrations/cms/index.ts"] } } } From 125ec53f2a9f30f41941a9302eba950aaa6410eb Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:13:10 +0200 Subject: [PATCH 065/129] feat(core-cms): compose users + media into payload config alongside articles --- packages/core-cms/package.json | 2 ++ packages/core-cms/src/payload.config.ts | 4 +++- pnpm-lock.yaml | 6 ++++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/core-cms/package.json b/packages/core-cms/package.json index af0b774..f8b15ec 100644 --- a/packages/core-cms/package.json +++ b/packages/core-cms/package.json @@ -13,7 +13,9 @@ "typecheck": "tsc --noEmit" }, "dependencies": { + "@repo/auth": "workspace:*", "@repo/blog": "workspace:*", + "@repo/media": "workspace:*", "payload": "^3.14.0", "@payloadcms/db-postgres": "^3.14.0", "@payloadcms/richtext-lexical": "^3.14.0" diff --git a/packages/core-cms/src/payload.config.ts b/packages/core-cms/src/payload.config.ts index c77e2e9..0c756e3 100644 --- a/packages/core-cms/src/payload.config.ts +++ b/packages/core-cms/src/payload.config.ts @@ -4,14 +4,16 @@ import { lexicalEditor } from "@payloadcms/richtext-lexical"; import path from "node:path"; import { fileURLToPath } from "node:url"; +import { users } from "@repo/auth/cms"; import { articles } from "@repo/blog/cms"; +import { media } from "@repo/media/cms"; const filename = fileURLToPath(import.meta.url); const dirname = path.dirname(filename); export default buildConfig({ editor: lexicalEditor(), - collections: [articles], + collections: [users, articles, media], globals: [], secret: process.env.PAYLOAD_SECRET || "default-secret-change-me", db: postgresAdapter({ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 40f1c44..f0b3643 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -389,9 +389,15 @@ importers: '@payloadcms/richtext-lexical': specifier: ^3.14.0 version: 3.81.0(@faceless-ui/modal@3.0.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@faceless-ui/scroll-info@2.0.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@payloadcms/next@3.81.0(graphql@16.13.2)(next@16.2.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.99.0))(payload@3.81.0(graphql@16.13.2)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(next@16.2.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.99.0))(payload@3.81.0(graphql@16.13.2)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)(yjs@13.6.30) + '@repo/auth': + specifier: workspace:* + version: link:../auth '@repo/blog': specifier: workspace:* version: link:../blog + '@repo/media': + specifier: workspace:* + version: link:../media payload: specifier: ^3.14.0 version: 3.81.0(graphql@16.13.2)(typescript@5.9.3) From 8667232c22a04ff7f83caf429aad27900e07fde2 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:14:07 +0200 Subject: [PATCH 066/129] =?UTF-8?q?feat(blog):=20restore=20author=20relati?= =?UTF-8?q?onship=20=E2=86=92=20users=20+=20featuredImage=20upload=20?= =?UTF-8?q?=E2=86=92=20media?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/integrations/cms/collections/articles.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/blog/src/integrations/cms/collections/articles.ts b/packages/blog/src/integrations/cms/collections/articles.ts index 027c134..70323ba 100644 --- a/packages/blog/src/integrations/cms/collections/articles.ts +++ b/packages/blog/src/integrations/cms/collections/articles.ts @@ -46,18 +46,20 @@ export const articles: CollectionConfig = { position: "sidebar", }, }, - // TODO(plan-3): Restore as `relationship → users` once auth feature is migrated. { name: "author", - type: "text", + type: "relationship", + relationTo: "users", required: true, admin: { position: "sidebar", - description: - "Temporary text field; restored to users relationship in Plan 3.", }, }, - // TODO(plan-3): Restore `featuredImage: upload → media` once media feature is migrated. + { + name: "featuredImage", + type: "upload", + relationTo: "media", + }, { name: "publishedAt", type: "date", From aed8c9a6ad212fbf0ebb2d87f82cf0e5100cfa6b Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:16:25 +0200 Subject: [PATCH 067/129] feat(core-api): compose @repo/auth/api into appRouter under 'auth' namespace --- packages/auth/src/index.ts | 1 + packages/blog/src/index.ts | 1 + packages/core-api/package.json | 1 + packages/core-api/src/root.ts | 9 ++++++++- pnpm-lock.yaml | 3 +++ 5 files changed, 14 insertions(+), 1 deletion(-) diff --git a/packages/auth/src/index.ts b/packages/auth/src/index.ts index c7e8309..964e5d6 100644 --- a/packages/auth/src/index.ts +++ b/packages/auth/src/index.ts @@ -1,6 +1,7 @@ export type { User } from "./entities/user"; export type { Session } from "./entities/session"; export type { Cookie } from "./entities/cookie"; +export type { AuthRouter } from "./integrations/api/router"; export { AuthenticationError, UnauthenticatedError, diff --git a/packages/blog/src/index.ts b/packages/blog/src/index.ts index b4f6235..5cad050 100644 --- a/packages/blog/src/index.ts +++ b/packages/blog/src/index.ts @@ -1,3 +1,4 @@ export type { Article, ArticleStatus } from "./entities/article"; +export type { BlogRouter } from "./integrations/api/router"; export { ArticleNotFoundError, InputParseError } from "./entities/errors"; export { articleBySlugQuery, listArticlesQuery } from "./ui/query"; diff --git a/packages/core-api/package.json b/packages/core-api/package.json index d7cceb5..0283021 100644 --- a/packages/core-api/package.json +++ b/packages/core-api/package.json @@ -12,6 +12,7 @@ "typecheck": "tsc --noEmit" }, "dependencies": { + "@repo/auth": "workspace:*", "@repo/blog": "workspace:*", "@repo/core-shared": "workspace:*", "@trpc/server": "^11.0.0" diff --git a/packages/core-api/src/root.ts b/packages/core-api/src/root.ts index f940fe8..9f238e0 100644 --- a/packages/core-api/src/root.ts +++ b/packages/core-api/src/root.ts @@ -1,8 +1,15 @@ +import type { AuthRouter } from "@repo/auth"; +import type { BlogRouter } from "@repo/blog"; import { router } from "@repo/core-shared/trpc/init"; +import { authRouter } from "@repo/auth/api"; import { blogRouter } from "@repo/blog/api"; export const appRouter = router({ + auth: authRouter, blog: blogRouter, }); -export type AppRouter = typeof appRouter; +export type AppRouter = { + auth: AuthRouter; + blog: BlogRouter; +}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f0b3643..2cdb3ff 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -361,6 +361,9 @@ importers: packages/core-api: dependencies: + '@repo/auth': + specifier: workspace:* + version: link:../auth '@repo/blog': specifier: workspace:* version: link:../blog From afe7a15104185f58589aa8ad210e338a6fa979ce Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:18:46 +0200 Subject: [PATCH 068/129] =?UTF-8?q?feat(core-cms):=20regenerate=20types=20?= =?UTF-8?q?=E2=80=94=20now=20includes=20Articles,=20Users,=20Media?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core-cms/src/generated-types.ts | 162 +++++++++++++++-------- 1 file changed, 104 insertions(+), 58 deletions(-) diff --git a/packages/core-cms/src/generated-types.ts b/packages/core-cms/src/generated-types.ts index 520f18e..341abff 100644 --- a/packages/core-cms/src/generated-types.ts +++ b/packages/core-cms/src/generated-types.ts @@ -67,18 +67,20 @@ export interface Config { }; blocks: {}; collections: { - articles: Article; - 'payload-kv': PayloadKv; users: User; + articles: Article; + media: Media; + 'payload-kv': PayloadKv; 'payload-locked-documents': PayloadLockedDocument; 'payload-preferences': PayloadPreference; 'payload-migrations': PayloadMigration; }; collectionsJoins: {}; collectionsSelect: { - articles: ArticlesSelect | ArticlesSelect; - 'payload-kv': PayloadKvSelect | PayloadKvSelect; users: UsersSelect | UsersSelect; + articles: ArticlesSelect | ArticlesSelect; + media: MediaSelect | MediaSelect; + 'payload-kv': PayloadKvSelect | PayloadKvSelect; 'payload-locked-documents': PayloadLockedDocumentsSelect | PayloadLockedDocumentsSelect; 'payload-preferences': PayloadPreferencesSelect | PayloadPreferencesSelect; 'payload-migrations': PayloadMigrationsSelect | PayloadMigrationsSelect; @@ -117,6 +119,33 @@ export interface UserAuthOperations { password: string; }; } +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "users". + */ +export interface User { + id: number; + displayName?: string | null; + role: 'admin' | 'editor' | 'author'; + updatedAt: string; + createdAt: string; + email: string; + resetPasswordToken?: string | null; + resetPasswordExpiration?: string | null; + salt?: string | null; + hash?: string | null; + loginAttempts?: number | null; + lockUntil?: string | null; + sessions?: + | { + id: string; + createdAt?: string | null; + expiresAt: string; + }[] + | null; + password?: string | null; + collection: 'users'; +} /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "articles". @@ -144,15 +173,32 @@ export interface Article { [k: string]: unknown; } | null; status: 'draft' | 'published'; - /** - * Temporary text field; restored to users relationship in Plan 3. - */ - author: string; + author: number | User; + featuredImage?: (number | null) | Media; publishedAt?: string | null; updatedAt: string; createdAt: string; _status?: ('draft' | 'published') | null; } +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "media". + */ +export interface Media { + id: number; + alt: string; + updatedAt: string; + createdAt: string; + url?: string | null; + thumbnailURL?: string | null; + filename?: string | null; + mimeType?: string | null; + filesize?: number | null; + width?: number | null; + height?: number | null; + focalX?: number | null; + focalY?: number | null; +} /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "payload-kv". @@ -170,31 +216,6 @@ export interface PayloadKv { | boolean | null; } -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "users". - */ -export interface User { - id: number; - updatedAt: string; - createdAt: string; - email: string; - resetPasswordToken?: string | null; - resetPasswordExpiration?: string | null; - salt?: string | null; - hash?: string | null; - loginAttempts?: number | null; - lockUntil?: string | null; - sessions?: - | { - id: string; - createdAt?: string | null; - expiresAt: string; - }[] - | null; - password?: string | null; - collection: 'users'; -} /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "payload-locked-documents". @@ -202,13 +223,17 @@ export interface User { export interface PayloadLockedDocument { id: number; document?: + | ({ + relationTo: 'users'; + value: number | User; + } | null) | ({ relationTo: 'articles'; value: number | Article; } | null) | ({ - relationTo: 'users'; - value: number | User; + relationTo: 'media'; + value: number | Media; } | null); globalSlug?: string | null; user: { @@ -252,34 +277,13 @@ export interface PayloadMigration { updatedAt: string; createdAt: string; } -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "articles_select". - */ -export interface ArticlesSelect { - title?: T; - slug?: T; - content?: T; - status?: T; - author?: T; - publishedAt?: T; - updatedAt?: T; - createdAt?: T; - _status?: T; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "payload-kv_select". - */ -export interface PayloadKvSelect { - key?: T; - data?: T; -} /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "users_select". */ export interface UsersSelect { + displayName?: T; + role?: T; updatedAt?: T; createdAt?: T; email?: T; @@ -297,6 +301,48 @@ export interface UsersSelect { expiresAt?: T; }; } +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "articles_select". + */ +export interface ArticlesSelect { + title?: T; + slug?: T; + content?: T; + status?: T; + author?: T; + featuredImage?: T; + publishedAt?: T; + updatedAt?: T; + createdAt?: T; + _status?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "media_select". + */ +export interface MediaSelect { + alt?: T; + updatedAt?: T; + createdAt?: T; + url?: T; + thumbnailURL?: T; + filename?: T; + mimeType?: T; + filesize?: T; + width?: T; + height?: T; + focalX?: T; + focalY?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "payload-kv_select". + */ +export interface PayloadKvSelect { + key?: T; + data?: T; +} /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "payload-locked-documents_select". From 09f45afab143233469890a0ca0bc625504482d82 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:24:33 +0200 Subject: [PATCH 069/129] docs(plan): add Plan 4 (marketing-pages + navigation features) 17 tasks: marketing-pages with Pages collection + SiteSettings global + read use-cases + tRPC router; navigation with Header global + read use-case + tRPC router. Composes both into core-cms (now 4 collections, 2 globals) and core-api (now 4 namespaces). All Plan 2/3 lessons baked in. Co-Authored-By: Claude Opus 4.7 (1M context) --- ...05-04-plan-4-marketing-pages-navigation.md | 1874 +++++++++++++++++ 1 file changed, 1874 insertions(+) create mode 100644 docs/superpowers/plans/2026-05-04-plan-4-marketing-pages-navigation.md diff --git a/docs/superpowers/plans/2026-05-04-plan-4-marketing-pages-navigation.md b/docs/superpowers/plans/2026-05-04-plan-4-marketing-pages-navigation.md new file mode 100644 index 0000000..536352e --- /dev/null +++ b/docs/superpowers/plans/2026-05-04-plan-4-marketing-pages-navigation.md @@ -0,0 +1,1874 @@ +# Vertical Refactor — Plan 4: Marketing-pages + Navigation + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. + +**Goal:** Add `@repo/marketing-pages` (Pages collection + SiteSettings global + read use-case + tRPC router) and `@repo/navigation` (Header global + read use-case + tRPC router). Compose both into `core-cms` and `core-api`. Demonstrates that the canonical pattern scales smoothly to features that own globals (not just collections) and to features with read-only surfaces. + +**Architecture:** Both features follow the proven canonical shape from Plans 2-3. Marketing-pages is comparable in size to blog. Navigation is smaller — globals are simpler than collections (no per-record CRUD, just one document). Both use the per-feature InversifyJS container + payload-backed repository (constructor-injected with `SanitizedConfig`) pattern. + +**Tech Stack:** Same as Plans 2-3. + +**Plan position:** Plan 4 of 6. +- Plan 1 ✅ Foundation +- Plan 2 ✅ Blog feature +- Plan 3 ✅ Auth + Media + restore blog relations +- **Plan 4 (this doc):** Marketing-pages + Navigation +- Plan 5: App + UI integration +- Plan 6: Cleanup + boundary enforcement + Playwright + docs rewrite + +**Spec reference:** `docs/superpowers/specs/2026-04-21-vertical-monorepo-refactor-design.md` + +**All Plan 2/3 lessons apply:** +1. vitest.config.ts has `resolve.alias` for `@/` +2. tsconfig.json has NO `rootDir` +3. Source files use relative imports; tests use `@/` +4. Payload-backed repos take `SanitizedConfig` via constructor (no `@repo/core-cms` dep) +5. Feature `package.json` has NO `@repo/core-cms` dep +6. `z.unknown()` schemas should be `.optional()` + +--- + +## Schema design (this plan introduces) + +### Marketing-pages + +`pages` collection — generic CMS page (about, contact, etc.): +- `title: text required` +- `slug: text unique` (sidebar, auto-generated via `slugifyIfMissing`) +- `hero: group { heading: text, subheading: textarea, image: upload→media (optional) }` +- `layout: blocks [cta]` (uses generic `cta` block from `@repo/core-shared/payload`) +- `status: select draft|published, default draft, required, sidebar` +- `publishedAt: date sidebar` +- `seo: group { title: text required, description: textarea }` (uses `seoFields` from `core-shared`) + +`siteSettings` global: +- Port from `cms-core/src/globals/site-settings.ts` as-is +- Slug: `site-settings` +- Fields: `siteName: text required defaultValue "My App"`, `siteDescription: textarea` + +### Navigation + +`header` global: +- `logo: upload → media (optional)` +- `items: array { label: text required, href: text required, external: checkbox default false }` + +--- + +## File Structure + +**Create — `@repo/marketing-pages` package:** +- `packages/marketing-pages/{package.json,tsconfig.json,turbo.json,vitest.config.ts}` +- `packages/marketing-pages/src/index.ts` +- `packages/marketing-pages/src/entities/page.ts` + `.test.ts` +- `packages/marketing-pages/src/entities/site-settings.ts` +- `packages/marketing-pages/src/entities/errors.ts` +- `packages/marketing-pages/src/application/repositories/pages-repository.interface.ts` +- `packages/marketing-pages/src/application/repositories/site-settings-repository.interface.ts` +- `packages/marketing-pages/src/application/use-cases/get-page-by-slug.use-case.ts` + `.test.ts` +- `packages/marketing-pages/src/application/use-cases/get-site-settings.use-case.ts` + `.test.ts` +- `packages/marketing-pages/src/infrastructure/repositories/mock-pages.repository.ts` +- `packages/marketing-pages/src/infrastructure/repositories/payload-pages.repository.ts` +- `packages/marketing-pages/src/infrastructure/repositories/mock-site-settings.repository.ts` +- `packages/marketing-pages/src/infrastructure/repositories/payload-site-settings.repository.ts` +- `packages/marketing-pages/src/di/{symbols.ts,module.ts,container.ts,container.test.ts}` +- `packages/marketing-pages/src/interface-adapters/controllers/pages.controller.ts` + `.test.ts` +- `packages/marketing-pages/src/integrations/cms/collections/pages.ts` +- `packages/marketing-pages/src/integrations/cms/globals/site-settings.ts` +- `packages/marketing-pages/src/integrations/cms/index.ts` +- `packages/marketing-pages/src/integrations/api/router.ts` + `.test.ts` +- `packages/marketing-pages/src/ui/query.ts` +- `packages/marketing-pages/tests/page-by-slug.feature.test.ts` + +**Create — `@repo/navigation` package:** +- `packages/navigation/{package.json,tsconfig.json,turbo.json,vitest.config.ts}` +- `packages/navigation/src/index.ts` +- `packages/navigation/src/entities/header.ts` +- `packages/navigation/src/application/repositories/header-repository.interface.ts` +- `packages/navigation/src/application/use-cases/get-header.use-case.ts` + `.test.ts` +- `packages/navigation/src/infrastructure/repositories/mock-header.repository.ts` +- `packages/navigation/src/infrastructure/repositories/payload-header.repository.ts` +- `packages/navigation/src/di/{symbols.ts,module.ts,container.ts,container.test.ts}` +- `packages/navigation/src/interface-adapters/controllers/header.controller.ts` +- `packages/navigation/src/integrations/cms/globals/header.ts` +- `packages/navigation/src/integrations/cms/index.ts` +- `packages/navigation/src/integrations/api/router.ts` + `.test.ts` +- `packages/navigation/src/ui/query.ts` + +**Modify:** +- `packages/core-cms/src/payload.config.ts` — register `pages` collection + `siteSettings` and `header` globals; add `@repo/marketing-pages` and `@repo/navigation` deps +- `packages/core-cms/package.json` — add deps +- `packages/core-api/src/root.ts` — compose `marketingPages` and `navigation` routers +- `packages/core-api/package.json` — add deps +- `tsconfig.base.json` — add aliases for both new packages + +--- + +## Phase A: Marketing-pages feature + +### Task 4.1: Scaffold @repo/marketing-pages package + +**Files:** `packages/marketing-pages/{package.json,tsconfig.json,turbo.json,vitest.config.ts,src/index.ts}` + path aliases. + +- [ ] **Step 1: Create `packages/marketing-pages/package.json`** + +```json +{ + "name": "@repo/marketing-pages", + "private": true, + "version": "0.0.0", + "type": "module", + "exports": { + ".": "./src/index.ts", + "./cms": "./src/integrations/cms/index.ts", + "./api": "./src/integrations/api/router.ts" + }, + "scripts": { + "build": "tsc --noEmit", + "lint": "eslint .", + "test": "vitest run --passWithNoTests", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@repo/core-shared": "workspace:*", + "@trpc/server": "^11.0.0", + "inversify": "^6.2.0", + "payload": "^3.14.0", + "reflect-metadata": "^0.2.2", + "zod": "^3.24.0" + }, + "devDependencies": { + "@repo/eslint-config": "workspace:*", + "@repo/typescript-config": "workspace:*", + "@types/node": "^22.0.0", + "vitest": "^3.1.0" + } +} +``` + +- [ ] **Step 2: Create `packages/marketing-pages/tsconfig.json`** + +```json +{ + "extends": "@repo/typescript-config/base.json", + "compilerOptions": { + "outDir": "dist", + "lib": ["ES2022", "DOM"], + "jsx": "preserve", + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["src/**/*", "tests/**/*"], + "exclude": ["node_modules", "dist"] +} +``` + +- [ ] **Step 3: Create `packages/marketing-pages/turbo.json`** + +```json +{ + "extends": ["//"], + "tags": ["feature"] +} +``` + +- [ ] **Step 4: Create `packages/marketing-pages/vitest.config.ts`** + +```typescript +import path from "node:path"; +import { baseVitestConfig } from "@repo/typescript-config/vitest.base"; + +export default { + ...baseVitestConfig, + resolve: { + alias: { + "@": path.resolve(__dirname, "./src"), + }, + }, +}; +``` + +- [ ] **Step 5: Create `packages/marketing-pages/src/index.ts`** + +```typescript +export {}; +``` + +- [ ] **Step 6: Add path aliases to `tsconfig.base.json`** + +Add to `compilerOptions.paths`: + +```json +"@repo/marketing-pages": ["packages/marketing-pages/src/index.ts"], +"@repo/marketing-pages/cms": ["packages/marketing-pages/src/integrations/cms/index.ts"], +"@repo/marketing-pages/api": ["packages/marketing-pages/src/integrations/api/router.ts"] +``` + +- [ ] **Step 7: Install + verify** + +Run: `pnpm install` +Verify: `pnpm list --recursive --depth=-1 | grep marketing-pages` + +- [ ] **Step 8: Commit** + +```bash +git add packages/marketing-pages tsconfig.base.json pnpm-lock.yaml +git commit -m "feat(marketing-pages): scaffold empty package with feature tag + path aliases" +``` + +--- + +### Task 4.2: Page + SiteSettings entities + tests + +- [ ] **Step 1: Write `packages/marketing-pages/src/entities/page.test.ts`** + +```typescript +import { describe, expect, it } from "vitest"; +import { pageSchema, pageStatusSchema } from "./page"; + +describe("pageSchema", () => { + it("accepts a minimal valid page", () => { + const result = pageSchema.parse({ + id: "p1", + title: "About", + slug: "about", + hero: { heading: "About us" }, + layout: [], + seo: { title: "About — My App" }, + createdAt: new Date(), + updatedAt: new Date(), + }); + expect(result.status).toBe("draft"); + expect(result.publishedAt).toBeNull(); + }); + + it("accepts a published page with publishedAt", () => { + const result = pageSchema.parse({ + id: "p1", + title: "About", + slug: "about", + hero: { heading: "About us" }, + layout: [], + status: "published", + publishedAt: new Date(), + seo: { title: "About" }, + createdAt: new Date(), + updatedAt: new Date(), + }); + expect(result.status).toBe("published"); + expect(result.publishedAt).toBeInstanceOf(Date); + }); + + it("rejects empty title", () => { + expect(() => + pageSchema.parse({ + id: "p1", + title: "", + slug: "about", + hero: { heading: "h" }, + layout: [], + seo: { title: "x" }, + createdAt: new Date(), + updatedAt: new Date(), + }), + ).toThrow(); + }); +}); + +describe("pageStatusSchema", () => { + it("accepts draft and published", () => { + expect(pageStatusSchema.parse("draft")).toBe("draft"); + expect(pageStatusSchema.parse("published")).toBe("published"); + }); +}); +``` + +- [ ] **Step 2: Run — expect failure** + +Run: `cd packages/marketing-pages && pnpm vitest run src/entities/page.test.ts` +Expected: FAIL — "Cannot find module './page'". + +- [ ] **Step 3: Implement `packages/marketing-pages/src/entities/page.ts`** + +```typescript +import { z } from "zod"; + +export const pageStatusSchema = z.enum(["draft", "published"]); + +export const heroSchema = z.object({ + heading: z.string().min(1).max(255), + subheading: z.string().optional(), + imageId: z.string().optional(), +}); + +export const pageSchema = z.object({ + id: z.string(), + title: z.string().min(1).max(255), + slug: z.string().min(1).max(255), + hero: heroSchema, + layout: z.array(z.unknown()), + status: pageStatusSchema.default("draft"), + publishedAt: z.date().nullable().default(null), + seo: z.object({ + title: z.string().min(1), + description: z.string().optional(), + }), + createdAt: z.date(), + updatedAt: z.date(), +}); + +export type Page = z.infer; +export type PageStatus = z.infer; +export type Hero = z.infer; +``` + +- [ ] **Step 4: Implement `packages/marketing-pages/src/entities/site-settings.ts`** + +```typescript +import { z } from "zod"; + +export const siteSettingsSchema = z.object({ + siteName: z.string().min(1), + siteDescription: z.string().optional(), +}); + +export type SiteSettings = z.infer; +``` + +- [ ] **Step 5: Implement `packages/marketing-pages/src/entities/errors.ts`** + +```typescript +export class PageNotFoundError extends Error { + constructor(message = "Page not found", options?: ErrorOptions) { + super(message, options); + } +} + +export class InputParseError extends Error { + constructor(message: string, options?: ErrorOptions) { + super(message, options); + } +} +``` + +- [ ] **Step 6: Run — expect 4 tests pass** + +Run: `cd packages/marketing-pages && pnpm vitest run src/entities` +Expected: PASS — 4 tests. + +- [ ] **Step 7: Commit** + +```bash +git add packages/marketing-pages/src/entities +git commit -m "feat(marketing-pages): add Page + SiteSettings entities + errors" +``` + +--- + +### Task 4.3: Repository interfaces (pages + site-settings) + +- [ ] **Step 1: Create `packages/marketing-pages/src/application/repositories/pages-repository.interface.ts`** + +```typescript +import type { Page } from "../../entities/page"; + +export interface IPagesRepository { + getPageBySlug(slug: string): Promise; + getPages(options?: { + status?: string; + limit?: number; + offset?: number; + }): Promise; +} +``` + +- [ ] **Step 2: Create `packages/marketing-pages/src/application/repositories/site-settings-repository.interface.ts`** + +```typescript +import type { SiteSettings } from "../../entities/site-settings"; + +export interface ISiteSettingsRepository { + getSiteSettings(): Promise; +} +``` + +- [ ] **Step 3: Verify compiles** + +Run: `cd packages/marketing-pages && pnpm typecheck` +Expected: PASS. + +- [ ] **Step 4: Commit** + +```bash +git add packages/marketing-pages/src/application +git commit -m "feat(marketing-pages): add IPagesRepository + ISiteSettingsRepository interfaces" +``` + +--- + +### Task 4.4: Use-cases + tests (RED until DI lands) + +- [ ] **Step 1: Write test `packages/marketing-pages/src/application/use-cases/get-page-by-slug.use-case.test.ts`** + +```typescript +import { beforeEach, describe, expect, it } from "vitest"; +import { marketingPagesContainer } from "@/di/container"; +import { MARKETING_PAGES_SYMBOLS } from "@/di/symbols"; +import { MockPagesRepository } from "@/infrastructure/repositories/mock-pages.repository"; +import type { IPagesRepository } from "@/application/repositories/pages-repository.interface"; +import { getPageBySlugUseCase } from "./get-page-by-slug.use-case"; + +describe("getPageBySlugUseCase", () => { + let repo: MockPagesRepository; + + beforeEach(() => { + if (marketingPagesContainer.isBound(MARKETING_PAGES_SYMBOLS.IPagesRepository)) { + marketingPagesContainer.unbind(MARKETING_PAGES_SYMBOLS.IPagesRepository); + } + repo = new MockPagesRepository(); + marketingPagesContainer + .bind(MARKETING_PAGES_SYMBOLS.IPagesRepository) + .toConstantValue(repo); + }); + + it("returns the page when found", async () => { + const result = await getPageBySlugUseCase("about"); + expect(result?.slug).toBe("about"); + }); + + it("returns undefined when not found", async () => { + const result = await getPageBySlugUseCase("missing-page"); + expect(result).toBeUndefined(); + }); +}); +``` + +- [ ] **Step 2: Implement `packages/marketing-pages/src/application/use-cases/get-page-by-slug.use-case.ts`** + +```typescript +import type { Page } from "../../entities/page"; +import { marketingPagesContainer } from "../../di/container"; +import { MARKETING_PAGES_SYMBOLS } from "../../di/symbols"; +import type { IPagesRepository } from "../repositories/pages-repository.interface"; + +export async function getPageBySlugUseCase( + slug: string, +): Promise { + const repo = marketingPagesContainer.get( + MARKETING_PAGES_SYMBOLS.IPagesRepository, + ); + return repo.getPageBySlug(slug); +} +``` + +- [ ] **Step 3: Commit (test RED)** + +```bash +git add packages/marketing-pages/src/application/use-cases/get-page-by-slug.use-case.ts packages/marketing-pages/src/application/use-cases/get-page-by-slug.use-case.test.ts +git commit -m "feat(marketing-pages): add getPageBySlugUseCase (test red until DI lands)" +``` + +- [ ] **Step 4: Write test `packages/marketing-pages/src/application/use-cases/get-site-settings.use-case.test.ts`** + +```typescript +import { beforeEach, describe, expect, it } from "vitest"; +import { marketingPagesContainer } from "@/di/container"; +import { MARKETING_PAGES_SYMBOLS } from "@/di/symbols"; +import { MockSiteSettingsRepository } from "@/infrastructure/repositories/mock-site-settings.repository"; +import type { ISiteSettingsRepository } from "@/application/repositories/site-settings-repository.interface"; +import { getSiteSettingsUseCase } from "./get-site-settings.use-case"; + +describe("getSiteSettingsUseCase", () => { + let repo: MockSiteSettingsRepository; + + beforeEach(() => { + if (marketingPagesContainer.isBound(MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository)) { + marketingPagesContainer.unbind(MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository); + } + repo = new MockSiteSettingsRepository(); + marketingPagesContainer + .bind(MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository) + .toConstantValue(repo); + }); + + it("returns the seeded site settings", async () => { + const result = await getSiteSettingsUseCase(); + expect(result.siteName).toBe("My App"); + }); +}); +``` + +- [ ] **Step 5: Implement `packages/marketing-pages/src/application/use-cases/get-site-settings.use-case.ts`** + +```typescript +import type { SiteSettings } from "../../entities/site-settings"; +import { marketingPagesContainer } from "../../di/container"; +import { MARKETING_PAGES_SYMBOLS } from "../../di/symbols"; +import type { ISiteSettingsRepository } from "../repositories/site-settings-repository.interface"; + +export async function getSiteSettingsUseCase(): Promise { + const repo = marketingPagesContainer.get( + MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository, + ); + return repo.getSiteSettings(); +} +``` + +- [ ] **Step 6: Commit (test RED)** + +```bash +git add packages/marketing-pages/src/application/use-cases/get-site-settings.use-case.ts packages/marketing-pages/src/application/use-cases/get-site-settings.use-case.test.ts +git commit -m "feat(marketing-pages): add getSiteSettingsUseCase (test red until DI lands)" +``` + +--- + +### Task 4.5: Mock repositories (pages + site-settings) + +- [ ] **Step 1: Create `packages/marketing-pages/src/infrastructure/repositories/mock-pages.repository.ts`** + +```typescript +import "reflect-metadata"; +import { injectable } from "inversify"; + +import type { IPagesRepository } from "../../application/repositories/pages-repository.interface"; +import type { Page } from "../../entities/page"; + +const SEED_DATE = new Date("2026-01-01T00:00:00.000Z"); + +@injectable() +export class MockPagesRepository implements IPagesRepository { + private _pages: Page[] = [ + { + id: "p1", + title: "About", + slug: "about", + hero: { heading: "About us" }, + layout: [], + status: "published", + publishedAt: SEED_DATE, + seo: { title: "About — My App" }, + createdAt: SEED_DATE, + updatedAt: SEED_DATE, + }, + ]; + + async getPageBySlug(slug: string): Promise { + return this._pages.find((p) => p.slug === slug); + } + + async getPages(options?: { + status?: string; + limit?: number; + offset?: number; + }): Promise { + let result = [...this._pages]; + if (options?.status) { + result = result.filter((p) => p.status === options.status); + } + const offset = options?.offset ?? 0; + const limit = options?.limit ?? 50; + return result.slice(offset, offset + limit); + } +} +``` + +- [ ] **Step 2: Create `packages/marketing-pages/src/infrastructure/repositories/mock-site-settings.repository.ts`** + +```typescript +import "reflect-metadata"; +import { injectable } from "inversify"; + +import type { ISiteSettingsRepository } from "../../application/repositories/site-settings-repository.interface"; +import type { SiteSettings } from "../../entities/site-settings"; + +@injectable() +export class MockSiteSettingsRepository implements ISiteSettingsRepository { + async getSiteSettings(): Promise { + return { + siteName: "My App", + siteDescription: "A vertical-feature monorepo template", + }; + } +} +``` + +- [ ] **Step 3: Verify compiles** + +Run: `cd packages/marketing-pages && pnpm typecheck` +Expected: PASS. + +- [ ] **Step 4: Commit** + +```bash +git add packages/marketing-pages/src/infrastructure/repositories +git commit -m "feat(marketing-pages): add Mock pages + site-settings repositories" +``` + +--- + +### Task 4.6: Per-feature DI container + tests + +- [ ] **Step 1: Write `packages/marketing-pages/src/di/container.test.ts`** + +```typescript +import { afterEach, beforeEach, describe, expect, it } from "vitest"; +import { marketingPagesContainer } from "./container"; +import { MARKETING_PAGES_SYMBOLS } from "./symbols"; +import { MarketingPagesModule } from "./module"; +import { MockPagesRepository } from "@/infrastructure/repositories/mock-pages.repository"; +import { MockSiteSettingsRepository } from "@/infrastructure/repositories/mock-site-settings.repository"; +import type { IPagesRepository } from "@/application/repositories/pages-repository.interface"; +import type { ISiteSettingsRepository } from "@/application/repositories/site-settings-repository.interface"; + +describe("marketingPagesContainer", () => { + beforeEach(() => { + marketingPagesContainer.unbindAll(); + marketingPagesContainer.load(MarketingPagesModule); + }); + + afterEach(() => { + marketingPagesContainer.unbindAll(); + }); + + it("resolves IPagesRepository to MockPagesRepository", () => { + const repo = marketingPagesContainer.get( + MARKETING_PAGES_SYMBOLS.IPagesRepository, + ); + expect(repo).toBeInstanceOf(MockPagesRepository); + }); + + it("resolves ISiteSettingsRepository to MockSiteSettingsRepository", () => { + const repo = marketingPagesContainer.get( + MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository, + ); + expect(repo).toBeInstanceOf(MockSiteSettingsRepository); + }); +}); +``` + +- [ ] **Step 2: Implement `packages/marketing-pages/src/di/symbols.ts`** + +```typescript +export const MARKETING_PAGES_SYMBOLS = { + IPagesRepository: Symbol.for("marketing-pages:IPagesRepository"), + ISiteSettingsRepository: Symbol.for("marketing-pages:ISiteSettingsRepository"), +} as const; +``` + +- [ ] **Step 3: Implement `packages/marketing-pages/src/di/module.ts`** + +```typescript +import { ContainerModule, type interfaces } from "inversify"; + +import type { IPagesRepository } from "../application/repositories/pages-repository.interface"; +import type { ISiteSettingsRepository } from "../application/repositories/site-settings-repository.interface"; +import { MockPagesRepository } from "../infrastructure/repositories/mock-pages.repository"; +import { MockSiteSettingsRepository } from "../infrastructure/repositories/mock-site-settings.repository"; +import { MARKETING_PAGES_SYMBOLS } from "./symbols"; + +export const MarketingPagesModule = new ContainerModule( + (bind: interfaces.Bind) => { + bind(MARKETING_PAGES_SYMBOLS.IPagesRepository).to( + MockPagesRepository, + ); + bind( + MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository, + ).to(MockSiteSettingsRepository); + }, +); +``` + +- [ ] **Step 4: Implement `packages/marketing-pages/src/di/container.ts`** + +```typescript +import "reflect-metadata"; +import { Container } from "inversify"; +import { MarketingPagesModule } from "./module"; + +export const marketingPagesContainer = new Container({ + defaultScope: "Singleton", +}); +marketingPagesContainer.load(MarketingPagesModule); +``` + +- [ ] **Step 5: Run container test — expect 2 PASS** + +Run: `cd packages/marketing-pages && pnpm vitest run src/di/container.test.ts` +Expected: PASS — 2 tests. + +- [ ] **Step 6: Run previously-RED use-case tests** + +Run: `cd packages/marketing-pages && pnpm vitest run src/application/use-cases` +Expected: PASS — 3 tests (page-by-slug 2 + site-settings 1). + +- [ ] **Step 7: Commit** + +```bash +git add packages/marketing-pages/src/di +git commit -m "feat(marketing-pages): add per-feature InversifyJS container" +``` + +--- + +### Task 4.7: Payload-backed repositories + +Both repositories take `SanitizedConfig` via constructor (per Plan 2 lesson #4). + +- [ ] **Step 1: Implement `packages/marketing-pages/src/infrastructure/repositories/payload-pages.repository.ts`** + +```typescript +import "reflect-metadata"; +import { injectable } from "inversify"; +import { getPayload } from "payload"; +import type { SanitizedConfig } from "payload"; + +import type { IPagesRepository } from "../../application/repositories/pages-repository.interface"; +import type { Page } from "../../entities/page"; + +type PayloadPageDoc = { + id: string | number; + title?: string | null; + slug?: string | null; + hero?: + | { + heading?: string | null; + subheading?: string | null; + image?: string | number | { id: string | number } | null; + } + | null; + layout?: unknown[] | null; + status?: string | null; + publishedAt?: string | null; + seo?: { title?: string | null; description?: string | null } | null; + createdAt?: string | null; + updatedAt?: string | null; +}; + +function mapDoc(doc: PayloadPageDoc): Page { + const imageId = + doc.hero && typeof doc.hero.image === "object" && doc.hero.image !== null + ? String(doc.hero.image.id) + : doc.hero?.image != null + ? String(doc.hero.image) + : undefined; + + return { + id: String(doc.id), + title: doc.title ?? "", + slug: doc.slug ?? "", + hero: { + heading: doc.hero?.heading ?? "", + subheading: doc.hero?.subheading ?? undefined, + imageId, + }, + layout: doc.layout ?? [], + status: doc.status === "published" ? "published" : "draft", + publishedAt: doc.publishedAt ? new Date(doc.publishedAt) : null, + seo: { + title: doc.seo?.title ?? "", + description: doc.seo?.description ?? undefined, + }, + createdAt: doc.createdAt ? new Date(doc.createdAt) : new Date(0), + updatedAt: doc.updatedAt ? new Date(doc.updatedAt) : new Date(0), + }; +} + +@injectable() +export class PayloadPagesRepository implements IPagesRepository { + private config: SanitizedConfig; + + constructor(config: SanitizedConfig) { + this.config = config; + } + + async getPageBySlug(slug: string): Promise { + const payload = await getPayload({ config: this.config }); + const result = await payload.find({ + collection: "pages", + where: { slug: { equals: slug } }, + limit: 1, + overrideAccess: false, + }); + const doc = result.docs[0] as PayloadPageDoc | undefined; + return doc ? mapDoc(doc) : undefined; + } + + async getPages(options?: { + status?: string; + limit?: number; + offset?: number; + }): Promise { + const payload = await getPayload({ config: this.config }); + const where: Record = {}; + if (options?.status) where.status = { equals: options.status }; + const result = await payload.find({ + collection: "pages", + where: where as never, + limit: options?.limit ?? 50, + page: options?.offset + ? Math.floor(options.offset / (options.limit ?? 50)) + 1 + : 1, + overrideAccess: false, + }); + return result.docs.map((d) => mapDoc(d as PayloadPageDoc)); + } +} +``` + +- [ ] **Step 2: Implement `packages/marketing-pages/src/infrastructure/repositories/payload-site-settings.repository.ts`** + +```typescript +import "reflect-metadata"; +import { injectable } from "inversify"; +import { getPayload } from "payload"; +import type { SanitizedConfig } from "payload"; + +import type { ISiteSettingsRepository } from "../../application/repositories/site-settings-repository.interface"; +import type { SiteSettings } from "../../entities/site-settings"; + +type PayloadSiteSettings = { + siteName?: string | null; + siteDescription?: string | null; +}; + +@injectable() +export class PayloadSiteSettingsRepository implements ISiteSettingsRepository { + private config: SanitizedConfig; + + constructor(config: SanitizedConfig) { + this.config = config; + } + + async getSiteSettings(): Promise { + const payload = await getPayload({ config: this.config }); + const doc = (await payload.findGlobal({ + slug: "site-settings", + overrideAccess: false, + })) as PayloadSiteSettings; + return { + siteName: doc.siteName ?? "My App", + siteDescription: doc.siteDescription ?? undefined, + }; + } +} +``` + +- [ ] **Step 3: Verify compiles** + +Run: `cd packages/marketing-pages && pnpm typecheck` +Expected: PASS. + +- [ ] **Step 4: Commit** + +```bash +git add packages/marketing-pages/src/infrastructure/repositories +git commit -m "feat(marketing-pages): add Payload-backed pages + site-settings repos (constructor-injected config)" +``` + +--- + +### Task 4.8: Pages controller + tests + +- [ ] **Step 1: Write test `packages/marketing-pages/src/interface-adapters/controllers/pages.controller.test.ts`** + +```typescript +import { beforeEach, describe, expect, it } from "vitest"; +import { marketingPagesContainer } from "@/di/container"; +import { MARKETING_PAGES_SYMBOLS } from "@/di/symbols"; +import { MockPagesRepository } from "@/infrastructure/repositories/mock-pages.repository"; +import { MockSiteSettingsRepository } from "@/infrastructure/repositories/mock-site-settings.repository"; +import type { IPagesRepository } from "@/application/repositories/pages-repository.interface"; +import type { ISiteSettingsRepository } from "@/application/repositories/site-settings-repository.interface"; +import { InputParseError } from "@/entities/errors"; +import { + getPageBySlugController, + getSiteSettingsController, +} from "./pages.controller"; + +describe("pages controller", () => { + beforeEach(() => { + if (marketingPagesContainer.isBound(MARKETING_PAGES_SYMBOLS.IPagesRepository)) { + marketingPagesContainer.unbind(MARKETING_PAGES_SYMBOLS.IPagesRepository); + } + if (marketingPagesContainer.isBound(MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository)) { + marketingPagesContainer.unbind(MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository); + } + marketingPagesContainer + .bind(MARKETING_PAGES_SYMBOLS.IPagesRepository) + .toConstantValue(new MockPagesRepository()); + marketingPagesContainer + .bind(MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository) + .toConstantValue(new MockSiteSettingsRepository()); + }); + + describe("getPageBySlugController", () => { + it("returns the page when found", async () => { + const result = await getPageBySlugController({ slug: "about" }); + expect(result?.slug).toBe("about"); + }); + + it("throws InputParseError on missing slug", async () => { + await expect( + getPageBySlugController({} as { slug: string }), + ).rejects.toBeInstanceOf(InputParseError); + }); + }); + + describe("getSiteSettingsController", () => { + it("returns site settings", async () => { + const result = await getSiteSettingsController(); + expect(result.siteName).toBe("My App"); + }); + }); +}); +``` + +- [ ] **Step 2: Implement `packages/marketing-pages/src/interface-adapters/controllers/pages.controller.ts`** + +```typescript +import { z } from "zod"; + +import { InputParseError } from "../../entities/errors"; +import type { Page } from "../../entities/page"; +import type { SiteSettings } from "../../entities/site-settings"; +import { getPageBySlugUseCase } from "../../application/use-cases/get-page-by-slug.use-case"; +import { getSiteSettingsUseCase } from "../../application/use-cases/get-site-settings.use-case"; + +const getBySlugInputSchema = z.object({ + slug: z.string().min(1), +}); + +export async function getPageBySlugController(input: { + slug: string; +}): Promise { + const parsed = getBySlugInputSchema.safeParse(input); + if (!parsed.success) { + throw new InputParseError("Invalid get-page-by-slug input", { + cause: parsed.error, + }); + } + return getPageBySlugUseCase(parsed.data.slug); +} + +export async function getSiteSettingsController(): Promise { + return getSiteSettingsUseCase(); +} +``` + +- [ ] **Step 3: Run — expect 3 PASS** + +Run: `cd packages/marketing-pages && pnpm vitest run src/interface-adapters` +Expected: PASS — 3 tests. + +- [ ] **Step 4: Commit** + +```bash +git add packages/marketing-pages/src/interface-adapters +git commit -m "feat(marketing-pages): add pages controller (getBySlug + getSiteSettings)" +``` + +--- + +### Task 4.9: Pages collection + SiteSettings global + +- [ ] **Step 1: Create `packages/marketing-pages/src/integrations/cms/collections/pages.ts`** + +```typescript +import type { CollectionConfig } from "payload"; +import { + cta, + seoFields, + slugifyIfMissing, +} from "@repo/core-shared/payload"; + +export const pages: CollectionConfig = { + slug: "pages", + admin: { + useAsTitle: "title", + defaultColumns: ["title", "status", "updatedAt"], + }, + hooks: { + beforeChange: [slugifyIfMissing], + }, + versions: { + drafts: true, + }, + fields: [ + { + name: "title", + type: "text", + required: true, + maxLength: 255, + }, + { + name: "slug", + type: "text", + unique: true, + admin: { + position: "sidebar", + description: "Auto-generated from title if left empty", + }, + }, + { + name: "hero", + type: "group", + fields: [ + { name: "heading", type: "text", required: true }, + { name: "subheading", type: "textarea" }, + { + name: "image", + type: "upload", + relationTo: "media", + }, + ], + }, + { + name: "layout", + type: "blocks", + blocks: [cta], + }, + { + name: "status", + type: "select", + options: [ + { label: "Draft", value: "draft" }, + { label: "Published", value: "published" }, + ], + defaultValue: "draft", + required: true, + admin: { position: "sidebar" }, + }, + { + name: "publishedAt", + type: "date", + admin: { + position: "sidebar", + date: { pickerAppearance: "dayAndTime" }, + }, + }, + seoFields, + ], +}; +``` + +- [ ] **Step 2: Create `packages/marketing-pages/src/integrations/cms/globals/site-settings.ts`** + +```typescript +import type { GlobalConfig } from "payload"; + +export const siteSettings: GlobalConfig = { + slug: "site-settings", + admin: { + group: "Settings", + }, + fields: [ + { + name: "siteName", + type: "text", + required: true, + defaultValue: "My App", + }, + { + name: "siteDescription", + type: "textarea", + }, + ], +}; +``` + +- [ ] **Step 3: Create `packages/marketing-pages/src/integrations/cms/index.ts`** + +```typescript +export { pages } from "./collections/pages"; +export { siteSettings } from "./globals/site-settings"; +``` + +- [ ] **Step 4: Verify compiles** + +Run: `cd packages/marketing-pages && pnpm typecheck` +Expected: PASS. + +- [ ] **Step 5: Commit** + +```bash +git add packages/marketing-pages/src/integrations/cms +git commit -m "feat(marketing-pages): add pages collection + siteSettings global" +``` + +--- + +### Task 4.10: tRPC router + tests + +- [ ] **Step 1: Write test `packages/marketing-pages/src/integrations/api/router.test.ts`** + +```typescript +import { beforeEach, describe, expect, it } from "vitest"; +import { marketingPagesContainer } from "@/di/container"; +import { MARKETING_PAGES_SYMBOLS } from "@/di/symbols"; +import { MockPagesRepository } from "@/infrastructure/repositories/mock-pages.repository"; +import { MockSiteSettingsRepository } from "@/infrastructure/repositories/mock-site-settings.repository"; +import type { IPagesRepository } from "@/application/repositories/pages-repository.interface"; +import type { ISiteSettingsRepository } from "@/application/repositories/site-settings-repository.interface"; +import { marketingPagesRouter } from "./router"; + +describe("marketingPagesRouter", () => { + beforeEach(() => { + if (marketingPagesContainer.isBound(MARKETING_PAGES_SYMBOLS.IPagesRepository)) { + marketingPagesContainer.unbind(MARKETING_PAGES_SYMBOLS.IPagesRepository); + } + if (marketingPagesContainer.isBound(MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository)) { + marketingPagesContainer.unbind(MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository); + } + marketingPagesContainer + .bind(MARKETING_PAGES_SYMBOLS.IPagesRepository) + .toConstantValue(new MockPagesRepository()); + marketingPagesContainer + .bind(MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository) + .toConstantValue(new MockSiteSettingsRepository()); + }); + + it("exposes pageBySlug + siteSettings procedures", () => { + const names = Object.keys(marketingPagesRouter._def.procedures); + expect(names).toContain("pageBySlug"); + expect(names).toContain("siteSettings"); + }); + + it("pageBySlug returns the seeded About page", async () => { + const caller = marketingPagesRouter.createCaller({}); + const result = await caller.pageBySlug({ slug: "about" }); + expect(result?.title).toBe("About"); + }); + + it("siteSettings returns site name", async () => { + const caller = marketingPagesRouter.createCaller({}); + const result = await caller.siteSettings(); + expect(result.siteName).toBe("My App"); + }); +}); +``` + +- [ ] **Step 2: Implement `packages/marketing-pages/src/integrations/api/router.ts`** + +```typescript +import { z } from "zod"; +import { router, publicProcedure } from "@repo/core-shared/trpc/init"; +import { + getPageBySlugController, + getSiteSettingsController, +} from "../../interface-adapters/controllers/pages.controller"; + +export const marketingPagesRouter = router({ + pageBySlug: publicProcedure + .input(z.object({ slug: z.string().min(1) })) + .query(({ input }) => getPageBySlugController(input)), + + siteSettings: publicProcedure.query(() => getSiteSettingsController()), +}); + +export type MarketingPagesRouter = typeof marketingPagesRouter; +``` + +- [ ] **Step 3: Run — expect 3 PASS** + +Run: `cd packages/marketing-pages && pnpm vitest run src/integrations/api/router.test.ts` +Expected: PASS — 3 tests. + +- [ ] **Step 4: Commit** + +```bash +git add packages/marketing-pages/src/integrations/api +git commit -m "feat(marketing-pages): add tRPC router with pageBySlug + siteSettings" +``` + +--- + +### Task 4.11: ui/query + barrel + feature test + +- [ ] **Step 1: Create `packages/marketing-pages/src/ui/query.ts`** + +```typescript +type TrpcClient = { + marketingPages: { + pageBySlug: { queryOptions: (input: { slug: string }) => unknown }; + siteSettings: { queryOptions: () => unknown }; + }; +}; + +export function pageBySlugQuery(client: TrpcClient, slug: string) { + return client.marketingPages.pageBySlug.queryOptions({ slug }); +} + +export function siteSettingsQuery(client: TrpcClient) { + return client.marketingPages.siteSettings.queryOptions(); +} +``` + +- [ ] **Step 2: Replace `packages/marketing-pages/src/index.ts`** + +```typescript +export type { Page, PageStatus, Hero } from "./entities/page"; +export type { SiteSettings } from "./entities/site-settings"; +export { PageNotFoundError, InputParseError } from "./entities/errors"; +export { pageBySlugQuery, siteSettingsQuery } from "./ui/query"; +``` + +- [ ] **Step 3: Create feature test `packages/marketing-pages/tests/page-by-slug.feature.test.ts`** + +```typescript +import { beforeEach, describe, expect, it } from "vitest"; +import { marketingPagesContainer } from "../src/di/container"; +import { MARKETING_PAGES_SYMBOLS } from "../src/di/symbols"; +import { MockPagesRepository } from "../src/infrastructure/repositories/mock-pages.repository"; +import { MockSiteSettingsRepository } from "../src/infrastructure/repositories/mock-site-settings.repository"; +import type { IPagesRepository } from "../src/application/repositories/pages-repository.interface"; +import type { ISiteSettingsRepository } from "../src/application/repositories/site-settings-repository.interface"; +import { marketingPagesRouter } from "../src/integrations/api/router"; + +describe("marketing-pages feature: page-by-slug end-to-end", () => { + beforeEach(() => { + if (marketingPagesContainer.isBound(MARKETING_PAGES_SYMBOLS.IPagesRepository)) { + marketingPagesContainer.unbind(MARKETING_PAGES_SYMBOLS.IPagesRepository); + } + if (marketingPagesContainer.isBound(MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository)) { + marketingPagesContainer.unbind(MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository); + } + marketingPagesContainer + .bind(MARKETING_PAGES_SYMBOLS.IPagesRepository) + .toConstantValue(new MockPagesRepository()); + marketingPagesContainer + .bind(MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository) + .toConstantValue(new MockSiteSettingsRepository()); + }); + + it("fetches a page by slug via tRPC and returns the domain entity", async () => { + const caller = marketingPagesRouter.createCaller({}); + const page = await caller.pageBySlug({ slug: "about" }); + expect(page?.title).toBe("About"); + expect(page?.hero.heading).toBe("About us"); + expect(page?.status).toBe("published"); + }); +}); +``` + +- [ ] **Step 4: Run all marketing-pages tests** + +Run: `cd packages/marketing-pages && pnpm test` +Expected: PASS — entities (4) + di (2) + use-cases (3) + controller (3) + router (3) + feature (1) = 16 tests. + +- [ ] **Step 5: Commit** + +```bash +git add packages/marketing-pages/src/ui packages/marketing-pages/src/index.ts packages/marketing-pages/tests +git commit -m "feat(marketing-pages): add ui/query + barrel + feature test" +``` + +--- + +## Phase B: Navigation feature + +### Task 4.12: Scaffold @repo/navigation package + +- [ ] **Step 1: Create `packages/navigation/package.json`** + +```json +{ + "name": "@repo/navigation", + "private": true, + "version": "0.0.0", + "type": "module", + "exports": { + ".": "./src/index.ts", + "./cms": "./src/integrations/cms/index.ts", + "./api": "./src/integrations/api/router.ts" + }, + "scripts": { + "build": "tsc --noEmit", + "lint": "eslint .", + "test": "vitest run --passWithNoTests", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@repo/core-shared": "workspace:*", + "@trpc/server": "^11.0.0", + "inversify": "^6.2.0", + "payload": "^3.14.0", + "reflect-metadata": "^0.2.2", + "zod": "^3.24.0" + }, + "devDependencies": { + "@repo/eslint-config": "workspace:*", + "@repo/typescript-config": "workspace:*", + "@types/node": "^22.0.0", + "vitest": "^3.1.0" + } +} +``` + +- [ ] **Step 2: Create `packages/navigation/tsconfig.json`** (same shape as marketing-pages tsconfig from Task 4.1 step 2) + +- [ ] **Step 3: Create `packages/navigation/turbo.json`** (same as Task 4.1 step 3) + +- [ ] **Step 4: Create `packages/navigation/vitest.config.ts`** (same as Task 4.1 step 4) + +- [ ] **Step 5: Create `packages/navigation/src/index.ts`** (`export {};`) + +- [ ] **Step 6: Add path aliases to `tsconfig.base.json`** + +```json +"@repo/navigation": ["packages/navigation/src/index.ts"], +"@repo/navigation/cms": ["packages/navigation/src/integrations/cms/index.ts"], +"@repo/navigation/api": ["packages/navigation/src/integrations/api/router.ts"] +``` + +- [ ] **Step 7: Install + verify** + +Run: `pnpm install` +Verify: `pnpm list --recursive --depth=-1 | grep navigation` + +- [ ] **Step 8: Commit** + +```bash +git add packages/navigation tsconfig.base.json pnpm-lock.yaml +git commit -m "feat(navigation): scaffold empty package with feature tag + path aliases" +``` + +--- + +### Task 4.13: Header entity, repo interface, use-case + tests, mock repo, payload repo, DI + +This task batches all the application + infrastructure + DI for navigation since it's small. + +- [ ] **Step 1: Create `packages/navigation/src/entities/header.ts`** + +```typescript +import { z } from "zod"; + +export const headerItemSchema = z.object({ + label: z.string().min(1).max(64), + href: z.string().min(1), + external: z.boolean().default(false), +}); + +export const headerSchema = z.object({ + logoId: z.string().optional(), + items: z.array(headerItemSchema), +}); + +export type Header = z.infer; +export type HeaderItem = z.infer; +``` + +- [ ] **Step 2: Create `packages/navigation/src/application/repositories/header-repository.interface.ts`** + +```typescript +import type { Header } from "../../entities/header"; + +export interface IHeaderRepository { + getHeader(): Promise
; +} +``` + +- [ ] **Step 3: Write test `packages/navigation/src/application/use-cases/get-header.use-case.test.ts`** + +```typescript +import { beforeEach, describe, expect, it } from "vitest"; +import { navigationContainer } from "@/di/container"; +import { NAVIGATION_SYMBOLS } from "@/di/symbols"; +import { MockHeaderRepository } from "@/infrastructure/repositories/mock-header.repository"; +import type { IHeaderRepository } from "@/application/repositories/header-repository.interface"; +import { getHeaderUseCase } from "./get-header.use-case"; + +describe("getHeaderUseCase", () => { + beforeEach(() => { + if (navigationContainer.isBound(NAVIGATION_SYMBOLS.IHeaderRepository)) { + navigationContainer.unbind(NAVIGATION_SYMBOLS.IHeaderRepository); + } + navigationContainer + .bind(NAVIGATION_SYMBOLS.IHeaderRepository) + .toConstantValue(new MockHeaderRepository()); + }); + + it("returns the seeded header items", async () => { + const result = await getHeaderUseCase(); + expect(result.items.length).toBeGreaterThan(0); + expect(result.items[0]?.label).toBe("Home"); + }); +}); +``` + +- [ ] **Step 4: Implement `packages/navigation/src/application/use-cases/get-header.use-case.ts`** + +```typescript +import type { Header } from "../../entities/header"; +import { navigationContainer } from "../../di/container"; +import { NAVIGATION_SYMBOLS } from "../../di/symbols"; +import type { IHeaderRepository } from "../repositories/header-repository.interface"; + +export async function getHeaderUseCase(): Promise
{ + const repo = navigationContainer.get( + NAVIGATION_SYMBOLS.IHeaderRepository, + ); + return repo.getHeader(); +} +``` + +- [ ] **Step 5: Implement `packages/navigation/src/infrastructure/repositories/mock-header.repository.ts`** + +```typescript +import "reflect-metadata"; +import { injectable } from "inversify"; + +import type { IHeaderRepository } from "../../application/repositories/header-repository.interface"; +import type { Header } from "../../entities/header"; + +@injectable() +export class MockHeaderRepository implements IHeaderRepository { + async getHeader(): Promise
{ + return { + items: [ + { label: "Home", href: "/", external: false }, + { label: "Blog", href: "/blog", external: false }, + { label: "About", href: "/about", external: false }, + ], + }; + } +} +``` + +- [ ] **Step 6: Implement `packages/navigation/src/infrastructure/repositories/payload-header.repository.ts`** + +```typescript +import "reflect-metadata"; +import { injectable } from "inversify"; +import { getPayload } from "payload"; +import type { SanitizedConfig } from "payload"; + +import type { IHeaderRepository } from "../../application/repositories/header-repository.interface"; +import type { Header, HeaderItem } from "../../entities/header"; + +type PayloadHeaderGlobal = { + logo?: string | number | { id: string | number } | null; + items?: Array<{ + label?: string | null; + href?: string | null; + external?: boolean | null; + }> | null; +}; + +@injectable() +export class PayloadHeaderRepository implements IHeaderRepository { + private config: SanitizedConfig; + + constructor(config: SanitizedConfig) { + this.config = config; + } + + async getHeader(): Promise
{ + const payload = await getPayload({ config: this.config }); + const doc = (await payload.findGlobal({ + slug: "header", + overrideAccess: false, + })) as PayloadHeaderGlobal; + + const logoId = + typeof doc.logo === "object" && doc.logo !== null + ? String(doc.logo.id) + : doc.logo != null + ? String(doc.logo) + : undefined; + + const items: HeaderItem[] = (doc.items ?? []).map((item) => ({ + label: item.label ?? "", + href: item.href ?? "", + external: item.external ?? false, + })); + + return { logoId, items }; + } +} +``` + +- [ ] **Step 7: Implement `packages/navigation/src/di/symbols.ts`** + +```typescript +export const NAVIGATION_SYMBOLS = { + IHeaderRepository: Symbol.for("navigation:IHeaderRepository"), +} as const; +``` + +- [ ] **Step 8: Implement `packages/navigation/src/di/module.ts`** + +```typescript +import { ContainerModule, type interfaces } from "inversify"; + +import type { IHeaderRepository } from "../application/repositories/header-repository.interface"; +import { MockHeaderRepository } from "../infrastructure/repositories/mock-header.repository"; +import { NAVIGATION_SYMBOLS } from "./symbols"; + +export const NavigationModule = new ContainerModule((bind: interfaces.Bind) => { + bind(NAVIGATION_SYMBOLS.IHeaderRepository).to( + MockHeaderRepository, + ); +}); +``` + +- [ ] **Step 9: Implement `packages/navigation/src/di/container.ts`** + +```typescript +import "reflect-metadata"; +import { Container } from "inversify"; +import { NavigationModule } from "./module"; + +export const navigationContainer = new Container({ defaultScope: "Singleton" }); +navigationContainer.load(NavigationModule); +``` + +- [ ] **Step 10: Write `packages/navigation/src/di/container.test.ts`** + +```typescript +import { afterEach, beforeEach, describe, expect, it } from "vitest"; +import { navigationContainer } from "./container"; +import { NAVIGATION_SYMBOLS } from "./symbols"; +import { NavigationModule } from "./module"; +import { MockHeaderRepository } from "@/infrastructure/repositories/mock-header.repository"; +import type { IHeaderRepository } from "@/application/repositories/header-repository.interface"; + +describe("navigationContainer", () => { + beforeEach(() => { + navigationContainer.unbindAll(); + navigationContainer.load(NavigationModule); + }); + + afterEach(() => { + navigationContainer.unbindAll(); + }); + + it("resolves IHeaderRepository to MockHeaderRepository", () => { + const repo = navigationContainer.get( + NAVIGATION_SYMBOLS.IHeaderRepository, + ); + expect(repo).toBeInstanceOf(MockHeaderRepository); + }); +}); +``` + +- [ ] **Step 11: Run all tests** + +Run: `cd packages/navigation && pnpm test` +Expected: PASS — 2 tests (use-case 1 + container 1). + +- [ ] **Step 12: Commit** + +```bash +git add packages/navigation/src +git commit -m "feat(navigation): add Header entity + use-case + mock/payload repos + DI container" +``` + +--- + +### Task 4.14: Header controller + tRPC router + tests + CMS global + barrel + +- [ ] **Step 1: Create `packages/navigation/src/interface-adapters/controllers/header.controller.ts`** + +```typescript +import type { Header } from "../../entities/header"; +import { getHeaderUseCase } from "../../application/use-cases/get-header.use-case"; + +export async function getHeaderController(): Promise
{ + return getHeaderUseCase(); +} +``` + +> Note: No Zod input — `getHeader` takes no input. No InputParseError needed. + +- [ ] **Step 2: Create `packages/navigation/src/integrations/cms/globals/header.ts`** + +```typescript +import type { GlobalConfig } from "payload"; + +export const header: GlobalConfig = { + slug: "header", + admin: { + group: "Navigation", + }, + fields: [ + { + name: "logo", + type: "upload", + relationTo: "media", + }, + { + name: "items", + type: "array", + fields: [ + { name: "label", type: "text", required: true }, + { name: "href", type: "text", required: true }, + { name: "external", type: "checkbox", defaultValue: false }, + ], + }, + ], +}; +``` + +- [ ] **Step 3: Create `packages/navigation/src/integrations/cms/index.ts`** + +```typescript +export { header } from "./globals/header"; +``` + +- [ ] **Step 4: Write test `packages/navigation/src/integrations/api/router.test.ts`** + +```typescript +import { beforeEach, describe, expect, it } from "vitest"; +import { navigationContainer } from "@/di/container"; +import { NAVIGATION_SYMBOLS } from "@/di/symbols"; +import { MockHeaderRepository } from "@/infrastructure/repositories/mock-header.repository"; +import type { IHeaderRepository } from "@/application/repositories/header-repository.interface"; +import { navigationRouter } from "./router"; + +describe("navigationRouter", () => { + beforeEach(() => { + if (navigationContainer.isBound(NAVIGATION_SYMBOLS.IHeaderRepository)) { + navigationContainer.unbind(NAVIGATION_SYMBOLS.IHeaderRepository); + } + navigationContainer + .bind(NAVIGATION_SYMBOLS.IHeaderRepository) + .toConstantValue(new MockHeaderRepository()); + }); + + it("exposes header procedure", () => { + const names = Object.keys(navigationRouter._def.procedures); + expect(names).toContain("header"); + }); + + it("header returns 3 items", async () => { + const caller = navigationRouter.createCaller({}); + const result = await caller.header(); + expect(result.items).toHaveLength(3); + }); +}); +``` + +- [ ] **Step 5: Implement `packages/navigation/src/integrations/api/router.ts`** + +```typescript +import { router, publicProcedure } from "@repo/core-shared/trpc/init"; +import { getHeaderController } from "../../interface-adapters/controllers/header.controller"; + +export const navigationRouter = router({ + header: publicProcedure.query(() => getHeaderController()), +}); + +export type NavigationRouter = typeof navigationRouter; +``` + +- [ ] **Step 6: Create `packages/navigation/src/ui/query.ts`** + +```typescript +type TrpcClient = { + navigation: { + header: { queryOptions: () => unknown }; + }; +}; + +export function headerQuery(client: TrpcClient) { + return client.navigation.header.queryOptions(); +} +``` + +- [ ] **Step 7: Replace `packages/navigation/src/index.ts`** + +```typescript +export type { Header, HeaderItem } from "./entities/header"; +export { headerQuery } from "./ui/query"; +``` + +- [ ] **Step 8: Run all navigation tests** + +Run: `cd packages/navigation && pnpm test` +Expected: PASS — 4 tests (use-case 1 + container 1 + router 2). + +- [ ] **Step 9: Commit** + +```bash +git add packages/navigation/src +git commit -m "feat(navigation): add controller + tRPC router + header global + barrel" +``` + +--- + +## Phase C: Compose into core-cms + core-api + +### Task 4.15: Wire pages + globals into core-cms + +- [ ] **Step 1: Add `@repo/marketing-pages` and `@repo/navigation` to `packages/core-cms/package.json`** + +Add to `dependencies`: + +```json +"@repo/marketing-pages": "workspace:*", +"@repo/navigation": "workspace:*", +``` + +- [ ] **Step 2: Replace `packages/core-cms/src/payload.config.ts`** + +```typescript +import { buildConfig } from "payload"; +import { postgresAdapter } from "@payloadcms/db-postgres"; +import { lexicalEditor } from "@payloadcms/richtext-lexical"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +import { users } from "@repo/auth/cms"; +import { articles } from "@repo/blog/cms"; +import { media } from "@repo/media/cms"; +import { pages, siteSettings } from "@repo/marketing-pages/cms"; +import { header } from "@repo/navigation/cms"; + +const filename = fileURLToPath(import.meta.url); +const dirname = path.dirname(filename); + +export default buildConfig({ + editor: lexicalEditor(), + collections: [users, articles, pages, media], + globals: [siteSettings, header], + secret: process.env.PAYLOAD_SECRET || "default-secret-change-me", + db: postgresAdapter({ + pool: { + connectionString: + process.env.DATABASE_URL || + "postgresql://postgres:postgres@localhost:5432/template", + }, + }), + typescript: { + outputFile: path.resolve(dirname, "generated-types.ts"), + }, +}); +``` + +- [ ] **Step 3: Install + typecheck** + +Run: `pnpm install` then `pnpm typecheck --filter @repo/core-cms` +Expected: PASS. + +- [ ] **Step 4: Commit** + +```bash +git add packages/core-cms pnpm-lock.yaml +git commit -m "feat(core-cms): compose pages + siteSettings + header into payload config" +``` + +--- + +### Task 4.16: Wire marketingPagesRouter + navigationRouter into core-api + +- [ ] **Step 1: Add to `packages/core-api/package.json` dependencies** + +```json +"@repo/marketing-pages": "workspace:*", +"@repo/navigation": "workspace:*", +``` + +- [ ] **Step 2: Replace `packages/core-api/src/root.ts`** + +```typescript +import { router } from "@repo/core-shared/trpc/init"; +import { authRouter } from "@repo/auth/api"; +import { blogRouter } from "@repo/blog/api"; +import { marketingPagesRouter } from "@repo/marketing-pages/api"; +import { navigationRouter } from "@repo/navigation/api"; + +export const appRouter = router({ + auth: authRouter, + blog: blogRouter, + marketingPages: marketingPagesRouter, + navigation: navigationRouter, +}); + +export type AppRouter = typeof appRouter; +``` + +- [ ] **Step 3: Install + typecheck** + +Run: `pnpm install` then `pnpm typecheck --filter @repo/core-api --filter @repo/marketing-pages --filter @repo/navigation` +Expected: ALL PASS. + +- [ ] **Step 4: Commit** + +```bash +git add packages/core-api pnpm-lock.yaml +git commit -m "feat(core-api): compose marketingPages + navigation routers into appRouter" +``` + +--- + +### Task 4.17: Final verification + cms smoke test + +- [ ] **Step 1: Run all tests** + +Run: `pnpm test --filter @repo/marketing-pages --filter @repo/navigation --filter @repo/blog --filter @repo/auth --filter @repo/core-shared` +Expected: PASS. Marketing-pages: 16, Navigation: 4, Blog: 26, Auth: 24, Core-shared: 26 = 96 total. + +- [ ] **Step 2: Repo-wide typecheck** + +Run: `pnpm typecheck` +Expected: PASS for all packages except pre-existing `@repo/api` and `@repo/ui` failures. + +- [ ] **Step 3: CMS admin smoke test** + +Verify postgres: `docker ps | grep postgres`. If not running: `docker compose up -d postgres`. + +Start cms in background: +```bash +pnpm dev --filter @repo/cms & +DEV_PID=$! +sleep 15 +``` + +Test endpoints: +```bash +curl -sf -o /dev/null -w "%{http_code}\n" http://localhost:3001/admin +curl -sf -o /dev/null -w "%{http_code}\n" http://localhost:3001/admin/collections/pages +curl -sf -o /dev/null -w "%{http_code}\n" http://localhost:3001/admin/globals/site-settings +curl -sf -o /dev/null -w "%{http_code}\n" http://localhost:3001/admin/globals/header +``` +Expected: ALL return 200. + +Kill: +```bash +kill $DEV_PID 2>/dev/null +pkill -f "next.*3001" 2>/dev/null +``` + +- [ ] **Step 4: Regenerate types** + +Run: `cd apps/cms && pnpm generate:types` + +Verify: +```bash +cd /Users/danijel/Documents/Projects/template-vertical/.worktrees/vertical-refactor +grep -E "Page|SiteSetting|Header" packages/core-cms/src/generated-types.ts | wc -l +``` +Expected: at least 5 occurrences. + +- [ ] **Step 5: Commit regenerated types if changed** + +```bash +git add packages/core-cms/src/generated-types.ts +git diff --cached --quiet || git commit -m "feat(core-cms): regenerate types — now includes Pages, SiteSettings, Header" +``` + +--- + +## Plan 4 Done Criteria + +- [ ] Marketing-pages tests pass (16) +- [ ] Navigation tests pass (4) +- [ ] All other features still pass (blog 26, auth 24) +- [ ] `apps/cms` admin serves `/admin/collections/pages`, `/admin/globals/site-settings`, `/admin/globals/header` — all 200 +- [ ] `pnpm generate:types` produces a `generated-types.ts` containing Pages, SiteSettings, Header +- [ ] `core-cms/src/payload.config.ts` registers `pages` collection + `siteSettings` and `header` globals +- [ ] `core-api/src/root.ts` exposes 4 namespaces: `auth`, `blog`, `marketingPages`, `navigation` + +**Next plan:** Plan 5 — App + UI integration. Wire `core-trpc` (client + per-framework providers), add tRPC route handlers in `apps/web-next` and `apps/web-tanstack`, build example pages (`/`, `/about`, `/blog/[slug]`) that consume the feature ui/query helpers. First plan that actually renders the features in a browser. From 9e8adb67c04dc06da642cd4b5e3552db52e17480 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:27:34 +0200 Subject: [PATCH 070/129] feat(marketing-pages): scaffold empty package with feature tag + path aliases --- packages/marketing-pages/package.json | 31 +++++++++++++++++++++ packages/marketing-pages/src/index.ts | 1 + packages/marketing-pages/tsconfig.json | 13 +++++++++ packages/marketing-pages/turbo.json | 4 +++ packages/marketing-pages/vitest.config.ts | 11 ++++++++ pnpm-lock.yaml | 34 +++++++++++++++++++++++ tsconfig.base.json | 5 +++- 7 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 packages/marketing-pages/package.json create mode 100644 packages/marketing-pages/src/index.ts create mode 100644 packages/marketing-pages/tsconfig.json create mode 100644 packages/marketing-pages/turbo.json create mode 100644 packages/marketing-pages/vitest.config.ts diff --git a/packages/marketing-pages/package.json b/packages/marketing-pages/package.json new file mode 100644 index 0000000..5411ce0 --- /dev/null +++ b/packages/marketing-pages/package.json @@ -0,0 +1,31 @@ +{ + "name": "@repo/marketing-pages", + "private": true, + "version": "0.0.0", + "type": "module", + "exports": { + ".": "./src/index.ts", + "./cms": "./src/integrations/cms/index.ts", + "./api": "./src/integrations/api/router.ts" + }, + "scripts": { + "build": "tsc --noEmit", + "lint": "eslint .", + "test": "vitest run --passWithNoTests", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@repo/core-shared": "workspace:*", + "@trpc/server": "^11.0.0", + "inversify": "^6.2.0", + "payload": "^3.14.0", + "reflect-metadata": "^0.2.2", + "zod": "^3.24.0" + }, + "devDependencies": { + "@repo/eslint-config": "workspace:*", + "@repo/typescript-config": "workspace:*", + "@types/node": "^22.0.0", + "vitest": "^3.1.0" + } +} diff --git a/packages/marketing-pages/src/index.ts b/packages/marketing-pages/src/index.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/packages/marketing-pages/src/index.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/marketing-pages/tsconfig.json b/packages/marketing-pages/tsconfig.json new file mode 100644 index 0000000..ee87524 --- /dev/null +++ b/packages/marketing-pages/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "@repo/typescript-config/base.json", + "compilerOptions": { + "outDir": "dist", + "lib": ["ES2022", "DOM"], + "jsx": "preserve", + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["src/**/*", "tests/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/marketing-pages/turbo.json b/packages/marketing-pages/turbo.json new file mode 100644 index 0000000..8a1d41a --- /dev/null +++ b/packages/marketing-pages/turbo.json @@ -0,0 +1,4 @@ +{ + "extends": ["//"], + "tags": ["feature"] +} diff --git a/packages/marketing-pages/vitest.config.ts b/packages/marketing-pages/vitest.config.ts new file mode 100644 index 0000000..dfa8265 --- /dev/null +++ b/packages/marketing-pages/vitest.config.ts @@ -0,0 +1,11 @@ +import path from "node:path"; +import { baseVitestConfig } from "@repo/typescript-config/vitest.base"; + +export default { + ...baseVitestConfig, + resolve: { + alias: { + "@": path.resolve(__dirname, "./src"), + }, + }, +}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2cdb3ff..b6b22d7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -523,6 +523,40 @@ importers: specifier: ^8.25.0 version: 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + packages/marketing-pages: + dependencies: + '@repo/core-shared': + specifier: workspace:* + version: link:../core-shared + '@trpc/server': + specifier: ^11.0.0 + version: 11.16.0(typescript@5.9.3) + inversify: + specifier: ^6.2.0 + version: 6.2.2(reflect-metadata@0.2.2) + payload: + specifier: ^3.14.0 + version: 3.81.0(graphql@16.13.2)(typescript@5.9.3) + reflect-metadata: + specifier: ^0.2.2 + version: 0.2.2 + zod: + specifier: ^3.24.0 + version: 3.25.76 + devDependencies: + '@repo/eslint-config': + specifier: workspace:* + version: link:../eslint-config + '@repo/typescript-config': + specifier: workspace:* + version: link:../typescript-config + '@types/node': + specifier: ^22.0.0 + version: 22.19.17 + vitest: + specifier: ^3.1.0 + version: 3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(happy-dom@20.8.9)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(tsx@4.21.0) + packages/media: dependencies: payload: diff --git a/tsconfig.base.json b/tsconfig.base.json index d9ead9a..ece4ad6 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -19,7 +19,10 @@ "@repo/auth/cms": ["packages/auth/src/integrations/cms/index.ts"], "@repo/auth/api": ["packages/auth/src/integrations/api/router.ts"], "@repo/media": ["packages/media/src/index.ts"], - "@repo/media/cms": ["packages/media/src/integrations/cms/index.ts"] + "@repo/media/cms": ["packages/media/src/integrations/cms/index.ts"], + "@repo/marketing-pages": ["packages/marketing-pages/src/index.ts"], + "@repo/marketing-pages/cms": ["packages/marketing-pages/src/integrations/cms/index.ts"], + "@repo/marketing-pages/api": ["packages/marketing-pages/src/integrations/api/router.ts"] } } } From 3ff4afe04baafaf25a58f583eceb10417222e51c Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:27:53 +0200 Subject: [PATCH 071/129] feat(marketing-pages): add Page + SiteSettings entities + errors --- .../marketing-pages/src/entities/errors.ts | 11 ++++ .../marketing-pages/src/entities/page.test.ts | 58 +++++++++++++++++++ packages/marketing-pages/src/entities/page.ts | 29 ++++++++++ .../src/entities/site-settings.ts | 8 +++ 4 files changed, 106 insertions(+) create mode 100644 packages/marketing-pages/src/entities/errors.ts create mode 100644 packages/marketing-pages/src/entities/page.test.ts create mode 100644 packages/marketing-pages/src/entities/page.ts create mode 100644 packages/marketing-pages/src/entities/site-settings.ts diff --git a/packages/marketing-pages/src/entities/errors.ts b/packages/marketing-pages/src/entities/errors.ts new file mode 100644 index 0000000..d9ee8e6 --- /dev/null +++ b/packages/marketing-pages/src/entities/errors.ts @@ -0,0 +1,11 @@ +export class PageNotFoundError extends Error { + constructor(message = "Page not found", options?: ErrorOptions) { + super(message, options); + } +} + +export class InputParseError extends Error { + constructor(message: string, options?: ErrorOptions) { + super(message, options); + } +} diff --git a/packages/marketing-pages/src/entities/page.test.ts b/packages/marketing-pages/src/entities/page.test.ts new file mode 100644 index 0000000..a5da93c --- /dev/null +++ b/packages/marketing-pages/src/entities/page.test.ts @@ -0,0 +1,58 @@ +import { describe, expect, it } from "vitest"; +import { pageSchema, pageStatusSchema } from "./page"; + +describe("pageSchema", () => { + it("accepts a minimal valid page", () => { + const result = pageSchema.parse({ + id: "p1", + title: "About", + slug: "about", + hero: { heading: "About us" }, + layout: [], + seo: { title: "About — My App" }, + createdAt: new Date(), + updatedAt: new Date(), + }); + expect(result.status).toBe("draft"); + expect(result.publishedAt).toBeNull(); + }); + + it("accepts a published page with publishedAt", () => { + const result = pageSchema.parse({ + id: "p1", + title: "About", + slug: "about", + hero: { heading: "About us" }, + layout: [], + status: "published", + publishedAt: new Date(), + seo: { title: "About" }, + createdAt: new Date(), + updatedAt: new Date(), + }); + expect(result.status).toBe("published"); + expect(result.publishedAt).toBeInstanceOf(Date); + }); + + it("rejects empty title", () => { + expect(() => + pageSchema.parse({ + id: "p1", + title: "", + slug: "about", + hero: { heading: "h" }, + layout: [], + seo: { title: "x" }, + createdAt: new Date(), + updatedAt: new Date(), + }), + ).toThrow(); + }); +}); + +describe("pageStatusSchema", () => { + it("accepts draft and published", () => { + expect(pageStatusSchema.parse("draft")).toBe("draft"); + expect(pageStatusSchema.parse("published")).toBe("published"); + }); +}); diff --git a/packages/marketing-pages/src/entities/page.ts b/packages/marketing-pages/src/entities/page.ts new file mode 100644 index 0000000..9050799 --- /dev/null +++ b/packages/marketing-pages/src/entities/page.ts @@ -0,0 +1,29 @@ +import { z } from "zod"; + +export const pageStatusSchema = z.enum(["draft", "published"]); + +export const heroSchema = z.object({ + heading: z.string().min(1).max(255), + subheading: z.string().optional(), + imageId: z.string().optional(), +}); + +export const pageSchema = z.object({ + id: z.string(), + title: z.string().min(1).max(255), + slug: z.string().min(1).max(255), + hero: heroSchema, + layout: z.array(z.unknown()), + status: pageStatusSchema.default("draft"), + publishedAt: z.date().nullable().default(null), + seo: z.object({ + title: z.string().min(1), + description: z.string().optional(), + }), + createdAt: z.date(), + updatedAt: z.date(), +}); + +export type Page = z.infer; +export type PageStatus = z.infer; +export type Hero = z.infer; diff --git a/packages/marketing-pages/src/entities/site-settings.ts b/packages/marketing-pages/src/entities/site-settings.ts new file mode 100644 index 0000000..3b2b828 --- /dev/null +++ b/packages/marketing-pages/src/entities/site-settings.ts @@ -0,0 +1,8 @@ +import { z } from "zod"; + +export const siteSettingsSchema = z.object({ + siteName: z.string().min(1), + siteDescription: z.string().optional(), +}); + +export type SiteSettings = z.infer; From 63801bf3dc410f1fe1631a4c092d7ee292acacfe Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:28:03 +0200 Subject: [PATCH 072/129] feat(marketing-pages): add IPagesRepository + ISiteSettingsRepository interfaces --- .../repositories/pages-repository.interface.ts | 10 ++++++++++ .../repositories/site-settings-repository.interface.ts | 5 +++++ 2 files changed, 15 insertions(+) create mode 100644 packages/marketing-pages/src/application/repositories/pages-repository.interface.ts create mode 100644 packages/marketing-pages/src/application/repositories/site-settings-repository.interface.ts diff --git a/packages/marketing-pages/src/application/repositories/pages-repository.interface.ts b/packages/marketing-pages/src/application/repositories/pages-repository.interface.ts new file mode 100644 index 0000000..9503286 --- /dev/null +++ b/packages/marketing-pages/src/application/repositories/pages-repository.interface.ts @@ -0,0 +1,10 @@ +import type { Page } from "../../entities/page"; + +export interface IPagesRepository { + getPageBySlug(slug: string): Promise; + getPages(options?: { + status?: string; + limit?: number; + offset?: number; + }): Promise; +} diff --git a/packages/marketing-pages/src/application/repositories/site-settings-repository.interface.ts b/packages/marketing-pages/src/application/repositories/site-settings-repository.interface.ts new file mode 100644 index 0000000..93fbe74 --- /dev/null +++ b/packages/marketing-pages/src/application/repositories/site-settings-repository.interface.ts @@ -0,0 +1,5 @@ +import type { SiteSettings } from "../../entities/site-settings"; + +export interface ISiteSettingsRepository { + getSiteSettings(): Promise; +} From 141e007d22537632d6cc6dace8aeb0ace939da11 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:28:12 +0200 Subject: [PATCH 073/129] feat(marketing-pages): add getPageBySlugUseCase (test red until DI lands) --- .../get-page-by-slug.use-case.test.ts | 30 +++++++++++++++++++ .../use-cases/get-page-by-slug.use-case.ts | 13 ++++++++ 2 files changed, 43 insertions(+) create mode 100644 packages/marketing-pages/src/application/use-cases/get-page-by-slug.use-case.test.ts create mode 100644 packages/marketing-pages/src/application/use-cases/get-page-by-slug.use-case.ts diff --git a/packages/marketing-pages/src/application/use-cases/get-page-by-slug.use-case.test.ts b/packages/marketing-pages/src/application/use-cases/get-page-by-slug.use-case.test.ts new file mode 100644 index 0000000..24aab56 --- /dev/null +++ b/packages/marketing-pages/src/application/use-cases/get-page-by-slug.use-case.test.ts @@ -0,0 +1,30 @@ +import { beforeEach, describe, expect, it } from "vitest"; +import { marketingPagesContainer } from "@/di/container"; +import { MARKETING_PAGES_SYMBOLS } from "@/di/symbols"; +import { MockPagesRepository } from "@/infrastructure/repositories/mock-pages.repository"; +import type { IPagesRepository } from "@/application/repositories/pages-repository.interface"; +import { getPageBySlugUseCase } from "./get-page-by-slug.use-case"; + +describe("getPageBySlugUseCase", () => { + let repo: MockPagesRepository; + + beforeEach(() => { + if (marketingPagesContainer.isBound(MARKETING_PAGES_SYMBOLS.IPagesRepository)) { + marketingPagesContainer.unbind(MARKETING_PAGES_SYMBOLS.IPagesRepository); + } + repo = new MockPagesRepository(); + marketingPagesContainer + .bind(MARKETING_PAGES_SYMBOLS.IPagesRepository) + .toConstantValue(repo); + }); + + it("returns the page when found", async () => { + const result = await getPageBySlugUseCase("about"); + expect(result?.slug).toBe("about"); + }); + + it("returns undefined when not found", async () => { + const result = await getPageBySlugUseCase("missing-page"); + expect(result).toBeUndefined(); + }); +}); diff --git a/packages/marketing-pages/src/application/use-cases/get-page-by-slug.use-case.ts b/packages/marketing-pages/src/application/use-cases/get-page-by-slug.use-case.ts new file mode 100644 index 0000000..f4b7954 --- /dev/null +++ b/packages/marketing-pages/src/application/use-cases/get-page-by-slug.use-case.ts @@ -0,0 +1,13 @@ +import type { Page } from "../../entities/page"; +import { marketingPagesContainer } from "../../di/container"; +import { MARKETING_PAGES_SYMBOLS } from "../../di/symbols"; +import type { IPagesRepository } from "../repositories/pages-repository.interface"; + +export async function getPageBySlugUseCase( + slug: string, +): Promise { + const repo = marketingPagesContainer.get( + MARKETING_PAGES_SYMBOLS.IPagesRepository, + ); + return repo.getPageBySlug(slug); +} From 903c1e23aceea549a11c1a6ba39bdbfacca59d90 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:28:19 +0200 Subject: [PATCH 074/129] feat(marketing-pages): add getSiteSettingsUseCase (test red until DI lands) --- .../get-site-settings.use-case.test.ts | 25 +++++++++++++++++++ .../use-cases/get-site-settings.use-case.ts | 11 ++++++++ 2 files changed, 36 insertions(+) create mode 100644 packages/marketing-pages/src/application/use-cases/get-site-settings.use-case.test.ts create mode 100644 packages/marketing-pages/src/application/use-cases/get-site-settings.use-case.ts diff --git a/packages/marketing-pages/src/application/use-cases/get-site-settings.use-case.test.ts b/packages/marketing-pages/src/application/use-cases/get-site-settings.use-case.test.ts new file mode 100644 index 0000000..054cff3 --- /dev/null +++ b/packages/marketing-pages/src/application/use-cases/get-site-settings.use-case.test.ts @@ -0,0 +1,25 @@ +import { beforeEach, describe, expect, it } from "vitest"; +import { marketingPagesContainer } from "@/di/container"; +import { MARKETING_PAGES_SYMBOLS } from "@/di/symbols"; +import { MockSiteSettingsRepository } from "@/infrastructure/repositories/mock-site-settings.repository"; +import type { ISiteSettingsRepository } from "@/application/repositories/site-settings-repository.interface"; +import { getSiteSettingsUseCase } from "./get-site-settings.use-case"; + +describe("getSiteSettingsUseCase", () => { + let repo: MockSiteSettingsRepository; + + beforeEach(() => { + if (marketingPagesContainer.isBound(MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository)) { + marketingPagesContainer.unbind(MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository); + } + repo = new MockSiteSettingsRepository(); + marketingPagesContainer + .bind(MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository) + .toConstantValue(repo); + }); + + it("returns the seeded site settings", async () => { + const result = await getSiteSettingsUseCase(); + expect(result.siteName).toBe("My App"); + }); +}); diff --git a/packages/marketing-pages/src/application/use-cases/get-site-settings.use-case.ts b/packages/marketing-pages/src/application/use-cases/get-site-settings.use-case.ts new file mode 100644 index 0000000..5ad748e --- /dev/null +++ b/packages/marketing-pages/src/application/use-cases/get-site-settings.use-case.ts @@ -0,0 +1,11 @@ +import type { SiteSettings } from "../../entities/site-settings"; +import { marketingPagesContainer } from "../../di/container"; +import { MARKETING_PAGES_SYMBOLS } from "../../di/symbols"; +import type { ISiteSettingsRepository } from "../repositories/site-settings-repository.interface"; + +export async function getSiteSettingsUseCase(): Promise { + const repo = marketingPagesContainer.get( + MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository, + ); + return repo.getSiteSettings(); +} From e383c9ef3ff6a56982c54bc049b65ed097d344f7 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:28:32 +0200 Subject: [PATCH 075/129] feat(marketing-pages): add Mock pages + site-settings repositories --- .../repositories/mock-pages.repository.ts | 43 +++++++++++++++++++ .../mock-site-settings.repository.ts | 15 +++++++ 2 files changed, 58 insertions(+) create mode 100644 packages/marketing-pages/src/infrastructure/repositories/mock-pages.repository.ts create mode 100644 packages/marketing-pages/src/infrastructure/repositories/mock-site-settings.repository.ts diff --git a/packages/marketing-pages/src/infrastructure/repositories/mock-pages.repository.ts b/packages/marketing-pages/src/infrastructure/repositories/mock-pages.repository.ts new file mode 100644 index 0000000..eea22d6 --- /dev/null +++ b/packages/marketing-pages/src/infrastructure/repositories/mock-pages.repository.ts @@ -0,0 +1,43 @@ +import "reflect-metadata"; +import { injectable } from "inversify"; + +import type { IPagesRepository } from "../../application/repositories/pages-repository.interface"; +import type { Page } from "../../entities/page"; + +const SEED_DATE = new Date("2026-01-01T00:00:00.000Z"); + +@injectable() +export class MockPagesRepository implements IPagesRepository { + private _pages: Page[] = [ + { + id: "p1", + title: "About", + slug: "about", + hero: { heading: "About us" }, + layout: [], + status: "published", + publishedAt: SEED_DATE, + seo: { title: "About — My App" }, + createdAt: SEED_DATE, + updatedAt: SEED_DATE, + }, + ]; + + async getPageBySlug(slug: string): Promise { + return this._pages.find((p) => p.slug === slug); + } + + async getPages(options?: { + status?: string; + limit?: number; + offset?: number; + }): Promise { + let result = [...this._pages]; + if (options?.status) { + result = result.filter((p) => p.status === options.status); + } + const offset = options?.offset ?? 0; + const limit = options?.limit ?? 50; + return result.slice(offset, offset + limit); + } +} diff --git a/packages/marketing-pages/src/infrastructure/repositories/mock-site-settings.repository.ts b/packages/marketing-pages/src/infrastructure/repositories/mock-site-settings.repository.ts new file mode 100644 index 0000000..cf5ec8a --- /dev/null +++ b/packages/marketing-pages/src/infrastructure/repositories/mock-site-settings.repository.ts @@ -0,0 +1,15 @@ +import "reflect-metadata"; +import { injectable } from "inversify"; + +import type { ISiteSettingsRepository } from "../../application/repositories/site-settings-repository.interface"; +import type { SiteSettings } from "../../entities/site-settings"; + +@injectable() +export class MockSiteSettingsRepository implements ISiteSettingsRepository { + async getSiteSettings(): Promise { + return { + siteName: "My App", + siteDescription: "A vertical-feature monorepo template", + }; + } +} From 875bae3fdee7a0fd3b00c424f0f1adad574368f6 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:28:50 +0200 Subject: [PATCH 076/129] feat(marketing-pages): add per-feature InversifyJS container --- .../marketing-pages/src/di/container.test.ts | 33 +++++++++++++++++++ packages/marketing-pages/src/di/container.ts | 8 +++++ packages/marketing-pages/src/di/module.ts | 18 ++++++++++ packages/marketing-pages/src/di/symbols.ts | 4 +++ 4 files changed, 63 insertions(+) create mode 100644 packages/marketing-pages/src/di/container.test.ts create mode 100644 packages/marketing-pages/src/di/container.ts create mode 100644 packages/marketing-pages/src/di/module.ts create mode 100644 packages/marketing-pages/src/di/symbols.ts diff --git a/packages/marketing-pages/src/di/container.test.ts b/packages/marketing-pages/src/di/container.test.ts new file mode 100644 index 0000000..782cce8 --- /dev/null +++ b/packages/marketing-pages/src/di/container.test.ts @@ -0,0 +1,33 @@ +import { afterEach, beforeEach, describe, expect, it } from "vitest"; +import { marketingPagesContainer } from "./container"; +import { MARKETING_PAGES_SYMBOLS } from "./symbols"; +import { MarketingPagesModule } from "./module"; +import { MockPagesRepository } from "@/infrastructure/repositories/mock-pages.repository"; +import { MockSiteSettingsRepository } from "@/infrastructure/repositories/mock-site-settings.repository"; +import type { IPagesRepository } from "@/application/repositories/pages-repository.interface"; +import type { ISiteSettingsRepository } from "@/application/repositories/site-settings-repository.interface"; + +describe("marketingPagesContainer", () => { + beforeEach(() => { + marketingPagesContainer.unbindAll(); + marketingPagesContainer.load(MarketingPagesModule); + }); + + afterEach(() => { + marketingPagesContainer.unbindAll(); + }); + + it("resolves IPagesRepository to MockPagesRepository", () => { + const repo = marketingPagesContainer.get( + MARKETING_PAGES_SYMBOLS.IPagesRepository, + ); + expect(repo).toBeInstanceOf(MockPagesRepository); + }); + + it("resolves ISiteSettingsRepository to MockSiteSettingsRepository", () => { + const repo = marketingPagesContainer.get( + MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository, + ); + expect(repo).toBeInstanceOf(MockSiteSettingsRepository); + }); +}); diff --git a/packages/marketing-pages/src/di/container.ts b/packages/marketing-pages/src/di/container.ts new file mode 100644 index 0000000..f9b4c00 --- /dev/null +++ b/packages/marketing-pages/src/di/container.ts @@ -0,0 +1,8 @@ +import "reflect-metadata"; +import { Container } from "inversify"; +import { MarketingPagesModule } from "./module"; + +export const marketingPagesContainer = new Container({ + defaultScope: "Singleton", +}); +marketingPagesContainer.load(MarketingPagesModule); diff --git a/packages/marketing-pages/src/di/module.ts b/packages/marketing-pages/src/di/module.ts new file mode 100644 index 0000000..2f5c157 --- /dev/null +++ b/packages/marketing-pages/src/di/module.ts @@ -0,0 +1,18 @@ +import { ContainerModule, type interfaces } from "inversify"; + +import type { IPagesRepository } from "../application/repositories/pages-repository.interface"; +import type { ISiteSettingsRepository } from "../application/repositories/site-settings-repository.interface"; +import { MockPagesRepository } from "../infrastructure/repositories/mock-pages.repository"; +import { MockSiteSettingsRepository } from "../infrastructure/repositories/mock-site-settings.repository"; +import { MARKETING_PAGES_SYMBOLS } from "./symbols"; + +export const MarketingPagesModule = new ContainerModule( + (bind: interfaces.Bind) => { + bind(MARKETING_PAGES_SYMBOLS.IPagesRepository).to( + MockPagesRepository, + ); + bind( + MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository, + ).to(MockSiteSettingsRepository); + }, +); diff --git a/packages/marketing-pages/src/di/symbols.ts b/packages/marketing-pages/src/di/symbols.ts new file mode 100644 index 0000000..7f82590 --- /dev/null +++ b/packages/marketing-pages/src/di/symbols.ts @@ -0,0 +1,4 @@ +export const MARKETING_PAGES_SYMBOLS = { + IPagesRepository: Symbol.for("marketing-pages:IPagesRepository"), + ISiteSettingsRepository: Symbol.for("marketing-pages:ISiteSettingsRepository"), +} as const; From ff6fec7eab8c8ad3e8febbea69584b9735016b3d Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:30:19 +0200 Subject: [PATCH 077/129] fix(tsconfig): set rootDir explicitly in feature packages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TypeScript emits an informational diagnostic when source files span multiple top-level dirs (src/ + tests/) without explicit rootDir. Setting rootDir="." satisfies the recommendation and matches the include pattern. Updates blog, auth, marketing-pages — and Plan 4 doc so navigation (still pending) starts correct. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../plans/2026-05-04-plan-4-marketing-pages-navigation.md | 1 + packages/auth/tsconfig.json | 1 + packages/blog/tsconfig.json | 1 + packages/marketing-pages/tsconfig.json | 1 + 4 files changed, 4 insertions(+) diff --git a/docs/superpowers/plans/2026-05-04-plan-4-marketing-pages-navigation.md b/docs/superpowers/plans/2026-05-04-plan-4-marketing-pages-navigation.md index 536352e..4d57622 100644 --- a/docs/superpowers/plans/2026-05-04-plan-4-marketing-pages-navigation.md +++ b/docs/superpowers/plans/2026-05-04-plan-4-marketing-pages-navigation.md @@ -152,6 +152,7 @@ "extends": "@repo/typescript-config/base.json", "compilerOptions": { "outDir": "dist", + "rootDir": ".", "lib": ["ES2022", "DOM"], "jsx": "preserve", "paths": { diff --git a/packages/auth/tsconfig.json b/packages/auth/tsconfig.json index ee87524..d925326 100644 --- a/packages/auth/tsconfig.json +++ b/packages/auth/tsconfig.json @@ -2,6 +2,7 @@ "extends": "@repo/typescript-config/base.json", "compilerOptions": { "outDir": "dist", + "rootDir": ".", "lib": ["ES2022", "DOM"], "jsx": "preserve", "paths": { diff --git a/packages/blog/tsconfig.json b/packages/blog/tsconfig.json index ee87524..d925326 100644 --- a/packages/blog/tsconfig.json +++ b/packages/blog/tsconfig.json @@ -2,6 +2,7 @@ "extends": "@repo/typescript-config/base.json", "compilerOptions": { "outDir": "dist", + "rootDir": ".", "lib": ["ES2022", "DOM"], "jsx": "preserve", "paths": { diff --git a/packages/marketing-pages/tsconfig.json b/packages/marketing-pages/tsconfig.json index ee87524..d925326 100644 --- a/packages/marketing-pages/tsconfig.json +++ b/packages/marketing-pages/tsconfig.json @@ -2,6 +2,7 @@ "extends": "@repo/typescript-config/base.json", "compilerOptions": { "outDir": "dist", + "rootDir": ".", "lib": ["ES2022", "DOM"], "jsx": "preserve", "paths": { From 5ffffe49054d4b05b9fed60cead774d441b26010 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:31:12 +0200 Subject: [PATCH 078/129] feat(marketing-pages): add Payload-backed pages + site-settings repos (constructor-injected config) --- .../repositories/payload-pages.repository.ts | 96 +++++++++++++++++++ .../payload-site-settings.repository.ts | 33 +++++++ 2 files changed, 129 insertions(+) create mode 100644 packages/marketing-pages/src/infrastructure/repositories/payload-pages.repository.ts create mode 100644 packages/marketing-pages/src/infrastructure/repositories/payload-site-settings.repository.ts diff --git a/packages/marketing-pages/src/infrastructure/repositories/payload-pages.repository.ts b/packages/marketing-pages/src/infrastructure/repositories/payload-pages.repository.ts new file mode 100644 index 0000000..f06743e --- /dev/null +++ b/packages/marketing-pages/src/infrastructure/repositories/payload-pages.repository.ts @@ -0,0 +1,96 @@ +import "reflect-metadata"; +import { injectable } from "inversify"; +import { getPayload } from "payload"; +import type { SanitizedConfig } from "payload"; + +import type { IPagesRepository } from "../../application/repositories/pages-repository.interface"; +import type { Page } from "../../entities/page"; + +type PayloadPageDoc = { + id: string | number; + title?: string | null; + slug?: string | null; + hero?: + | { + heading?: string | null; + subheading?: string | null; + image?: string | number | { id: string | number } | null; + } + | null; + layout?: unknown[] | null; + status?: string | null; + publishedAt?: string | null; + seo?: { title?: string | null; description?: string | null } | null; + createdAt?: string | null; + updatedAt?: string | null; +}; + +function mapDoc(doc: PayloadPageDoc): Page { + const imageId = + doc.hero && typeof doc.hero.image === "object" && doc.hero.image !== null + ? String(doc.hero.image.id) + : doc.hero?.image != null + ? String(doc.hero.image) + : undefined; + + return { + id: String(doc.id), + title: doc.title ?? "", + slug: doc.slug ?? "", + hero: { + heading: doc.hero?.heading ?? "", + subheading: doc.hero?.subheading ?? undefined, + imageId, + }, + layout: doc.layout ?? [], + status: doc.status === "published" ? "published" : "draft", + publishedAt: doc.publishedAt ? new Date(doc.publishedAt) : null, + seo: { + title: doc.seo?.title ?? "", + description: doc.seo?.description ?? undefined, + }, + createdAt: doc.createdAt ? new Date(doc.createdAt) : new Date(0), + updatedAt: doc.updatedAt ? new Date(doc.updatedAt) : new Date(0), + }; +} + +@injectable() +export class PayloadPagesRepository implements IPagesRepository { + private config: SanitizedConfig; + + constructor(config: SanitizedConfig) { + this.config = config; + } + + async getPageBySlug(slug: string): Promise { + const payload = await getPayload({ config: this.config }); + const result = await payload.find({ + collection: "pages", + where: { slug: { equals: slug } }, + limit: 1, + overrideAccess: false, + }); + const doc = result.docs[0] as PayloadPageDoc | undefined; + return doc ? mapDoc(doc) : undefined; + } + + async getPages(options?: { + status?: string; + limit?: number; + offset?: number; + }): Promise { + const payload = await getPayload({ config: this.config }); + const where: Record = {}; + if (options?.status) where.status = { equals: options.status }; + const result = await payload.find({ + collection: "pages", + where: where as never, + limit: options?.limit ?? 50, + page: options?.offset + ? Math.floor(options.offset / (options.limit ?? 50)) + 1 + : 1, + overrideAccess: false, + }); + return result.docs.map((d) => mapDoc(d as PayloadPageDoc)); + } +} diff --git a/packages/marketing-pages/src/infrastructure/repositories/payload-site-settings.repository.ts b/packages/marketing-pages/src/infrastructure/repositories/payload-site-settings.repository.ts new file mode 100644 index 0000000..f102bc9 --- /dev/null +++ b/packages/marketing-pages/src/infrastructure/repositories/payload-site-settings.repository.ts @@ -0,0 +1,33 @@ +import "reflect-metadata"; +import { injectable } from "inversify"; +import { getPayload } from "payload"; +import type { SanitizedConfig } from "payload"; + +import type { ISiteSettingsRepository } from "../../application/repositories/site-settings-repository.interface"; +import type { SiteSettings } from "../../entities/site-settings"; + +type PayloadSiteSettings = { + siteName?: string | null; + siteDescription?: string | null; +}; + +@injectable() +export class PayloadSiteSettingsRepository implements ISiteSettingsRepository { + private config: SanitizedConfig; + + constructor(config: SanitizedConfig) { + this.config = config; + } + + async getSiteSettings(): Promise { + const payload = await getPayload({ config: this.config }); + const doc = (await payload.findGlobal({ + slug: "site-settings", + overrideAccess: false, + })) as PayloadSiteSettings; + return { + siteName: doc.siteName ?? "My App", + siteDescription: doc.siteDescription ?? undefined, + }; + } +} From 23e7885fc470bd98a5ca40fc5c6325c53712ae0e Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:31:24 +0200 Subject: [PATCH 079/129] feat(marketing-pages): add pages controller (getBySlug + getSiteSettings) --- .../controllers/pages.controller.test.ts | 49 +++++++++++++++++++ .../controllers/pages.controller.ts | 27 ++++++++++ 2 files changed, 76 insertions(+) create mode 100644 packages/marketing-pages/src/interface-adapters/controllers/pages.controller.test.ts create mode 100644 packages/marketing-pages/src/interface-adapters/controllers/pages.controller.ts diff --git a/packages/marketing-pages/src/interface-adapters/controllers/pages.controller.test.ts b/packages/marketing-pages/src/interface-adapters/controllers/pages.controller.test.ts new file mode 100644 index 0000000..481a294 --- /dev/null +++ b/packages/marketing-pages/src/interface-adapters/controllers/pages.controller.test.ts @@ -0,0 +1,49 @@ +import { beforeEach, describe, expect, it } from "vitest"; +import { marketingPagesContainer } from "@/di/container"; +import { MARKETING_PAGES_SYMBOLS } from "@/di/symbols"; +import { MockPagesRepository } from "@/infrastructure/repositories/mock-pages.repository"; +import { MockSiteSettingsRepository } from "@/infrastructure/repositories/mock-site-settings.repository"; +import type { IPagesRepository } from "@/application/repositories/pages-repository.interface"; +import type { ISiteSettingsRepository } from "@/application/repositories/site-settings-repository.interface"; +import { InputParseError } from "@/entities/errors"; +import { + getPageBySlugController, + getSiteSettingsController, +} from "./pages.controller"; + +describe("pages controller", () => { + beforeEach(() => { + if (marketingPagesContainer.isBound(MARKETING_PAGES_SYMBOLS.IPagesRepository)) { + marketingPagesContainer.unbind(MARKETING_PAGES_SYMBOLS.IPagesRepository); + } + if (marketingPagesContainer.isBound(MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository)) { + marketingPagesContainer.unbind(MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository); + } + marketingPagesContainer + .bind(MARKETING_PAGES_SYMBOLS.IPagesRepository) + .toConstantValue(new MockPagesRepository()); + marketingPagesContainer + .bind(MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository) + .toConstantValue(new MockSiteSettingsRepository()); + }); + + describe("getPageBySlugController", () => { + it("returns the page when found", async () => { + const result = await getPageBySlugController({ slug: "about" }); + expect(result?.slug).toBe("about"); + }); + + it("throws InputParseError on missing slug", async () => { + await expect( + getPageBySlugController({} as { slug: string }), + ).rejects.toBeInstanceOf(InputParseError); + }); + }); + + describe("getSiteSettingsController", () => { + it("returns site settings", async () => { + const result = await getSiteSettingsController(); + expect(result.siteName).toBe("My App"); + }); + }); +}); diff --git a/packages/marketing-pages/src/interface-adapters/controllers/pages.controller.ts b/packages/marketing-pages/src/interface-adapters/controllers/pages.controller.ts new file mode 100644 index 0000000..6b89eb8 --- /dev/null +++ b/packages/marketing-pages/src/interface-adapters/controllers/pages.controller.ts @@ -0,0 +1,27 @@ +import { z } from "zod"; + +import { InputParseError } from "../../entities/errors"; +import type { Page } from "../../entities/page"; +import type { SiteSettings } from "../../entities/site-settings"; +import { getPageBySlugUseCase } from "../../application/use-cases/get-page-by-slug.use-case"; +import { getSiteSettingsUseCase } from "../../application/use-cases/get-site-settings.use-case"; + +const getBySlugInputSchema = z.object({ + slug: z.string().min(1), +}); + +export async function getPageBySlugController(input: { + slug: string; +}): Promise { + const parsed = getBySlugInputSchema.safeParse(input); + if (!parsed.success) { + throw new InputParseError("Invalid get-page-by-slug input", { + cause: parsed.error, + }); + } + return getPageBySlugUseCase(parsed.data.slug); +} + +export async function getSiteSettingsController(): Promise { + return getSiteSettingsUseCase(); +} From a44142b8758a695e084240b83cfa18bd8453d0e1 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:31:37 +0200 Subject: [PATCH 080/129] feat(marketing-pages): add pages collection + siteSettings global --- .../src/integrations/cms/collections/pages.ts | 75 +++++++++++++++++++ .../integrations/cms/globals/site-settings.ts | 20 +++++ .../src/integrations/cms/index.ts | 2 + 3 files changed, 97 insertions(+) create mode 100644 packages/marketing-pages/src/integrations/cms/collections/pages.ts create mode 100644 packages/marketing-pages/src/integrations/cms/globals/site-settings.ts create mode 100644 packages/marketing-pages/src/integrations/cms/index.ts diff --git a/packages/marketing-pages/src/integrations/cms/collections/pages.ts b/packages/marketing-pages/src/integrations/cms/collections/pages.ts new file mode 100644 index 0000000..8c4f7db --- /dev/null +++ b/packages/marketing-pages/src/integrations/cms/collections/pages.ts @@ -0,0 +1,75 @@ +import type { CollectionConfig } from "payload"; +import { + cta, + seoFields, + slugifyIfMissing, +} from "@repo/core-shared/payload"; + +export const pages: CollectionConfig = { + slug: "pages", + admin: { + useAsTitle: "title", + defaultColumns: ["title", "status", "updatedAt"], + }, + hooks: { + beforeChange: [slugifyIfMissing], + }, + versions: { + drafts: true, + }, + fields: [ + { + name: "title", + type: "text", + required: true, + maxLength: 255, + }, + { + name: "slug", + type: "text", + unique: true, + admin: { + position: "sidebar", + description: "Auto-generated from title if left empty", + }, + }, + { + name: "hero", + type: "group", + fields: [ + { name: "heading", type: "text", required: true }, + { name: "subheading", type: "textarea" }, + { + name: "image", + type: "upload", + relationTo: "media", + }, + ], + }, + { + name: "layout", + type: "blocks", + blocks: [cta], + }, + { + name: "status", + type: "select", + options: [ + { label: "Draft", value: "draft" }, + { label: "Published", value: "published" }, + ], + defaultValue: "draft", + required: true, + admin: { position: "sidebar" }, + }, + { + name: "publishedAt", + type: "date", + admin: { + position: "sidebar", + date: { pickerAppearance: "dayAndTime" }, + }, + }, + seoFields, + ], +}; diff --git a/packages/marketing-pages/src/integrations/cms/globals/site-settings.ts b/packages/marketing-pages/src/integrations/cms/globals/site-settings.ts new file mode 100644 index 0000000..7306cfa --- /dev/null +++ b/packages/marketing-pages/src/integrations/cms/globals/site-settings.ts @@ -0,0 +1,20 @@ +import type { GlobalConfig } from "payload"; + +export const siteSettings: GlobalConfig = { + slug: "site-settings", + admin: { + group: "Settings", + }, + fields: [ + { + name: "siteName", + type: "text", + required: true, + defaultValue: "My App", + }, + { + name: "siteDescription", + type: "textarea", + }, + ], +}; diff --git a/packages/marketing-pages/src/integrations/cms/index.ts b/packages/marketing-pages/src/integrations/cms/index.ts new file mode 100644 index 0000000..41a8df2 --- /dev/null +++ b/packages/marketing-pages/src/integrations/cms/index.ts @@ -0,0 +1,2 @@ +export { pages } from "./collections/pages"; +export { siteSettings } from "./globals/site-settings"; From 7b6441502037a1b6895ffd85d8fd5ac7dd629fbc Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:31:49 +0200 Subject: [PATCH 081/129] feat(marketing-pages): add tRPC router with pageBySlug + siteSettings --- .../src/integrations/api/router.test.ts | 43 +++++++++++++++++++ .../src/integrations/api/router.ts | 16 +++++++ 2 files changed, 59 insertions(+) create mode 100644 packages/marketing-pages/src/integrations/api/router.test.ts create mode 100644 packages/marketing-pages/src/integrations/api/router.ts diff --git a/packages/marketing-pages/src/integrations/api/router.test.ts b/packages/marketing-pages/src/integrations/api/router.test.ts new file mode 100644 index 0000000..64cefc3 --- /dev/null +++ b/packages/marketing-pages/src/integrations/api/router.test.ts @@ -0,0 +1,43 @@ +import { beforeEach, describe, expect, it } from "vitest"; +import { marketingPagesContainer } from "@/di/container"; +import { MARKETING_PAGES_SYMBOLS } from "@/di/symbols"; +import { MockPagesRepository } from "@/infrastructure/repositories/mock-pages.repository"; +import { MockSiteSettingsRepository } from "@/infrastructure/repositories/mock-site-settings.repository"; +import type { IPagesRepository } from "@/application/repositories/pages-repository.interface"; +import type { ISiteSettingsRepository } from "@/application/repositories/site-settings-repository.interface"; +import { marketingPagesRouter } from "./router"; + +describe("marketingPagesRouter", () => { + beforeEach(() => { + if (marketingPagesContainer.isBound(MARKETING_PAGES_SYMBOLS.IPagesRepository)) { + marketingPagesContainer.unbind(MARKETING_PAGES_SYMBOLS.IPagesRepository); + } + if (marketingPagesContainer.isBound(MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository)) { + marketingPagesContainer.unbind(MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository); + } + marketingPagesContainer + .bind(MARKETING_PAGES_SYMBOLS.IPagesRepository) + .toConstantValue(new MockPagesRepository()); + marketingPagesContainer + .bind(MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository) + .toConstantValue(new MockSiteSettingsRepository()); + }); + + it("exposes pageBySlug + siteSettings procedures", () => { + const names = Object.keys(marketingPagesRouter._def.procedures); + expect(names).toContain("pageBySlug"); + expect(names).toContain("siteSettings"); + }); + + it("pageBySlug returns the seeded About page", async () => { + const caller = marketingPagesRouter.createCaller({}); + const result = await caller.pageBySlug({ slug: "about" }); + expect(result?.title).toBe("About"); + }); + + it("siteSettings returns site name", async () => { + const caller = marketingPagesRouter.createCaller({}); + const result = await caller.siteSettings(); + expect(result.siteName).toBe("My App"); + }); +}); diff --git a/packages/marketing-pages/src/integrations/api/router.ts b/packages/marketing-pages/src/integrations/api/router.ts new file mode 100644 index 0000000..f4b086d --- /dev/null +++ b/packages/marketing-pages/src/integrations/api/router.ts @@ -0,0 +1,16 @@ +import { z } from "zod"; +import { router, publicProcedure } from "@repo/core-shared/trpc/init"; +import { + getPageBySlugController, + getSiteSettingsController, +} from "../../interface-adapters/controllers/pages.controller"; + +export const marketingPagesRouter = router({ + pageBySlug: publicProcedure + .input(z.object({ slug: z.string().min(1) })) + .query(({ input }) => getPageBySlugController(input)), + + siteSettings: publicProcedure.query(() => getSiteSettingsController()), +}); + +export type MarketingPagesRouter = typeof marketingPagesRouter; From 36e7515717967f2b421cf68cd9c9c78e68ad2c15 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:32:08 +0200 Subject: [PATCH 082/129] feat(marketing-pages): add ui/query + barrel + feature test --- packages/marketing-pages/src/index.ts | 5 ++- packages/marketing-pages/src/ui/query.ts | 14 ++++++++ .../tests/page-by-slug.feature.test.ts | 33 +++++++++++++++++++ 3 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 packages/marketing-pages/src/ui/query.ts create mode 100644 packages/marketing-pages/tests/page-by-slug.feature.test.ts diff --git a/packages/marketing-pages/src/index.ts b/packages/marketing-pages/src/index.ts index cb0ff5c..e4b9bdd 100644 --- a/packages/marketing-pages/src/index.ts +++ b/packages/marketing-pages/src/index.ts @@ -1 +1,4 @@ -export {}; +export type { Page, PageStatus, Hero } from "./entities/page"; +export type { SiteSettings } from "./entities/site-settings"; +export { PageNotFoundError, InputParseError } from "./entities/errors"; +export { pageBySlugQuery, siteSettingsQuery } from "./ui/query"; diff --git a/packages/marketing-pages/src/ui/query.ts b/packages/marketing-pages/src/ui/query.ts new file mode 100644 index 0000000..ec0e6f5 --- /dev/null +++ b/packages/marketing-pages/src/ui/query.ts @@ -0,0 +1,14 @@ +type TrpcClient = { + marketingPages: { + pageBySlug: { queryOptions: (input: { slug: string }) => unknown }; + siteSettings: { queryOptions: () => unknown }; + }; +}; + +export function pageBySlugQuery(client: TrpcClient, slug: string) { + return client.marketingPages.pageBySlug.queryOptions({ slug }); +} + +export function siteSettingsQuery(client: TrpcClient) { + return client.marketingPages.siteSettings.queryOptions(); +} diff --git a/packages/marketing-pages/tests/page-by-slug.feature.test.ts b/packages/marketing-pages/tests/page-by-slug.feature.test.ts new file mode 100644 index 0000000..744006c --- /dev/null +++ b/packages/marketing-pages/tests/page-by-slug.feature.test.ts @@ -0,0 +1,33 @@ +import { beforeEach, describe, expect, it } from "vitest"; +import { marketingPagesContainer } from "../src/di/container"; +import { MARKETING_PAGES_SYMBOLS } from "../src/di/symbols"; +import { MockPagesRepository } from "../src/infrastructure/repositories/mock-pages.repository"; +import { MockSiteSettingsRepository } from "../src/infrastructure/repositories/mock-site-settings.repository"; +import type { IPagesRepository } from "../src/application/repositories/pages-repository.interface"; +import type { ISiteSettingsRepository } from "../src/application/repositories/site-settings-repository.interface"; +import { marketingPagesRouter } from "../src/integrations/api/router"; + +describe("marketing-pages feature: page-by-slug end-to-end", () => { + beforeEach(() => { + if (marketingPagesContainer.isBound(MARKETING_PAGES_SYMBOLS.IPagesRepository)) { + marketingPagesContainer.unbind(MARKETING_PAGES_SYMBOLS.IPagesRepository); + } + if (marketingPagesContainer.isBound(MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository)) { + marketingPagesContainer.unbind(MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository); + } + marketingPagesContainer + .bind(MARKETING_PAGES_SYMBOLS.IPagesRepository) + .toConstantValue(new MockPagesRepository()); + marketingPagesContainer + .bind(MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository) + .toConstantValue(new MockSiteSettingsRepository()); + }); + + it("fetches a page by slug via tRPC and returns the domain entity", async () => { + const caller = marketingPagesRouter.createCaller({}); + const page = await caller.pageBySlug({ slug: "about" }); + expect(page?.title).toBe("About"); + expect(page?.hero.heading).toBe("About us"); + expect(page?.status).toBe("published"); + }); +}); From f71025b14ae3adc5712df3860e9ab31066266e0c Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:33:44 +0200 Subject: [PATCH 083/129] feat(navigation): scaffold empty package with feature tag + path aliases --- packages/navigation/package.json | 31 +++++++++++++++++++++++++ packages/navigation/src/index.ts | 1 + packages/navigation/tsconfig.json | 14 ++++++++++++ packages/navigation/turbo.json | 4 ++++ packages/navigation/vitest.config.ts | 11 +++++++++ pnpm-lock.yaml | 34 ++++++++++++++++++++++++++++ tsconfig.base.json | 5 +++- 7 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 packages/navigation/package.json create mode 100644 packages/navigation/src/index.ts create mode 100644 packages/navigation/tsconfig.json create mode 100644 packages/navigation/turbo.json create mode 100644 packages/navigation/vitest.config.ts diff --git a/packages/navigation/package.json b/packages/navigation/package.json new file mode 100644 index 0000000..5c6a32f --- /dev/null +++ b/packages/navigation/package.json @@ -0,0 +1,31 @@ +{ + "name": "@repo/navigation", + "private": true, + "version": "0.0.0", + "type": "module", + "exports": { + ".": "./src/index.ts", + "./cms": "./src/integrations/cms/index.ts", + "./api": "./src/integrations/api/router.ts" + }, + "scripts": { + "build": "tsc --noEmit", + "lint": "eslint .", + "test": "vitest run --passWithNoTests", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@repo/core-shared": "workspace:*", + "@trpc/server": "^11.0.0", + "inversify": "^6.2.0", + "payload": "^3.14.0", + "reflect-metadata": "^0.2.2", + "zod": "^3.24.0" + }, + "devDependencies": { + "@repo/eslint-config": "workspace:*", + "@repo/typescript-config": "workspace:*", + "@types/node": "^22.0.0", + "vitest": "^3.1.0" + } +} diff --git a/packages/navigation/src/index.ts b/packages/navigation/src/index.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/packages/navigation/src/index.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/navigation/tsconfig.json b/packages/navigation/tsconfig.json new file mode 100644 index 0000000..d925326 --- /dev/null +++ b/packages/navigation/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "@repo/typescript-config/base.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": ".", + "lib": ["ES2022", "DOM"], + "jsx": "preserve", + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["src/**/*", "tests/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/navigation/turbo.json b/packages/navigation/turbo.json new file mode 100644 index 0000000..8a1d41a --- /dev/null +++ b/packages/navigation/turbo.json @@ -0,0 +1,4 @@ +{ + "extends": ["//"], + "tags": ["feature"] +} diff --git a/packages/navigation/vitest.config.ts b/packages/navigation/vitest.config.ts new file mode 100644 index 0000000..dfa8265 --- /dev/null +++ b/packages/navigation/vitest.config.ts @@ -0,0 +1,11 @@ +import path from "node:path"; +import { baseVitestConfig } from "@repo/typescript-config/vitest.base"; + +export default { + ...baseVitestConfig, + resolve: { + alias: { + "@": path.resolve(__dirname, "./src"), + }, + }, +}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b6b22d7..78b2bfa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -573,6 +573,40 @@ importers: specifier: ^3.1.0 version: 3.2.4(@types/debug@4.1.13)(@types/node@25.5.2)(happy-dom@20.8.9)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(tsx@4.21.0) + packages/navigation: + dependencies: + '@repo/core-shared': + specifier: workspace:* + version: link:../core-shared + '@trpc/server': + specifier: ^11.0.0 + version: 11.16.0(typescript@5.9.3) + inversify: + specifier: ^6.2.0 + version: 6.2.2(reflect-metadata@0.2.2) + payload: + specifier: ^3.14.0 + version: 3.81.0(graphql@16.13.2)(typescript@5.9.3) + reflect-metadata: + specifier: ^0.2.2 + version: 0.2.2 + zod: + specifier: ^3.24.0 + version: 3.25.76 + devDependencies: + '@repo/eslint-config': + specifier: workspace:* + version: link:../eslint-config + '@repo/typescript-config': + specifier: workspace:* + version: link:../typescript-config + '@types/node': + specifier: ^22.0.0 + version: 22.19.17 + vitest: + specifier: ^3.1.0 + version: 3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(happy-dom@20.8.9)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(tsx@4.21.0) + packages/typescript-config: devDependencies: vitest: diff --git a/tsconfig.base.json b/tsconfig.base.json index ece4ad6..e511f06 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -22,7 +22,10 @@ "@repo/media/cms": ["packages/media/src/integrations/cms/index.ts"], "@repo/marketing-pages": ["packages/marketing-pages/src/index.ts"], "@repo/marketing-pages/cms": ["packages/marketing-pages/src/integrations/cms/index.ts"], - "@repo/marketing-pages/api": ["packages/marketing-pages/src/integrations/api/router.ts"] + "@repo/marketing-pages/api": ["packages/marketing-pages/src/integrations/api/router.ts"], + "@repo/navigation": ["packages/navigation/src/index.ts"], + "@repo/navigation/cms": ["packages/navigation/src/integrations/cms/index.ts"], + "@repo/navigation/api": ["packages/navigation/src/integrations/api/router.ts"] } } } From 19f32ec94dac81c07ca303010bc4ea2d6046eb6f Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:34:14 +0200 Subject: [PATCH 084/129] feat(navigation): add Header entity + use-case + mock/payload repos + DI container --- .../header-repository.interface.ts | 5 ++ .../use-cases/get-header.use-case.test.ts | 23 +++++++++ .../use-cases/get-header.use-case.ts | 11 +++++ packages/navigation/src/di/container.test.ts | 24 ++++++++++ packages/navigation/src/di/container.ts | 6 +++ packages/navigation/src/di/module.ts | 11 +++++ packages/navigation/src/di/symbols.ts | 3 ++ packages/navigation/src/entities/header.ts | 15 ++++++ .../repositories/mock-header.repository.ts | 18 +++++++ .../repositories/payload-header.repository.ts | 48 +++++++++++++++++++ 10 files changed, 164 insertions(+) create mode 100644 packages/navigation/src/application/repositories/header-repository.interface.ts create mode 100644 packages/navigation/src/application/use-cases/get-header.use-case.test.ts create mode 100644 packages/navigation/src/application/use-cases/get-header.use-case.ts create mode 100644 packages/navigation/src/di/container.test.ts create mode 100644 packages/navigation/src/di/container.ts create mode 100644 packages/navigation/src/di/module.ts create mode 100644 packages/navigation/src/di/symbols.ts create mode 100644 packages/navigation/src/entities/header.ts create mode 100644 packages/navigation/src/infrastructure/repositories/mock-header.repository.ts create mode 100644 packages/navigation/src/infrastructure/repositories/payload-header.repository.ts diff --git a/packages/navigation/src/application/repositories/header-repository.interface.ts b/packages/navigation/src/application/repositories/header-repository.interface.ts new file mode 100644 index 0000000..6b1753d --- /dev/null +++ b/packages/navigation/src/application/repositories/header-repository.interface.ts @@ -0,0 +1,5 @@ +import type { Header } from "../../entities/header"; + +export interface IHeaderRepository { + getHeader(): Promise
; +} diff --git a/packages/navigation/src/application/use-cases/get-header.use-case.test.ts b/packages/navigation/src/application/use-cases/get-header.use-case.test.ts new file mode 100644 index 0000000..cc4831c --- /dev/null +++ b/packages/navigation/src/application/use-cases/get-header.use-case.test.ts @@ -0,0 +1,23 @@ +import { beforeEach, describe, expect, it } from "vitest"; +import { navigationContainer } from "@/di/container"; +import { NAVIGATION_SYMBOLS } from "@/di/symbols"; +import { MockHeaderRepository } from "@/infrastructure/repositories/mock-header.repository"; +import type { IHeaderRepository } from "@/application/repositories/header-repository.interface"; +import { getHeaderUseCase } from "./get-header.use-case"; + +describe("getHeaderUseCase", () => { + beforeEach(() => { + if (navigationContainer.isBound(NAVIGATION_SYMBOLS.IHeaderRepository)) { + navigationContainer.unbind(NAVIGATION_SYMBOLS.IHeaderRepository); + } + navigationContainer + .bind(NAVIGATION_SYMBOLS.IHeaderRepository) + .toConstantValue(new MockHeaderRepository()); + }); + + it("returns the seeded header items", async () => { + const result = await getHeaderUseCase(); + expect(result.items.length).toBeGreaterThan(0); + expect(result.items[0]?.label).toBe("Home"); + }); +}); diff --git a/packages/navigation/src/application/use-cases/get-header.use-case.ts b/packages/navigation/src/application/use-cases/get-header.use-case.ts new file mode 100644 index 0000000..7b39a24 --- /dev/null +++ b/packages/navigation/src/application/use-cases/get-header.use-case.ts @@ -0,0 +1,11 @@ +import type { Header } from "../../entities/header"; +import { navigationContainer } from "../../di/container"; +import { NAVIGATION_SYMBOLS } from "../../di/symbols"; +import type { IHeaderRepository } from "../repositories/header-repository.interface"; + +export async function getHeaderUseCase(): Promise
{ + const repo = navigationContainer.get( + NAVIGATION_SYMBOLS.IHeaderRepository, + ); + return repo.getHeader(); +} diff --git a/packages/navigation/src/di/container.test.ts b/packages/navigation/src/di/container.test.ts new file mode 100644 index 0000000..afb4330 --- /dev/null +++ b/packages/navigation/src/di/container.test.ts @@ -0,0 +1,24 @@ +import { afterEach, beforeEach, describe, expect, it } from "vitest"; +import { navigationContainer } from "./container"; +import { NAVIGATION_SYMBOLS } from "./symbols"; +import { NavigationModule } from "./module"; +import { MockHeaderRepository } from "@/infrastructure/repositories/mock-header.repository"; +import type { IHeaderRepository } from "@/application/repositories/header-repository.interface"; + +describe("navigationContainer", () => { + beforeEach(() => { + navigationContainer.unbindAll(); + navigationContainer.load(NavigationModule); + }); + + afterEach(() => { + navigationContainer.unbindAll(); + }); + + it("resolves IHeaderRepository to MockHeaderRepository", () => { + const repo = navigationContainer.get( + NAVIGATION_SYMBOLS.IHeaderRepository, + ); + expect(repo).toBeInstanceOf(MockHeaderRepository); + }); +}); diff --git a/packages/navigation/src/di/container.ts b/packages/navigation/src/di/container.ts new file mode 100644 index 0000000..3ec1791 --- /dev/null +++ b/packages/navigation/src/di/container.ts @@ -0,0 +1,6 @@ +import "reflect-metadata"; +import { Container } from "inversify"; +import { NavigationModule } from "./module"; + +export const navigationContainer = new Container({ defaultScope: "Singleton" }); +navigationContainer.load(NavigationModule); diff --git a/packages/navigation/src/di/module.ts b/packages/navigation/src/di/module.ts new file mode 100644 index 0000000..3f882b6 --- /dev/null +++ b/packages/navigation/src/di/module.ts @@ -0,0 +1,11 @@ +import { ContainerModule, type interfaces } from "inversify"; + +import type { IHeaderRepository } from "../application/repositories/header-repository.interface"; +import { MockHeaderRepository } from "../infrastructure/repositories/mock-header.repository"; +import { NAVIGATION_SYMBOLS } from "./symbols"; + +export const NavigationModule = new ContainerModule((bind: interfaces.Bind) => { + bind(NAVIGATION_SYMBOLS.IHeaderRepository).to( + MockHeaderRepository, + ); +}); diff --git a/packages/navigation/src/di/symbols.ts b/packages/navigation/src/di/symbols.ts new file mode 100644 index 0000000..5b2ae02 --- /dev/null +++ b/packages/navigation/src/di/symbols.ts @@ -0,0 +1,3 @@ +export const NAVIGATION_SYMBOLS = { + IHeaderRepository: Symbol.for("navigation:IHeaderRepository"), +} as const; diff --git a/packages/navigation/src/entities/header.ts b/packages/navigation/src/entities/header.ts new file mode 100644 index 0000000..72af75a --- /dev/null +++ b/packages/navigation/src/entities/header.ts @@ -0,0 +1,15 @@ +import { z } from "zod"; + +export const headerItemSchema = z.object({ + label: z.string().min(1).max(64), + href: z.string().min(1), + external: z.boolean().default(false), +}); + +export const headerSchema = z.object({ + logoId: z.string().optional(), + items: z.array(headerItemSchema), +}); + +export type Header = z.infer; +export type HeaderItem = z.infer; diff --git a/packages/navigation/src/infrastructure/repositories/mock-header.repository.ts b/packages/navigation/src/infrastructure/repositories/mock-header.repository.ts new file mode 100644 index 0000000..fa9ae04 --- /dev/null +++ b/packages/navigation/src/infrastructure/repositories/mock-header.repository.ts @@ -0,0 +1,18 @@ +import "reflect-metadata"; +import { injectable } from "inversify"; + +import type { IHeaderRepository } from "../../application/repositories/header-repository.interface"; +import type { Header } from "../../entities/header"; + +@injectable() +export class MockHeaderRepository implements IHeaderRepository { + async getHeader(): Promise
{ + return { + items: [ + { label: "Home", href: "/", external: false }, + { label: "Blog", href: "/blog", external: false }, + { label: "About", href: "/about", external: false }, + ], + }; + } +} diff --git a/packages/navigation/src/infrastructure/repositories/payload-header.repository.ts b/packages/navigation/src/infrastructure/repositories/payload-header.repository.ts new file mode 100644 index 0000000..06c2968 --- /dev/null +++ b/packages/navigation/src/infrastructure/repositories/payload-header.repository.ts @@ -0,0 +1,48 @@ +import "reflect-metadata"; +import { injectable } from "inversify"; +import { getPayload } from "payload"; +import type { SanitizedConfig } from "payload"; + +import type { IHeaderRepository } from "../../application/repositories/header-repository.interface"; +import type { Header, HeaderItem } from "../../entities/header"; + +type PayloadHeaderGlobal = { + logo?: string | number | { id: string | number } | null; + items?: Array<{ + label?: string | null; + href?: string | null; + external?: boolean | null; + }> | null; +}; + +@injectable() +export class PayloadHeaderRepository implements IHeaderRepository { + private config: SanitizedConfig; + + constructor(config: SanitizedConfig) { + this.config = config; + } + + async getHeader(): Promise
{ + const payload = await getPayload({ config: this.config }); + const doc = (await payload.findGlobal({ + slug: "header", + overrideAccess: false, + })) as PayloadHeaderGlobal; + + const logoId = + typeof doc.logo === "object" && doc.logo !== null + ? String(doc.logo.id) + : doc.logo != null + ? String(doc.logo) + : undefined; + + const items: HeaderItem[] = (doc.items ?? []).map((item) => ({ + label: item.label ?? "", + href: item.href ?? "", + external: item.external ?? false, + })); + + return { logoId, items }; + } +} From 014dbc81ec7966f7ac718bac2e9464ef6da2a0f6 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:34:37 +0200 Subject: [PATCH 085/129] feat(navigation): add controller + tRPC router + header global + barrel --- packages/navigation/src/index.ts | 3 +- .../src/integrations/api/router.test.ts | 28 +++++++++++++++++++ .../navigation/src/integrations/api/router.ts | 8 ++++++ .../src/integrations/cms/globals/header.ts | 24 ++++++++++++++++ .../navigation/src/integrations/cms/index.ts | 1 + .../controllers/header.controller.ts | 6 ++++ packages/navigation/src/ui/query.ts | 9 ++++++ 7 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 packages/navigation/src/integrations/api/router.test.ts create mode 100644 packages/navigation/src/integrations/api/router.ts create mode 100644 packages/navigation/src/integrations/cms/globals/header.ts create mode 100644 packages/navigation/src/integrations/cms/index.ts create mode 100644 packages/navigation/src/interface-adapters/controllers/header.controller.ts create mode 100644 packages/navigation/src/ui/query.ts diff --git a/packages/navigation/src/index.ts b/packages/navigation/src/index.ts index cb0ff5c..fb22ea6 100644 --- a/packages/navigation/src/index.ts +++ b/packages/navigation/src/index.ts @@ -1 +1,2 @@ -export {}; +export type { Header, HeaderItem } from "./entities/header"; +export { headerQuery } from "./ui/query"; diff --git a/packages/navigation/src/integrations/api/router.test.ts b/packages/navigation/src/integrations/api/router.test.ts new file mode 100644 index 0000000..6bc132b --- /dev/null +++ b/packages/navigation/src/integrations/api/router.test.ts @@ -0,0 +1,28 @@ +import { beforeEach, describe, expect, it } from "vitest"; +import { navigationContainer } from "@/di/container"; +import { NAVIGATION_SYMBOLS } from "@/di/symbols"; +import { MockHeaderRepository } from "@/infrastructure/repositories/mock-header.repository"; +import type { IHeaderRepository } from "@/application/repositories/header-repository.interface"; +import { navigationRouter } from "./router"; + +describe("navigationRouter", () => { + beforeEach(() => { + if (navigationContainer.isBound(NAVIGATION_SYMBOLS.IHeaderRepository)) { + navigationContainer.unbind(NAVIGATION_SYMBOLS.IHeaderRepository); + } + navigationContainer + .bind(NAVIGATION_SYMBOLS.IHeaderRepository) + .toConstantValue(new MockHeaderRepository()); + }); + + it("exposes header procedure", () => { + const names = Object.keys(navigationRouter._def.procedures); + expect(names).toContain("header"); + }); + + it("header returns 3 items", async () => { + const caller = navigationRouter.createCaller({}); + const result = await caller.header(); + expect(result.items).toHaveLength(3); + }); +}); diff --git a/packages/navigation/src/integrations/api/router.ts b/packages/navigation/src/integrations/api/router.ts new file mode 100644 index 0000000..42d9856 --- /dev/null +++ b/packages/navigation/src/integrations/api/router.ts @@ -0,0 +1,8 @@ +import { router, publicProcedure } from "@repo/core-shared/trpc/init"; +import { getHeaderController } from "../../interface-adapters/controllers/header.controller"; + +export const navigationRouter = router({ + header: publicProcedure.query(() => getHeaderController()), +}); + +export type NavigationRouter = typeof navigationRouter; diff --git a/packages/navigation/src/integrations/cms/globals/header.ts b/packages/navigation/src/integrations/cms/globals/header.ts new file mode 100644 index 0000000..ca89b7f --- /dev/null +++ b/packages/navigation/src/integrations/cms/globals/header.ts @@ -0,0 +1,24 @@ +import type { GlobalConfig } from "payload"; + +export const header: GlobalConfig = { + slug: "header", + admin: { + group: "Navigation", + }, + fields: [ + { + name: "logo", + type: "upload", + relationTo: "media", + }, + { + name: "items", + type: "array", + fields: [ + { name: "label", type: "text", required: true }, + { name: "href", type: "text", required: true }, + { name: "external", type: "checkbox", defaultValue: false }, + ], + }, + ], +}; diff --git a/packages/navigation/src/integrations/cms/index.ts b/packages/navigation/src/integrations/cms/index.ts new file mode 100644 index 0000000..424bc41 --- /dev/null +++ b/packages/navigation/src/integrations/cms/index.ts @@ -0,0 +1 @@ +export { header } from "./globals/header"; diff --git a/packages/navigation/src/interface-adapters/controllers/header.controller.ts b/packages/navigation/src/interface-adapters/controllers/header.controller.ts new file mode 100644 index 0000000..703e34e --- /dev/null +++ b/packages/navigation/src/interface-adapters/controllers/header.controller.ts @@ -0,0 +1,6 @@ +import type { Header } from "../../entities/header"; +import { getHeaderUseCase } from "../../application/use-cases/get-header.use-case"; + +export async function getHeaderController(): Promise
{ + return getHeaderUseCase(); +} diff --git a/packages/navigation/src/ui/query.ts b/packages/navigation/src/ui/query.ts new file mode 100644 index 0000000..579d70c --- /dev/null +++ b/packages/navigation/src/ui/query.ts @@ -0,0 +1,9 @@ +type TrpcClient = { + navigation: { + header: { queryOptions: () => unknown }; + }; +}; + +export function headerQuery(client: TrpcClient) { + return client.navigation.header.queryOptions(); +} From 158e2bab5a8a90ab18f754d1fd09f5d19bdfe3ee Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:35:54 +0200 Subject: [PATCH 086/129] feat(core-cms): compose pages + siteSettings + header into payload config --- packages/core-cms/package.json | 2 ++ packages/core-cms/src/payload.config.ts | 6 ++++-- pnpm-lock.yaml | 6 ++++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/core-cms/package.json b/packages/core-cms/package.json index f8b15ec..93692d8 100644 --- a/packages/core-cms/package.json +++ b/packages/core-cms/package.json @@ -16,6 +16,8 @@ "@repo/auth": "workspace:*", "@repo/blog": "workspace:*", "@repo/media": "workspace:*", + "@repo/marketing-pages": "workspace:*", + "@repo/navigation": "workspace:*", "payload": "^3.14.0", "@payloadcms/db-postgres": "^3.14.0", "@payloadcms/richtext-lexical": "^3.14.0" diff --git a/packages/core-cms/src/payload.config.ts b/packages/core-cms/src/payload.config.ts index 0c756e3..72c6b74 100644 --- a/packages/core-cms/src/payload.config.ts +++ b/packages/core-cms/src/payload.config.ts @@ -7,14 +7,16 @@ import { fileURLToPath } from "node:url"; import { users } from "@repo/auth/cms"; import { articles } from "@repo/blog/cms"; import { media } from "@repo/media/cms"; +import { pages, siteSettings } from "@repo/marketing-pages/cms"; +import { header } from "@repo/navigation/cms"; const filename = fileURLToPath(import.meta.url); const dirname = path.dirname(filename); export default buildConfig({ editor: lexicalEditor(), - collections: [users, articles, media], - globals: [], + collections: [users, articles, pages, media], + globals: [siteSettings, header], secret: process.env.PAYLOAD_SECRET || "default-secret-change-me", db: postgresAdapter({ pool: { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 78b2bfa..245d6e2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -398,9 +398,15 @@ importers: '@repo/blog': specifier: workspace:* version: link:../blog + '@repo/marketing-pages': + specifier: workspace:* + version: link:../marketing-pages '@repo/media': specifier: workspace:* version: link:../media + '@repo/navigation': + specifier: workspace:* + version: link:../navigation payload: specifier: ^3.14.0 version: 3.81.0(graphql@16.13.2)(typescript@5.9.3) From 1ad5b801f76c115fd5c6a434c18e8920879794b7 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:36:29 +0200 Subject: [PATCH 087/129] feat(core-api): compose marketingPages + navigation routers into appRouter --- packages/core-api/package.json | 2 ++ packages/core-api/src/root.ts | 8 ++++++++ packages/marketing-pages/src/index.ts | 1 + packages/navigation/src/index.ts | 1 + pnpm-lock.yaml | 6 ++++++ 5 files changed, 18 insertions(+) diff --git a/packages/core-api/package.json b/packages/core-api/package.json index 0283021..66ec856 100644 --- a/packages/core-api/package.json +++ b/packages/core-api/package.json @@ -15,6 +15,8 @@ "@repo/auth": "workspace:*", "@repo/blog": "workspace:*", "@repo/core-shared": "workspace:*", + "@repo/marketing-pages": "workspace:*", + "@repo/navigation": "workspace:*", "@trpc/server": "^11.0.0" }, "devDependencies": { diff --git a/packages/core-api/src/root.ts b/packages/core-api/src/root.ts index 9f238e0..5cf9fb6 100644 --- a/packages/core-api/src/root.ts +++ b/packages/core-api/src/root.ts @@ -1,15 +1,23 @@ import type { AuthRouter } from "@repo/auth"; import type { BlogRouter } from "@repo/blog"; +import type { MarketingPagesRouter } from "@repo/marketing-pages"; +import type { NavigationRouter } from "@repo/navigation"; import { router } from "@repo/core-shared/trpc/init"; import { authRouter } from "@repo/auth/api"; import { blogRouter } from "@repo/blog/api"; +import { marketingPagesRouter } from "@repo/marketing-pages/api"; +import { navigationRouter } from "@repo/navigation/api"; export const appRouter = router({ auth: authRouter, blog: blogRouter, + marketingPages: marketingPagesRouter, + navigation: navigationRouter, }); export type AppRouter = { auth: AuthRouter; blog: BlogRouter; + marketingPages: MarketingPagesRouter; + navigation: NavigationRouter; }; diff --git a/packages/marketing-pages/src/index.ts b/packages/marketing-pages/src/index.ts index e4b9bdd..0e81ebc 100644 --- a/packages/marketing-pages/src/index.ts +++ b/packages/marketing-pages/src/index.ts @@ -1,4 +1,5 @@ export type { Page, PageStatus, Hero } from "./entities/page"; export type { SiteSettings } from "./entities/site-settings"; +export type { MarketingPagesRouter } from "./integrations/api/router"; export { PageNotFoundError, InputParseError } from "./entities/errors"; export { pageBySlugQuery, siteSettingsQuery } from "./ui/query"; diff --git a/packages/navigation/src/index.ts b/packages/navigation/src/index.ts index fb22ea6..2a72365 100644 --- a/packages/navigation/src/index.ts +++ b/packages/navigation/src/index.ts @@ -1,2 +1,3 @@ export type { Header, HeaderItem } from "./entities/header"; +export type { NavigationRouter } from "./integrations/api/router"; export { headerQuery } from "./ui/query"; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 245d6e2..fd0cfc7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -370,6 +370,12 @@ importers: '@repo/core-shared': specifier: workspace:* version: link:../core-shared + '@repo/marketing-pages': + specifier: workspace:* + version: link:../marketing-pages + '@repo/navigation': + specifier: workspace:* + version: link:../navigation '@trpc/server': specifier: ^11.0.0 version: 11.16.0(typescript@5.9.3) From fbaac002a3541663f9be70cf973d727febf25f3f Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:38:21 +0200 Subject: [PATCH 088/129] =?UTF-8?q?feat(core-cms):=20regenerate=20types=20?= =?UTF-8?q?=E2=80=94=20now=20includes=20Pages,=20SiteSettings,=20Header?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core-cms/src/generated-types.ts | 149 ++++++++++++++++++++++- 1 file changed, 147 insertions(+), 2 deletions(-) diff --git a/packages/core-cms/src/generated-types.ts b/packages/core-cms/src/generated-types.ts index 341abff..528314b 100644 --- a/packages/core-cms/src/generated-types.ts +++ b/packages/core-cms/src/generated-types.ts @@ -69,6 +69,7 @@ export interface Config { collections: { users: User; articles: Article; + pages: Page; media: Media; 'payload-kv': PayloadKv; 'payload-locked-documents': PayloadLockedDocument; @@ -79,6 +80,7 @@ export interface Config { collectionsSelect: { users: UsersSelect | UsersSelect; articles: ArticlesSelect | ArticlesSelect; + pages: PagesSelect | PagesSelect; media: MediaSelect | MediaSelect; 'payload-kv': PayloadKvSelect | PayloadKvSelect; 'payload-locked-documents': PayloadLockedDocumentsSelect | PayloadLockedDocumentsSelect; @@ -89,8 +91,14 @@ export interface Config { defaultIDType: number; }; fallbackLocale: null; - globals: {}; - globalsSelect: {}; + globals: { + 'site-settings': SiteSetting; + header: Header; + }; + globalsSelect: { + 'site-settings': SiteSettingsSelect | SiteSettingsSelect; + header: HeaderSelect | HeaderSelect; + }; locale: null; widgets: { collections: CollectionsWidget; @@ -199,6 +207,42 @@ export interface Media { focalX?: number | null; focalY?: number | null; } +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "pages". + */ +export interface Page { + id: number; + title: string; + /** + * Auto-generated from title if left empty + */ + slug?: string | null; + hero: { + heading: string; + subheading?: string | null; + image?: (number | null) | Media; + }; + layout?: + | { + title: string; + buttonLabel: string; + href: string; + id?: string | null; + blockName?: string | null; + blockType: 'cta'; + }[] + | null; + status: 'draft' | 'published'; + publishedAt?: string | null; + seo: { + title: string; + description?: string | null; + }; + updatedAt: string; + createdAt: string; + _status?: ('draft' | 'published') | null; +} /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "payload-kv". @@ -231,6 +275,10 @@ export interface PayloadLockedDocument { relationTo: 'articles'; value: number | Article; } | null) + | ({ + relationTo: 'pages'; + value: number | Page; + } | null) | ({ relationTo: 'media'; value: number | Media; @@ -317,6 +365,45 @@ export interface ArticlesSelect { createdAt?: T; _status?: T; } +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "pages_select". + */ +export interface PagesSelect { + title?: T; + slug?: T; + hero?: + | T + | { + heading?: T; + subheading?: T; + image?: T; + }; + layout?: + | T + | { + cta?: + | T + | { + title?: T; + buttonLabel?: T; + href?: T; + id?: T; + blockName?: T; + }; + }; + status?: T; + publishedAt?: T; + seo?: + | T + | { + title?: T; + description?: T; + }; + updatedAt?: T; + createdAt?: T; + _status?: T; +} /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "media_select". @@ -375,6 +462,64 @@ export interface PayloadMigrationsSelect { updatedAt?: T; createdAt?: T; } +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "site-settings". + */ +export interface SiteSetting { + id: number; + siteName: string; + siteDescription?: string | null; + updatedAt?: string | null; + createdAt?: string | null; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "header". + */ +export interface Header { + id: number; + logo?: (number | null) | Media; + items?: + | { + label: string; + href: string; + external?: boolean | null; + id?: string | null; + }[] + | null; + updatedAt?: string | null; + createdAt?: string | null; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "site-settings_select". + */ +export interface SiteSettingsSelect { + siteName?: T; + siteDescription?: T; + updatedAt?: T; + createdAt?: T; + globalType?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "header_select". + */ +export interface HeaderSelect { + logo?: T; + items?: + | T + | { + label?: T; + href?: T; + external?: T; + id?: T; + }; + updatedAt?: T; + createdAt?: T; + globalType?: T; +} /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "collections_widget". From a3b72f5a7f4002d61970259d9db3413c33d6db27 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:43:04 +0200 Subject: [PATCH 089/129] docs(plan): add Plan 5 (app + UI integration) 17 tasks: populate core-trpc with React client + per-framework providers; add bindProduction(config) helpers to each payload-backed feature; swap web-next deps from @repo/api/api-client/ui to core-* + features; wire tRPC route handler with idempotent bindAllProduction(); render example pages (home with nav + site name + article list, /about, /blog/[slug]); parallel-prove framework portability in web-tanstack. First plan that produces browser-rendered output. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../2026-05-04-plan-5-app-ui-integration.md | 1058 +++++++++++++++++ 1 file changed, 1058 insertions(+) create mode 100644 docs/superpowers/plans/2026-05-04-plan-5-app-ui-integration.md diff --git a/docs/superpowers/plans/2026-05-04-plan-5-app-ui-integration.md b/docs/superpowers/plans/2026-05-04-plan-5-app-ui-integration.md new file mode 100644 index 0000000..91056d4 --- /dev/null +++ b/docs/superpowers/plans/2026-05-04-plan-5-app-ui-integration.md @@ -0,0 +1,1058 @@ +# Vertical Refactor — Plan 5: App + UI Integration + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans. + +**Goal:** Populate `@repo/core-trpc` with the React tRPC client + per-framework providers, expose tRPC route handlers in `apps/web-next` and `apps/web-tanstack`, and render real example pages that consume the migrated features end-to-end (home with navigation, `/about` marketing page, `/blog/[slug]` article detail). This is the first plan that produces browser-rendered output. Also adds the small but critical `bindProduction*(config)` helpers each feature exports so apps can swap mock repos for Payload-backed repos at boot. + +**Architecture:** +- `core-trpc` exposes a typed `trpc` React client (against `AppRouter` from `core-api`), a shared `getQueryClient`, and two provider components — one per app framework — that wire `` + ``. +- Each feature with a payload-backed repository exports a `bindProduction*(config)` helper from a new `./di/bind-production.ts` file. Apps call all of them once at server boot to swap mock implementations for real Payload-backed ones. Mock implementations remain the default for tests and for any environment without Payload. +- `apps/web-next/src/app/api/trpc/[trpc]/route.ts` imports `appRouter` from `core-api` and the bind-production helpers from features. Module-scoped initialization means rebindings happen exactly once per server process. RSC server components use the same per-feature DI containers, so the bound repos work for both SSR and client-side fetches via tRPC. +- `apps/web-tanstack` does the equivalent: a route module imports `core-trpc/tanstack` provider and points at the same `appRouter` URL (proxied to `web-next`'s tRPC handler in dev — both apps can serve their own handler in production). +- Example pages: `/` (renders nav header + site name + linked blog list), `/about` (renders the `about` marketing page), `/blog/[slug]` (renders an article). + +**Tech Stack:** Next.js 15.5 App Router (RSC), React 19, TanStack Start (TanStack Router 1.120), tRPC 11 React Query integration, `@trpc/tanstack-react-query`. + +**Plan position:** Plan 5 of 6. +- Plans 1-4 ✅ Foundation, Blog, Auth+Media, Marketing-pages+Navigation +- **Plan 5 (this doc):** App + UI integration +- Plan 6: Cleanup + boundary enforcement + Playwright + docs rewrite + +**Spec reference:** `docs/superpowers/specs/2026-04-21-vertical-monorepo-refactor-design.md` + +**Lessons from earlier plans (apply throughout):** +1. vitest.config.ts has `resolve.alias` for `@/` +2. tsconfig.json has `"rootDir": "."` +3. Source files use relative imports; tests use `@/` +4. Payload-backed repos take `SanitizedConfig` via constructor +5. Apps use `transpilePackages` to allow Next.js to consume `.ts` source from workspace packages + +--- + +## Decisions taken in this plan + +- **`core-trpc` exports two providers**: `./next` for App Router (uses `'use client'`, `httpBatchLink` to `/api/trpc`) and `./tanstack` for TanStack Start (configurable URL since it points at `web-next`'s endpoint in dev). The framework-agnostic primitives (typed `trpc`, `getQueryClient`) live at the root export. +- **Production DI binding pattern: each feature exports `bindProduction*(config: SanitizedConfig)`** from `./di/bind-production.ts`. Pure function, idempotent, called once per server process. Apps build a `bindAllProduction(config)` thin wrapper that calls each. The wrapper lives in `apps/web-next/src/server/bind-production.ts` (server-only, never bundled into client code). +- **Example pages render via React Server Components (RSC)** for first paint, with one demo client component (`` placeholder kept simple — actual subscription wiring deferred). RSC fetches use `await caller.X()` directly; client components use `useQuery(trpc.X.queryOptions(...))`. +- **`apps/web-tanstack` deps move**: drop `@repo/api`/`@repo/api-client`/`@repo/ui`; add `@repo/core-api`/`@repo/core-trpc`/`@repo/core-ui` + the feature packages. (Same swap for `web-next`.) Old packages stay alive on disk (Plan 6 deletes them). +- **No real Payload integration test in this plan** — the smoke test is "GET /blog/[slug] returns 200 and HTML contains the seeded article title." Full e2e via Playwright lands in Plan 6. +- **Auth UI stays minimal** — no sign-in form yet; just expose `auth.signIn` etc. as tRPC procedures already done. Adding a real auth UI is a feature decision, not architecture work. + +--- + +## File Structure + +**Modify — `core-trpc/`** (currently empty): +- `packages/core-trpc/src/client.ts` — typed React tRPC client +- `packages/core-trpc/src/query-client.ts` — getQueryClient with SSR-safe singleton +- `packages/core-trpc/src/providers/next-provider.tsx` — `` +- `packages/core-trpc/src/providers/tanstack-provider.tsx` — `` +- `packages/core-trpc/src/index.ts` — barrel: `trpc`, `getQueryClient`, types +- `packages/core-trpc/package.json` — add `./next`, `./tanstack` exports +- `packages/core-trpc/tsconfig.json` — already correct from Plan 1 + +**Create — `bind-production.ts` in each payload-backed feature:** +- `packages/blog/src/di/bind-production.ts` +- `packages/auth/src/di/bind-production.ts` +- `packages/marketing-pages/src/di/bind-production.ts` +- `packages/navigation/src/di/bind-production.ts` +- (No media — media has no use-cases yet, just schema.) + +**Modify each feature's `package.json` exports** to add `./di/bind-production`: +- blog, auth, marketing-pages, navigation + +**Create — `apps/web-next/src/server/bind-production.ts`** — aggregates the per-feature binds. + +**Modify — `apps/web-next/`:** +- `package.json` — swap deps (`@repo/api`/`@repo/api-client`/`@repo/ui` → `@repo/core-*` + feature packages) +- `next.config.mjs` — update transpilePackages list +- `src/app/api/trpc/[trpc]/route.ts` — import appRouter from `@repo/core-api`, call `bindAllProduction(config)` once at module load +- `src/app/providers.tsx` — use `` from `@repo/core-trpc/next` +- `src/app/page.tsx` — render homepage with nav header + site name + blog list (RSC) +- `src/app/about/page.tsx` — render about marketing page (RSC) +- `src/app/blog/[slug]/page.tsx` — render article by slug (RSC + client component example) +- `src/app/layout.tsx` — small text — title from siteSettings (optional, kept simple) + +**Modify — `apps/web-tanstack/`:** +- `package.json` — swap deps +- `src/routes/__root.tsx` — use `` (URL pointing at web-next:3000/api/trpc in dev for shared backend; future per-app handler is a follow-up) +- `src/routes/index.tsx` — render homepage with nav (proves framework-agnostic features) +- `src/routes/blog/$slug.tsx` — article by slug + +**Do NOT touch in this plan:** +- `packages/api/`, `packages/api-client/`, `packages/ui/`, `packages/core/`, `packages/cms-core/`, `packages/cms-client/` — kept alive; deleted in Plan 6. +- `apps/cms/` — already wired to `core-cms` in Plan 1. +- Boundary enforcement / ESLint plugin — Plan 6. +- Playwright — Plan 6. + +--- + +## Phase A: Populate core-trpc + +### Task 5.1: core-trpc client + query-client + index barrel + +- [ ] **Step 1: Create `packages/core-trpc/src/client.ts`** + +```typescript +"use client"; + +import { createTRPCContext } from "@trpc/tanstack-react-query"; +import type { AppRouter } from "@repo/core-api"; + +export const { TRPCProvider, useTRPC } = createTRPCContext(); +``` + +> Note: `useTRPC` returns the typed proxy. Exported alongside `TRPCProvider` so consumers wire both in their app provider. + +- [ ] **Step 2: Create `packages/core-trpc/src/query-client.ts`** + +```typescript +import { QueryClient } from "@tanstack/react-query"; + +let clientQueryClient: QueryClient | undefined; + +const defaultOptions = { + queries: { + staleTime: 30 * 1000, + refetchOnWindowFocus: false, + }, +}; + +export function getQueryClient(): QueryClient { + if (typeof window === "undefined") { + // Server: always create a new instance per request + return new QueryClient({ defaultOptions }); + } + // Browser: singleton + if (!clientQueryClient) { + clientQueryClient = new QueryClient({ defaultOptions }); + } + return clientQueryClient; +} +``` + +- [ ] **Step 3: Replace `packages/core-trpc/src/index.ts`** + +```typescript +export { useTRPC, TRPCProvider } from "./client"; +export { getQueryClient } from "./query-client"; +export type { AppRouter } from "@repo/core-api"; +``` + +- [ ] **Step 4: Verify compiles** + +Run: `cd packages/core-trpc && pnpm typecheck` +Expected: PASS. + +- [ ] **Step 5: Commit** + +```bash +git add packages/core-trpc/src +git commit -m "feat(core-trpc): add typed React tRPC client + getQueryClient" +``` + +--- + +### Task 5.2: Per-framework providers + package.json exports + +- [ ] **Step 1: Create `packages/core-trpc/src/providers/next-provider.tsx`** + +```tsx +"use client"; + +import { useState } from "react"; +import { QueryClientProvider } from "@tanstack/react-query"; +import { createTRPCClient, httpBatchLink } from "@trpc/client"; +import type { AppRouter } from "@repo/core-api"; +import { TRPCProvider } from "../client"; +import { getQueryClient } from "../query-client"; + +export function NextTrpcProvider({ + children, + trpcUrl = "/api/trpc", +}: { + children: React.ReactNode; + trpcUrl?: string; +}) { + const [queryClient] = useState(() => getQueryClient()); + const [trpcClient] = useState(() => + createTRPCClient({ + links: [httpBatchLink({ url: trpcUrl })], + }), + ); + + return ( + + + {children} + + + ); +} +``` + +- [ ] **Step 2: Create `packages/core-trpc/src/providers/tanstack-provider.tsx`** + +```tsx +"use client"; + +import { useState } from "react"; +import { QueryClientProvider } from "@tanstack/react-query"; +import { createTRPCClient, httpBatchLink } from "@trpc/client"; +import type { AppRouter } from "@repo/core-api"; +import { TRPCProvider } from "../client"; +import { getQueryClient } from "../query-client"; + +export function TanstackTrpcProvider({ + children, + trpcUrl, +}: { + children: React.ReactNode; + trpcUrl: string; +}) { + const [queryClient] = useState(() => getQueryClient()); + const [trpcClient] = useState(() => + createTRPCClient({ + links: [httpBatchLink({ url: trpcUrl })], + }), + ); + + return ( + + + {children} + + + ); +} +``` + +> Note: TanStack provider is essentially the same as Next provider — both wrap `` + ``. The two-file split is to keep the public exports clean (`@repo/core-trpc/next` vs `@repo/core-trpc/tanstack`) and to allow per-framework divergence later (e.g., Next-specific RSC integration). + +- [ ] **Step 3: Update `packages/core-trpc/package.json` exports** + +Replace the `exports` block: + +```json +"exports": { + ".": "./src/index.ts", + "./next": "./src/providers/next-provider.tsx", + "./tanstack": "./src/providers/tanstack-provider.tsx" +} +``` + +- [ ] **Step 4: Verify compiles** + +Run: `cd packages/core-trpc && pnpm typecheck` +Expected: PASS. + +- [ ] **Step 5: Commit** + +```bash +git add packages/core-trpc +git commit -m "feat(core-trpc): add Next.js + TanStack provider components" +``` + +--- + +## Phase B: Per-feature `bindProduction` helpers + +### Task 5.3: blog bindProduction helper + +- [ ] **Step 1: Create `packages/blog/src/di/bind-production.ts`** + +```typescript +import type { SanitizedConfig } from "payload"; +import { blogContainer } from "./container"; +import { BLOG_SYMBOLS } from "./symbols"; +import { PayloadArticlesRepository } from "../infrastructure/repositories/payload-articles.repository"; + +export function bindProductionBlog(config: SanitizedConfig): void { + if (blogContainer.isBound(BLOG_SYMBOLS.IArticlesRepository)) { + blogContainer.unbind(BLOG_SYMBOLS.IArticlesRepository); + } + blogContainer + .bind(BLOG_SYMBOLS.IArticlesRepository) + .toConstantValue(new PayloadArticlesRepository(config)); +} +``` + +- [ ] **Step 2: Add `./di/bind-production` to `packages/blog/package.json` exports** + +```json +"./di/bind-production": "./src/di/bind-production.ts" +``` + +(Add this line inside the existing `exports` block.) + +- [ ] **Step 3: Verify compiles** + +Run: `cd packages/blog && pnpm typecheck` +Expected: PASS. + +- [ ] **Step 4: Commit** + +```bash +git add packages/blog +git commit -m "feat(blog): add bindProductionBlog(config) DI helper for app boot" +``` + +--- + +### Task 5.4: auth bindProduction helper (NO production payload repo yet — keep mock) + +> Note: Auth uses `MockUsersRepository` and `MockAuthenticationService` even in production for now. There's no `PayloadUsersRepository` (Payload's auth collection works differently than the domain User entity per Plan 3 decisions). Auth's bind-production is therefore a NO-OP that just confirms the existing mock bindings are in place. This file exists for symmetry with other features and to give app boot a single bind interface. + +- [ ] **Step 1: Create `packages/auth/src/di/bind-production.ts`** + +```typescript +import type { SanitizedConfig as _SanitizedConfig } from "payload"; + +// Auth currently uses Mock repositories even in production: see Plan 3 +// decisions. This helper exists for API symmetry with other features and +// for forward-compatibility if a Payload-backed users repo is added later. +// +// Until then it's a no-op that intentionally accepts (and ignores) the +// SanitizedConfig argument so app-boot code can call it uniformly. +export function bindProductionAuth(_config: _SanitizedConfig): void { + // Default mock bindings from `module.ts` already loaded by container.ts; + // nothing to swap. +} +``` + +- [ ] **Step 2: Add export to `packages/auth/package.json`** + +```json +"./di/bind-production": "./src/di/bind-production.ts" +``` + +- [ ] **Step 3: Verify compiles** + +Run: `cd packages/auth && pnpm typecheck` +Expected: PASS. + +- [ ] **Step 4: Commit** + +```bash +git add packages/auth +git commit -m "feat(auth): add bindProductionAuth(config) helper (no-op pending payload-users repo)" +``` + +--- + +### Task 5.5: marketing-pages bindProduction helper + +- [ ] **Step 1: Create `packages/marketing-pages/src/di/bind-production.ts`** + +```typescript +import type { SanitizedConfig } from "payload"; +import { marketingPagesContainer } from "./container"; +import { MARKETING_PAGES_SYMBOLS } from "./symbols"; +import { PayloadPagesRepository } from "../infrastructure/repositories/payload-pages.repository"; +import { PayloadSiteSettingsRepository } from "../infrastructure/repositories/payload-site-settings.repository"; + +export function bindProductionMarketingPages(config: SanitizedConfig): void { + if ( + marketingPagesContainer.isBound(MARKETING_PAGES_SYMBOLS.IPagesRepository) + ) { + marketingPagesContainer.unbind(MARKETING_PAGES_SYMBOLS.IPagesRepository); + } + marketingPagesContainer + .bind(MARKETING_PAGES_SYMBOLS.IPagesRepository) + .toConstantValue(new PayloadPagesRepository(config)); + + if ( + marketingPagesContainer.isBound( + MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository, + ) + ) { + marketingPagesContainer.unbind( + MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository, + ); + } + marketingPagesContainer + .bind(MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository) + .toConstantValue(new PayloadSiteSettingsRepository(config)); +} +``` + +- [ ] **Step 2: Add to `packages/marketing-pages/package.json` exports** + +```json +"./di/bind-production": "./src/di/bind-production.ts" +``` + +- [ ] **Step 3: Verify compiles** + +Run: `cd packages/marketing-pages && pnpm typecheck` +Expected: PASS. + +- [ ] **Step 4: Commit** + +```bash +git add packages/marketing-pages +git commit -m "feat(marketing-pages): add bindProductionMarketingPages(config) DI helper" +``` + +--- + +### Task 5.6: navigation bindProduction helper + +- [ ] **Step 1: Create `packages/navigation/src/di/bind-production.ts`** + +```typescript +import type { SanitizedConfig } from "payload"; +import { navigationContainer } from "./container"; +import { NAVIGATION_SYMBOLS } from "./symbols"; +import { PayloadHeaderRepository } from "../infrastructure/repositories/payload-header.repository"; + +export function bindProductionNavigation(config: SanitizedConfig): void { + if (navigationContainer.isBound(NAVIGATION_SYMBOLS.IHeaderRepository)) { + navigationContainer.unbind(NAVIGATION_SYMBOLS.IHeaderRepository); + } + navigationContainer + .bind(NAVIGATION_SYMBOLS.IHeaderRepository) + .toConstantValue(new PayloadHeaderRepository(config)); +} +``` + +- [ ] **Step 2: Add to `packages/navigation/package.json` exports** + +```json +"./di/bind-production": "./src/di/bind-production.ts" +``` + +- [ ] **Step 3: Verify compiles** + +Run: `cd packages/navigation && pnpm typecheck` +Expected: PASS. + +- [ ] **Step 4: Commit** + +```bash +git add packages/navigation +git commit -m "feat(navigation): add bindProductionNavigation(config) DI helper" +``` + +--- + +### Task 5.7: Run all feature tests to confirm bind-production additions don't break existing tests + +- [ ] **Step 1: Run all feature tests** + +Run: `pnpm test --filter @repo/blog --filter @repo/auth --filter @repo/marketing-pages --filter @repo/navigation --filter @repo/core-shared` +Expected: PASS — 96 total (blog 26, auth 24, marketing-pages 16, navigation 4, core-shared 26). + +No new commit needed (all bind-production files are additive; tests didn't import them). + +--- + +## Phase C: Wire apps/web-next + +### Task 5.8: Update apps/web-next package.json + next.config.mjs + +- [ ] **Step 1: Replace `apps/web-next/package.json`** + +```json +{ + "name": "@repo/web-next", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "build": "echo 'Next.js build requires full environment — use pnpm dev or docker'", + "dev": "next dev --port 3000", + "lint": "eslint .", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@repo/auth": "workspace:*", + "@repo/blog": "workspace:*", + "@repo/core-api": "workspace:*", + "@repo/core-cms": "workspace:*", + "@repo/core-shared": "workspace:*", + "@repo/core-trpc": "workspace:*", + "@repo/core-ui": "workspace:*", + "@repo/marketing-pages": "workspace:*", + "@repo/media": "workspace:*", + "@repo/navigation": "workspace:*", + "@tanstack/react-query": "^5.66.0", + "next": "^15.3.0", + "payload": "^3.14.0", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "superjson": "^2.2.1" + }, + "devDependencies": { + "@repo/eslint-config": "workspace:*", + "@repo/typescript-config": "workspace:*", + "@types/node": "^22.0.0", + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0" + } +} +``` + +> Note: `@repo/api`, `@repo/api-client`, `@repo/ui` removed. `@repo/core-cms` added because the route handler imports the assembled config to pass to bind-production helpers. `payload` added because the bind helpers reference `SanitizedConfig`. + +- [ ] **Step 2: Replace `apps/web-next/next.config.mjs`** + +```javascript +/** @type {import('next').NextConfig} */ +const nextConfig = { + transpilePackages: [ + "@repo/auth", + "@repo/blog", + "@repo/core-api", + "@repo/core-cms", + "@repo/core-shared", + "@repo/core-trpc", + "@repo/core-ui", + "@repo/marketing-pages", + "@repo/media", + "@repo/navigation", + ], +}; + +export default nextConfig; +``` + +- [ ] **Step 3: Install + verify** + +Run: `pnpm install` +Expected: completes without error; old `@repo/api` etc. still in workspace but no longer in web-next's node_modules. + +- [ ] **Step 4: Commit** + +```bash +git add apps/web-next/package.json apps/web-next/next.config.mjs pnpm-lock.yaml +git commit -m "build(web-next): swap deps to core-* + feature packages, transpile new workspaces" +``` + +--- + +### Task 5.9: web-next server-side bind-production aggregator + +- [ ] **Step 1: Create `apps/web-next/src/server/bind-production.ts`** + +```typescript +import "server-only"; +import config from "@repo/core-cms"; +import { bindProductionBlog } from "@repo/blog/di/bind-production"; +import { bindProductionAuth } from "@repo/auth/di/bind-production"; +import { bindProductionMarketingPages } from "@repo/marketing-pages/di/bind-production"; +import { bindProductionNavigation } from "@repo/navigation/di/bind-production"; + +let bound = false; + +export async function bindAllProduction(): Promise { + if (bound) return; + bound = true; + const resolvedConfig = await config; + bindProductionAuth(resolvedConfig); + bindProductionBlog(resolvedConfig); + bindProductionMarketingPages(resolvedConfig); + bindProductionNavigation(resolvedConfig); +} +``` + +> Notes: +> - `import 'server-only'` from Next.js fails the build if a client component imports this file. That's the safety net we want — Payload config can't be bundled into the browser. +> - The `config` default export from `@repo/core-cms` is a Promise (Payload's `buildConfig` returns one when there are async resolutions). We `await` it once. +> - `bound` flag makes `bindAllProduction()` idempotent. Multiple route handlers and RSC pages can call it; only the first invocation does work. + +- [ ] **Step 2: Add `server-only` to `apps/web-next/package.json` if not already present** + +Add to `dependencies`: +```json +"server-only": "^0.0.1" +``` + +(If `pnpm install` complains the version doesn't exist, omit it — `server-only` is a Next.js built-in marker often resolved via transitive deps. Try adding it explicitly first; remove if it causes lockfile issues.) + +- [ ] **Step 3: Install + verify** + +Run: `pnpm install` +Expected: completes. If `server-only` install fails, drop the import line and use a comment marker instead: +```typescript +// SERVER-ONLY: this module imports Payload config and must never be bundled into the browser. +``` + +- [ ] **Step 4: Verify typecheck** + +Run: `pnpm typecheck --filter @repo/web-next` +Expected: PASS (or report any errors — see "If anything fails" note in Report Format). + +- [ ] **Step 5: Commit** + +```bash +git add apps/web-next pnpm-lock.yaml +git commit -m "feat(web-next): add server bindAllProduction() aggregator with idempotent guard" +``` + +--- + +### Task 5.10: web-next tRPC route handler + providers + +- [ ] **Step 1: Replace `apps/web-next/src/app/api/trpc/[trpc]/route.ts`** + +```typescript +import { fetchRequestHandler } from "@trpc/server/adapters/fetch"; +import { appRouter } from "@repo/core-api"; +import { bindAllProduction } from "../../../../server/bind-production"; + +const handler = async (req: Request) => { + await bindAllProduction(); + return fetchRequestHandler({ + endpoint: "/api/trpc", + req, + router: appRouter, + createContext: () => ({}), + }); +}; + +export { handler as GET, handler as POST }; +``` + +> Note: `bindAllProduction()` runs on every request but is internally idempotent — only the first call does work. This pattern works whether the Next.js dev server runs as a single long-lived process (typical) or as serverless lambdas (where each cold start re-binds, which is what we want). + +- [ ] **Step 2: Replace `apps/web-next/src/app/providers.tsx`** + +```tsx +"use client"; + +import { NextTrpcProvider } from "@repo/core-trpc/next"; + +export function Providers({ children }: { children: React.ReactNode }) { + return {children}; +} +``` + +- [ ] **Step 3: Verify typecheck** + +Run: `pnpm typecheck --filter @repo/web-next` +Expected: PASS. + +- [ ] **Step 4: Commit** + +```bash +git add apps/web-next/src/app +git commit -m "feat(web-next): wire tRPC route handler against core-api + new TrpcProvider" +``` + +--- + +### Task 5.11: web-next homepage (RSC) — nav + site name + blog list + +- [ ] **Step 1: Replace `apps/web-next/src/app/page.tsx`** + +```tsx +import Link from "next/link"; +import { appRouter } from "@repo/core-api"; +import { bindAllProduction } from "../server/bind-production"; + +export default async function Home() { + await bindAllProduction(); + const caller = appRouter.createCaller({}); + + const [siteSettings, header, articles] = await Promise.all([ + caller.marketingPages.siteSettings(), + caller.navigation.header(), + caller.blog.listArticles({ status: "published", limit: 20 }), + ]); + + return ( +
+
+

{siteSettings.siteName}

+ {siteSettings.siteDescription ? ( +

{siteSettings.siteDescription}

+ ) : null} + +
+ +
+

Latest articles

+ {articles.length === 0 ? ( +

No published articles yet.

+ ) : ( +
    + {articles.map((a) => ( +
  • + {a.title} +
  • + ))} +
+ )} +
+
+ ); +} +``` + +> Note: This is a React Server Component. It calls `appRouter.createCaller({})` directly (bypassing HTTP) for SSR — the server has the same DI bindings, so use-cases resolve through Payload-backed repos. Could also use HTTP via `createTRPCClient` but the direct caller is faster and skips a network round-trip. + +- [ ] **Step 2: Verify typecheck** + +Run: `pnpm typecheck --filter @repo/web-next` +Expected: PASS. + +- [ ] **Step 3: Commit** + +```bash +git add apps/web-next/src/app/page.tsx +git commit -m "feat(web-next): render homepage with siteSettings + header + article list" +``` + +--- + +### Task 5.12: web-next /about page (RSC) + +- [ ] **Step 1: Create `apps/web-next/src/app/about/page.tsx`** + +```tsx +import { appRouter } from "@repo/core-api"; +import { bindAllProduction } from "../../server/bind-production"; + +export default async function AboutPage() { + await bindAllProduction(); + const caller = appRouter.createCaller({}); + const page = await caller.marketingPages.pageBySlug({ slug: "about" }); + + if (!page) { + return ( +
+

About

+

This page hasn’t been published yet.

+
+ ); + } + + return ( +
+
+
+

{page.hero.heading}

+ {page.hero.subheading ?

{page.hero.subheading}

: null} +
+
+          {JSON.stringify(page.layout, null, 2)}
+        
+
+
+ ); +} +``` + +> Note: rich-text/blocks rendering is intentionally simplified to a JSON dump — building a proper Lexical/blocks renderer is feature work, not architecture work. Plan 6 won't add it either; that's future enhancement. + +- [ ] **Step 2: Verify typecheck** + +Run: `pnpm typecheck --filter @repo/web-next` +Expected: PASS. + +- [ ] **Step 3: Commit** + +```bash +git add apps/web-next/src/app/about +git commit -m "feat(web-next): render /about marketing page via marketingPages.pageBySlug" +``` + +--- + +### Task 5.13: web-next /blog/[slug] page with hybrid RSC + client component + +- [ ] **Step 1: Create `apps/web-next/src/app/blog/[slug]/page.tsx`** + +```tsx +import { notFound } from "next/navigation"; +import { appRouter } from "@repo/core-api"; +import { bindAllProduction } from "../../../server/bind-production"; + +type PageProps = { + params: Promise<{ slug: string }>; +}; + +export default async function BlogPostPage({ params }: PageProps) { + await bindAllProduction(); + const { slug } = await params; + const caller = appRouter.createCaller({}); + const article = await caller.blog.articleBySlug({ slug }); + + if (!article) notFound(); + + return ( +
+
+
+

{article.title}

+ {article.publishedAt ? ( + + ) : null} +
+
+          {JSON.stringify(article.content, null, 2)}
+        
+
+
+ ); +} +``` + +- [ ] **Step 2: Verify typecheck** + +Run: `pnpm typecheck --filter @repo/web-next` +Expected: PASS. + +- [ ] **Step 3: Commit** + +```bash +git add apps/web-next/src/app/blog +git commit -m "feat(web-next): render /blog/[slug] article detail via blog.articleBySlug" +``` + +--- + +### Task 5.14: web-next dev server smoke test + +- [ ] **Step 1: Ensure Postgres running** + +Run: `docker ps | grep postgres`. If empty: `docker compose up -d postgres`. + +- [ ] **Step 2: Ensure apps/web-next has an .env (or `.env.local`)** + +Check: `ls apps/web-next/.env*`. If none, copy: `cp /Users/danijel/Documents/Projects/template-vertical/apps/cms/.env apps/web-next/.env` (the same DATABASE_URL works since both connect to the shared Postgres). + +- [ ] **Step 3: Boot dev server in background** + +```bash +pnpm dev --filter @repo/web-next & +DEV_PID=$! +sleep 20 +``` + +- [ ] **Step 4: Smoke-test endpoints** + +```bash +curl -sf -o /dev/null -w "%{http_code}\n" http://localhost:3000/ +curl -sf -o /dev/null -w "%{http_code}\n" http://localhost:3000/about +``` + +Expected: both return 200. + +For `/blog/[slug]`, we don't have a seeded article in Payload yet — the page will return 404 (notFound). That's correct behavior. Verify: + +```bash +curl -sf -o /dev/null -w "%{http_code}\n" http://localhost:3000/blog/anything +``` + +Expected: 404 (not 500). That confirms the route renders without crashing. + +- [ ] **Step 5: Optional — verify body content** + +```bash +curl -sf http://localhost:3000/ | grep -o "My App" +``` + +Expected: prints "My App" (the seeded `siteName` from `MockSiteSettingsRepository` OR the actual Payload-stored value if one exists). + +- [ ] **Step 6: Stop dev server** + +```bash +kill $DEV_PID 2>/dev/null +pkill -f "next.*3000" 2>/dev/null +``` + +- [ ] **Step 7: No commit (smoke test only)** + +--- + +## Phase D: Wire apps/web-tanstack (parallel proof) + +### Task 5.15: Update apps/web-tanstack package.json + provider + +- [ ] **Step 1: Replace `apps/web-tanstack/package.json`** + +```json +{ + "name": "@repo/web-tanstack", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "build": "echo 'placeholder — TanStack Start build configured in later plan'", + "dev": "echo 'placeholder'", + "lint": "eslint .", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@repo/blog": "workspace:*", + "@repo/core-api": "workspace:*", + "@repo/core-trpc": "workspace:*", + "@repo/core-ui": "workspace:*", + "@repo/marketing-pages": "workspace:*", + "@repo/navigation": "workspace:*", + "@tanstack/react-query": "^5.66.0", + "@tanstack/react-router": "^1.120.0", + "react": "^19.0.0", + "react-dom": "^19.0.0" + }, + "devDependencies": { + "@repo/eslint-config": "workspace:*", + "@repo/typescript-config": "workspace:*", + "@types/node": "^22.0.0", + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0" + } +} +``` + +> Note: TanStack-side does NOT include `@repo/core-cms` or `payload` — it doesn't bind production repos itself. It points its tRPC client at web-next's `/api/trpc` endpoint, which has already done the binding server-side. + +- [ ] **Step 2: Replace `apps/web-tanstack/src/routes/__root.tsx`** + +```tsx +import { Outlet, createRootRoute } from "@tanstack/react-router"; +import { TanstackTrpcProvider } from "@repo/core-trpc/tanstack"; + +export const Route = createRootRoute({ + component: () => ( + + + + ), +}); +``` + +- [ ] **Step 3: Install + typecheck** + +Run: `pnpm install` then `pnpm typecheck --filter @repo/web-tanstack` +Expected: PASS. + +- [ ] **Step 4: Commit** + +```bash +git add apps/web-tanstack pnpm-lock.yaml +git commit -m "build(web-tanstack): swap deps + use TanstackTrpcProvider against shared backend" +``` + +--- + +### Task 5.16: web-tanstack example route consuming features + +- [ ] **Step 1: Replace `apps/web-tanstack/src/routes/index.tsx`** + +```tsx +import { createFileRoute } from "@tanstack/react-router"; +import { useQuery } from "@tanstack/react-query"; +import { useTRPC } from "@repo/core-trpc"; + +export const Route = createFileRoute("/")({ + component: Home, +}); + +function Home() { + const trpc = useTRPC(); + const siteSettings = useQuery(trpc.marketingPages.siteSettings.queryOptions()); + const header = useQuery(trpc.navigation.header.queryOptions()); + + if (siteSettings.isPending || header.isPending) { + return
Loading…
; + } + if (siteSettings.error || header.error) { + return ( +
+ Failed to load: {siteSettings.error?.message ?? header.error?.message} +
+ ); + } + + return ( +
+
+

{siteSettings.data?.siteName} — TanStack edition

+ +
+

This page is rendered by TanStack Router and consumes the same feature packages as the Next.js app.

+
+ ); +} +``` + +- [ ] **Step 2: Verify typecheck** + +Run: `pnpm typecheck --filter @repo/web-tanstack` +Expected: PASS. + +- [ ] **Step 3: Commit** + +```bash +git add apps/web-tanstack/src/routes/index.tsx +git commit -m "feat(web-tanstack): consume marketingPages.siteSettings + navigation.header via tRPC client" +``` + +--- + +## Phase E: Final verification + +### Task 5.17: Repo-wide test + typecheck + smoke + +- [ ] **Step 1: Run all feature tests** + +Run: `pnpm test --filter @repo/blog --filter @repo/auth --filter @repo/marketing-pages --filter @repo/navigation --filter @repo/core-shared` +Expected: PASS — 96 tests total (no new tests in Plan 5 — apps don't have unit tests). + +- [ ] **Step 2: Repo-wide typecheck** + +Run: `pnpm typecheck` +Expected: PASS for all packages we touched (core-trpc, all 5 features, web-next, web-tanstack, cms, core-cms, etc.). Pre-existing failures remain in `@repo/api` and `@repo/ui`. + +- [ ] **Step 3: web-next dev smoke test (final)** + +Postgres should still be running. + +```bash +pnpm dev --filter @repo/web-next & +DEV_PID=$! +sleep 20 +curl -sf -o /dev/null -w "GET / -> %{http_code}\n" http://localhost:3000/ +curl -sf -o /dev/null -w "GET /about -> %{http_code}\n" http://localhost:3000/about +curl -sf -o /dev/null -w "GET /blog/anything -> %{http_code}\n" http://localhost:3000/blog/anything +kill $DEV_PID 2>/dev/null +pkill -f "next.*3000" 2>/dev/null +``` + +Expected: `/` and `/about` return 200; `/blog/anything` returns 404. + +- [ ] **Step 4: No commit (final verification)** + +--- + +## Plan 5 Done Criteria + +- [ ] All 96 feature tests still pass +- [ ] `core-trpc` has `useTRPC`, `getQueryClient`, `NextTrpcProvider`, `TanstackTrpcProvider` +- [ ] All 4 payload-backed features export `bindProduction*(config)` +- [ ] `apps/web-next` no longer depends on `@repo/api`/`@repo/api-client`/`@repo/ui`; uses `core-*` + features instead +- [ ] `apps/web-next` dev server boots; `/` returns 200 with rendered nav + site name + blog list; `/about` returns 200; `/blog/[slug]` returns 200 (with article) or 404 (without) +- [ ] `apps/web-tanstack` typechecks against new deps; renders `/` (running TanStack dev separately is deferred to Plan 6 since TanStack Start integration is more involved — for now we just typecheck) + +**Next plan:** Plan 6 — Cleanup + boundary enforcement + Playwright + docs rewrite. Deletes the old `@repo/core`, `@repo/api`, `@repo/api-client`, `@repo/cms-core`, `@repo/cms-client`, `@repo/ui` packages. Adds `eslint-plugin-boundaries` configuration enforcing the three-tag boundary model. Sets up Playwright in both apps with initial smoke specs. Rewrites root + per-package AGENTS.md, adds new ADRs, updates the adding-a-feature guide. From 8d80361785fb993cd7a48170d15c7d6c724691df Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:46:24 +0200 Subject: [PATCH 090/129] feat(core-trpc): add typed React tRPC client + getQueryClient --- packages/core-api/src/root.ts | 7 +------ packages/core-trpc/package.json | 1 + packages/core-trpc/src/client.ts | 6 ++++++ packages/core-trpc/src/index.ts | 4 +++- packages/core-trpc/src/query-client.ts | 22 ++++++++++++++++++++++ 5 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 packages/core-trpc/src/client.ts create mode 100644 packages/core-trpc/src/query-client.ts diff --git a/packages/core-api/src/root.ts b/packages/core-api/src/root.ts index 5cf9fb6..444b570 100644 --- a/packages/core-api/src/root.ts +++ b/packages/core-api/src/root.ts @@ -15,9 +15,4 @@ export const appRouter = router({ navigation: navigationRouter, }); -export type AppRouter = { - auth: AuthRouter; - blog: BlogRouter; - marketingPages: MarketingPagesRouter; - navigation: NavigationRouter; -}; +export type AppRouter = typeof appRouter; diff --git a/packages/core-trpc/package.json b/packages/core-trpc/package.json index 1d0810a..8a91cc9 100644 --- a/packages/core-trpc/package.json +++ b/packages/core-trpc/package.json @@ -16,6 +16,7 @@ "@trpc/client": "^11.0.0", "@trpc/react-query": "^11.0.0", "@trpc/server": "^11.0.0", + "@trpc/tanstack-react-query": "^11.1.0", "@tanstack/react-query": "^5.66.0", "react": "^19.0.0", "superjson": "^2.2.1" diff --git a/packages/core-trpc/src/client.ts b/packages/core-trpc/src/client.ts new file mode 100644 index 0000000..722b8c1 --- /dev/null +++ b/packages/core-trpc/src/client.ts @@ -0,0 +1,6 @@ +"use client"; + +import { createTRPCContext } from "@trpc/tanstack-react-query"; +import type { AppRouter } from "@repo/core-api"; + +export const { TRPCProvider, useTRPC } = createTRPCContext(); diff --git a/packages/core-trpc/src/index.ts b/packages/core-trpc/src/index.ts index cb0ff5c..7b27b5d 100644 --- a/packages/core-trpc/src/index.ts +++ b/packages/core-trpc/src/index.ts @@ -1 +1,3 @@ -export {}; +export { useTRPC, TRPCProvider } from "./client"; +export { getQueryClient } from "./query-client"; +export type { AppRouter } from "@repo/core-api"; diff --git a/packages/core-trpc/src/query-client.ts b/packages/core-trpc/src/query-client.ts new file mode 100644 index 0000000..fd496f0 --- /dev/null +++ b/packages/core-trpc/src/query-client.ts @@ -0,0 +1,22 @@ +import { QueryClient } from "@tanstack/react-query"; + +let clientQueryClient: QueryClient | undefined; + +const defaultOptions = { + queries: { + staleTime: 30 * 1000, + refetchOnWindowFocus: false, + }, +}; + +export function getQueryClient(): QueryClient { + if (typeof window === "undefined") { + // Server: always create a new instance per request + return new QueryClient({ defaultOptions }); + } + // Browser: singleton + if (!clientQueryClient) { + clientQueryClient = new QueryClient({ defaultOptions }); + } + return clientQueryClient; +} From b14db95cfb3822edba83d144a47898bec05a306f Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:47:07 +0200 Subject: [PATCH 091/129] feat(core-trpc): add Next.js + TanStack provider components --- packages/core-trpc/package.json | 4 ++- .../core-trpc/src/providers/next-provider.tsx | 32 +++++++++++++++++++ .../src/providers/tanstack-provider.tsx | 32 +++++++++++++++++++ 3 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 packages/core-trpc/src/providers/next-provider.tsx create mode 100644 packages/core-trpc/src/providers/tanstack-provider.tsx diff --git a/packages/core-trpc/package.json b/packages/core-trpc/package.json index 8a91cc9..2f22bf3 100644 --- a/packages/core-trpc/package.json +++ b/packages/core-trpc/package.json @@ -4,7 +4,9 @@ "version": "0.0.0", "type": "module", "exports": { - ".": "./src/index.ts" + ".": "./src/index.ts", + "./next": "./src/providers/next-provider.tsx", + "./tanstack": "./src/providers/tanstack-provider.tsx" }, "scripts": { "build": "tsc --noEmit", diff --git a/packages/core-trpc/src/providers/next-provider.tsx b/packages/core-trpc/src/providers/next-provider.tsx new file mode 100644 index 0000000..22ae0b3 --- /dev/null +++ b/packages/core-trpc/src/providers/next-provider.tsx @@ -0,0 +1,32 @@ +"use client"; + +import { useState } from "react"; +import { QueryClientProvider } from "@tanstack/react-query"; +import { createTRPCClient, httpBatchLink } from "@trpc/client"; +import superjson from "superjson"; +import type { AppRouter } from "@repo/core-api"; +import { TRPCProvider } from "../client"; +import { getQueryClient } from "../query-client"; + +export function NextTrpcProvider({ + children, + trpcUrl = "/api/trpc", +}: { + children: React.ReactNode; + trpcUrl?: string; +}) { + const [queryClient] = useState(() => getQueryClient()); + const [trpcClient] = useState(() => + createTRPCClient({ + links: [httpBatchLink({ url: trpcUrl, transformer: superjson })], + }), + ); + + return ( + + + {children} + + + ); +} diff --git a/packages/core-trpc/src/providers/tanstack-provider.tsx b/packages/core-trpc/src/providers/tanstack-provider.tsx new file mode 100644 index 0000000..e950e87 --- /dev/null +++ b/packages/core-trpc/src/providers/tanstack-provider.tsx @@ -0,0 +1,32 @@ +"use client"; + +import { useState } from "react"; +import { QueryClientProvider } from "@tanstack/react-query"; +import { createTRPCClient, httpBatchLink } from "@trpc/client"; +import superjson from "superjson"; +import type { AppRouter } from "@repo/core-api"; +import { TRPCProvider } from "../client"; +import { getQueryClient } from "../query-client"; + +export function TanstackTrpcProvider({ + children, + trpcUrl, +}: { + children: React.ReactNode; + trpcUrl: string; +}) { + const [queryClient] = useState(() => getQueryClient()); + const [trpcClient] = useState(() => + createTRPCClient({ + links: [httpBatchLink({ url: trpcUrl, transformer: superjson })], + }), + ); + + return ( + + + {children} + + + ); +} From cdd7513032adff09e327df21633f451b397a996b Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:48:49 +0200 Subject: [PATCH 092/129] docs(plan-5): add superjson transformer to httpBatchLink in both providers Server uses superjson via core-shared/trpc/init's initTRPC config. Client httpBatchLink must match or complex types (Date, Map, Set) silently break on the wire. Caught during execution. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../plans/2026-05-04-plan-5-app-ui-integration.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/superpowers/plans/2026-05-04-plan-5-app-ui-integration.md b/docs/superpowers/plans/2026-05-04-plan-5-app-ui-integration.md index 91056d4..639dd09 100644 --- a/docs/superpowers/plans/2026-05-04-plan-5-app-ui-integration.md +++ b/docs/superpowers/plans/2026-05-04-plan-5-app-ui-integration.md @@ -163,6 +163,7 @@ git commit -m "feat(core-trpc): add typed React tRPC client + getQueryClient" import { useState } from "react"; import { QueryClientProvider } from "@tanstack/react-query"; import { createTRPCClient, httpBatchLink } from "@trpc/client"; +import superjson from "superjson"; import type { AppRouter } from "@repo/core-api"; import { TRPCProvider } from "../client"; import { getQueryClient } from "../query-client"; @@ -177,7 +178,7 @@ export function NextTrpcProvider({ const [queryClient] = useState(() => getQueryClient()); const [trpcClient] = useState(() => createTRPCClient({ - links: [httpBatchLink({ url: trpcUrl })], + links: [httpBatchLink({ url: trpcUrl, transformer: superjson })], }), ); @@ -191,6 +192,8 @@ export function NextTrpcProvider({ } ``` +> Note: `transformer: superjson` is required to match the server's superjson transformer in `core-shared/src/trpc/init.ts`. Without it, complex types like `Date` won't deserialize correctly across the wire. + - [ ] **Step 2: Create `packages/core-trpc/src/providers/tanstack-provider.tsx`** ```tsx @@ -199,6 +202,7 @@ export function NextTrpcProvider({ import { useState } from "react"; import { QueryClientProvider } from "@tanstack/react-query"; import { createTRPCClient, httpBatchLink } from "@trpc/client"; +import superjson from "superjson"; import type { AppRouter } from "@repo/core-api"; import { TRPCProvider } from "../client"; import { getQueryClient } from "../query-client"; @@ -213,7 +217,7 @@ export function TanstackTrpcProvider({ const [queryClient] = useState(() => getQueryClient()); const [trpcClient] = useState(() => createTRPCClient({ - links: [httpBatchLink({ url: trpcUrl })], + links: [httpBatchLink({ url: trpcUrl, transformer: superjson })], }), ); From f981266fd591ccdfc33f05e407d22aadbb4fb9ed Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:49:55 +0200 Subject: [PATCH 093/129] feat(blog): add bindProductionBlog(config) DI helper for app boot --- packages/blog/package.json | 3 ++- packages/blog/src/di/bind-production.ts | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 packages/blog/src/di/bind-production.ts diff --git a/packages/blog/package.json b/packages/blog/package.json index ba59be2..ed2a5bd 100644 --- a/packages/blog/package.json +++ b/packages/blog/package.json @@ -6,7 +6,8 @@ "exports": { ".": "./src/index.ts", "./cms": "./src/integrations/cms/index.ts", - "./api": "./src/integrations/api/router.ts" + "./api": "./src/integrations/api/router.ts", + "./di/bind-production": "./src/di/bind-production.ts" }, "scripts": { "build": "tsc --noEmit", diff --git a/packages/blog/src/di/bind-production.ts b/packages/blog/src/di/bind-production.ts new file mode 100644 index 0000000..10e81dc --- /dev/null +++ b/packages/blog/src/di/bind-production.ts @@ -0,0 +1,13 @@ +import type { SanitizedConfig } from "payload"; +import { blogContainer } from "./container"; +import { BLOG_SYMBOLS } from "./symbols"; +import { PayloadArticlesRepository } from "../infrastructure/repositories/payload-articles.repository"; + +export function bindProductionBlog(config: SanitizedConfig): void { + if (blogContainer.isBound(BLOG_SYMBOLS.IArticlesRepository)) { + blogContainer.unbind(BLOG_SYMBOLS.IArticlesRepository); + } + blogContainer + .bind(BLOG_SYMBOLS.IArticlesRepository) + .toConstantValue(new PayloadArticlesRepository(config)); +} From ef42abb3e18bc1a7659c0377296a4d3482651d34 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:50:08 +0200 Subject: [PATCH 094/129] feat(auth): add bindProductionAuth(config) helper (no-op pending payload-users repo) --- packages/auth/package.json | 3 ++- packages/auth/src/di/bind-production.ts | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 packages/auth/src/di/bind-production.ts diff --git a/packages/auth/package.json b/packages/auth/package.json index 03dad97..78cbfb4 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -6,7 +6,8 @@ "exports": { ".": "./src/index.ts", "./cms": "./src/integrations/cms/index.ts", - "./api": "./src/integrations/api/router.ts" + "./api": "./src/integrations/api/router.ts", + "./di/bind-production": "./src/di/bind-production.ts" }, "scripts": { "build": "tsc --noEmit", diff --git a/packages/auth/src/di/bind-production.ts b/packages/auth/src/di/bind-production.ts new file mode 100644 index 0000000..3c4904d --- /dev/null +++ b/packages/auth/src/di/bind-production.ts @@ -0,0 +1,12 @@ +import type { SanitizedConfig as _SanitizedConfig } from "payload"; + +// Auth currently uses Mock repositories even in production: see Plan 3 +// decisions. This helper exists for API symmetry with other features and +// for forward-compatibility if a Payload-backed users repo is added later. +// +// Until then it's a no-op that intentionally accepts (and ignores) the +// SanitizedConfig argument so app-boot code can call it uniformly. +export function bindProductionAuth(_config: _SanitizedConfig): void { + // Default mock bindings from `module.ts` already loaded by container.ts; + // nothing to swap. +} From 02aee1ec232e219b241c36bf79ac13f851d04c6b Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:50:30 +0200 Subject: [PATCH 095/129] feat(marketing-pages): add bindProductionMarketingPages(config) DI helper --- packages/marketing-pages/package.json | 3 +- .../marketing-pages/src/di/bind-production.ts | 29 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 packages/marketing-pages/src/di/bind-production.ts diff --git a/packages/marketing-pages/package.json b/packages/marketing-pages/package.json index 5411ce0..fb3dd74 100644 --- a/packages/marketing-pages/package.json +++ b/packages/marketing-pages/package.json @@ -6,7 +6,8 @@ "exports": { ".": "./src/index.ts", "./cms": "./src/integrations/cms/index.ts", - "./api": "./src/integrations/api/router.ts" + "./api": "./src/integrations/api/router.ts", + "./di/bind-production": "./src/di/bind-production.ts" }, "scripts": { "build": "tsc --noEmit", diff --git a/packages/marketing-pages/src/di/bind-production.ts b/packages/marketing-pages/src/di/bind-production.ts new file mode 100644 index 0000000..afff8bf --- /dev/null +++ b/packages/marketing-pages/src/di/bind-production.ts @@ -0,0 +1,29 @@ +import type { SanitizedConfig } from "payload"; +import { marketingPagesContainer } from "./container"; +import { MARKETING_PAGES_SYMBOLS } from "./symbols"; +import { PayloadPagesRepository } from "../infrastructure/repositories/payload-pages.repository"; +import { PayloadSiteSettingsRepository } from "../infrastructure/repositories/payload-site-settings.repository"; + +export function bindProductionMarketingPages(config: SanitizedConfig): void { + if ( + marketingPagesContainer.isBound(MARKETING_PAGES_SYMBOLS.IPagesRepository) + ) { + marketingPagesContainer.unbind(MARKETING_PAGES_SYMBOLS.IPagesRepository); + } + marketingPagesContainer + .bind(MARKETING_PAGES_SYMBOLS.IPagesRepository) + .toConstantValue(new PayloadPagesRepository(config)); + + if ( + marketingPagesContainer.isBound( + MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository, + ) + ) { + marketingPagesContainer.unbind( + MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository, + ); + } + marketingPagesContainer + .bind(MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository) + .toConstantValue(new PayloadSiteSettingsRepository(config)); +} From 5620fae1167eb45c2344ce71e20d3e2870e19afd Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:50:47 +0200 Subject: [PATCH 096/129] feat(navigation): add bindProductionNavigation(config) DI helper --- packages/navigation/package.json | 3 ++- packages/navigation/src/di/bind-production.ts | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 packages/navigation/src/di/bind-production.ts diff --git a/packages/navigation/package.json b/packages/navigation/package.json index 5c6a32f..5d9dc3c 100644 --- a/packages/navigation/package.json +++ b/packages/navigation/package.json @@ -6,7 +6,8 @@ "exports": { ".": "./src/index.ts", "./cms": "./src/integrations/cms/index.ts", - "./api": "./src/integrations/api/router.ts" + "./api": "./src/integrations/api/router.ts", + "./di/bind-production": "./src/di/bind-production.ts" }, "scripts": { "build": "tsc --noEmit", diff --git a/packages/navigation/src/di/bind-production.ts b/packages/navigation/src/di/bind-production.ts new file mode 100644 index 0000000..2e0c0b5 --- /dev/null +++ b/packages/navigation/src/di/bind-production.ts @@ -0,0 +1,13 @@ +import type { SanitizedConfig } from "payload"; +import { navigationContainer } from "./container"; +import { NAVIGATION_SYMBOLS } from "./symbols"; +import { PayloadHeaderRepository } from "../infrastructure/repositories/payload-header.repository"; + +export function bindProductionNavigation(config: SanitizedConfig): void { + if (navigationContainer.isBound(NAVIGATION_SYMBOLS.IHeaderRepository)) { + navigationContainer.unbind(NAVIGATION_SYMBOLS.IHeaderRepository); + } + navigationContainer + .bind(NAVIGATION_SYMBOLS.IHeaderRepository) + .toConstantValue(new PayloadHeaderRepository(config)); +} From 9d5f4fca331fc1b1c08fb58aea9c2b502e26ee19 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:52:37 +0200 Subject: [PATCH 097/129] build(web-next): swap deps to core-* + feature packages, transpile new workspaces --- apps/web-next/next.config.mjs | 13 +++++++++- apps/web-next/package.json | 18 ++++++++++---- pnpm-lock.yaml | 45 ++++++++++++++++++++++++++++++----- 3 files changed, 65 insertions(+), 11 deletions(-) diff --git a/apps/web-next/next.config.mjs b/apps/web-next/next.config.mjs index 55b1bb9..90cb312 100644 --- a/apps/web-next/next.config.mjs +++ b/apps/web-next/next.config.mjs @@ -1,6 +1,17 @@ /** @type {import('next').NextConfig} */ const nextConfig = { - transpilePackages: ["@repo/api", "@repo/api-client", "@repo/core", "@repo/ui"], + transpilePackages: [ + "@repo/auth", + "@repo/blog", + "@repo/core-api", + "@repo/core-cms", + "@repo/core-shared", + "@repo/core-trpc", + "@repo/core-ui", + "@repo/marketing-pages", + "@repo/media", + "@repo/navigation", + ], }; export default nextConfig; diff --git a/apps/web-next/package.json b/apps/web-next/package.json index 79bf79f..2dd7148 100644 --- a/apps/web-next/package.json +++ b/apps/web-next/package.json @@ -10,12 +10,22 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@repo/api": "workspace:*", - "@repo/api-client": "workspace:*", - "@repo/ui": "workspace:*", + "@repo/auth": "workspace:*", + "@repo/blog": "workspace:*", + "@repo/core-api": "workspace:*", + "@repo/core-cms": "workspace:*", + "@repo/core-shared": "workspace:*", + "@repo/core-trpc": "workspace:*", + "@repo/core-ui": "workspace:*", + "@repo/marketing-pages": "workspace:*", + "@repo/media": "workspace:*", + "@repo/navigation": "workspace:*", + "@tanstack/react-query": "^5.66.0", "next": "^15.3.0", + "payload": "^3.14.0", "react": "^19.0.0", - "react-dom": "^19.0.0" + "react-dom": "^19.0.0", + "superjson": "^2.2.1" }, "devDependencies": { "@repo/eslint-config": "workspace:*", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fd0cfc7..f75775d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -106,24 +106,54 @@ importers: apps/web-next: dependencies: - '@repo/api': + '@repo/auth': specifier: workspace:* - version: link:../../packages/api - '@repo/api-client': + version: link:../../packages/auth + '@repo/blog': specifier: workspace:* - version: link:../../packages/api-client - '@repo/ui': + version: link:../../packages/blog + '@repo/core-api': specifier: workspace:* - version: link:../../packages/ui + version: link:../../packages/core-api + '@repo/core-cms': + specifier: workspace:* + version: link:../../packages/core-cms + '@repo/core-shared': + specifier: workspace:* + version: link:../../packages/core-shared + '@repo/core-trpc': + specifier: workspace:* + version: link:../../packages/core-trpc + '@repo/core-ui': + specifier: workspace:* + version: link:../../packages/core-ui + '@repo/marketing-pages': + specifier: workspace:* + version: link:../../packages/marketing-pages + '@repo/media': + specifier: workspace:* + version: link:../../packages/media + '@repo/navigation': + specifier: workspace:* + version: link:../../packages/navigation + '@tanstack/react-query': + specifier: ^5.66.0 + version: 5.96.2(react@19.2.4) next: specifier: ^15.3.0 version: 15.5.14(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.99.0) + payload: + specifier: ^3.14.0 + version: 3.81.0(graphql@16.13.2)(typescript@5.9.3) react: specifier: ^19.0.0 version: 19.2.4 react-dom: specifier: ^19.0.0 version: 19.2.4(react@19.2.4) + superjson: + specifier: ^2.2.1 + version: 2.2.6 devDependencies: '@repo/eslint-config': specifier: workspace:* @@ -472,6 +502,9 @@ importers: '@trpc/server': specifier: ^11.0.0 version: 11.16.0(typescript@5.9.3) + '@trpc/tanstack-react-query': + specifier: ^11.1.0 + version: 11.16.0(@tanstack/react-query@5.96.2(react@19.2.4))(@trpc/client@11.16.0(@trpc/server@11.16.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.16.0(typescript@5.9.3))(react@19.2.4)(typescript@5.9.3) react: specifier: ^19.0.0 version: 19.2.4 From bd1a3483409e57cc6a2ab4391811eaef32a1b48e Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:53:03 +0200 Subject: [PATCH 098/129] feat(web-next): add server bindAllProduction() aggregator with idempotent guard --- apps/web-next/src/server/bind-production.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 apps/web-next/src/server/bind-production.ts diff --git a/apps/web-next/src/server/bind-production.ts b/apps/web-next/src/server/bind-production.ts new file mode 100644 index 0000000..de306ce --- /dev/null +++ b/apps/web-next/src/server/bind-production.ts @@ -0,0 +1,18 @@ +// SERVER-ONLY: this module imports Payload config and must never be bundled into the browser. +import config from "@repo/core-cms"; +import { bindProductionBlog } from "@repo/blog/di/bind-production"; +import { bindProductionAuth } from "@repo/auth/di/bind-production"; +import { bindProductionMarketingPages } from "@repo/marketing-pages/di/bind-production"; +import { bindProductionNavigation } from "@repo/navigation/di/bind-production"; + +let bound = false; + +export async function bindAllProduction(): Promise { + if (bound) return; + bound = true; + const resolvedConfig = await config; + bindProductionAuth(resolvedConfig); + bindProductionBlog(resolvedConfig); + bindProductionMarketingPages(resolvedConfig); + bindProductionNavigation(resolvedConfig); +} From 8403bfee7f8683b9880207c9601bf117f24782c1 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:54:04 +0200 Subject: [PATCH 099/129] feat(web-next): wire tRPC route handler against core-api + new TrpcProvider --- apps/web-next/package.json | 1 + apps/web-next/src/app/api/trpc/[trpc]/route.ts | 9 ++++++--- apps/web-next/src/app/providers.tsx | 4 ++-- pnpm-lock.yaml | 3 +++ 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/apps/web-next/package.json b/apps/web-next/package.json index 2dd7148..7ac6630 100644 --- a/apps/web-next/package.json +++ b/apps/web-next/package.json @@ -21,6 +21,7 @@ "@repo/media": "workspace:*", "@repo/navigation": "workspace:*", "@tanstack/react-query": "^5.66.0", + "@trpc/server": "^11.0.0", "next": "^15.3.0", "payload": "^3.14.0", "react": "^19.0.0", diff --git a/apps/web-next/src/app/api/trpc/[trpc]/route.ts b/apps/web-next/src/app/api/trpc/[trpc]/route.ts index 376b8c3..fbf179d 100644 --- a/apps/web-next/src/app/api/trpc/[trpc]/route.ts +++ b/apps/web-next/src/app/api/trpc/[trpc]/route.ts @@ -1,12 +1,15 @@ import { fetchRequestHandler } from "@trpc/server/adapters/fetch"; -import { appRouter } from "@repo/api"; +import { appRouter } from "@repo/core-api"; +import { bindAllProduction } from "../../../../server/bind-production"; -const handler = (req: Request) => - fetchRequestHandler({ +const handler = async (req: Request) => { + await bindAllProduction(); + return fetchRequestHandler({ endpoint: "/api/trpc", req, router: appRouter, createContext: () => ({}), }); +}; export { handler as GET, handler as POST }; diff --git a/apps/web-next/src/app/providers.tsx b/apps/web-next/src/app/providers.tsx index c81e7bd..106aba8 100644 --- a/apps/web-next/src/app/providers.tsx +++ b/apps/web-next/src/app/providers.tsx @@ -1,7 +1,7 @@ "use client"; -import { ApiProvider } from "@repo/api-client"; +import { NextTrpcProvider } from "@repo/core-trpc/next"; export function Providers({ children }: { children: React.ReactNode }) { - return {children}; + return {children}; } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f75775d..3de3cba 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -139,6 +139,9 @@ importers: '@tanstack/react-query': specifier: ^5.66.0 version: 5.96.2(react@19.2.4) + '@trpc/server': + specifier: ^11.0.0 + version: 11.16.0(typescript@5.9.3) next: specifier: ^15.3.0 version: 15.5.14(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.99.0) From 5f0a66581a002bb67e54c84152e7aa032cdd36bd Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:54:20 +0200 Subject: [PATCH 100/129] feat(web-next): render homepage with siteSettings + header + article list --- apps/web-next/src/app/page.tsx | 47 +++++++++++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 3 deletions(-) diff --git a/apps/web-next/src/app/page.tsx b/apps/web-next/src/app/page.tsx index 83af98d..4b4cfd1 100644 --- a/apps/web-next/src/app/page.tsx +++ b/apps/web-next/src/app/page.tsx @@ -1,8 +1,49 @@ -export default function Home() { +import Link from "next/link"; +import { appRouter } from "@repo/core-api"; +import { bindAllProduction } from "../server/bind-production"; + +export default async function Home() { + await bindAllProduction(); + const caller = appRouter.createCaller({}); + + const [siteSettings, header, articles] = await Promise.all([ + caller.marketingPages.siteSettings(), + caller.navigation.header(), + caller.blog.listArticles({ status: "published", limit: 20 }), + ]); + return (
-

Template — Next.js

-

Clean Architecture Monorepo Template

+
+

{siteSettings.siteName}

+ {siteSettings.siteDescription ? ( +

{siteSettings.siteDescription}

+ ) : null} + +
+ +
+

Latest articles

+ {articles.length === 0 ? ( +

No published articles yet.

+ ) : ( +
    + {articles.map((a) => ( +
  • + {a.title} +
  • + ))} +
+ )} +
); } From 293d855d067964d2ba4169f0a5a36c615fb9b3ac Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:54:41 +0200 Subject: [PATCH 101/129] feat(web-next): render /about marketing page via marketingPages.pageBySlug --- apps/web-next/src/app/about/page.tsx | 31 ++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 apps/web-next/src/app/about/page.tsx diff --git a/apps/web-next/src/app/about/page.tsx b/apps/web-next/src/app/about/page.tsx new file mode 100644 index 0000000..2f85681 --- /dev/null +++ b/apps/web-next/src/app/about/page.tsx @@ -0,0 +1,31 @@ +import { appRouter } from "@repo/core-api"; +import { bindAllProduction } from "../../server/bind-production"; + +export default async function AboutPage() { + await bindAllProduction(); + const caller = appRouter.createCaller({}); + const page = await caller.marketingPages.pageBySlug({ slug: "about" }); + + if (!page) { + return ( +
+

About

+

This page hasn't been published yet.

+
+ ); + } + + return ( +
+
+
+

{page.hero.heading}

+ {page.hero.subheading ?

{page.hero.subheading}

: null} +
+
+          {JSON.stringify(page.layout, null, 2)}
+        
+
+
+ ); +} From 7809f2115171c9fe36a691683123f994488ecc2a Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:55:41 +0200 Subject: [PATCH 102/129] feat(web-next): render /blog/[slug] article detail via blog.articleBySlug --- apps/web-next/src/app/blog/[slug]/page.tsx | 34 ++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 apps/web-next/src/app/blog/[slug]/page.tsx diff --git a/apps/web-next/src/app/blog/[slug]/page.tsx b/apps/web-next/src/app/blog/[slug]/page.tsx new file mode 100644 index 0000000..9705f2e --- /dev/null +++ b/apps/web-next/src/app/blog/[slug]/page.tsx @@ -0,0 +1,34 @@ +import { notFound } from "next/navigation"; +import { appRouter } from "@repo/core-api"; +import { bindAllProduction } from "../../../server/bind-production"; + +type PageProps = { + params: Promise<{ slug: string }>; +}; + +export default async function BlogPostPage({ params }: PageProps) { + await bindAllProduction(); + const { slug } = await params; + const caller = appRouter.createCaller({}); + const article = await caller.blog.articleBySlug({ slug }); + + if (!article) notFound(); + + return ( +
+
+
+

{article.title}

+ {article.createdAt ? ( + + ) : null} +
+
+          {JSON.stringify(article.content, null, 2)}
+        
+
+
+ ); +} From 1308fe464417c7080e766fa36151409c41f1c2f6 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:59:18 +0200 Subject: [PATCH 103/129] fix: enable overrideAccess=true for public Payload repository reads All public pages (site settings, header, pages, articles) now bypass Payload's access control checks when reading, as they should be publicly accessible without authentication. This fixes 403 Forbidden errors on homepage and article rendering. --- apps/cms/tsconfig.tsbuildinfo | 1 + apps/web-next/tsconfig.tsbuildinfo | 1 + .../repositories/payload-articles.repository.test.ts | 2 +- .../repositories/payload-articles.repository.ts | 10 +++++----- .../repositories/payload-pages.repository.ts | 4 ++-- .../repositories/payload-site-settings.repository.ts | 2 +- .../repositories/payload-header.repository.ts | 2 +- 7 files changed, 12 insertions(+), 10 deletions(-) create mode 100644 apps/cms/tsconfig.tsbuildinfo create mode 100644 apps/web-next/tsconfig.tsbuildinfo diff --git a/apps/cms/tsconfig.tsbuildinfo b/apps/cms/tsconfig.tsbuildinfo new file mode 100644 index 0000000..d37320d --- /dev/null +++ b/apps/cms/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"fileNames":["../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","./.next/types/routes.d.ts","../../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/global.d.ts","../../node_modules/.pnpm/csstype@3.2.3/node_modules/csstype/index.d.ts","../../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/index.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/styled-jsx/types/css.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/styled-jsx/types/macro.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/styled-jsx/types/style.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/styled-jsx/types/global.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/styled-jsx/types/index.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/amp.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/amp.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/get-page-files.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/compatibility/disposable.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/compatibility/indexable.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/compatibility/index.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/buffer.buffer.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/globals.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/web-globals/domexception.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/web-globals/events.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/web-globals/fetch.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/web-globals/navigator.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/web-globals/storage.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/assert.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/assert/strict.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/async_hooks.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/buffer.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/child_process.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/cluster.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/console.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/constants.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/crypto.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/dgram.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/dns.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/dns/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/domain.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/events.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/fs.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/fs/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/http.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/http2.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/https.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/inspector.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/inspector.generated.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/module.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/net.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/os.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/path.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/perf_hooks.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/process.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/punycode.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/querystring.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/readline.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/readline/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/repl.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/sea.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/sqlite.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/stream.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/stream/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/stream/consumers.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/stream/web.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/string_decoder.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/test.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/timers.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/timers/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/tls.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/trace_events.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/tty.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/url.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/util.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/v8.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/vm.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/wasi.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/worker_threads.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/zlib.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/index.d.ts","../../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/canary.d.ts","../../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/experimental.d.ts","../../node_modules/.pnpm/@types+react-dom@19.2.3_@types+react@19.2.14/node_modules/@types/react-dom/index.d.ts","../../node_modules/.pnpm/@types+react-dom@19.2.3_@types+react@19.2.14/node_modules/@types/react-dom/canary.d.ts","../../node_modules/.pnpm/@types+react-dom@19.2.3_@types+react@19.2.14/node_modules/@types/react-dom/experimental.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/fallback.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/compiled/webpack/webpack.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/config.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/load-custom-routes.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/image-config.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/webpack/plugins/subresource-integrity-plugin.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/body-streams.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/cache-control.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/setup-exception-listeners.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/worker.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/constants.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/app-router-headers.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/rendering-mode.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/router-utils/build-prefetch-segment-data-route.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/require-hook.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/experimental/ppr.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/webpack/plugins/app-build-manifest-plugin.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/page-types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/segment-config/app/app-segment-config.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/segment-config/pages/pages-segment-config.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/analysis/get-page-static-info.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/webpack/loaders/get-module-build-info.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/webpack/plugins/middleware-plugin.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/node-polyfill-crypto.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/node-environment-baseline.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/node-environment-extensions/error-inspect.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/node-environment-extensions/random.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/node-environment-extensions/date.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/node-environment-extensions/web-crypto.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/node-environment-extensions/node-crypto.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/node-environment.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/page-extensions-type.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/instrumentation/types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/coalesced-function.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/router-utils/types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/modern-browserslist-target.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/constants.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/trace/types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/trace/trace.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/trace/shared.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/trace/index.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/load-jsconfig.d.ts","../../node_modules/.pnpm/@next+env@15.5.14/node_modules/@next/env/dist/index.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/webpack/plugins/telemetry-plugin/use-cache-tracker-utils.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/webpack/plugins/telemetry-plugin/telemetry-plugin.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/telemetry/storage.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/build-context.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/bloom-filter.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/webpack-config.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-kind.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-definitions/route-definition.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/swc/generated-native.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/swc/types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/dev/parse-version-info.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/next-devtools/shared/types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/dev/dev-indicator-server-state.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/parse-stack.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/next-devtools/server/shared.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/next-devtools/shared/stack-frame.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/next-devtools/dev-overlay/utils/get-error-by-type.d.ts","../../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/jsx-runtime.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/next-devtools/dev-overlay/container/runtime-error/render-error.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/next-devtools/dev-overlay/shared.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/dev/hot-reloader-types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/cache-handlers/types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/response-cache/types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/resume-data-cache/cache-store.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/resume-data-cache/resume-data-cache.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/render-result.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/i18n-provider.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/web/next-url.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/compiled/@edge-runtime/cookies/index.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/web/spec-extension/cookies.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/web/spec-extension/request.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/after/builtin-request-context.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/web/spec-extension/fetch-event.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/web/spec-extension/response.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/segment-config/middleware/middleware-config.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/web/types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/router/utils/parse-url.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/base-http/node.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/webpack/plugins/next-font-manifest-plugin.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-definitions/locale-route-definition.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-definitions/pages-route-definition.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/mitt.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/with-router.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/router.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/route-loader.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/page-loader.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/router/router.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/router-context.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/loadable-context.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/loadable.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/image-config-context.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-definitions/app-page-route-definition.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/webpack/loaders/metadata/types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/webpack/loaders/next-app-loader/index.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/app-dir-module.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/async-storage/draft-mode-provider.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/web/spec-extension/adapters/headers.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/app-render/cache-signal.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/app-render/dynamic-rendering.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/request/fallback-params.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/app-render/work-unit-async-storage-instance.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/response-cache/index.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/lazy-result.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/implicit-tags.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/app-render/work-unit-async-storage.external.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/deep-readonly.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/router/utils/parse-relative-url.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/app-render/app-render.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/amp-context.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/entrypoints.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-modules/app-page/module.compiled.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/error-boundary.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/layout-router.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/render-from-template-context.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/app-render/action-async-storage-instance.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/app-render/action-async-storage.external.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/client-page.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/client-segment.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/request/search-params.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/hooks-server-context.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/http-access-fallback/error-boundary.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/metadata/types/alternative-urls-types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/metadata/types/extra-types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/metadata/types/metadata-types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/metadata/types/manifest-types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/metadata/types/opengraph-types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/metadata/types/twitter-types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/metadata/types/metadata-interface.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/metadata/types/resolvers.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/metadata/types/icons.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/metadata/resolve-metadata.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/metadata/metadata.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/framework/boundary-components.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/app-render/rsc/preloads.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/app-render/rsc/postpone.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/app-render/rsc/taint.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/segment-cache/segment-value-encoding.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/app-render/collect-segment-data.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/app-render/entry-base.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/templates/app-page.d.ts","../../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/jsx-dev-runtime.d.ts","../../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/compiler-runtime.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/entrypoints.d.ts","../../node_modules/.pnpm/@types+react-dom@19.2.3_@types+react@19.2.14/node_modules/@types/react-dom/client.d.ts","../../node_modules/.pnpm/@types+react-dom@19.2.3_@types+react@19.2.14/node_modules/@types/react-dom/static.d.ts","../../node_modules/.pnpm/@types+react-dom@19.2.3_@types+react@19.2.14/node_modules/@types/react-dom/server.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/entrypoints.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-modules/app-page/module.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/web/adapter.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/use-cache/cache-life.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/app-render/types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/router-reducer/router-reducer-types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/flight-data-helpers.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/router-reducer/fetch-server-response.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/app-router-context.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-modules/pages/vendored/contexts/entrypoints.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-modules/pages/module.compiled.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/templates/pages.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-modules/pages/module.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-setup.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/render.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-definitions/pages-api-route-definition.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-matches/pages-api-route-match.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-matchers/route-matcher.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-matcher-providers/route-matcher-provider.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-matcher-managers/route-matcher-manager.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/normalizers/normalizer.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/normalizers/locale-route-normalizer.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/normalizers/request/pathname-normalizer.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/normalizers/request/suffix.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/normalizers/request/rsc.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/normalizers/request/prefetch-rsc.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/normalizers/request/next-data.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/normalizers/request/segment-prefix-rsc.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/static-paths/types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/base-server.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/async-callback-set.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/router/utils/route-regex.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/router/utils/route-matcher.d.ts","../../node_modules/.pnpm/sharp@0.34.5/node_modules/sharp/lib/index.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/image-optimizer.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/next-server.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/lru-cache.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/dev-bundler-service.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/dev/static-paths-worker.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/dev/next-dev-server.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/next.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/render-server.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/router-server.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/router/utils/path-match.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/router-utils/filesystem.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/router-utils/router-server-context.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-modules/route-module.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/load-components.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-definitions/app-route-route-definition.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/async-storage/work-store.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/web/http.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-modules/app-route/shared-modules.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/redirect-status-code.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/redirect-error.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/templates/app-route.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-modules/app-route/module.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-modules/app-route/module.compiled.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/segment-config/app/app-segments.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/utils.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/turborepo-access-trace/types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/turborepo-access-trace/result.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/turborepo-access-trace/helpers.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/turborepo-access-trace/index.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/export/routes/types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/export/types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/export/worker.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/worker.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/index.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/incremental-cache/index.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/after/after.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/after/after-context.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/app-render/work-async-storage-instance.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/app-render/work-async-storage.external.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/request/params.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-matches/route-match.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/request-meta.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/cli/next-test.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/config-shared.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/base-http/index.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/api-utils/index.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/html-context.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/utils.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/pages/_app.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/app.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/web/spec-extension/unstable-cache.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/web/spec-extension/revalidate.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/web/spec-extension/unstable-no-store.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/use-cache/cache-tag.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/cache.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/runtime-config.external.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/config.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/pages/_document.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/document.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/dynamic.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dynamic.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/pages/_error.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/error.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/head.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/head.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/request/cookies.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/request/headers.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/request/draft-mode.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/headers.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/get-img-props.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/image-component.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/image-external.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/image.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/link.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/link.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/redirect.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/not-found.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/forbidden.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/unauthorized.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/unstable-rethrow.server.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/unstable-rethrow.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/navigation.react-server.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/unrecognized-action-error.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/navigation.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/navigation.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/router.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/script.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/script.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/web/spec-extension/user-agent.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/compiled/@edge-runtime/primitives/url.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/web/spec-extension/image-response.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/compiled/@vercel/og/satori/index.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/compiled/@vercel/og/emoji/index.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/compiled/@vercel/og/types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/after/index.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/request/root-params.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/request/connection.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/server.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/types/global.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/types/compiled.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/index.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/image-types/global.d.ts","./next-env.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/version.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/jsutils/maybe.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/language/source.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/jsutils/objmap.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/jsutils/path.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/jsutils/promiseorvalue.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/language/kinds.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/language/tokenkind.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/language/ast.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/language/location.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/error/graphqlerror.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/language/directivelocation.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/type/directives.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/type/schema.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/type/definition.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/execution/execute.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/graphql.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/type/scalars.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/type/introspection.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/type/validate.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/type/assertname.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/type/index.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/language/printlocation.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/language/lexer.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/language/parser.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/language/printer.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/language/visitor.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/language/predicates.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/language/index.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/execution/subscribe.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/execution/values.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/execution/index.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/subscription/index.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/typeinfo.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/validationcontext.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/validate.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/maxintrospectiondepthrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/specifiedrules.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/executabledefinitionsrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/fieldsoncorrecttyperule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/fragmentsoncompositetypesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/knownargumentnamesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/knowndirectivesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/knownfragmentnamesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/knowntypenamesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/loneanonymousoperationrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/nofragmentcyclesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/noundefinedvariablesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/nounusedfragmentsrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/nounusedvariablesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/overlappingfieldscanbemergedrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/possiblefragmentspreadsrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/providedrequiredargumentsrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/scalarleafsrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/singlefieldsubscriptionsrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/uniqueargumentnamesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/uniquedirectivesperlocationrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/uniquefragmentnamesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/uniqueinputfieldnamesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/uniqueoperationnamesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/uniquevariablenamesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/valuesofcorrecttyperule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/variablesareinputtypesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/variablesinallowedpositionrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/loneschemadefinitionrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/uniqueoperationtypesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/uniquetypenamesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/uniqueenumvaluenamesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/uniquefielddefinitionnamesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/uniqueargumentdefinitionnamesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/uniquedirectivenamesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/possibletypeextensionsrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/custom/nodeprecatedcustomrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/custom/noschemaintrospectioncustomrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/index.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/error/syntaxerror.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/error/locatederror.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/error/index.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/getintrospectionquery.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/getoperationast.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/getoperationroottype.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/introspectionfromschema.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/buildclientschema.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/buildastschema.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/extendschema.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/lexicographicsortschema.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/printschema.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/typefromast.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/valuefromast.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/valuefromastuntyped.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/astfromvalue.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/coerceinputvalue.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/concatast.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/separateoperations.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/stripignoredcharacters.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/typecomparators.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/assertvalidname.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/findbreakingchanges.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/typedquerydocumentnode.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/resolveschemacoordinate.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/index.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/index.d.ts","../../node_modules/.pnpm/graphql-http@1.22.4_graphql@16.13.2/node_modules/graphql-http/lib/common.d.mts","../../node_modules/.pnpm/graphql-http@1.22.4_graphql@16.13.2/node_modules/graphql-http/lib/handler.d.mts","../../node_modules/.pnpm/graphql-http@1.22.4_graphql@16.13.2/node_modules/graphql-http/lib/client.d.mts","../../node_modules/.pnpm/graphql-http@1.22.4_graphql@16.13.2/node_modules/graphql-http/lib/audits/common.d.mts","../../node_modules/.pnpm/graphql-http@1.22.4_graphql@16.13.2/node_modules/graphql-http/lib/audits/server.d.mts","../../node_modules/.pnpm/graphql-http@1.22.4_graphql@16.13.2/node_modules/graphql-http/lib/audits/render.d.mts","../../node_modules/.pnpm/graphql-http@1.22.4_graphql@16.13.2/node_modules/graphql-http/lib/audits/index.d.mts","../../node_modules/.pnpm/graphql-http@1.22.4_graphql@16.13.2/node_modules/graphql-http/lib/index.d.mts","../../node_modules/.pnpm/pino-std-serializers@7.1.0/node_modules/pino-std-serializers/index.d.ts","../../node_modules/.pnpm/sonic-boom@4.2.1/node_modules/sonic-boom/types/index.d.ts","../../node_modules/.pnpm/pino@9.14.0/node_modules/pino/pino.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/primitive/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/built-in/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/key-of-base/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/strict-exclude/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/strict-extract/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/any-array/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/any-record.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/strict-omit/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/writable/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/async-or-sync/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/async-or-sync-type/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/dictionary/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/dictionary-values/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/merge/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/merge-n/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/newable/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/non-never/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/omit-properties/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/opaque/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/prettify/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/path-value/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/is-any/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/is-never/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/create-type-options.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/any-function/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/value-of/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/paths/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/pick-properties/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/safe-dictionary/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/union-to-intersection/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/is-unknown/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/xor/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/mark-optional/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/is-equal-considering-writability.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/is-fully-writable.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/readonly-keys/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/mark-readonly/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/mark-required/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/writable-keys/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/mark-writable/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/is-tuple/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/deep-partial/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/deep-writable/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/buildable/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/deep-non-nullable/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/deep-nullable/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/non-undefinable.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/deep-modify.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/deep-omit/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/strict-deep-omit/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/deep-pick/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/strict-deep-pick/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/deep-readonly/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/deep-required/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/deep-undefinable/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/optional-keys/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/pick-keys/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/required-keys/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/exact/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/non-empty-object/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/array-or-single/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/element-of/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/head/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/non-empty-array/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/readonly-array-or-single/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/tail/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/tuple/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/camel-case/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/deep-camel-case-properties/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/predicate-function/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/predicate-type/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/functions/unreachable-case-error/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/functions/assert/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/functions/create-factory-with-constraint/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/functions/is-exact/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/functions/noop/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/awaited/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/index.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/constants.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/types.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/fp/types.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/types.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/add.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addbusinessdays.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/adddays.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addhours.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addisoweekyears.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addmilliseconds.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addminutes.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addmonths.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addquarters.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addseconds.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addweeks.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addyears.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/areintervalsoverlapping.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/clamp.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/closestindexto.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/closestto.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/compareasc.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/comparedesc.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/constructfrom.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/constructnow.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/daystoweeks.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceinbusinessdays.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceincalendardays.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceincalendarisoweekyears.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceincalendarisoweeks.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceincalendarmonths.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceincalendarquarters.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceincalendarweeks.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceincalendaryears.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceindays.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceinhours.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceinisoweekyears.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceinmilliseconds.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceinminutes.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceinmonths.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceinquarters.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceinseconds.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceinweeks.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceinyears.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/eachdayofinterval.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/eachhourofinterval.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/eachminuteofinterval.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/eachmonthofinterval.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/eachquarterofinterval.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/eachweekofinterval.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/eachweekendofinterval.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/eachweekendofmonth.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/eachweekendofyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/eachyearofinterval.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endofday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endofdecade.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endofhour.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endofisoweek.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endofisoweekyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endofminute.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endofmonth.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endofquarter.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endofsecond.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endoftoday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endoftomorrow.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endofweek.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endofyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endofyesterday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/_lib/format/formatters.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/_lib/format/longformatters.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/format.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatdistance.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatdistancestrict.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatdistancetonow.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatdistancetonowstrict.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatduration.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatiso.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatiso9075.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatisoduration.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatrfc3339.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatrfc7231.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatrelative.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/fromunixtime.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getdate.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getdayofyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getdaysinmonth.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getdaysinyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getdecade.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/_lib/defaultoptions.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getdefaultoptions.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/gethours.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getisoday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getisoweek.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getisoweekyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getisoweeksinyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getmilliseconds.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getminutes.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getmonth.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getoverlappingdaysinintervals.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getquarter.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getseconds.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/gettime.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getunixtime.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getweek.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getweekofmonth.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getweekyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getweeksinmonth.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/hourstomilliseconds.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/hourstominutes.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/hourstoseconds.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/interval.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/intervaltoduration.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/intlformat.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/intlformatdistance.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isafter.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isbefore.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isdate.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isequal.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isexists.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isfirstdayofmonth.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isfriday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isfuture.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/islastdayofmonth.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isleapyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/ismatch.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/ismonday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/ispast.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/issameday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/issamehour.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/issameisoweek.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/issameisoweekyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/issameminute.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/issamemonth.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/issamequarter.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/issamesecond.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/issameweek.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/issameyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/issaturday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/issunday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isthishour.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isthisisoweek.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isthisminute.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isthismonth.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isthisquarter.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isthissecond.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isthisweek.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isthisyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isthursday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/istoday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/istomorrow.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/istuesday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isvalid.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/iswednesday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isweekend.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/iswithininterval.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isyesterday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/lastdayofdecade.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/lastdayofisoweek.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/lastdayofisoweekyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/lastdayofmonth.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/lastdayofquarter.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/lastdayofweek.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/lastdayofyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/_lib/format/lightformatters.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/lightformat.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/max.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/milliseconds.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/millisecondstohours.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/millisecondstominutes.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/millisecondstoseconds.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/min.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/minutestohours.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/minutestomilliseconds.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/minutestoseconds.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/monthstoquarters.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/monthstoyears.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/nextday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/nextfriday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/nextmonday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/nextsaturday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/nextsunday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/nextthursday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/nexttuesday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/nextwednesday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/types.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/setter.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parser.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parsers.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parseiso.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parsejson.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/previousday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/previousfriday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/previousmonday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/previoussaturday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/previoussunday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/previousthursday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/previoustuesday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/previouswednesday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/quarterstomonths.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/quarterstoyears.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/roundtonearesthours.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/roundtonearestminutes.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/secondstohours.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/secondstomilliseconds.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/secondstominutes.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/set.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setdate.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setdayofyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setdefaultoptions.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/sethours.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setisoday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setisoweek.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setisoweekyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setmilliseconds.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setminutes.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setmonth.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setquarter.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setseconds.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setweek.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setweekyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofdecade.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofhour.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofisoweek.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofisoweekyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofminute.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofmonth.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofquarter.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofsecond.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startoftoday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startoftomorrow.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofweek.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofweekyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofyesterday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/sub.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/subbusinessdays.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/subdays.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/subhours.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/subisoweekyears.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/submilliseconds.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/subminutes.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/submonths.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/subquarters.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/subseconds.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/subweeks.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/subyears.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/todate.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/transpose.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/weekstodays.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/yearstodays.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/yearstomonths.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/yearstoquarters.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/index.d.ts","../../node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/importdatefnslocale.d.ts","../../node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/clientkeys.d.ts","../../node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/languages/en.d.ts","../../node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/utilities/languages.d.ts","../../node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/types.d.ts","../../node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/utilities/gettranslation.d.ts","../../node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/utilities/init.d.ts","../../node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/exports/index.d.ts","../../node_modules/.pnpm/dataloader@2.2.3/node_modules/dataloader/index.d.ts","../../node_modules/.pnpm/@types+busboy@1.5.4/node_modules/@types/busboy/index.d.ts","../../node_modules/.pnpm/@types+json-schema@7.0.15/node_modules/@types/json-schema/index.d.ts","../../node_modules/.pnpm/sharp@0.33.5/node_modules/sharp/lib/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/apierror.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/validationerror.d.ts","../../node_modules/.pnpm/@monaco-editor+loader@1.7.0/node_modules/@monaco-editor/loader/lib/types.d.ts","../../node_modules/.pnpm/monaco-editor@0.55.1/node_modules/monaco-editor/esm/vs/editor/editor.api.d.ts","../../node_modules/.pnpm/monaco-editor@0.55.1/node_modules/monaco-editor/esm/vs/editor/editor.main.d.ts","../../node_modules/.pnpm/@monaco-editor+react@4.7.0_monaco-editor@0.55.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@monaco-editor/react/dist/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/types.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/preferences/types.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/forms/field.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/forms/error.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/join.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/types.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/types.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/globals/config/types.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/validations.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/config/types.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/richtext.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/richtext.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/cookies.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/extractjwt.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/config/client.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/config/client.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/globals/config/client.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/config/client.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/languageoptions.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/views/document.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/views/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/email/types.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/authenticationerror.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/duplicatecollection.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/duplicatefieldname.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/duplicateglobal.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/errordeletingfile.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/fileretrievalerror.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/fileuploaderror.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/forbidden.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/invalidconfiguration.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/invalidfieldname.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/invalidfieldrelationship.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/locked.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/lockedauth.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/missingcollectionlabel.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/missingeditorprop.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/missingfieldinputoptions.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/missingfieldtype.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/missingfile.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/notfound.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/queryerror.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/reservedfieldname.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/unauthorizederror.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/unverifiedemail.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/types.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/folders/types.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/query-presets/types.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/queues/config/types/tasktypes.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/queues/operations/runjobs/runjob/getupdatejobfunction.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/queues/operations/runjobs/runjob/getruntaskfunction.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/queues/config/types/workflowjsontypes.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/queues/config/types/workflowtypes.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/queues/config/global.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/queues/operations/handleschedules/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/queues/operations/runjobs/runjob/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/queues/operations/runjobs/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/queues/localapi.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/queues/config/types/index.d.ts","../../node_modules/.pnpm/pino-abstract-transport@2.0.0/node_modules/pino-abstract-transport/index.d.ts","../../node_modules/.pnpm/colorette@2.0.20/node_modules/colorette/index.d.ts","../../node_modules/.pnpm/pino-pretty@13.1.2/node_modules/pino-pretty/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/logger.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/config/types.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/bin/generateimportmap/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/tabs.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/forms/form.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/elements/cell.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/adddays.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addhours.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addminutes.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addmonths.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addquarters.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addseconds.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addweeks.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addyears.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getdate.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getday.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/gethours.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getminutes.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getmonth.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getquarter.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getseconds.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/gettime.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getyear.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isafter.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isbefore.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isdate.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/locale/types.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/fp/types.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/types.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/set.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/sethours.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setminutes.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setmonth.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setquarter.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setyear.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/subdays.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/submonths.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/subquarters.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/subweeks.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/subyears.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/add.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addbusinessdays.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/adddays.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addhours.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addisoweekyears.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addmilliseconds.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addminutes.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addmonths.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addquarters.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addseconds.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addweeks.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addyears.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/areintervalsoverlapping.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/clamp.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/closestindexto.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/closestto.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/compareasc.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/comparedesc.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/constructfrom.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/constructnow.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/daystoweeks.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceinbusinessdays.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceincalendardays.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceincalendarisoweekyears.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceincalendarisoweeks.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceincalendarmonths.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceincalendarquarters.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceincalendarweeks.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceincalendaryears.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceindays.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceinhours.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceinisoweekyears.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceinmilliseconds.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceinminutes.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceinmonths.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceinquarters.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceinseconds.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceinweeks.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceinyears.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/eachdayofinterval.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/eachhourofinterval.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/eachminuteofinterval.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/eachmonthofinterval.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/eachquarterofinterval.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/eachweekofinterval.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/eachweekendofinterval.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/eachweekendofmonth.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/eachweekendofyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/eachyearofinterval.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/endofday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/endofdecade.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/endofhour.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/endofisoweek.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/endofisoweekyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/endofminute.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/endofmonth.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/endofquarter.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/endofsecond.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/endoftoday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/endoftomorrow.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/endofweek.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/endofyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/endofyesterday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/_lib/format/formatters.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/_lib/format/longformatters.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/format.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/formatdistance.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/formatdistancestrict.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/formatdistancetonow.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/formatdistancetonowstrict.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/formatduration.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/formatiso.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/formatiso9075.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/formatisoduration.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/formatrfc3339.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/formatrfc7231.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/formatrelative.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/fromunixtime.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getdate.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getdayofyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getdaysinmonth.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getdaysinyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getdecade.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/_lib/defaultoptions.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getdefaultoptions.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/gethours.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getisoday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getisoweek.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getisoweekyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getisoweeksinyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getmilliseconds.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getminutes.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getmonth.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getoverlappingdaysinintervals.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getquarter.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getseconds.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/gettime.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getunixtime.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getweek.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getweekofmonth.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getweekyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getweeksinmonth.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/hourstomilliseconds.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/hourstominutes.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/hourstoseconds.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/interval.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/intervaltoduration.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/intlformat.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/intlformatdistance.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isafter.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isbefore.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isdate.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isequal.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isexists.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isfirstdayofmonth.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isfriday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isfuture.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/islastdayofmonth.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isleapyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/ismatch.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/ismonday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/ispast.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/issameday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/issamehour.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/issameisoweek.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/issameisoweekyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/issameminute.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/issamemonth.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/issamequarter.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/issamesecond.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/issameweek.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/issameyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/issaturday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/issunday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isthishour.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isthisisoweek.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isthisminute.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isthismonth.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isthisquarter.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isthissecond.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isthisweek.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isthisyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isthursday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/istoday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/istomorrow.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/istuesday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isvalid.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/iswednesday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isweekend.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/iswithininterval.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isyesterday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/lastdayofdecade.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/lastdayofisoweek.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/lastdayofisoweekyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/lastdayofmonth.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/lastdayofquarter.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/lastdayofweek.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/lastdayofyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/_lib/format/lightformatters.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/lightformat.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/max.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/milliseconds.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/millisecondstohours.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/millisecondstominutes.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/millisecondstoseconds.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/min.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/minutestohours.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/minutestomilliseconds.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/minutestoseconds.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/monthstoquarters.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/monthstoyears.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/nextday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/nextfriday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/nextmonday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/nextsaturday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/nextsunday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/nextthursday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/nexttuesday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/nextwednesday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/types.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/setter.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/parser.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/parsers.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parseiso.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parsejson.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/previousday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/previousfriday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/previousmonday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/previoussaturday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/previoussunday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/previousthursday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/previoustuesday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/previouswednesday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/quarterstomonths.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/quarterstoyears.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/roundtonearesthours.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/roundtonearestminutes.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/secondstohours.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/secondstomilliseconds.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/secondstominutes.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/set.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setdate.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setdayofyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setdefaultoptions.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/sethours.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setisoday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setisoweek.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setisoweekyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setmilliseconds.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setminutes.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setmonth.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setquarter.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setseconds.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setweek.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setweekyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startofday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startofdecade.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startofhour.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startofisoweek.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startofisoweekyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startofminute.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startofmonth.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startofquarter.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startofsecond.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startoftoday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startoftomorrow.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startofweek.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startofweekyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startofyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startofyesterday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/sub.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/subbusinessdays.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/subdays.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/subhours.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/subisoweekyears.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/submilliseconds.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/subminutes.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/submonths.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/subquarters.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/subseconds.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/subweeks.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/subyears.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/todate.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/transpose.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/weekstodays.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/yearstodays.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/yearstomonths.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/yearstoquarters.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/index.d.mts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/date_utils.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/input_time.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/day.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/week_number.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/week.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/month.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/month_dropdown_options.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/month_dropdown.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/month_year_dropdown_options.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/month_year_dropdown.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/time.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/year.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/year_dropdown_options.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/year_dropdown.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/click_outside_wrapper.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/calendar.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/calendar_icon.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/portal.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/tab_loop.d.ts","../../node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.d.mts","../../node_modules/.pnpm/@floating-ui+core@1.7.5/node_modules/@floating-ui/core/dist/floating-ui.core.d.mts","../../node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.d.mts","../../node_modules/.pnpm/@floating-ui+dom@1.7.6/node_modules/@floating-ui/dom/dist/floating-ui.dom.d.mts","../../node_modules/.pnpm/@floating-ui+react-dom@2.1.8_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.d.mts","../../node_modules/.pnpm/@floating-ui+react@0.27.19_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@floating-ui/react/dist/floating-ui.react.d.mts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/with_floating.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/popper_component.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/calendar_container.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/elements/datepicker.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/elements/editmenuitems.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/elements/nav.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/elements/previewbutton.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/elements/publishbutton.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/elements/savebutton.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/elements/savedraftbutton.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/elements/status.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/elements/table.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/elements/unpublishbutton.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/elements/upload.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/elements/withserversideprops.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/array.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/blocks.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/checkbox.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/code.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/collapsible.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/date.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/email.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/group.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/hidden.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/json.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/number.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/point.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/radio.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/relationship.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/row.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/select.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/text.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/textarea.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/ui.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/upload.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/forms/description.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/forms/diff.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/forms/label.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/forms/rowlabel.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/basefields/slug/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/transformcolumnpreferences.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/functions/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/views/dashboard.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/views/folderlist.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/views/list.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/types.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/operations/me.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/operations/refresh.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/uploads/optionallyappendmetadata.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/uploads/types.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/operations/forgotpassword.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/operations/login.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/operations/resetpassword.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/operations/unlock.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/count.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/countversions.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/create.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/delete.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/deletebyid.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/find.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/hooks/afterread/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/findbyid.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/finddistinct.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/findversionbyid.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/local/find.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/findversions.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/update.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/updatebyid.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/utilities/types.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/config/types.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/types/constants.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/types/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/operations/auth.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/operations/local/forgotpassword.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/operations/local/login.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/operations/local/resetpassword.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/operations/local/unlock.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/operations/local/verifyemail.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/local/count.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/local/create.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/local/delete.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/local/duplicate.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/local/findbyid.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/local/finddistinct.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/local/findversionbyid.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/local/findversions.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/local/restoreversion.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/local/update.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/globals/operations/local/countversions.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/globals/operations/findone.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/globals/operations/local/findone.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/globals/operations/local/findversionbyid.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/globals/operations/local/findversions.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/globals/operations/local/restoreversion.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/globals/operations/local/update.d.ts","../../node_modules/.pnpm/croner@9.1.0/node_modules/croner/dist/croner.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/kv/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/crypto.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/local/countversions.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/basefields/accountlock.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/basefields/apikey.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/basefields/auth.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/basefields/email.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/basefields/sessions.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/basefields/username.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/basefields/verification.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/executeaccess.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/executeauthstrategies.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/extractaccessfrompermission.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/getaccessresults.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/getfieldstosign.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/getloginoptions.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/jwt.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/operations/access.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/operations/init.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/operations/logout.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/operations/registerfirstuser.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/operations/verifyemail.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/strategies/jwt.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/strategies/local/incrementloginattempts.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/strategies/local/resetloginattempts.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/bin/generateimportmap/iteratefields.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/bin/migrate.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/dataloader.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/docaccess.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/duplicate.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/restoreversion.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/config/build.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/config/defaults.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/config/orderable/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/config/sanitize.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/combinequeries.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/createdatabaseadapter.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/defaultbegintransaction.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/flattenwheretooperators.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/queryvalidation/types.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/getlocalizedpaths.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/migrations/createmigration.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/migrations/findmigrationdir.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/migrations/getmigrations.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/migrations/getpredefinedmigration.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/migrations/migrate.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/migrations/migratedown.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/migrations/migraterefresh.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/migrations/migratereset.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/migrations/migratestatus.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/migrations/migrationscollection.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/migrations/migrationtemplate.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/migrations/readmigrationfiles.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/migrations/writemigrationindex.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/queryvalidation/validatequerypaths.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/queryvalidation/validatesearchparams.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/basefields/baseblockfields.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/basefields/baseidfield.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/config/sanitize.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/getdefaultvalue.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/hooks/afterchange/traversefields.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/hooks/afterread/promise.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/hooks/afterread/traversefields.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/hooks/beforechange/traversefields.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/hooks/beforevalidate/traversefields.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/sortablefieldtypes.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/folders/utils/getfolderdata.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/globals/operations/docaccess.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/globals/operations/findversionbyid.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/globals/operations/findversions.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/globals/operations/restoreversion.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/globals/operations/update.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/kv/adapters/databasekvadapter.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/kv/adapters/inmemorykvadapter.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/queues/config/collection.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/queues/errors/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/queues/operations/handleschedules/countrunnableoractivejobsforqueue.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/queues/operations/runjobs/runjob/importhandlerpath.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/queues/utilities/getcurrentdate.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/translations/getlocali18n.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/uploads/getfilebypath.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/utility.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/header.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/readable.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/fetch.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/formdata.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/connector.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/client-stats.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/client.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/errors.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/dispatcher.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/global-dispatcher.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/global-origin.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/pool-stats.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/pool.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/handlers.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/balanced-pool.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/round-robin-pool.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/h2c-client.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/agent.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/mock-interceptor.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/mock-call-history.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/mock-agent.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/mock-client.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/mock-pool.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/snapshot-agent.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/mock-errors.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/proxy-agent.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/socks5-proxy-agent.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/env-http-proxy-agent.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/retry-handler.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/retry-agent.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/api.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/cache-interceptor.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/interceptors.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/util.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/cookies.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/patch.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/websocket.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/eventsource.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/diagnostics-channel.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/content-type.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/cache.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/index.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/uploads/safefetch.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/adddataandfiletorequest.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/addlocalestorequest.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/canaccessadmin.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/committransaction.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/configtojsonschema.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/createarrayfromcommadelineated.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/createlocalreq.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/createpayloadrequest.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/deepcopyobject.d.ts","../../node_modules/.pnpm/deepmerge@4.3.1/node_modules/deepmerge/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/deepmerge.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/dependencies/dependencychecker.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/dependencies/getdependencies.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/dynamicimport.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/escaperegexp.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/findup.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/flattenallfields.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/flattentoplevelfields.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/formaterrors.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/formatlabels.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getblockselect.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getcollectionidfieldtypes.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getfieldbypath.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getobjectdotnotation.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getrequestlanguage.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/handleendpoints.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/headerswithcors.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/inittransaction.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/isentityhidden.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/isolateobjectproperty.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/isplainobject.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/isvalidid.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/killtransaction.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/logerror.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/mapasync.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/mergeheaders.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/parsedocumentid.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/sanitizefallbacklocale.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/sanitizejoinparams.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/sanitizepopulateparam.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/sanitizeselectparam.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/stripunselectedfields.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/traversefields.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/buildcollectionfields.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/buildglobalfields.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/buildversioncompoundindexes.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/defaults.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/deletecollectionversions.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/drafts/appendversiontoquerykey.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/drafts/getquerydraftssort.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/enforcemaxversions.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/getlatestcollectionversion.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/getlatestglobalversion.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/migrations/localizestatus/mongo/down.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/migrations/localizestatus/mongo/up.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/migrations/localizestatus/mongo/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/migrations/localizestatus/sql/down.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/migrations/localizestatus/sql/up.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/migrations/localizestatus/sql/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/migrations/localizestatus/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/saveversion.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/schedule/types.d.ts","../../node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/utilities/deepmergesimple.d.ts","../../node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/exports/utilities.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/entity.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/cache/core/types.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/cache/core/cache.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/logger.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/casing.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/table.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/operations.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/subquery.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/query-builders/select.types.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sql/sql.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/utils.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sql/expressions/conditions.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sql/expressions/select.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sql/expressions/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sql/functions/aggregate.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/query-builders/query-builder.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sql/functions/vector.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sql/functions/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sql/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/checks.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/sequence.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/int.common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/bigintt.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/boolean.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/bytes.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/custom.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/date-duration.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/decimal.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/double-precision.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/duration.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/integer.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/json.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/date.common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/localdate.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/localtime.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/real.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/relative-duration.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/smallint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/text.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/timestamp.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/timestamptz.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/uuid.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/all.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/indexes.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/roles.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/policies.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/primary-keys.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/unique-constraint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/table.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/foreign-keys.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/bigint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/view-base.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/relations.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/session.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/query-builders/count.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/query-promise.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/runnable-query.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/query-builders/query.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/query-builders/raw.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/subquery.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/db.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/session.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/query-builders/delete.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/query-builders/update.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/query-builders/insert.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/query-builders/refresh-materialized-view.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/query-builders/select.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/query-builders/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/dialect.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/query-builders/query-builder.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/view-common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/view.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/query-builders/select.types.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/alias.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/schema.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/utils.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/checks.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/binary.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/boolean.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/char.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/custom.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/date.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/datetime.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/decimal.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/double.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/enum.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/float.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/int.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/json.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/mediumint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/real.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/serial.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/smallint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/text.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/time.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/date.common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/timestamp.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/tinyint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/varbinary.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/varchar.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/year.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/all.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/indexes.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/primary-keys.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/unique-constraint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/table.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/foreign-keys.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/bigint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/migrator.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/query-builders/delete.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/subquery.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/view-base.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/query-builders/select.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/query-builders/query-builder.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/query-builders/update.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/query-builders/insert.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/dialect.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/query-builders/count.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/query-builders/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/query-builders/query.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/db.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/session.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/view-common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/view.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/query-builders/select.types.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/alias.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/schema.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/utils.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/checks.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/bigserial.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/boolean.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/char.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/cidr.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/custom.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/date.common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/date.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/double-precision.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/inet.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/sequence.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/int.common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/integer.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/timestamp.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/interval.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/json.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/jsonb.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/line.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/macaddr.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/macaddr8.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/numeric.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/point.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/postgis_extension/geometry.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/real.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/serial.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/smallint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/smallserial.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/text.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/time.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/uuid.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/varchar.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/vector_extension/bit.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/vector_extension/halfvec.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/vector_extension/sparsevec.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/vector_extension/vector.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/all.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/indexes.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/roles.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/policies.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/primary-keys.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/unique-constraint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/table.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/foreign-keys.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/bigint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/enum.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/view-base.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/query-builders/count.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/query-builders/query.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/query-builders/raw.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/query-builders/refresh-materialized-view.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/subquery.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/db.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/session.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/query-builders/delete.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/query-builders/update.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/query-builders/insert.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/query-builders/select.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/query-builders/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/dialect.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/query-builders/query-builder.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/view-common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/view.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/query-builders/select.types.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/alias.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/schema.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/utils.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/utils/array.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/utils/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/binary.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/boolean.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/char.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/custom.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/date.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/datetime.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/decimal.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/double.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/enum.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/float.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/int.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/json.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/mediumint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/real.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/serial.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/smallint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/text.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/time.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/date.common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/timestamp.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/tinyint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/varbinary.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/varchar.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/vector.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/year.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/all.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/indexes.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/primary-keys.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/unique-constraint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/table.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/bigint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/query-builders/delete.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/query-builders/update.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/query-builders/insert.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/dialect.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/cache/core/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore/session.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore/driver.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/query-builders/count.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/subquery.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/query-builders/select.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/query-builders/query-builder.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/query-builders/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/db.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/session.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/query-builders/select.types.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/alias.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/schema.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/utils.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/checks.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/columns/custom.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/indexes.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/primary-keys.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/unique-constraint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/view-base.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/query-builders/count.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/query-builders/query.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/subquery.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/db.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/query-builders/raw.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/session.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/query-builders/delete.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/query-builders/update.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/query-builders/insert.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/query-builders/select.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/query-builders/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/dialect.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/query-builders/query-builder.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/view.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/utils.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/columns/integer.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/columns/numeric.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/columns/real.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/columns/text.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/columns/all.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/table.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/foreign-keys.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/columns/common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/columns/blob.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/columns/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/query-builders/select.types.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/alias.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/column-builder.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/column.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/alias.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/errors.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/view-common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/batch.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/libsql/driver-core.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/libsql/driver.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/libsql/session.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/libsql/index.d.ts","../../node_modules/.pnpm/pg-types@4.1.0/node_modules/pg-types/lib/builtins.d.ts","../../node_modules/.pnpm/pg-types@4.1.0/node_modules/pg-types/index.d.ts","../../node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/messages.d.ts","../../node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/serializer.d.ts","../../node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/parser.d.ts","../../node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/index.d.ts","../../node_modules/.pnpm/@types+pg@8.10.2/node_modules/@types/pg/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/node-postgres/session.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/node-postgres/driver.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/node-postgres/index.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/queries/buildquery.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql2/session.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql2/driver.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql2/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore/index.d.ts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/typealiases.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/index.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/zoderror.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseutil.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/enumutil.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorutil.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/partialutil.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/standard-schema.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/index.d.cts","../../node_modules/.pnpm/drizzle-kit@0.31.7/node_modules/drizzle-kit/api.d.mts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/queries/operatormap.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/find/chainmethods.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/types.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/postgres/columntocodeconverter.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/count.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/countglobalversions.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/countversions.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/create.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/createglobal.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/createglobalversion.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/createtablename.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/createversion.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/deletemany.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/deleteone.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/deleteversions.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/destroy.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/find.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/finddistinct.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/findglobal.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/findglobalversions.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/findone.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/findversions.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/migrate.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/migratedown.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/migratefresh.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/migraterefresh.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/migratereset.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/migratestatus.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/queries/parseparams.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/querydrafts.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/schema/builddrizzlerelations.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/schema/buildrawschema.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/transactions/begintransaction.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/transactions/committransaction.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/transactions/rollbacktransaction.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/updateglobal.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/updateglobalversion.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/updatejobs.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/updatemany.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/updateone.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/updateversion.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/upsert.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/upsertrow/types.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/upsertrow/index.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/utilities/blockstojsonmigrator.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/utilities/buildcreatemigration.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/utilities/buildindexname.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/utilities/createschemagenerator.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/utilities/extenddrizzletable.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/utilities/executeschemahooks.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/utilities/haslocalestable.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/utilities/pushdevschema.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/utilities/validateexistingblockisidentical.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/index.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/postgres/types.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/postgres/countdistinct.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/postgres/createdatabase.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/postgres/createextensions.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/postgres/createjsonquery/index.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/postgres/defaultsnapshot.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/postgres/deletewhere.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/postgres/dropdatabase.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/postgres/execute.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/postgres/init.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/postgres/insert.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/postgres/predefinedmigrations/v2-v3/index.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/postgres/requiredrizzlekit.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/postgres/schema/geometrycolumn.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/exports/postgres.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/exports/types-deprecated.d.ts","../../node_modules/.pnpm/@payloadcms+db-postgres@3.81.0_payload@3.81.0_graphql@16.13.2_typescript@5.9.3_/node_modules/@payloadcms/db-postgres/dist/types.d.ts","../../node_modules/.pnpm/@payloadcms+db-postgres@3.81.0_payload@3.81.0_graphql@16.13.2_typescript@5.9.3_/node_modules/@payloadcms/db-postgres/dist/index.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/nodes/lexicalelementnode.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/nodes/lexicaltextnode.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/lexicalselection.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/nodes/lexicalrootnode.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/lexicaleditorstate.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/lexicalconstants.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/lexicalnodestate.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/lexicalupdatetags.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/lexicaleditor.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/lexicalnode.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/caret/lexicalcaret.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/caret/lexicalcaretutils.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/lexicalcommands.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/lexicalevents.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/lexicalnormalization.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/lexicalupdates.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/lexicalutils.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/nodes/artificialnode.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/nodes/lexicaldecoratornode.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/nodes/lexicallinebreaknode.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/nodes/lexicalparagraphnode.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/nodes/lexicaltabnode.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/extension-core/internal.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/extension-core/types.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/extension-core/defineextension.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/extension-core/safecast.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/extension-core/shallowmergeconfig.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/extension-core/index.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/utils/classnames.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/utils/mergeregister.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/packages/@lexical/markdown/markdowntransformers.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/packages/@lexical/markdown/markdownshortcuts.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/packages/@lexical/markdown/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/converters/lexicaltohtml_deprecated/converter/types.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/typesserver.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/lexical/config/types.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/lexical/plugins/slashmenu/lexicaltypeaheadmenuplugin/types.d.ts","../../node_modules/.pnpm/@lexical+rich-text@0.41.0/node_modules/@lexical/rich-text/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/blockquote/server/index.d.ts","../../node_modules/.pnpm/@lexical+react@0.41.0_react-dom@19.2.4_react@19.2.4__react@19.2.4_yjs@13.6.30/node_modules/@lexical/react/lexicaldecoratorblocknode.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/blocks/server/nodes/blocksnode.d.ts","../../node_modules/.pnpm/@lexical+table@0.41.0/node_modules/@lexical/table/lexicaltablecellnode.d.ts","../../node_modules/.pnpm/@lexical+table@0.41.0/node_modules/@lexical/table/lexicaltablecommands.d.ts","../../node_modules/.pnpm/@preact+signals-core@1.14.1/node_modules/@preact/signals-core/dist/signals-core.d.ts","../../node_modules/.pnpm/@lexical+extension@0.41.0/node_modules/@lexical/extension/signals.d.ts","../../node_modules/.pnpm/@lexical+extension@0.41.0/node_modules/@lexical/extension/namedsignals.d.ts","../../node_modules/.pnpm/@lexical+extension@0.41.0/node_modules/@lexical/extension/autofocusextension.d.ts","../../node_modules/.pnpm/@lexical+extension@0.41.0/node_modules/@lexical/extension/cleareditorextension.d.ts","../../node_modules/.pnpm/@lexical+extension@0.41.0/node_modules/@lexical/extension/config.d.ts","../../node_modules/.pnpm/@lexical+extension@0.41.0/node_modules/@lexical/extension/decoratortextextension.d.ts","../../node_modules/.pnpm/@lexical+extension@0.41.0/node_modules/@lexical/extension/editorstateextension.d.ts","../../node_modules/.pnpm/@lexical+extension@0.41.0/node_modules/@lexical/extension/getextensiondependencyfromeditor.d.ts","../../node_modules/.pnpm/@lexical+extension@0.41.0/node_modules/@lexical/extension/getpeerdependencyfromeditor.d.ts","../../node_modules/.pnpm/@lexical+extension@0.41.0/node_modules/@lexical/extension/horizontalruleextension.d.ts","../../node_modules/.pnpm/@lexical+extension@0.41.0/node_modules/@lexical/extension/initialstateextension.d.ts","../../node_modules/.pnpm/@lexical+extension@0.41.0/node_modules/@lexical/extension/extensionrep.d.ts","../../node_modules/.pnpm/@lexical+extension@0.41.0/node_modules/@lexical/extension/lexicalbuilder.d.ts","../../node_modules/.pnpm/@lexical+extension@0.41.0/node_modules/@lexical/extension/nodeselectionextension.d.ts","../../node_modules/.pnpm/@lexical+extension@0.41.0/node_modules/@lexical/extension/tabindentationextension.d.ts","../../node_modules/.pnpm/@lexical+extension@0.41.0/node_modules/@lexical/extension/watchedsignal.d.ts","../../node_modules/.pnpm/@lexical+extension@0.41.0/node_modules/@lexical/extension/index.d.ts","../../node_modules/.pnpm/@lexical+table@0.41.0/node_modules/@lexical/table/lexicaltableextension.d.ts","../../node_modules/.pnpm/@lexical+table@0.41.0/node_modules/@lexical/table/lexicaltableselection.d.ts","../../node_modules/.pnpm/@lexical+table@0.41.0/node_modules/@lexical/table/lexicaltableselectionhelpers.d.ts","../../node_modules/.pnpm/@lexical+table@0.41.0/node_modules/@lexical/table/lexicaltableobserver.d.ts","../../node_modules/.pnpm/@lexical+table@0.41.0/node_modules/@lexical/table/lexicaltablenode.d.ts","../../node_modules/.pnpm/@lexical+table@0.41.0/node_modules/@lexical/table/lexicaltablepluginhelpers.d.ts","../../node_modules/.pnpm/@lexical+table@0.41.0/node_modules/@lexical/table/lexicaltablerownode.d.ts","../../node_modules/.pnpm/@lexical+table@0.41.0/node_modules/@lexical/table/lexicaltableutils.d.ts","../../node_modules/.pnpm/@lexical+table@0.41.0/node_modules/@lexical/table/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/experimental_table/server/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/heading/server/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/horizontalrule/server/nodes/horizontalrulenode.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/link/nodes/types.d.ts","../../node_modules/.pnpm/@lexical+list@0.41.0/node_modules/@lexical/list/lexicallistitemnode.d.ts","../../node_modules/.pnpm/@lexical+list@0.41.0/node_modules/@lexical/list/lexicallistnode.d.ts","../../node_modules/.pnpm/@lexical+list@0.41.0/node_modules/@lexical/list/checklist.d.ts","../../node_modules/.pnpm/@lexical+list@0.41.0/node_modules/@lexical/list/formatlist.d.ts","../../node_modules/.pnpm/@lexical+list@0.41.0/node_modules/@lexical/list/utils.d.ts","../../node_modules/.pnpm/@lexical+list@0.41.0/node_modules/@lexical/list/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/lists/plugin/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/relationship/server/nodes/relationshipnode.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/upload/server/nodes/uploadnode.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/nodetypes.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/blocks/server/nodes/inlineblocksnode.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/blocks/client/nodes/inlineblocksnode.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/lexical/config/client/editorconfigprovider.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/toolbars/types.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/typesclient.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/utilities/buildinitialstate.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/types.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/align/server/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/blocks/premade/codeblock/component/code.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/blocks/premade/codeblock/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/blocks/server/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/converters/htmltolexical/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/converters/lexicaltohtml/shared/types.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/converters/lexicaltohtml/async/types.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/converters/lexicaltohtml/async/field/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/converters/lexicaltohtml_deprecated/converter/converters/linebreak.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/converters/lexicaltohtml_deprecated/converter/converters/paragraph.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/converters/lexicaltohtml_deprecated/converter/converters/tab.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/converters/lexicaltohtml_deprecated/converter/converters/text.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/converters/lexicaltohtml_deprecated/converter/defaultconverters.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/converters/lexicaltohtml_deprecated/converter/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/converters/lexicaltohtml_deprecated/field/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/converters/lexicaltohtml_deprecated/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/converters/lexicaltomarkdown/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/converters/markdowntolexical/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/converters/utilities/payloadpopulatefn.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/converters/utilities/restpopulatefn.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/debug/jsxconverter/server/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/debug/testrecorder/server/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/debug/treeview/server/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/format/bold/feature.server.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/format/inlinecode/feature.server.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/format/italic/feature.server.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/format/strikethrough/feature.server.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/format/subscript/feature.server.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/format/superscript/feature.server.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/format/underline/feature.server.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/horizontalrule/server/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/indent/server/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/link/client/plugins/floatinglinkeditor/types.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/link/nodes/linknode.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/link/nodes/autolinknode.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/link/client/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/link/server/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/lists/checklist/server/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/lists/orderedlist/server/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/lists/unorderedlist/server/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/migrations/slatetolexical/converter/types.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/paragraph/server/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/relationship/server/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/textstate/defaultcolors.d.ts","../../node_modules/.pnpm/csstype@3.1.3/node_modules/csstype/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/textstate/feature.server.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/toolbars/fixed/server/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/toolbars/inline/server/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/typeutilities.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/upload/client/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/upload/server/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/lexical/config/server/default.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/lexical/config/server/loader.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/lexical/config/server/sanitize.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/lexical/nodes/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/lexical/utils/nodeformat.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/lexical/utils/url.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/populategraphql/defaultvalue.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/populategraphql/populate.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/utilities/buildeditorstate.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/utilities/createserverfeature.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/utilities/editorconfigfactory.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/utilities/fieldsdrawer/drawer.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/utilities/jsx/extractpropsfromjsxpropsstring.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/utilities/jsx/jsx.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/utilities/upgradelexicaldata/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/index.d.ts","../../packages/core-shared/src/payload/access/is-admin.ts","../../packages/core-shared/src/payload/fields/slug-field.ts","../../packages/core-shared/src/payload/fields/seo-fields.ts","../../packages/core-shared/src/payload/blocks/cta.ts","../../packages/core-shared/src/payload/hooks/set-published-at.ts","../../packages/core-shared/src/payload/hooks/slugify-if-missing.ts","../../packages/core-shared/src/payload/index.ts","../../packages/blog/src/integrations/cms/collections/articles.ts","../../packages/blog/src/integrations/cms/index.ts","../../packages/core-cms/src/payload.config.ts","../../packages/core-cms/src/index.ts","./src/payload.config.ts","../../node_modules/.pnpm/@payloadcms+next@3.81.0_@types+react@19.2.14_graphql@16.13.2_monaco-editor@0.55.1_next@15.5.1_zswyqgpgjpyz7o3qlye4mm7cgy/node_modules/@payloadcms/next/dist/routes/graphql/handler.d.ts","../../node_modules/.pnpm/@payloadcms+next@3.81.0_@types+react@19.2.14_graphql@16.13.2_monaco-editor@0.55.1_next@15.5.1_zswyqgpgjpyz7o3qlye4mm7cgy/node_modules/@payloadcms/next/dist/routes/graphql/playground.d.ts","../../node_modules/.pnpm/@payloadcms+next@3.81.0_@types+react@19.2.14_graphql@16.13.2_monaco-editor@0.55.1_next@15.5.1_zswyqgpgjpyz7o3qlye4mm7cgy/node_modules/@payloadcms/next/dist/routes/graphql/index.d.ts","../../node_modules/.pnpm/@payloadcms+next@3.81.0_@types+react@19.2.14_graphql@16.13.2_monaco-editor@0.55.1_next@15.5.1_zswyqgpgjpyz7o3qlye4mm7cgy/node_modules/@payloadcms/next/dist/routes/rest/index.d.ts","../../node_modules/.pnpm/@payloadcms+next@3.81.0_@types+react@19.2.14_graphql@16.13.2_monaco-editor@0.55.1_next@15.5.1_zswyqgpgjpyz7o3qlye4mm7cgy/node_modules/@payloadcms/next/dist/exports/routes.d.ts","./src/app/(payload)/api/[...slug]/route.ts","./src/app/(payload)/api/graphql/route.ts","../../node_modules/.pnpm/@payloadcms+next@3.81.0_@types+react@19.2.14_graphql@16.13.2_monaco-editor@0.55.1_next@15.5.1_zswyqgpgjpyz7o3qlye4mm7cgy/node_modules/@payloadcms/next/dist/layouts/root/index.d.ts","../../node_modules/.pnpm/@payloadcms+next@3.81.0_@types+react@19.2.14_graphql@16.13.2_monaco-editor@0.55.1_next@15.5.1_zswyqgpgjpyz7o3qlye4mm7cgy/node_modules/@payloadcms/next/dist/utilities/handleserverfunctions.d.ts","../../node_modules/.pnpm/@payloadcms+next@3.81.0_@types+react@19.2.14_graphql@16.13.2_monaco-editor@0.55.1_next@15.5.1_zswyqgpgjpyz7o3qlye4mm7cgy/node_modules/@payloadcms/next/dist/exports/layouts.d.ts","../../node_modules/.pnpm/@payloadcms+next@3.81.0_@types+react@19.2.14_graphql@16.13.2_monaco-editor@0.55.1_next@15.5.1_zswyqgpgjpyz7o3qlye4mm7cgy/node_modules/@payloadcms/next/dist/elements/documentheader/index.d.ts","../../node_modules/.pnpm/@payloadcms+next@3.81.0_@types+react@19.2.14_graphql@16.13.2_monaco-editor@0.55.1_next@15.5.1_zswyqgpgjpyz7o3qlye4mm7cgy/node_modules/@payloadcms/next/dist/elements/logo/index.d.ts","../../node_modules/.pnpm/@payloadcms+next@3.81.0_@types+react@19.2.14_graphql@16.13.2_monaco-editor@0.55.1_next@15.5.1_zswyqgpgjpyz7o3qlye4mm7cgy/node_modules/@payloadcms/next/dist/elements/nav/index.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/elements/fielddiffcontainer/index.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/elements/fielddifflabel/index.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/elements/folderview/cell/index.server.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/elements/folderview/folderfield/index.server.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/elements/htmldiff/escapehtml.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/elements/htmldiff/index.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/forms/fieldschemastoformstate/serverfunctions/renderfieldserverfn.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/graphics/file/index.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/icons/check/index.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/utilities/copydatafromlocale.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/utilities/getcolumns.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/sessions.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/bin/generateimportmap/utilities/getfromimportmap.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/bin/generateimportmap/utilities/parsepayloadcomponent.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/config/defaults.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/config/orderable/fractional-indexing.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/basefields/timezone/defaulttimezones.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/getfieldpaths.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/folders/utils/buildfolderwhereconstraints.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/folders/utils/formatfolderordocumentitem.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/preferences/keys.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/uploads/formatfilesize.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/uploads/isimage.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/appenduploadselectfields.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/applylocalefiltering.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/combinewhereconstraints.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/extractid.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/formatadminurl.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getbestfitfromsizes.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getdatabypath.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getfieldpermissions.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getsaferedirect.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getselectmode.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getsiblingdata.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getuniquelistby.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getversionsconfig.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/isnextbuild.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/isnumber.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/isreactcomponent.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/mergelistsearchandwhere.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/reducefieldstovalues.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/sanitizefilename.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/sanitizeurl.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/sanitizeuserdataforemail.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/setsareequal.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/slugify.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/tokebabcase.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/transformwherequery.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/unflatten.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/validatemimetype.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/validatewherequery.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/wait.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/wordboundariesregex.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/exports/shared.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/utilities/getfolderresultscomponentanddata.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/utilities/handlelivepreview.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/utilities/handlepreview.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/utilities/rendertable.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/utilities/resolvefilteroptions.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/utilities/upsertpreferences.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/widgets/collectioncards/index.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/exports/rsc/index.d.ts","../../node_modules/.pnpm/@payloadcms+next@3.81.0_@types+react@19.2.14_graphql@16.13.2_monaco-editor@0.55.1_next@15.5.1_zswyqgpgjpyz7o3qlye4mm7cgy/node_modules/@payloadcms/next/dist/exports/rsc.d.ts","./src/app/(payload)/admin/importmap.js","./src/app/(payload)/layout.tsx","../../node_modules/.pnpm/@payloadcms+next@3.81.0_@types+react@19.2.14_graphql@16.13.2_monaco-editor@0.55.1_next@15.5.1_zswyqgpgjpyz7o3qlye4mm7cgy/node_modules/@payloadcms/next/dist/views/account/index.d.ts","../../node_modules/.pnpm/@payloadcms+next@3.81.0_@types+react@19.2.14_graphql@16.13.2_monaco-editor@0.55.1_next@15.5.1_zswyqgpgjpyz7o3qlye4mm7cgy/node_modules/@payloadcms/next/dist/views/createfirstuser/index.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/elements/translation/index.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/elements/withmergedprops/index.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/elements/withserversideprops/index.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/fields/mergefieldstyles.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/forms/form/reducetoserializablefields.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/graphics/icon/index.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/graphics/logo/index.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/providers/tablecolumns/buildcolumnstate/filterfields.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/providers/tablecolumns/getinitialcolumns.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/utilities/abortandignore.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/utilities/api.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/utilities/findlocalefromcode.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/utilities/formatadminurl.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/utilities/formatdoctitle/formatdatetitle.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/utilities/formatdoctitle/index.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/utilities/getglobaldata.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/utilities/groupnavitems.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/utilities/getnavgroups.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/utilities/getvisibleentities.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/utilities/handlebacktodashboard.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/utilities/handlegoback.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/utilities/handletakeover.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/utilities/hassavepermission.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/utilities/isclientuserobject.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/utilities/isediting.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/utilities/sanitizeid.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/utilities/traverseforlocalizedfields.d.ts","../../node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@15.5.14_react-dom@19.2.4_bkjsrt2sze7yglyvgkkxwhvaxq/node_modules/@payloadcms/ui/dist/exports/shared/index.d.ts","../../node_modules/.pnpm/@payloadcms+next@3.81.0_@types+react@19.2.14_graphql@16.13.2_monaco-editor@0.55.1_next@15.5.1_zswyqgpgjpyz7o3qlye4mm7cgy/node_modules/@payloadcms/next/dist/views/dashboard/default/index.d.ts","../../node_modules/.pnpm/@payloadcms+next@3.81.0_@types+react@19.2.14_graphql@16.13.2_monaco-editor@0.55.1_next@15.5.1_zswyqgpgjpyz7o3qlye4mm7cgy/node_modules/@payloadcms/next/dist/views/dashboard/index.d.ts","../../node_modules/.pnpm/@payloadcms+next@3.81.0_@types+react@19.2.14_graphql@16.13.2_monaco-editor@0.55.1_next@15.5.1_zswyqgpgjpyz7o3qlye4mm7cgy/node_modules/@payloadcms/next/dist/views/list/index.d.ts","../../node_modules/.pnpm/@payloadcms+next@3.81.0_@types+react@19.2.14_graphql@16.13.2_monaco-editor@0.55.1_next@15.5.1_zswyqgpgjpyz7o3qlye4mm7cgy/node_modules/@payloadcms/next/dist/views/login/index.d.ts","../../node_modules/.pnpm/@payloadcms+next@3.81.0_@types+react@19.2.14_graphql@16.13.2_monaco-editor@0.55.1_next@15.5.1_zswyqgpgjpyz7o3qlye4mm7cgy/node_modules/@payloadcms/next/dist/views/notfound/index.d.ts","../../node_modules/.pnpm/@payloadcms+next@3.81.0_@types+react@19.2.14_graphql@16.13.2_monaco-editor@0.55.1_next@15.5.1_zswyqgpgjpyz7o3qlye4mm7cgy/node_modules/@payloadcms/next/dist/views/root/index.d.ts","../../node_modules/.pnpm/@payloadcms+next@3.81.0_@types+react@19.2.14_graphql@16.13.2_monaco-editor@0.55.1_next@15.5.1_zswyqgpgjpyz7o3qlye4mm7cgy/node_modules/@payloadcms/next/dist/views/root/metadata.d.ts","../../node_modules/.pnpm/@payloadcms+next@3.81.0_@types+react@19.2.14_graphql@16.13.2_monaco-editor@0.55.1_next@15.5.1_zswyqgpgjpyz7o3qlye4mm7cgy/node_modules/@payloadcms/next/dist/exports/views.d.ts","./src/app/(payload)/admin/[[...segments]]/not-found.tsx","./src/app/(payload)/admin/[[...segments]]/page.tsx","./.next/types/cache-life.d.ts","./.next/types/validator.ts","./.next/types/app/(payload)/layout.ts","./.next/types/app/(payload)/admin/[[...segments]]/page.ts"],"fileIdsList":[[77,125,142,143,318,2309],[77,125,142,143,318,2269],[77,125,142,143,425,426,427,428],[77,125,142,143],[60,77,125,142,143,472,475,2197,2198,2269,2309],[60,77,125,142,143,476,477],[77,125,142,143,476,2191,2268,2307],[77,125,142,143,2267],[77,125,142,143,2191,2196],[63,77,125,142,143,1616,2019,2191,2201,2268],[77,125,142,143,2190],[77,125,142,143,1323],[77,125,142,143,1324,1325],[63,77,125,142,143,1326],[63,77,125,142,143,1327],[77,125,142,143,2051,2067],[77,125,142,143,2051],[63,77,125,142,143,2051],[77,125,142,143,2051,2065],[77,125,142,143,2051,2078],[77,125,142,143,2051,2066,2067,2068,2069,2070,2071,2072,2073,2074,2075,2076,2078,2079,2080,2081],[77,125,142,143,2051,2077],[77,125,142,143,2066],[77,125,142,143,2051,2066],[77,125,142,143,2065],[77,125,142,143,2051,2066,2067],[77,125,142,143,2097,2101],[77,125,142,143,2051,2082,2096,2097,2098,2099,2100],[77,125,142,143,2051,2101],[77,125,142,143,2063,2064,2083,2084,2085,2086,2087,2088,2089,2090],[77,125,142,143,2051,2082],[77,125,142,143,2051,2063,2086],[77,125,142,143,2051,2063,2084,2085,2087],[77,125,142,143,2051,2082,2083],[77,125,142,143,2051,2063,2087],[77,125,142,143,2051,2063,2084,2086,2087],[77,125,142,143,2051,2063,2084,2086,2087,2089,2091],[63,77,125,142,143,942,944],[77,125,142,143,1616,1913,2017,2019],[77,125,142,143,1616,1821,1913,1925,1928,2017,2018],[77,125,142,143,1616,2019],[77,125,142,143,1616,1951,2019],[77,125,142,143,1952,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016],[77,125,142,143,1951],[77,125,142,143,1929,1949,1950,1951,1953,1954,1955,1956,1957,1958,1959,1960,1961,1962,1963,1964,1965,1966,1967,1968,1969,1970,1971,1972,1973,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001],[77,125,142,143,2003],[77,125,142,143,1948],[77,125,142,143,1821],[77,125,142,143,1616,1792,1821,1907,1913,1925,1928,1948,1951,2002,2019],[77,125,142,143,1616,1821,1913,1951,2019],[77,125,142,143,1913],[77,125,142,143,1616,1913,1929,1951,2019],[77,125,142,143,1616,1821,1884,1885,1907,1913,1918,1925,1928,1929,1948,1949,1950,2019],[77,125,142,143,1616,1991,2019],[77,125,142,143,1616,1913,1951,2019],[77,125,142,143,1951,1997],[63,77,125,142,143,1616,2019],[77,125,142,143,2199,2200],[77,125,142,143,2194,2195],[77,125,142,143,2202,2203,2204,2266],[77,125,142,143,2270,2271,2300,2301,2302,2303,2304,2305,2306],[77,125,142,143,2192,2193],[63,77,125,142,143,1616,2019,2299],[63,77,125,142,143,476,1616,2019],[63,77,125,142,143,476,935,1616,2019],[77,125,142,143,476,1616,2019],[77,125,142,143,2056],[77,125,142,143,2051,2056,2059,2105],[63,77,125,142,143,2051,2106],[77,125,142,143,1616,2019,2114],[77,125,142,143,1616,2019,2056],[63,77,125,142,143,1616,2019,2051,2061,2105],[63,77,125,142,143,1616,2019,2051,2105],[77,125,142,143,2051,2057,2105],[77,125,142,143,1616,2019,2119],[77,125,142,143,1616,2019,2051,2105,2118],[77,125,142,143,2055,2105],[77,125,142,143,2055],[77,125,142,143,1616,2019,2051,2055],[77,125,142,143,1616,2019,2051],[77,125,142,143,1616,2019,2055,2057],[77,125,142,143,2055,2056],[77,125,142,143,2051,2057],[77,125,142,143,2119],[77,125,142,143,2051,2056,2091,2105],[63,77,125,142,143,2051,2105],[77,125,142,143,2110,2149],[77,125,142,143,2051,2095],[77,125,142,143,2051,2095,2146],[77,125,142,143,2051,2095,2145],[77,125,142,143,1616,2019,2051,2105],[77,125,142,143,1616,2019,2056,2148],[77,125,142,143,2051,2101,2105,2110],[77,125,142,143,669,2056,2157],[77,125,142,143,2056,2109],[63,77,125,142,143,935,2051,2108,2112],[63,77,125,142,143,1616,2019,2051,2054,2057,2058,2109,2112],[77,125,142,143,935,938,1616,2019,2051,2054,2055,2057,2110,2112],[77,125,142,143,2051,2056],[77,125,142,143,2110,2163],[77,125,142,143,1616,2019,2056,2162],[77,125,142,143,2054,2055,2056,2057,2058,2060,2062,2092,2093,2095,2103,2104,2105,2106,2108,2109,2110,2112,2113,2115,2116,2117,2120,2121,2122,2123,2124,2125,2126,2127,2128,2129,2130,2131,2132,2133,2134,2135,2136,2137,2138,2139,2140,2141,2142,2143,2144,2146,2147,2149,2150,2151,2152,2153,2154,2155,2156,2158,2159,2160,2161,2163,2164,2165,2166,2167,2168,2169,2170,2171,2172,2173,2174,2175,2176,2177,2178],[63,77,125,142,143,669,2051,2057,2107,2112],[77,125,142,143,2051,2056,2057],[77,125,142,143,1616,2019,2056,2057],[77,125,142,143,2051,2056,2110,2112],[63,77,125,142,143,935,2051,2112],[77,125,142,143,2051,2060,2062,2092,2093,2094,2095,2102,2103,2104,2106],[77,125,142,143,2051,2052,2053],[77,125,142,143,2051,2052],[77,125,142,143,1616,2019,2051,2056,2057,2110,2111],[77,125,142,143,2051,2105],[77,125,142,143,1616,2019,2051,2056,2057,2112],[77,125,142,143,928,931,932,933,934],[77,125,142,143,1614],[77,125,142,143,927],[77,125,142,143,932],[77,125,142,143,927,929,930,931],[63,77,125,142,143,932],[77,125,142,143,935,1616,2019],[63,77,125,142,143],[63,77,125,142,143,2209],[63,77,125,142,143,935],[77,125,142,143,2205,2206,2207,2208,2210,2211,2212,2213,2214,2215,2259,2260,2261,2262,2263,2264,2265],[77,125,142,143,2258,2272,2273,2274,2275,2276,2277,2278,2279,2280,2281,2282,2283,2284,2285,2286,2287,2288,2289,2290,2291,2292,2293,2294,2295,2296,2297,2298],[77,125,142,143,2258],[77,125,142,143,935],[77,125,142,143,1616,2019,2258],[77,125,142,143,935,1616,2019,2288],[77,125,142,143,346],[63,77,125,142,143,935,1616,2019],[77,125,139,142,143,157,175],[77,122,123,125,142,143],[77,124,125,142,143],[125,142,143],[77,125,130,142,143,160],[77,125,126,131,136,142,143,145,157,168],[77,125,126,127,136,142,143,145],[72,73,74,77,125,142,143],[77,125,128,142,143,169],[77,125,129,130,137,142,143,146],[77,125,130,142,143,157,165],[77,125,131,133,136,142,143,145],[77,124,125,132,142,143],[77,125,133,134,142,143],[77,125,135,136,142,143],[77,124,125,136,142,143],[77,125,136,137,138,142,143,157,168],[77,125,136,137,138,142,143,152,157,160],[77,118,125,133,136,139,142,143,145,157,168],[77,125,136,137,139,140,142,143,145,157,165,168],[77,125,139,141,142,143,157,165,168],[75,76,77,78,79,80,81,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174],[77,125,136,142,143],[77,125,142,143,144,168],[77,125,133,136,142,143,145,157],[77,125,142,143,146],[77,125,142,143,147],[77,124,125,142,143,148],[77,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174],[77,125,142,143,150],[77,125,142,143,151],[77,125,136,142,143,152,153],[77,125,142,143,152,154,169,171],[77,125,137,142,143],[77,125,136,142,143,157,158,160],[77,125,142,143,159,160],[77,125,142,143,157,158],[77,125,142,143,160],[77,125,142,143,161],[77,122,125,142,143,157,162,168],[77,125,136,142,143,163,164],[77,125,142,143,163,164],[77,125,130,142,143,145,157,165],[77,125,142,143,166],[77,125,142,143,145,167],[77,125,139,142,143,151,168],[77,125,130,142,143,169],[77,125,142,143,157,170],[77,125,142,143,144,171],[77,125,142,143,172],[77,118,125,142,143],[77,118,125,136,138,142,143,148,157,160,168,170,171,173],[77,125,142,143,157,174],[77,125,136,142,143,157,165,175,1920,1921,1924,1925],[63,67,77,125,142,143,176,177,178,180,420,468],[63,67,77,125,142,143,176,177,178,179,335,420,468],[63,67,77,125,142,143,176,177,179,180,420,468],[63,77,125,142,143,180,335,336],[63,77,125,142,143,180,335],[63,67,77,125,142,143,177,178,179,180,420,468],[63,67,77,125,142,143,176,178,179,180,420,468],[61,62,77,125,142,143],[77,125,142,143,1038],[77,125,142,143,1036,1038],[77,125,142,143,1036],[77,125,142,143,1038,1113,1114],[77,125,142,143,1116],[77,125,142,143,1117],[77,125,142,143,1134],[77,125,142,143,1038,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302],[77,125,142,143,1210],[77,125,142,143,1038,1114,1234],[77,125,142,143,1036,1231,1232],[77,125,142,143,1233],[77,125,142,143,1231],[77,125,142,143,1036,1037],[77,125,142,143,673],[77,125,142,143,671,673],[77,125,142,143,671],[77,125,142,143,673,737,738],[77,125,142,143,673,740],[77,125,142,143,673,741],[77,125,142,143,758],[77,125,142,143,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926],[77,125,142,143,673,834],[77,125,142,143,673,738,858],[77,125,142,143,671,855,856],[77,125,142,143,857],[77,125,142,143,673,855],[77,125,142,143,670,671,672],[77,125,142,143,165,1821,1918,1932,1933,1947],[77,125,142,143,1617,1622,1626,1671,1909],[77,125,142,143,1675,1908],[77,125,142,143,1617,1618,1913],[77,125,142,143,1619],[77,125,142,143,1617,1627,1909],[77,125,142,143,1617,1626,1627,1695,1750,1821,1873,1907,1909],[77,125,142,143,1617,1622,1626,1627,1908],[77,125,142,143,1617],[77,125,142,143,1665,1670,1691],[77,125,142,143,1617,1635,1665],[77,125,142,143,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1650,1651,1652,1653,1654,1655,1656,1657,1658,1668],[77,125,142,143,1617,1638,1667,1908,1909],[77,125,142,143,1617,1667,1908,1909],[77,125,142,143,1617,1626,1627,1660,1665,1666,1908,1909],[77,125,142,143,1617,1626,1627,1665,1667,1908,1909],[77,125,142,143,1617,1667,1908],[77,125,142,143,1617,1665,1667,1908,1909],[77,125,142,143,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1650,1651,1652,1653,1654,1655,1656,1657,1658,1667,1668],[77,125,142,143,1617,1637,1667,1908],[77,125,142,143,1617,1649,1667,1908,1909],[77,125,142,143,1617,1649,1665,1667,1908,1909],[77,125,142,143,1617,1619,1624,1626,1627,1632,1665,1669,1670,1671,1673,1676,1677,1678,1680,1686,1687,1691],[77,125,142,143,1617,1626,1627,1665,1669,1671,1686,1690,1691],[77,125,142,143,1617,1665,1669],[77,125,142,143,1636,1637,1660,1661,1662,1663,1664,1665,1666,1669,1678,1679,1680,1686,1687,1689,1690,1692,1693,1694],[77,125,142,143,1617,1626,1665,1669],[77,125,142,143,1617,1626,1661,1665],[77,125,142,143,1617,1626,1665,1680],[77,125,142,143,1617,1624,1625,1626,1665,1674,1675,1680,1687,1691],[77,125,142,143,1681,1682,1683,1684,1685,1688,1691],[77,125,142,143,1617,1622,1624,1625,1626,1632,1660,1665,1667,1674,1675,1680,1682,1687,1688,1691],[77,125,142,143,1617,1624,1626,1632,1669,1678,1685,1687,1691],[77,125,142,143,1617,1626,1627,1665,1671,1674,1675,1680,1687],[77,125,142,143,1617,1626,1672,1674,1675],[77,125,142,143,1617,1626,1674,1675,1680,1687,1690],[77,125,142,143,1617,1618,1624,1625,1626,1627,1632,1665,1669,1670,1674,1675,1678,1680,1687,1691],[77,125,142,143,1622,1623,1624,1625,1626,1627,1632,1665,1669,1670,1680,1685,1690],[77,125,142,143,1617,1622,1624,1625,1626,1627,1665,1667,1670,1674,1675,1680,1687,1691,1909],[77,125,142,143,1617,1626,1637,1665],[77,125,142,143,1617,1618,1619,1627,1635,1671,1672,1679,1687,1691],[77,125,142,143,1624,1625,1626],[77,125,142,143,1617,1622,1636,1659,1660,1662,1663,1664,1666,1667,1908],[77,125,142,143,1624,1626,1636,1660,1662,1663,1664,1665,1666,1669,1670,1690,1695,1908,1909],[77,125,142,143,1617,1626],[77,125,142,143,1617,1625,1626,1627,1632,1667,1670,1688,1689,1908],[77,125,142,143,1617,1620,1622,1623,1624,1627,1635,1671,1674,1908,1909,1910,1911,1912],[77,125,142,143,1617,1883,1914],[77,125,142,143,1627,1915],[77,125,142,143,1916,1917],[77,125,142,143,1617,1618,1620,1626,1671,1859,1885,1891,1905,1907,1914],[77,125,142,143,1725,1733,1746],[77,125,142,143,1617,1626,1725],[77,125,142,143,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1716,1717,1718,1719,1720,1728],[77,125,142,143,1617,1727,1908,1909],[77,125,142,143,1617,1627,1727,1908,1909],[77,125,142,143,1617,1626,1627,1725,1726,1908,1909],[77,125,142,143,1617,1626,1627,1725,1727,1908,1909],[77,125,142,143,1617,1627,1725,1727,1908,1909],[77,125,142,143,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1716,1717,1718,1719,1720,1727,1728],[77,125,142,143,1617,1707,1727,1908,1909],[77,125,142,143,1617,1627,1715,1908,1909],[77,125,142,143,1617,1619,1624,1626,1627,1671,1725,1732,1733,1738,1739,1740,1741,1743,1746],[77,125,142,143,1617,1626,1627,1671,1725,1727,1730,1731,1736,1737,1743,1746],[77,125,142,143,1617,1725,1729],[77,125,142,143,1696,1722,1723,1724,1725,1726,1729,1732,1738,1740,1742,1743,1744,1745,1747,1748,1749],[77,125,142,143,1617,1626,1725,1729],[77,125,142,143,1617,1626,1725,1733,1743],[77,125,142,143,1617,1624,1626,1627,1674,1725,1727,1738,1743,1746],[77,125,142,143,1731,1734,1735,1736,1737,1746],[77,125,142,143,1617,1618,1622,1626,1632,1674,1675,1725,1727,1735,1736,1738,1743,1746],[77,125,142,143,1617,1624,1732,1734,1738,1746],[77,125,142,143,1617,1626,1627,1671,1674,1725,1738,1743],[77,125,142,143,1617,1618,1624,1625,1626,1627,1632,1674,1722,1725,1729,1732,1733,1738,1743,1746],[77,125,142,143,1622,1623,1624,1625,1626,1627,1632,1725,1729,1733,1734,1743,1745],[77,125,142,143,1617,1618,1624,1626,1627,1674,1725,1727,1738,1743,1746,1909],[77,125,142,143,1617,1725,1745],[77,125,142,143,1617,1618,1619,1626,1627,1671,1738,1742,1746],[77,125,142,143,1624,1625,1626,1632,1735],[77,125,142,143,1617,1622,1696,1721,1722,1723,1724,1726,1727,1908],[77,125,142,143,1624,1696,1722,1723,1724,1725,1726,1733,1734,1745,1750,1913],[77,125,142,143,1617,1625,1626,1632,1729,1733,1735,1744,1908],[77,125,142,143,1617,1620,1627,1671,1738,1742,1743,1859,1930],[77,125,142,143,1930,1931],[77,125,142,143,1617,1618,1620,1626,1627,1671,1738,1743,1746,1859],[77,125,142,143,1617,1619,1620,1627,1671,1804,1811,1925,1926],[77,125,142,143,1926,1927],[77,125,142,143,1617,1618,1620,1626,1627,1671,1805,1811,1815,1821,1859,1925],[77,125,142,143,1622,1626,1909],[77,125,142,143,1792,1798,1815],[77,125,142,143,1617,1635,1792],[77,125,142,143,1752,1753,1754,1755,1756,1758,1759,1760,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1795],[77,125,142,143,1617,1762,1794,1908,1909],[77,125,142,143,1617,1794,1908,1909],[77,125,142,143,1617,1627,1794,1908,1909],[77,125,142,143,1617,1626,1627,1787,1792,1793,1908,1909],[77,125,142,143,1617,1626,1627,1792,1794,1908,1909],[77,125,142,143,1617,1794,1908],[77,125,142,143,1617,1627,1757,1794,1908,1909],[77,125,142,143,1617,1627,1792,1794,1908,1909],[77,125,142,143,1752,1753,1754,1755,1756,1758,1759,1760,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1794,1795,1796],[77,125,142,143,1617,1761,1794,1908],[77,125,142,143,1617,1764,1794,1908,1909],[77,125,142,143,1617,1792,1794,1908,1909],[77,125,142,143,1617,1757,1764,1792,1794,1908,1909],[77,125,142,143,1617,1627,1757,1792,1794,1908,1909],[77,125,142,143,1617,1619,1624,1626,1627,1671,1792,1797,1798,1799,1800,1801,1802,1803,1805,1810,1811,1814,1815],[77,125,142,143,1617,1626,1627,1671,1730,1792,1797,1805,1810,1814,1815],[77,125,142,143,1617,1792,1797],[77,125,142,143,1751,1761,1787,1788,1789,1790,1791,1792,1793,1797,1803,1804,1805,1810,1811,1813,1814,1816,1817,1818,1820],[77,125,142,143,1617,1626,1792,1797],[77,125,142,143,1617,1626,1788,1792],[77,125,142,143,1617,1626,1627,1792,1805],[77,125,142,143,1617,1618,1624,1625,1626,1632,1674,1675,1792,1805,1811,1815],[77,125,142,143,1802,1806,1807,1808,1809,1812,1815],[77,125,142,143,1617,1618,1622,1624,1625,1626,1632,1674,1675,1787,1792,1794,1805,1807,1811,1812,1815],[77,125,142,143,1617,1624,1626,1797,1803,1809,1811,1815],[77,125,142,143,1617,1626,1627,1671,1674,1675,1792,1805,1811],[77,125,142,143,1617,1626,1674,1675,1805,1811,1814],[77,125,142,143,1617,1618,1624,1625,1626,1627,1632,1674,1675,1792,1797,1798,1803,1805,1811,1815],[77,125,142,143,1622,1623,1624,1625,1626,1627,1632,1792,1797,1798,1805,1809,1814],[77,125,142,143,1617,1618,1622,1624,1625,1626,1627,1632,1674,1675,1792,1794,1798,1805,1811,1815,1909],[77,125,142,143,1617,1626,1627,1761,1792,1796,1814],[77,125,142,143,1617,1618,1619,1627,1635,1671,1672,1804,1811,1815],[77,125,142,143,1624,1625,1626,1632,1812],[77,125,142,143,1617,1622,1751,1786,1787,1789,1790,1791,1793,1794,1908],[77,125,142,143,1624,1626,1751,1787,1789,1790,1791,1792,1793,1797,1798,1814,1821,1908,1909],[77,125,142,143,1819],[77,125,142,143,1617,1625,1626,1627,1632,1794,1798,1812,1813,1908],[77,125,142,143,1617,1635],[77,125,142,143,1622,1623,1624,1626,1627,1908,1909],[77,125,142,143,1617,1622,1626,1627,1630,1909,1913],[77,125,142,143,1908],[77,125,142,143,1851,1869],[77,125,142,143,1822,1823,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1841,1842,1843,1844,1845,1846,1853],[77,125,142,143,1617,1852,1908,1909],[77,125,142,143,1617,1627,1852,1908,1909],[77,125,142,143,1617,1627,1851,1908,1909],[77,125,142,143,1617,1626,1627,1851,1852,1908,1909],[77,125,142,143,1617,1627,1851,1852,1908,1909],[77,125,142,143,1617,1627,1635,1852,1908,1909],[77,125,142,143,1822,1823,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1841,1842,1843,1844,1845,1846,1852,1853],[77,125,142,143,1617,1832,1852,1908,1909],[77,125,142,143,1617,1627,1840,1908,1909],[77,125,142,143,1617,1619,1624,1626,1671,1851,1858,1861,1862,1863,1866,1868,1869],[77,125,142,143,1617,1626,1627,1671,1730,1851,1852,1855,1856,1857,1868,1869],[77,125,142,143,1848,1849,1850,1851,1854,1858,1863,1866,1867,1868,1870,1871,1872],[77,125,142,143,1617,1626,1851,1854],[77,125,142,143,1617,1851,1854],[77,125,142,143,1617,1626,1851,1868],[77,125,142,143,1617,1624,1626,1627,1674,1851,1852,1858,1868,1869],[77,125,142,143,1855,1856,1857,1864,1865,1869],[77,125,142,143,1617,1622,1626,1674,1675,1851,1852,1856,1858,1868,1869],[77,125,142,143,1617,1624,1858,1863,1864,1869],[77,125,142,143,1617,1618,1624,1625,1626,1627,1632,1674,1851,1854,1858,1863,1868,1869],[77,125,142,143,1622,1623,1624,1625,1626,1627,1632,1851,1854,1864,1868],[77,125,142,143,1617,1624,1626,1627,1674,1851,1852,1858,1868,1869,1909],[77,125,142,143,1617,1851],[77,125,142,143,1617,1618,1619,1626,1627,1671,1858,1867,1869],[77,125,142,143,1624,1625,1626,1632,1865],[77,125,142,143,1617,1622,1847,1848,1849,1850,1852,1908],[77,125,142,143,1624,1626,1848,1849,1850,1851,1873,1908,1909],[77,125,142,143,1617,1619,1620,1627,1671,1858,1860,1867],[77,125,142,143,1860,1861],[77,125,142,143,1617,1618,1620,1626,1627,1671,1858,1859,1868,1869],[77,125,142,143,1626,1909],[77,125,142,143,1628,1629],[77,125,142,143,1631,1633],[77,125,142,143,1626,1632,1909],[77,125,142,143,1626,1630,1634],[77,125,142,143,1617,1621,1622,1624,1625,1627,1909],[77,125,142,143,1879,1900,1905],[77,125,142,143,1617,1626,1900],[77,125,142,143,1875,1895,1896,1897,1898,1903],[77,125,142,143,1617,1627,1902,1908,1909],[77,125,142,143,1617,1626,1627,1900,1901,1908,1909],[77,125,142,143,1617,1626,1627,1900,1902,1908,1909],[77,125,142,143,1875,1895,1896,1897,1898,1902,1903],[77,125,142,143,1617,1627,1894,1900,1902,1908,1909],[77,125,142,143,1617,1902,1908,1909],[77,125,142,143,1617,1627,1900,1902,1908,1909],[77,125,142,143,1617,1619,1624,1626,1627,1671,1879,1880,1881,1882,1885,1890,1891,1900,1905],[77,125,142,143,1617,1626,1627,1671,1730,1885,1890,1900,1904,1905],[77,125,142,143,1617,1900,1904],[77,125,142,143,1874,1876,1877,1878,1882,1883,1885,1890,1891,1893,1894,1900,1901,1904,1906],[77,125,142,143,1617,1626,1900,1904],[77,125,142,143,1617,1626,1885,1893,1900],[77,125,142,143,1617,1624,1625,1626,1627,1674,1675,1885,1891,1900,1902,1905],[77,125,142,143,1886,1887,1888,1889,1892,1905],[77,125,142,143,1617,1624,1625,1626,1627,1632,1674,1675,1876,1885,1887,1891,1892,1900,1902,1905],[77,125,142,143,1617,1624,1882,1889,1891,1905],[77,125,142,143,1617,1626,1627,1671,1674,1675,1885,1891,1900],[77,125,142,143,1617,1626,1672,1674,1675,1891],[77,125,142,143,1617,1618,1624,1625,1626,1627,1632,1674,1675,1879,1882,1885,1891,1900,1904,1905],[77,125,142,143,1622,1623,1624,1625,1626,1627,1632,1879,1885,1889,1893,1900,1904],[77,125,142,143,1617,1624,1625,1626,1627,1674,1675,1879,1885,1891,1900,1902,1905,1909],[77,125,142,143,1617,1618,1619,1626,1671,1672,1674,1883,1884,1891,1905],[77,125,142,143,1624,1625,1626,1632,1892],[77,125,142,143,1617,1622,1874,1876,1877,1878,1899,1901,1902,1908],[77,125,142,143,1617,1900,1902],[77,125,142,143,1624,1626,1874,1876,1877,1878,1879,1893,1900,1901,1907],[77,125,142,143,1617,1625,1626,1632,1879,1892,1902,1908],[77,125,142,143,1617,1623,1626,1627,1909],[77,125,142,143,1619,1620,1622,1626,1909],[77,125,142,143,584,585,586],[77,125,142,143,584],[77,125,142,143,580,581],[77,125,142,143,581,582,583,587],[77,125,142,143,480,481,487,488],[77,125,142,143,489,554,555],[77,125,142,143,480,487,489],[77,125,142,143,481,489],[77,125,142,143,480,482,483,484,487,489,492,493],[77,125,142,143,483,494,508,509],[77,125,142,143,480,487,492,493,494],[77,125,142,143,480,482,487,489,491,492,493],[77,125,142,143,480,481,492,493,494],[77,125,142,143,479,495,500,507,510,511,553,556,579],[77,125,142,143,480],[77,125,142,143,481,485,486],[77,125,142,143,481,485,486,487,488,490,501,502,503,504,505,506],[77,125,142,143,481,486,487],[77,125,142,143,481],[77,125,142,143,480,481,486,487,489,502],[77,125,142,143,487],[77,125,142,143,481,487,488],[77,125,142,143,485,487],[77,125,142,143,494,508],[77,125,142,143,480,482,483,484,487,492],[77,125,142,143,480,487,490,493],[77,125,142,143,483,491,492,493,496,497,498,499],[77,125,142,143,493],[77,125,142,143,480,482,487,489,491,493],[77,125,142,143,489,492],[77,125,142,143,489],[77,125,142,143,480,487,493],[77,125,142,143,481,487,492,503],[77,125,142,143,492,557],[77,125,142,143,489,493],[77,125,142,143,487,492],[77,125,142,143,492],[77,125,142,143,480,490],[77,125,142,143,480,487],[77,125,142,143,487,492,493],[77,125,142,143,512,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578],[77,125,142,143,492,493],[77,125,142,143,481,487,491,492,493],[77,125,142,143,482,487],[77,125,142,143,480,487,491,492,493,505],[77,125,142,143,480,482,487,493],[77,125,142,143,480,482,487],[77,125,142,143,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552],[77,125,142,143,505,513],[77,125,142,143,513,515],[77,125,142,143,480,487,489,492,512,513],[77,125,142,143,480,487,489,491,492,493,505,512],[77,125,142,143,2021,2022,2030],[77,125,142,143,2021,2022,2023,2030,2031],[77,125,142,143,2044],[77,125,142,143,2043,2044,2045,2046,2047],[77,125,142,143,2043,2051],[77,125,142,143,2021,2022,2023,2024,2025,2026,2027,2028,2029,2030,2031,2032,2033,2034,2035,2036,2037,2038,2039,2040,2041,2042,2048,2049,2050],[77,125,142,143,2021,2022,2023,2029,2030],[77,125,142,143,2021,2022],[77,125,142,143,2025,2027,2028,2030],[77,125,142,143,2023,2024,2029,2030],[77,125,142,143,2029,2030],[77,125,142,143,2023,2026,2027,2029,2051],[77,125,142,143,2026,2051],[77,125,142,143,2021,2022,2025,2029,2030,2051],[77,125,142,143,2025,2029,2030],[77,125,142,143,2022,2023,2024,2025,2029,2030,2051],[77,125,142,143,2021,2051],[77,125,142,143,2021,2029,2030,2051],[77,125,142,143,2023,2030,2051],[77,125,142,143,2021,2023,2029,2030],[77,125,142,143,2021,2030],[77,125,142,143,2022,2029,2030],[77,125,142,143,943],[69,77,125,142,143],[77,125,142,143,423],[77,125,142,143,430],[77,125,142,143,184,198,199,200,202,417],[77,125,142,143,184,223,225,227,228,231,417,419],[77,125,142,143,184,188,190,191,192,193,194,406,417,419],[77,125,142,143,417],[77,125,142,143,199,301,387,396,413],[77,125,142,143,184],[77,125,142,143,181,413],[77,125,142,143,235],[77,125,142,143,234,417,419],[77,125,139,142,143,283,301,330,474],[77,125,139,142,143,294,310,396,412],[77,125,139,142,143,348],[77,125,142,143,400],[77,125,142,143,399,400,401],[77,125,142,143,399],[71,77,125,139,142,143,181,184,188,191,195,196,197,199,203,211,212,341,366,397,417,420],[77,125,142,143,184,201,219,223,224,229,230,417,474],[77,125,142,143,201,474],[77,125,142,143,212,219,281,417,474],[77,125,142,143,474],[77,125,142,143,184,201,202,474],[77,125,142,143,226,474],[77,125,142,143,195,398,405],[77,125,142,143,151,243,413],[77,125,142,143,243,413],[63,77,125,142,143,243],[63,77,125,142,143,302],[77,125,142,143,298,346,413,456,457],[77,125,142,143,393,450,451,452,453,455],[77,125,142,143,392],[77,125,142,143,392,393],[77,125,142,143,192,342,343,344],[77,125,142,143,342,345,346],[77,125,142,143,454],[77,125,142,143,342,346],[63,77,125,142,143,185,444],[63,77,125,142,143,168],[63,77,125,142,143,201,271],[63,77,125,142,143,201],[77,125,142,143,269,273],[63,77,125,142,143,270,422],[63,67,77,125,139,142,143,175,176,177,178,179,180,420,466,467],[77,125,139,142,143],[77,125,139,142,143,188,250,342,352,367,387,402,403,417,418,474],[77,125,142,143,211,404],[77,125,142,143,420],[77,125,142,143,183],[63,77,125,142,143,283,297,309,319,321,412],[77,125,142,143,151,283,297,318,319,320,412,473],[77,125,142,143,312,313,314,315,316,317],[77,125,142,143,314],[77,125,142,143,318],[77,125,142,143,241,242,243,245],[63,77,125,142,143,236,237,238,244],[77,125,142,143,241,244],[77,125,142,143,239],[77,125,142,143,240],[63,77,125,142,143,243,270,422],[63,77,125,142,143,243,421,422],[63,77,125,142,143,243,422],[77,125,142,143,367,409],[77,125,142,143,409],[77,125,139,142,143,418,422],[77,125,142,143,306],[77,124,125,142,143,305],[77,125,142,143,213,251,289,291,293,294,295,296,339,342,412,415,418],[77,125,142,143,213,327,342,346],[77,125,142,143,294,412],[63,77,125,142,143,294,303,304,306,307,308,309,310,311,322,323,324,325,326,328,329,412,413,474],[77,125,142,143,288],[77,125,139,142,143,151,213,214,250,265,295,339,340,341,346,367,387,408,417,418,419,420,474],[77,125,142,143,412],[77,124,125,142,143,199,292,295,341,408,410,411,418],[77,125,142,143,294],[77,124,125,142,143,250,255,284,285,286,287,288,289,290,291,293,412,413],[77,125,139,142,143,255,256,284,418,419],[77,125,142,143,199,341,342,367,408,412,418],[77,125,139,142,143,417,419],[77,125,139,142,143,157,415,418,419],[77,125,139,142,143,151,168,181,188,201,213,214,216,251,252,257,262,265,291,295,342,352,354,357,359,362,363,364,365,366,387,407,408,413,415,417,418,419],[77,125,139,142,143,157],[77,125,142,143,184,185,186,188,193,196,201,219,407,415,416,420,422,474],[77,125,139,142,143,157,168,231,233,235,236,237,238,245,474],[77,125,142,143,151,168,181,223,233,261,262,263,264,291,342,357,366,367,373,376,377,387,408,413,415],[77,125,142,143,195,196,211,341,366,408,417],[77,125,139,142,143,168,185,188,291,371,415,417],[77,125,142,143,282],[77,125,139,142,143,374,375,384],[77,125,142,143,415,417],[77,125,142,143,289,292],[77,125,142,143,291,295,407,422],[77,125,139,142,143,151,217,223,264,357,367,373,376,379,415],[77,125,139,142,143,195,211,223,380],[77,125,142,143,184,216,382,407,417],[77,125,139,142,143,168,417],[77,125,139,142,143,201,215,216,217,228,246,381,383,407,417],[71,77,125,142,143,213,295,386,420,422],[77,125,139,142,143,151,168,188,195,203,211,214,251,257,261,262,263,264,265,291,342,354,367,368,370,372,387,407,408,413,414,415,422],[77,125,139,142,143,157,195,373,378,384,415],[77,125,142,143,206,207,208,209,210],[77,125,142,143,252,358],[77,125,142,143,360],[77,125,142,143,358],[77,125,142,143,360,361],[77,125,139,142,143,188,191,192,250,418],[77,125,139,142,143,151,183,185,213,251,265,295,350,351,387,415,419,420,422],[77,125,139,142,143,151,168,187,192,291,351,414,418],[77,125,142,143,284],[77,125,142,143,285],[77,125,142,143,286],[77,125,142,143,413],[77,125,142,143,232,248],[77,125,139,142,143,188,232,251],[77,125,142,143,247,248],[77,125,142,143,249],[77,125,142,143,232,233],[77,125,142,143,232,266],[77,125,142,143,232],[77,125,142,143,252,356,414],[77,125,142,143,355],[77,125,142,143,233,413,414],[77,125,142,143,353,414],[77,125,142,143,233,413],[77,125,142,143,339],[77,125,142,143,188,193,251,280,283,289,291,295,297,300,331,334,338,342,386,407,415,418],[77,125,142,143,274,277,278,279,298,299,346],[63,77,125,142,143,178,180,243,332,333],[63,77,125,142,143,178,180,243,332,333,337],[77,125,142,143,395],[77,125,142,143,199,256,294,295,306,310,342,386,388,389,390,391,393,394,397,407,412,417],[77,125,142,143,350],[77,125,139,142,143,251,267,347,349,352,386,415,420,422],[77,125,142,143,274,275,276,277,278,279,298,299,346,421],[71,77,125,139,142,143,151,168,214,232,233,265,291,295,384,385,387,407,408,417,418,420],[77,125,142,143,256,258,261,408],[77,125,139,142,143,252,417],[77,125,142,143,255,294],[77,125,142,143,254],[77,125,142,143,256,257],[77,125,142,143,253,255,417],[77,125,139,142,143,187,256,258,259,260,417,418],[63,77,125,142,143,342,343,345],[77,125,142,143,218],[63,77,125,142,143,185],[63,77,125,142,143,413],[63,71,77,125,142,143,265,295,420,422],[77,125,142,143,185,444,445],[63,77,125,142,143,273],[63,77,125,142,143,151,168,183,230,268,270,272,422],[77,125,142,143,201,413,418],[77,125,142,143,369,413],[77,125,142,143,342],[63,77,125,137,139,142,143,151,183,219,225,273,420,421],[63,77,125,142,143,176,177,178,179,180,420,468],[63,64,65,66,67,77,125,142,143],[77,125,130,142,143],[77,125,142,143,220,221,222],[77,125,142,143,220],[63,67,77,125,139,141,142,143,151,175,176,177,178,179,180,181,183,214,318,379,417,419,422,468],[77,125,142,143,432],[77,125,142,143,434],[77,125,142,143,436],[77,125,142,143,438],[77,125,142,143,440,441,442],[77,125,142,143,446],[68,70,77,125,142,143,424,429,431,433,435,437,439,443,447,449,459,460,462,472,473,474,475],[77,125,142,143,448],[77,125,142,143,458],[77,125,142,143,270],[77,125,142,143,461],[77,124,125,142,143,256,258,259,261,309,413,463,464,465,468,469,470,471],[77,125,142,143,175],[77,125,142,143,935,955,1375,1399,1401],[77,125,142,143,1332],[77,125,142,143,1011],[77,125,142,143,955],[63,77,125,142,143,1011],[77,125,142,143,669,948,949,954,955,1375],[63,77,125,142,143,669,948,949,954,955,1375],[77,125,142,143,669,945,948,949,954,955,1375],[77,125,142,143,669,948,949,955,1375],[77,125,142,143,1375],[77,125,142,143,669,948,955,1375],[77,125,142,143,669,955,1375],[77,125,142,143,935,948,955],[77,125,142,143,935,955,1616,2019],[77,125,142,143,948,955],[77,125,142,143,669,935,946,947,955,1375,1401,1616,2019],[77,125,142,143,935,946,947,955,1401,1616,2019],[77,125,142,143,948,955,1011],[77,125,142,143,935,952,1011,1012,1369,1370,1401,1616,2019],[77,125,142,143,935,938,941,953,955,956,1011,1375,1399,1401,1616,2019],[63,77,125,142,143,935,948,949,950,955,956,957,965,966,967,1011,1012,1013,1014,1015,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1371,1372,1373,1374,1399,1401],[77,125,142,143,946,953,967,1011,1375,1399,1401],[77,125,142,143,994,1011,1616,2019],[77,125,142,143,935,953,960,964,965,966,1011,1012,1375,1399,1401],[77,125,142,143,946,947,995,1011,1341,1375,1399,1401],[77,125,142,143,1399],[77,125,142,143,1011,1401],[77,125,142,143,960],[77,125,142,143,960,1011],[77,125,142,143,946,1401],[77,125,142,143,1399,1401],[77,125,142,143,946],[77,125,142,143,946,958,959],[77,125,142,143,1401,1616,2019],[77,125,142,143,1399,1401,1616,2019],[77,125,142,143,1401],[77,125,142,143,1380,1401,1616,2019],[77,125,142,143,1381,1401,1616,2019],[77,125,142,143,1382,1401,1616,2019],[77,125,142,143,946,1399,1401],[77,125,142,143,946,1399,1401,1616,2019],[77,125,142,143,1399,1616,2019],[77,125,142,143,669,1401,1616,2019],[77,125,142,143,955,1011,1012],[77,125,142,143,1011,1012],[77,125,142,143,935,961,1011,1012,1375,1399,1401],[77,125,142,143,946,1399],[77,125,142,143,580,669,946,951,952,955,994,1011,1375,1376,1377,1379,1398,1401,1616,2019],[77,125,142,143,936,1399,1401,1616,2019],[77,125,142,143,960,1399,1401],[77,125,142,143,669,1386,1399,1401,1616,2019],[77,125,142,143,952,1399,1401,1616,2019],[77,125,142,143,1390,1399,1401,1616,2019],[77,125,142,143,952,1399,1401],[77,125,142,143,951,1399,1401,1616,2019],[77,125,142,143,951,952,1394,1399,1401],[77,125,142,143,1379,1399,1401,1616,2019],[77,125,142,143,669,1399,1401,1616,2019],[77,125,142,143,1391,1399,1401,1616,2019],[77,125,142,143,951,952,1399,1401,1616,2019],[77,125,142,143,669,1379,1399,1401,1616,2019],[77,125,142,143,1394,1399,1401],[77,125,142,143,1377,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1391,1392,1393,1395,1396,1397,1399,1401,1616,2019],[77,125,142,143,935,955,962,963,1011,1012,1616,2019],[77,125,142,143,1011,1399],[63,77,125,142,143,476,580,591,669,935,937,938,939,952,953,957,960,967,968,993,994,995,1006,1010,1012,1375,1399,1401,1616,2019],[77,125,142,143,669,952],[77,125,142,143,952],[77,125,142,143,955,1465,1616,2019],[77,125,142,143,952,1616,2019],[77,125,142,143,955,960],[77,125,142,143,953,955,1399,1401,1465],[77,125,142,143,935,940],[77,125,142,143,940],[77,125,142,143,940,953],[77,125,142,143,940,941,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991],[77,125,142,143,940,955],[77,125,142,143,992],[77,125,142,143,935,940,1011,1401],[77,125,142,143,954,955,958,994,1011,1369,1370,1400,1441,1560,1562,1568,1569,1571,1575,1582,1598,1615,2216,2217,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2229,2230,2231,2232,2233,2234,2235,2236,2237,2238,2239,2240,2241,2242,2243,2244,2245,2246,2247,2248,2249,2250,2251,2252,2253,2254,2255,2256,2257],[77,125,142,143,955,1375,1399,1401],[77,125,142,143,935,955,1401,1616,2019],[77,125,142,143,953,955,1011,1399],[63,77,125,142,143,669,938,945,947,948,950,952,953,954,957,1011,1375,1399,1401,1616,2019],[77,125,142,143,955,1375],[77,125,142,143,953,955,1399,1401,1616,2019],[77,125,142,143,953,1399,1401,1616,2019],[77,125,142,143,953,955,1390,1399,1401,1616,2019],[77,125,142,143,953,955,992,1399,1401,1616,2019],[77,125,142,143,994,1616,2019],[77,125,142,143,994,1401,1616,2019],[77,125,142,143,935,953,961,1011,1012,1401],[77,125,142,143,580,669,951,952,955,1011,1375,1401,1616,2019],[77,125,142,143,953,960,1401],[77,125,142,143,953,1390,1394,1401],[77,125,142,143,951,953,1394,1401],[77,125,142,143,951,952,953,1394,1401],[77,125,142,143,953,1394,1401,1419,1616,2019],[77,125,142,143,951,953,1401,1616,2019],[77,125,142,143,951,952,953,1401,1616,2019],[77,125,142,143,953,1401,1616,2019],[77,125,142,143,669,953,1401,1616,2019],[77,125,142,143,951,953,1401],[77,125,142,143,669,953,1394,1401,1616,2019],[77,125,142,143,580,588,591,669,946,947,951,952,953,954,955,960,961,962,963,964,968,992,994,995,996,1000,1002,1004,1005,1006,1010,1011,1012,1014,1369,1372,1375,1376,1377,1379,1380,1381,1382,1383,1384,1386,1387,1388,1389,1391,1393,1394,1395,1396,1397,1399,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1611,1612,1613,1615],[77,125,142,143,1401,1426,1616,2019],[77,125,142,143,1426],[77,125,142,143,947,955,1401,1616,2019],[77,125,142,143,1011,1399,1616,2019],[77,125,142,143,953,996,1000,1011],[77,125,142,143,996,1000,1001,1004,1005,1401,1616,2019],[77,125,142,143,1000,1006,1616,2019],[77,125,142,143,996,1616,2019],[77,125,142,143,955,996,998,999,1006,1616,2019],[77,125,142,143,996,998,1616,2019],[77,125,142,143,1000,1002,1004,1616,2019],[77,125,142,143,996,1000,1401],[77,125,142,143,1001,1006,1401,1616,2019],[77,125,142,143,1003,1005,1401],[77,125,142,143,996,997,1000,1401,1616,2019],[77,125,142,143,996],[77,125,142,143,997,1000,1005,1401,1616,2019],[77,125,142,143,935,1011],[77,125,142,143,168,669,935,936,1399,1400,1616,2019],[77,125,142,143,939,1401],[77,125,133,142,143,1550],[77,125,142,143,939,1011,1378,1399,1401],[77,125,142,143,1011,1401,1616,2019],[77,125,142,143,964,1011,1401],[77,125,142,143,669,1401],[77,125,142,143,935,938,953,955,1011,1399],[77,125,142,143,1561],[77,125,142,143,935,955,961],[77,125,142,143,940,1011],[77,125,142,143,955,1401],[77,125,142,143,955,1011],[77,125,142,143,946,955,1401],[77,125,142,143,284,935,1011],[77,125,142,143,951,953,1399],[77,125,142,143,953,1399,1401],[77,125,142,143,591,1009,1011],[77,125,142,143,962,1399,1401],[77,125,142,143,1011,1616,2019],[77,125,142,143,955,1375,1401],[77,125,142,143,947,1375],[77,125,142,143,955,1011,1399],[77,125,142,143,953,955,1011],[77,125,142,143,953,1401],[77,125,142,143,1607,1610],[77,125,142,143,1605,1606],[77,125,142,143,1608,1609],[77,125,142,143,175,1921,1922,1923],[77,125,142,143,157,175,1921],[77,125,142,143,1919],[77,125,142,143,157,175],[77,125,142,143,157,175,591,1007,1008],[77,125,139,142,143,175],[77,125,136,142,143,173,589,590],[63,77,125,142,143,1303,1304,1305,1309,1311,1313,1314,1315,1317,1318],[77,125,142,143,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1303],[63,77,125,142,143,1304],[63,77,125,142,143,1304,1318,1319,1320,1321,1330,1331],[63,77,125,142,143,1304,1308],[63,77,125,142,143,1304,1310],[63,77,125,142,143,1304,1312],[63,77,125,142,143,1321,1322,1329],[63,77,125,142,143,1306,1307],[63,77,125,142,143,1328],[63,77,125,142,143,1316],[77,125,136,142,143,175],[77,125,142,143,594],[77,125,142,143,601],[77,125,142,143,633,634],[77,125,142,143,592],[77,125,142,143,659],[77,125,142,143,598,638],[77,125,142,143,593],[77,125,142,143,593,632],[77,125,142,143,593,598],[77,125,142,143,593,622,632],[77,125,142,143,593,597,622,632],[77,125,142,143,593,622],[77,125,142,143,598,614],[77,125,142,143,650],[77,125,142,143,597],[77,125,142,143,592,593,594,595,596,597,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,616,617,618,619,620,621,622,623,624,627,628,629,630,631,632,633,634,635,636,637,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668],[77,125,142,143,600,625],[77,125,142,143,613],[77,125,142,143,600,627],[77,125,142,143,600,630],[77,125,142,143,605],[77,125,142,143,598],[77,125,142,143,611],[77,125,142,143,593,613,614,615,617],[77,125,142,143,619],[77,125,142,143,661],[77,125,142,143,626],[77,125,142,143,647],[77,125,142,143,639,640],[77,125,142,143,639,642],[77,125,142,143,597,598],[77,125,142,143,592,597,616],[77,125,142,143,627],[77,125,142,143,611,622],[77,90,94,125,142,143,168],[77,90,125,142,143,157,168],[77,85,125,142,143],[77,87,90,125,142,143,165,168],[77,125,142,143,145,165],[77,85,125,142,143,175],[77,87,90,125,142,143,145,168],[77,82,83,86,89,125,136,142,143,157,168],[77,90,97,125,142,143],[77,82,88,125,142,143],[77,90,111,112,125,142,143],[77,86,90,125,142,143,160,168,175],[77,111,125,142,143,175],[77,84,85,125,142,143,175],[77,90,125,142,143],[77,84,85,86,87,88,89,90,91,92,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,112,113,114,115,116,117,125,142,143],[77,90,105,125,142,143],[77,90,97,98,125,142,143],[77,88,90,98,99,125,142,143],[77,89,125,142,143],[77,82,85,90,125,142,143],[77,90,94,98,99,125,142,143],[77,94,125,142,143],[77,88,90,93,125,142,143,168],[77,82,87,90,97,125,142,143],[77,125,142,143,157],[77,85,90,111,125,142,143,173,175],[77,125,142,143,1549],[77,125,142,143,168,1513,1516,1519,1520],[77,125,142,143,157,168,1516],[77,125,142,143,168,1516,1520],[77,125,142,143,1510],[77,125,142,143,1514],[77,125,142,143,168,1512,1513,1516],[77,125,142,143,175,1510],[77,125,142,143,145,168,1512,1516],[77,125,136,142,143,157,168,1507,1508,1509,1511,1515],[77,125,142,143,1516,1525,1533],[77,125,142,143,1508,1514],[77,125,142,143,1516,1543,1544],[77,125,142,143,160,168,175,1508,1511,1516],[77,125,142,143,1516],[77,125,142,143,168,1512,1516],[77,125,142,143,1507],[77,125,142,143,1510,1511,1512,1514,1515,1516,1517,1518,1520,1521,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1544,1545,1546,1547,1548],[77,125,133,142,143,1516,1536,1539],[77,125,142,143,1516,1525,1526,1527],[77,125,142,143,1514,1516,1526,1528],[77,125,142,143,1515],[77,125,142,143,1508,1510,1516],[77,125,142,143,1516,1520,1526,1528],[77,125,142,143,1520],[77,125,142,143,168,1514,1516,1519],[77,125,142,143,1508,1512,1516,1525],[77,125,142,143,1516,1536],[77,125,142,143,1528],[77,125,142,143,1508,1512,1516,1520],[77,125,142,143,160,173,175,1510,1516,1543],[77,125,142,143,1946],[77,125,142,143,1937,1938],[77,125,142,143,1934,1935,1937,1939,1940,1945],[77,125,142,143,1935,1937],[77,125,142,143,1945],[77,125,142,143,1937],[77,125,142,143,1934,1935,1937,1940,1941,1942,1943,1944],[77,125,142,143,1934,1935,1936],[77,125,142,143,1616,2019,2186],[77,125,142,143,2187],[77,125,142,143,2189],[77,125,142,143,147,168,1616,2019,2020,2179,2188],[77,125,142,143,2180,2181,2182,2183,2184,2185]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"4efe446cdc2bfc7afda082a2cea87d20e252d1ccb7002884886d94e88b868f5d","affectsGlobalScope":true},{"version":"7e29f41b158de217f94cb9676bf9cbd0cd9b5a46e1985141ed36e075c52bf6ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"dc0a7f107690ee5cd8afc8dbf05c4df78085471ce16bdd9881642ec738bc81fe","impliedFormat":1},{"version":"acd8fd5090ac73902278889c38336ff3f48af6ba03aa665eb34a75e7ba1dccc4","impliedFormat":1},{"version":"d6258883868fb2680d2ca96bc8b1352cab69874581493e6d52680c5ffecdb6cc","impliedFormat":1},{"version":"1b61d259de5350f8b1e5db06290d31eaebebc6baafd5f79d314b5af9256d7153","impliedFormat":1},{"version":"f258e3960f324a956fc76a3d3d9e964fff2244ff5859dcc6ce5951e5413ca826","impliedFormat":1},{"version":"643f7232d07bf75e15bd8f658f664d6183a0efaca5eb84b48201c7671a266979","impliedFormat":1},{"version":"0f6666b58e9276ac3a38fdc80993d19208442d6027ab885580d93aec76b4ef00","impliedFormat":1},{"version":"05fd364b8ef02fb1e174fbac8b825bdb1e5a36a016997c8e421f5fab0a6da0a0","impliedFormat":1},{"version":"631eff75b0e35d1b1b31081d55209abc43e16b49426546ab5a9b40bdd40b1f60","impliedFormat":1},{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"808069bba06b6768b62fd22429b53362e7af342da4a236ed2d2e1c89fcca3b4a","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"f9501cc13ce624c72b61f12b3963e84fad210fbdf0ffbc4590e08460a3f04eba","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0fa06ada475b910e2106c98c68b10483dc8811d0c14a8a8dd36efb2672485b29","impliedFormat":1},{"version":"33e5e9aba62c3193d10d1d33ae1fa75c46a1171cf76fef750777377d53b0303f","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"6a0cd27e5dc2cfbe039e731cf879d12b0e2dded06d1b1dedad07f7712de0d7f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"13f5c844119c43e51ce777c509267f14d6aaf31eafb2c2b002ca35584cd13b29","impliedFormat":1},{"version":"e60477649d6ad21542bd2dc7e3d9ff6853d0797ba9f689ba2f6653818999c264","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4c829ab315f57c5442c6667b53769975acbf92003a66aef19bce151987675bd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"b2ade7657e2db96d18315694789eff2ddd3d8aea7215b181f8a0b303277cc579","impliedFormat":1},{"version":"9855e02d837744303391e5623a531734443a5f8e6e8755e018c41d63ad797db2","impliedFormat":1},{"version":"4d631b81fa2f07a0e63a9a143d6a82c25c5f051298651a9b69176ba28930756d","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"41670ee38943d9cbb4924e436f56fc19ee94232bc96108562de1a734af20dc2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"c906fb15bd2aabc9ed1e3f44eb6a8661199d6c320b3aa196b826121552cb3695","impliedFormat":1},{"version":"22295e8103f1d6d8ea4b5d6211e43421fe4564e34d0dd8e09e520e452d89e659","impliedFormat":1},{"version":"58647d85d0f722a1ce9de50955df60a7489f0593bf1a7015521efe901c06d770","impliedFormat":1},{"version":"6b4e081d55ac24fc8a4631d5dd77fe249fa25900abd7d046abb87d90e3b45645","impliedFormat":1},{"version":"a10f0e1854f3316d7ee437b79649e5a6ae3ae14ffe6322b02d4987071a95362e","impliedFormat":1},{"version":"e208f73ef6a980104304b0d2ca5f6bf1b85de6009d2c7e404028b875020fa8f2","impliedFormat":1},{"version":"d163b6bc2372b4f07260747cbc6c0a6405ab3fbcea3852305e98ac43ca59f5bc","impliedFormat":1},{"version":"e6fa9ad47c5f71ff733744a029d1dc472c618de53804eae08ffc243b936f87ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6f137d651076822d4fe884287e68fd61785a0d3d1fdb250a5059b691fa897db","impliedFormat":1},{"version":"24826ed94a78d5c64bd857570fdbd96229ad41b5cb654c08d75a9845e3ab7dde","impliedFormat":1},{"version":"8b479a130ccb62e98f11f136d3ac80f2984fdc07616516d29881f3061f2dd472","impliedFormat":1},{"version":"928af3d90454bf656a52a48679f199f64c1435247d6189d1caf4c68f2eaf921f","affectsGlobalScope":true,"impliedFormat":1},{"version":"bceb58df66ab8fb00170df20cd813978c5ab84be1d285710c4eb005d8e9d8efb","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","impliedFormat":1},{"version":"814118df420c4e38fe5ae1b9a3bafb6e9c2aa40838e528cde908381867be6466","impliedFormat":1},{"version":"a3fc63c0d7b031693f665f5494412ba4b551fe644ededccc0ab5922401079c95","impliedFormat":1},{"version":"80523c00b8544a2000ae0143e4a90a00b47f99823eb7926c1e03c494216fc363","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"746911b62b329587939560deb5c036aca48aece03147b021fa680223255d5183","affectsGlobalScope":true,"impliedFormat":1},{"version":"18fd40412d102c5564136f29735e5d1c3b455b8a37f920da79561f1fde068208","impliedFormat":1},{"version":"c8d3e5a18ba35629954e48c4cc8f11dc88224650067a172685c736b27a34a4dc","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"2b55d426ff2b9087485e52ac4bc7cfafe1dc420fc76dad926cd46526567c501a","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"5b7aa3c4c1a5d81b411e8cb302b45507fea9358d3569196b27eb1a27ae3a90ef","affectsGlobalScope":true,"impliedFormat":1},{"version":"5987a903da92c7462e0b35704ce7da94d7fdc4b89a984871c0e2b87a8aae9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea08a0345023ade2b47fbff5a76d0d0ed8bff10bc9d22b83f40858a8e941501c","impliedFormat":1},{"version":"47613031a5a31510831304405af561b0ffaedb734437c595256bb61a90f9311b","impliedFormat":1},{"version":"ae062ce7d9510060c5d7e7952ae379224fb3f8f2dd74e88959878af2057c143b","impliedFormat":1},{"version":"8a1a0d0a4a06a8d278947fcb66bf684f117bf147f89b06e50662d79a53be3e9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"358765d5ea8afd285d4fd1532e78b88273f18cb3f87403a9b16fef61ac9fdcfe","impliedFormat":1},{"version":"9f55299850d4f0921e79b6bf344b47c420ce0f507b9dcf593e532b09ea7eeea1","impliedFormat":1},{"version":"2beff543f6e9a9701df88daeee3cdd70a34b4a1c11cb4c734472195a5cb2af54","impliedFormat":1},{"version":"2e07abf27aa06353d46f4448c0bbac73431f6065eef7113128a5cd804d0c384d","impliedFormat":1},{"version":"be1cc4d94ea60cbe567bc29ed479d42587bf1e6cba490f123d329976b0fe4ee5","impliedFormat":1},{"version":"42bc0e1a903408137c3df2b06dfd7e402cdab5bbfa5fcfb871b22ebfdb30bd0b","impliedFormat":1},{"version":"9894dafe342b976d251aac58e616ac6df8db91fb9d98934ff9dd103e9e82578f","impliedFormat":1},{"version":"413df52d4ea14472c2fa5bee62f7a40abd1eb49be0b9722ee01ee4e52e63beb2","impliedFormat":1},{"version":"db6d2d9daad8a6d83f281af12ce4355a20b9a3e71b82b9f57cddcca0a8964a96","impliedFormat":1},{"version":"829b9e6028b29e6a8b1c01ddb713efe59da04d857089298fa79acbdb3cfcfdef","impliedFormat":1},{"version":"24f8562308dd8ba6013120557fa7b44950b619610b2c6cb8784c79f11e3c4f90","impliedFormat":1},{"version":"5f90b8c733a1bda63e42160b15a2301051e83a6f9d5332a59d16eb12f463270d","impliedFormat":1},{"version":"a86f82d646a739041d6702101afa82dcb935c416dd93cbca7fd754fd0282ce1f","impliedFormat":1},{"version":"ad0d1d75d129b1c80f911be438d6b61bfa8703930a8ff2be2f0e1f8a91841c64","impliedFormat":1},{"version":"ce75b1aebb33d510ff28af960a9221410a3eaf7f18fc5f21f9404075fba77256","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"496bbf339f3838c41f164238543e9fe5f1f10659cb30b68903851618464b98ba","impliedFormat":1},{"version":"5178eb4415a172c287c711dc60a619e110c3fd0b7de01ed0627e51a5336aa09c","impliedFormat":1},{"version":"ca6e5264278b53345bc1ce95f42fb0a8b733a09e3d6479c6ccfca55cdc45038c","impliedFormat":1},{"version":"9e2739b32f741859263fdba0244c194ca8e96da49b430377930b8f721d77c000","impliedFormat":1},{"version":"fb1d8e814a3eeb5101ca13515e0548e112bd1ff3fb358ece535b93e94adf5a3a","impliedFormat":1},{"version":"ffa495b17a5ef1d0399586b590bd281056cee6ce3583e34f39926f8dcc6ecdb5","impliedFormat":1},{"version":"98b18458acb46072947aabeeeab1e410f047e0cacc972943059ca5500b0a5e95","impliedFormat":1},{"version":"361e2b13c6765d7f85bb7600b48fde782b90c7c41105b7dab1f6e7871071ba20","impliedFormat":1},{"version":"c86fe861cf1b4c46a0fb7d74dffe596cf679a2e5e8b1456881313170f092e3fa","impliedFormat":1},{"version":"b6db56e4903e9c32e533b78ac85522de734b3d3a8541bf24d256058d464bf04b","impliedFormat":1},{"version":"24daa0366f837d22c94a5c0bad5bf1fd0f6b29e1fae92dc47c3072c3fdb2fbd5","impliedFormat":1},{"version":"570bb5a00836ffad3e4127f6adf581bfc4535737d8ff763a4d6f4cc877e60d98","impliedFormat":1},{"version":"889c00f3d32091841268f0b994beba4dceaa5df7573be12c2c829d7c5fbc232c","impliedFormat":1},{"version":"65f43099ded6073336e697512d9b80f2d4fec3182b7b2316abf712e84104db00","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"acf5a2ac47b59ca07afa9abbd2b31d001bf7448b041927befae2ea5b1951d9f9","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"d71291eff1e19d8762a908ba947e891af44749f3a2cbc5bd2ec4b72f72ea795f","impliedFormat":1},{"version":"c0480e03db4b816dff2682b347c95f2177699525c54e7e6f6aa8ded890b76be7","impliedFormat":1},{"version":"27ab780875bcbb65e09da7496f2ca36288b0c541abaa75c311450a077d54ec15","impliedFormat":1},{"version":"b620391fe8060cf9bedc176a4d01366e6574d7a71e0ac0ab344a4e76576fcbb8","impliedFormat":1},{"version":"380647d8f3b7f852cca6d154a376dbf8ac620a2f12b936594504a8a852e71d2f","impliedFormat":1},{"version":"208c9af9429dd3c76f5927b971263174aaa4bc7621ddec63f163640cbd3c473c","impliedFormat":1},{"version":"6459054aabb306821a043e02b89d54da508e3a6966601a41e71c166e4ea1474f","impliedFormat":1},{"version":"a23185bc5ef590c287c28a91baf280367b50ae4ea40327366ad01f6f4a8edbc5","impliedFormat":1},{"version":"bb37588926aba35c9283fe8d46ebf4e79ffe976343105f5c6d45f282793352b2","impliedFormat":1},{"version":"002eae065e6960458bda3cf695e578b0d1e2785523476f8a9170b103c709cd4f","impliedFormat":1},{"version":"c83bb0c9c5645a46c68356c2f73fdc9de339ce77f7f45a954f560c7e0b8d5ebb","impliedFormat":1},{"version":"05c97cddbaf99978f83d96de2d8af86aded9332592f08ce4a284d72d0952c391","impliedFormat":1},{"version":"72179f9dd22a86deaad4cc3490eb0fe69ee084d503b686985965654013f1391b","impliedFormat":1},{"version":"2e6114a7dd6feeef85b2c80120fdbfb59a5529c0dcc5bfa8447b6996c97a69f5","impliedFormat":1},{"version":"7b6ff760c8a240b40dab6e4419b989f06a5b782f4710d2967e67c695ef3e93c4","impliedFormat":1},{"version":"c8f004e6036aa1c764ad4ec543cf89a5c1893a9535c80ef3f2b653e370de45e6","impliedFormat":1},{"version":"dd80b1e600d00f5c6a6ba23f455b84a7db121219e68f89f10552c54ba46e4dc9","impliedFormat":1},{"version":"b064c36f35de7387d71c599bfcf28875849a1dbc733e82bd26cae3d1cd060521","impliedFormat":1},{"version":"6a148329edecbda07c21098639ef4254ef7869fb25a69f58e5d6a8b7b69d4236","impliedFormat":1},{"version":"8de9fe97fa9e00ec00666fa77ab6e91b35d25af8ca75dabcb01e14ad3299b150","impliedFormat":1},{"version":"f63ab283a1c8f5c79fabe7ca4ef85f9633339c4f0e822fce6a767f9d59282af2","impliedFormat":1},{"version":"dba114fb6a32b355a9cfc26ca2276834d72fe0e94cd2c3494005547025015369","impliedFormat":1},{"version":"a54c996c8870ef1728a2c1fa9b8eaec0bf4a8001cd2583c02dd5869289465b10","impliedFormat":1},{"version":"3e7efde639c6a6c3edb9847b3f61e308bf7a69685b92f665048c45132f51c218","impliedFormat":1},{"version":"df45ca1176e6ac211eae7ddf51336dc075c5314bc5c253651bae639defd5eec5","impliedFormat":1},{"version":"3754982006a3b32c502cff0867ca83584f7a43b1035989ca73603f400de13c96","impliedFormat":1},{"version":"a30ae9bb8a8fa7b90f24b8a0496702063ae4fe75deb27da731ed4a03b2eb6631","impliedFormat":1},{"version":"f974e4a06953682a2c15d5bd5114c0284d5abf8bc0fe4da25cb9159427b70072","impliedFormat":1},{"version":"50256e9c31318487f3752b7ac12ff365c8949953e04568009c8705db802776fb","impliedFormat":1},{"version":"7d73b24e7bf31dfb8a931ca6c4245f6bb0814dfae17e4b60c9e194a631fe5f7b","impliedFormat":1},{"version":"413586add0cfe7369b64979d4ec2ed56c3f771c0667fbde1bf1f10063ede0b08","impliedFormat":1},{"version":"06472528e998d152375ad3bd8ebcb69ff4694fd8d2effaf60a9d9f25a37a097a","impliedFormat":1},{"version":"50b5bc34ce6b12eccb76214b51aadfa56572aa6cc79c2b9455cdbb3d6c76af1d","impliedFormat":1},{"version":"b7e16ef7f646a50991119b205794ebfd3a4d8f8e0f314981ebbe991639023d0e","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"a401617604fa1f6ce437b81689563dfdc377069e4c58465dbd8d16069aede0a5","impliedFormat":1},{"version":"e9dd71cf12123419c60dab867d44fbee5c358169f99529121eaef277f5c83531","impliedFormat":1},{"version":"5b6a189ba3a0befa1f5d9cb028eb9eec2af2089c32f04ff50e2411f63d70f25d","impliedFormat":1},{"version":"d6e73f8010935b7b4c7487b6fb13ea197cc610f0965b759bec03a561ccf8423a","impliedFormat":1},{"version":"174f3864e398f3f33f9a446a4f403d55a892aa55328cf6686135dfaf9e171657","impliedFormat":1},{"version":"824c76aec8d8c7e65769688cbee102238c0ef421ed6686f41b2a7d8e7e78a931","impliedFormat":1},{"version":"75b868be3463d5a8cfc0d9396f0a3d973b8c297401d00bfb008a42ab16643f13","impliedFormat":1},{"version":"15a234e5031b19c48a69ccc1607522d6e4b50f57d308ecb7fe863d44cd9f9eb3","impliedFormat":1},{"version":"d682336018141807fb602709e2d95a192828fcb8d5ba06dda3833a8ea98f69e3","impliedFormat":1},{"version":"6124e973eab8c52cabf3c07575204efc1784aca6b0a30c79eb85fe240a857efa","impliedFormat":1},{"version":"0d891735a21edc75df51f3eb995e18149e119d1ce22fd40db2b260c5960b914e","impliedFormat":1},{"version":"3b414b99a73171e1c4b7b7714e26b87d6c5cb03d200352da5342ab4088a54c85","impliedFormat":1},{"version":"4fbd3116e00ed3a6410499924b6403cc9367fdca303e34838129b328058ede40","impliedFormat":1},{"version":"b01bd582a6e41457bc56e6f0f9de4cb17f33f5f3843a7cf8210ac9c18472fb0f","impliedFormat":1},{"version":"0a437ae178f999b46b6153d79095b60c42c996bc0458c04955f1c996dc68b971","impliedFormat":1},{"version":"74b2a5e5197bd0f2e0077a1ea7c07455bbea67b87b0869d9786d55104006784f","impliedFormat":1},{"version":"4a7baeb6325920044f66c0f8e5e6f1f52e06e6d87588d837bdf44feb6f35c664","impliedFormat":1},{"version":"6dcf60530c25194a9ee0962230e874ff29d34c59605d8e069a49928759a17e0a","impliedFormat":1},{"version":"7274fbffbd7c9589d8d0ffba68157237afd5cecff1e99881ea3399127e60572f","impliedFormat":1},{"version":"1a42d2ec31a1fe62fdc51591768695ed4a2dc64c01be113e7ff22890bebb5e3f","impliedFormat":1},{"version":"1a82deef4c1d39f6882f28d275cad4c01f907b9b39be9cbc472fcf2cf051e05b","impliedFormat":1},{"version":"c5426dbfc1cf90532f66965a7aa8c1136a78d4d0f96d8180ecbfc11d7722f1a5","impliedFormat":1},{"version":"65a15fc47900787c0bd18b603afb98d33ede930bed1798fc984d5ebb78b26cf9","impliedFormat":1},{"version":"9d202701f6e0744adb6314d03d2eb8fc994798fc83d91b691b75b07626a69801","impliedFormat":1},{"version":"de9d2df7663e64e3a91bf495f315a7577e23ba088f2949d5ce9ec96f44fba37d","impliedFormat":1},{"version":"c7af78a2ea7cb1cd009cfb5bdb48cd0b03dad3b54f6da7aab615c2e9e9d570c5","impliedFormat":1},{"version":"1ee45496b5f8bdee6f7abc233355898e5bf9bd51255db65f5ff7ede617ca0027","impliedFormat":1},{"version":"0c7c947ff881c4274c0800deaa0086971e0bfe51f89a33bd3048eaa3792d4876","affectsGlobalScope":true,"impliedFormat":1},{"version":"db01d18853469bcb5601b9fc9826931cc84cc1a1944b33cad76fd6f1e3d8c544","affectsGlobalScope":true,"impliedFormat":1},{"version":"a8f8e6ab2fa07b45251f403548b78eaf2022f3c2254df3dc186cb2671fe4996d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa6c12a7c0f6b84d512f200690bfc74819e99efae69e4c95c4cd30f6884c526e","impliedFormat":1},{"version":"f1c32f9ce9c497da4dc215c3bc84b722ea02497d35f9134db3bb40a8d918b92b","impliedFormat":1},{"version":"b73c319af2cc3ef8f6421308a250f328836531ea3761823b4cabbd133047aefa","affectsGlobalScope":true,"impliedFormat":1},{"version":"e433b0337b8106909e7953015e8fa3f2d30797cea27141d1c5b135365bb975a6","impliedFormat":1},{"version":"15b36126e0089bfef173ab61329e8286ce74af5e809d8a72edcafd0cc049057f","impliedFormat":1},{"version":"ddff7fc6edbdc5163a09e22bf8df7bef75f75369ebd7ecea95ba55c4386e2441","impliedFormat":1},{"version":"106c6025f1d99fd468fd8bf6e5bda724e11e5905a4076c5d29790b6c3745e50c","impliedFormat":1},{"version":"a57b1802794433adec9ff3fed12aa79d671faed86c49b09e02e1ac41b4f1d33a","impliedFormat":1},{"version":"ad10d4f0517599cdeca7755b930f148804e3e0e5b5a3847adce0f1f71bbccd74","impliedFormat":1},{"version":"1042064ece5bb47d6aba91648fbe0635c17c600ebdf567588b4ca715602f0a9d","impliedFormat":1},{"version":"c49469a5349b3cc1965710b5b0f98ed6c028686aa8450bcb3796728873eb923e","impliedFormat":1},{"version":"4a889f2c763edb4d55cb624257272ac10d04a1cad2ed2948b10ed4a7fda2a428","impliedFormat":1},{"version":"7bb79aa2fead87d9d56294ef71e056487e848d7b550c9a367523ee5416c44cfa","impliedFormat":1},{"version":"72d63643a657c02d3e51cd99a08b47c9b020a565c55f246907050d3c8a5e77fb","impliedFormat":1},{"version":"1d415445ea58f8033ba199703e55ff7483c52ac6742075b803bd3e7bbe9f5d61","impliedFormat":1},{"version":"d6406c629bb3efc31aedb2de809bef471e475c86c7e67f3ef9b676b5d7e0d6b2","impliedFormat":1},{"version":"27ff4196654e6373c9af16b6165120e2dd2169f9ad6abb5c935af5abd8c7938c","impliedFormat":1},{"version":"71d8ba39a9e024d9e4bb922464d18542ed8d2c25ee78efa7890c27213cc6e5d3","impliedFormat":1},{"version":"8c030e515014c10a2b98f9f48408e3ba18023dfd3f56e3312c6c2f3ae1f55a16","impliedFormat":1},{"version":"dafc31e9e8751f437122eb8582b93d477e002839864410ff782504a12f2a550c","impliedFormat":1},{"version":"754498c5208ce3c5134f6eabd49b25cf5e1a042373515718953581636491f3c3","impliedFormat":1},{"version":"9c82171d836c47486074e4ca8e059735bf97b205e70b196535b5efd40cbe1bc5","impliedFormat":1},{"version":"f56bdc6884648806d34bc66d31cdb787c4718d04105ce2cd88535db214631f82","impliedFormat":1},{"version":"633d58a237f4bb25ec7d565e4ffa32cecdcee8660ac12189c4351c52557cee9e","impliedFormat":1},{"version":"2e4f37ffe8862b14d8e24ae8763daaa8340c0df0b859d9a9733def0eee7562d9","impliedFormat":1},{"version":"13283350547389802aa35d9f2188effaeac805499169a06ef5cd77ce2a0bd63f","impliedFormat":1},{"version":"ce791f6ea807560f08065d1af6014581eeb54a05abd73294777a281b6dfd73c2","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"49f95e989b4632c6c2a578cc0078ee19a5831832d79cc59abecf5160ea71abad","impliedFormat":1},{"version":"9666533332f26e8995e4d6fe472bdeec9f15d405693723e6497bf94120c566c8","impliedFormat":1},{"version":"ce0df82a9ae6f914ba08409d4d883983cc08e6d59eb2df02d8e4d68309e7848b","impliedFormat":1},{"version":"796273b2edc72e78a04e86d7c58ae94d370ab93a0ddf40b1aa85a37a1c29ecd7","impliedFormat":1},{"version":"5df15a69187d737d6d8d066e189ae4f97e41f4d53712a46b2710ff9f8563ec9f","impliedFormat":1},{"version":"e17cd049a1448de4944800399daa4a64c5db8657cc9be7ef46be66e2a2cd0e7c","impliedFormat":1},{"version":"43fa6ea8714e18adc312b30450b13562949ba2f205a1972a459180fa54471018","impliedFormat":1},{"version":"6e89c2c177347d90916bad67714d0fb473f7e37fb3ce912f4ed521fe2892cd0d","impliedFormat":1},{"version":"43ba4f2fa8c698f5c304d21a3ef596741e8e85a810b7c1f9b692653791d8d97a","impliedFormat":1},{"version":"4d4927cbee21750904af7acf940c5e3c491b4d5ebc676530211e389dd375607a","impliedFormat":1},{"version":"72105519d0390262cf0abe84cf41c926ade0ff475d35eb21307b2f94de985778","impliedFormat":1},{"version":"8a97e578a9bc40eb4f1b0ca78f476f2e9154ecbbfd5567ee72943bab37fc156a","impliedFormat":1},{"version":"c857e0aae3f5f444abd791ec81206020fbcc1223e187316677e026d1c1d6fe08","impliedFormat":1},{"version":"ccf6dd45b708fb74ba9ed0f2478d4eb9195c9dfef0ff83a6092fa3cf2ff53b4f","impliedFormat":1},{"version":"2d7db1d73456e8c5075387d4240c29a2a900847f9c1bff106a2e490da8fbd457","impliedFormat":1},{"version":"2b15c805f48e4e970f8ec0b1915f22d13ca6212375e8987663e2ef5f0205e832","impliedFormat":1},{"version":"f22d05663d873ee7a600faf78abb67f3f719d32266803440cf11d5db7ac0cab2","impliedFormat":1},{"version":"d93c544ad20197b3976b0716c6d5cd5994e71165985d31dcab6e1f77feb4b8f2","impliedFormat":1},{"version":"35069c2c417bd7443ae7c7cafd1de02f665bf015479fec998985ffbbf500628c","impliedFormat":1},{"version":"a8b1c79a833ee148251e88a2553d02ce1641d71d2921cce28e79678f3d8b96aa","impliedFormat":1},{"version":"126d4f950d2bba0bd45b3a86c76554d4126c16339e257e6d2fabf8b6bf1ce00c","impliedFormat":1},{"version":"7e0b7f91c5ab6e33f511efc640d36e6f933510b11be24f98836a20a2dc914c2d","impliedFormat":1},{"version":"045b752f44bf9bbdcaffd882424ab0e15cb8d11fa94e1448942e338c8ef19fba","impliedFormat":1},{"version":"2894c56cad581928bb37607810af011764a2f511f575d28c9f4af0f2ef02d1ab","impliedFormat":1},{"version":"0a72186f94215d020cb386f7dca81d7495ab6c17066eb07d0f44a5bf33c1b21a","impliedFormat":1},{"version":"2d3cc2211f352f46ea6b7cf2c751c141ffcdf514d6e7ae7ee20b7b6742da313f","impliedFormat":1},{"version":"c75445151ff8b77d9923191efed7203985b1a9e09eccf4b054e7be864e27923d","impliedFormat":1},{"version":"0aedb02516baf3e66b2c1db9fef50666d6ed257edac0f866ea32f1aa05aa474f","impliedFormat":1},{"version":"fa8a8fbf91ee2a4779496225f0312aac6635b0f21aa09cdafa4283fe32d519c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"0e8aef93d79b000deb6ec336b5645c87de167168e184e84521886f9ecc69a4b5","impliedFormat":1},{"version":"56ccb49443bfb72e5952f7012f0de1a8679f9f75fc93a5c1ac0bafb28725fc5f","impliedFormat":1},{"version":"20fa37b636fdcc1746ea0738f733d0aed17890d1cd7cb1b2f37010222c23f13e","impliedFormat":1},{"version":"d90b9f1520366d713a73bd30c5a9eb0040d0fb6076aff370796bc776fd705943","impliedFormat":1},{"version":"bc03c3c352f689e38c0ddd50c39b1e65d59273991bfc8858a9e3c0ebb79c023b","impliedFormat":1},{"version":"19df3488557c2fc9b4d8f0bac0fd20fb59aa19dec67c81f93813951a81a867f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"b25350193e103ae90423c5418ddb0ad1168dc9c393c9295ef34980b990030617","affectsGlobalScope":true,"impliedFormat":1},{"version":"bef86adb77316505c6b471da1d9b8c9e428867c2566270e8894d4d773a1c4dc2","impliedFormat":1},{"version":"de7052bfee2981443498239a90c04ea5cc07065d5b9bb61b12cb6c84313ad4ef","impliedFormat":1},{"version":"a3e7d932dc9c09daa99141a8e4800fc6c58c625af0d4bbb017773dc36da75426","impliedFormat":1},{"version":"43e96a3d5d1411ab40ba2f61d6a3192e58177bcf3b133a80ad2a16591611726d","impliedFormat":1},{"version":"4a2edd238d9104eac35b60d727f1123de5062f452b70ed8e0366cb36387dfdfd","impliedFormat":1},{"version":"ca921bf56756cb6fe957f6af693a35251b134fb932dc13f3dfff0bb7106f80b4","impliedFormat":1},{"version":"fee92c97f1aa59eb7098a0cc34ff4df7e6b11bae71526aca84359a2575f313d8","impliedFormat":1},{"version":"0bd0297484aacea217d0b76e55452862da3c5d9e33b24430e0719d1161657225","impliedFormat":1},{"version":"2ab6d334bcbf2aff3acfc4fd8c73ecd82b981d3c3aa47b3f3b89281772286904","impliedFormat":1},{"version":"d07cbc787a997d83f7bde3877fec5fb5b12ce8c1b7047eb792996ed9726b4dde","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"4805f6161c2c8cefb8d3b8bd96a080c0fe8dbc9315f6ad2e53238f9a79e528a6","impliedFormat":1},{"version":"b83cb14474fa60c5f3ec660146b97d122f0735627f80d82dd03e8caa39b4388c","impliedFormat":1},{"version":"f374cb24e93e7798c4d9e83ff872fa52d2cdb36306392b840a6ddf46cb925cb6","impliedFormat":1},{"version":"49179c6a23701c642bd99abe30d996919748014848b738d8e85181fc159685ff","impliedFormat":1},{"version":"b73cbf0a72c8800cf8f96a9acfe94f3ad32ca71342a8908b8ae484d61113f647","impliedFormat":1},{"version":"bae6dd176832f6423966647382c0d7ba9e63f8c167522f09a982f086cd4e8b23","impliedFormat":1},{"version":"20865ac316b8893c1a0cc383ccfc1801443fbcc2a7255be166cf90d03fac88c9","impliedFormat":1},{"version":"c9958eb32126a3843deedda8c22fb97024aa5d6dd588b90af2d7f2bfac540f23","impliedFormat":1},{"version":"461d0ad8ae5f2ff981778af912ba71b37a8426a33301daa00f21c6ccb27f8156","impliedFormat":1},{"version":"e927c2c13c4eaf0a7f17e6022eee8519eb29ef42c4c13a31e81a611ab8c95577","impliedFormat":1},{"version":"fcafff163ca5e66d3b87126e756e1b6dfa8c526aa9cd2a2b0a9da837d81bbd72","impliedFormat":1},{"version":"70246ad95ad8a22bdfe806cb5d383a26c0c6e58e7207ab9c431f1cb175aca657","impliedFormat":1},{"version":"f00f3aa5d64ff46e600648b55a79dcd1333458f7a10da2ed594d9f0a44b76d0b","impliedFormat":1},{"version":"772d8d5eb158b6c92412c03228bd9902ccb1457d7a705b8129814a5d1a6308fc","impliedFormat":1},{"version":"45490817629431853543adcb91c0673c25af52a456479588b6486daba34f68bb","impliedFormat":1},{"version":"802e797bcab5663b2c9f63f51bdf67eff7c41bc64c0fd65e6da3e7941359e2f7","impliedFormat":1},{"version":"8b4327413e5af38cd8cb97c59f48c3c866015d5d642f28518e3a891c469f240e","impliedFormat":1},{"version":"8514c62ce38e58457d967e9e73f128eedc1378115f712b9eef7127f7c88f82ae","impliedFormat":1},{"version":"f1289e05358c546a5b664fbb35a27738954ec2cc6eb4137350353099d154fc62","impliedFormat":1},{"version":"4b20fcf10a5413680e39f5666464859fc56b1003e7dfe2405ced82371ebd49b6","impliedFormat":1},{"version":"1d17ba45cfbe77a9c7e0df92f7d95f3eefd49ee23d1104d0548b215be56945ad","impliedFormat":1},{"version":"f7d628893c9fa52ba3ab01bcb5e79191636c4331ee5667ecc6373cbccff8ae12","impliedFormat":1},{"version":"1d879125d1ec570bf04bc1f362fdbe0cb538315c7ac4bcfcdf0c1e9670846aa6","impliedFormat":1},{"version":"a1ee88010a64e8647d07dba58ec43e6e05851b9ec7a62e4ca2b9c33be5abb2c8","impliedFormat":1},{"version":"46273e8c29816125d0d0b56ce9a849cc77f60f9a5ba627447501d214466f0ff3","impliedFormat":1},{"version":"d663134457d8d669ae0df34eabd57028bddc04fc444c4bc04bc5215afc91e1f4","impliedFormat":1},{"version":"e91f7b1344577a02f051b9b471f33044fef8334a76dc9e1de003d17595a5219b","impliedFormat":1},{"version":"3af3584f79c57853028ef9421ec172539e1fe01853296dc05a9d615ade4ffaf6","impliedFormat":1},{"version":"f82579d87701d639ff4e3930a9b24f4ee13ca74221a9a3a792feb47f01881a9c","impliedFormat":1},{"version":"d7e5d5245a8ba34a274717d085174b2c9827722778129b0081fefd341cca8f55","impliedFormat":1},{"version":"d9d32f94056181c31f553b32ce41d0ef75004912e27450738d57efcd2409c324","impliedFormat":1},{"version":"752513f35f6cff294ffe02d6027c41373adf7bfa35e593dbfd53d95c203635ee","impliedFormat":1},{"version":"6c800b281b9e89e69165fd11536195488de3ff53004e55905e6c0059a2d8591e","impliedFormat":1},{"version":"7d4254b4c6c67a29d5e7f65e67d72540480ac2cfb041ca484847f5ae70480b62","impliedFormat":1},{"version":"1a7e2ea171726446850ec72f4d1525d547ff7e86724cc9e7eec509725752a758","impliedFormat":1},{"version":"8c901126d73f09ecdea4785e9a187d1ac4e793e07da308009db04a7283ec2f37","impliedFormat":1},{"version":"db97922b767bd2675fdfa71e08b49c38b7d2c847a1cc4a7274cb77be23b026f1","impliedFormat":1},{"version":"aab290b8e4b7c399f2c09b957666fc95335eb4522b2dd9ead1bf0cb64da6d6ee","impliedFormat":1},{"version":"94fe3281392e1015b22f39535878610b4fa6f1388dc8d78746be3bc4e4bb8950","impliedFormat":1},{"version":"2652448ac55a2010a1f71dd141f828b682298d39728f9871e1cdf8696ef443fd","impliedFormat":1},{"version":"06c25ddfc2242bd06c19f66c9eae4c46d937349a267810f89783680a1d7b5259","impliedFormat":1},{"version":"120599fd965257b1f4d0ff794bc696162832d9d8467224f4665f713a3119078b","impliedFormat":1},{"version":"5433f33b0a20300cca35d2f229a7fc20b0e8477c44be2affeb21cb464af60c76","impliedFormat":1},{"version":"db036c56f79186da50af66511d37d9fe77fa6793381927292d17f81f787bb195","impliedFormat":1},{"version":"bd4131091b773973ca5d2326c60b789ab1f5e02d8843b3587effe6e1ea7c9d86","impliedFormat":1},{"version":"c7f6485931085bf010fbaf46880a9b9ec1a285ad9dc8c695a9e936f5a48f34b4","impliedFormat":1},{"version":"14f6b927888a1112d662877a5966b05ac1bf7ed25d6c84386db4c23c95a5363b","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"0427df5c06fafc5fe126d14b9becd24160a288deff40e838bfbd92a35f8d0d00","impliedFormat":1},{"version":"90c54a02432d04e4246c87736e53a6a83084357acfeeba7a489c5422b22f5c7a","impliedFormat":1},{"version":"49c346823ba6d4b12278c12c977fb3a31c06b9ca719015978cb145eb86da1c61","impliedFormat":1},{"version":"bfac6e50eaa7e73bb66b7e052c38fdc8ccfc8dbde2777648642af33cf349f7f1","impliedFormat":1},{"version":"92f7c1a4da7fbfd67a2228d1687d5c2e1faa0ba865a94d3550a3941d7527a45d","impliedFormat":1},{"version":"f53b120213a9289d9a26f5af90c4c686dd71d91487a0aa5451a38366c70dc64b","impliedFormat":1},{"version":"83fe880c090afe485a5c02262c0b7cdd76a299a50c48d9bde02be8e908fb4ae6","impliedFormat":1},{"version":"0a372c2d12a259da78e21b25974d2878502f14d89c6d16b97bd9c5017ab1bc12","impliedFormat":1},{"version":"57d67b72e06059adc5e9454de26bbfe567d412b962a501d263c75c2db430f40e","impliedFormat":1},{"version":"6511e4503cf74c469c60aafd6589e4d14d5eb0a25f9bf043dcbecdf65f261972","impliedFormat":1},{"version":"ec1ca97598eda26b7a5e6c8053623acbd88e43be7c4d29c77ccd57abc4c43999","impliedFormat":1},{"version":"6e2261cd9836b2c25eecb13940d92c024ebed7f8efe23c4b084145cd3a13b8a6","impliedFormat":1},{"version":"a67b87d0281c97dfc1197ef28dfe397fc2c865ccd41f7e32b53f647184cc7307","impliedFormat":1},{"version":"771ffb773f1ddd562492a6b9aaca648192ac3f056f0e1d997678ff97dbb6bf9b","impliedFormat":1},{"version":"232f70c0cf2b432f3a6e56a8dc3417103eb162292a9fd376d51a3a9ea5fbbf6f","impliedFormat":1},{"version":"a47e6d954d22dd9ebb802e7e431b560ed7c581e79fb885e44dc92ed4f60d4c07","impliedFormat":1},{"version":"f019e57d2491c159d47a107fd90219a1734bdd2e25cd8d1db3c8fae5c6b414c4","impliedFormat":1},{"version":"8a0e762ceb20c7e72504feef83d709468a70af4abccb304f32d6b9bac1129b2c","impliedFormat":1},{"version":"d1c9bf292a54312888a77bb19dba5e2503ad803f5393beafd45d78d2f4fe9b48","impliedFormat":1},{"version":"9252d498a77517aab5d8d4b5eb9d71e4b225bbc7123df9713e08181de63180f6","impliedFormat":1},{"version":"cb8d8ef7b9ce8ed3e6f1c814fcbf3f90dab0cb8863079236784fc350746e27c4","impliedFormat":1},{"version":"35e6379c3f7cb27b111ad4c1aa69538fd8e788ab737b8ff7596a1b40e96f4f90","impliedFormat":1},{"version":"1fffe726740f9787f15b532e1dc870af3cd964dbe29e191e76121aa3dd8693f2","impliedFormat":1},{"version":"3be035da7bee86b4c3abf392e0edaa44fc6e45092995eefe36b39118c8a84068","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f828825d077c2fa0ea606649faeb122749273a353daab23924fe674e98ba44c","impliedFormat":1},{"version":"2896c2e673a5d3bd9b4246811f79486a073cbb03950c3d252fba10003c57411a","impliedFormat":1},{"version":"616775f16134fa9d01fc677ad3f76e68c051a056c22ab552c64cc281a9686790","impliedFormat":1},{"version":"65c24a8baa2cca1de069a0ba9fba82a173690f52d7e2d0f1f7542d59d5eb4db0","impliedFormat":1},{"version":"f9fe6af238339a0e5f7563acee3178f51db37f32a2e7c09f85273098cee7ec49","impliedFormat":1},{"version":"407a06ba04eede4074eec470ecba2784cbb3bf4e7de56833b097dd90a2aa0651","impliedFormat":1},{"version":"77e71242e71ebf8528c5802993697878f0533db8f2299b4d36aa015bae08a79c","impliedFormat":1},{"version":"98a787be42bd92f8c2a37d7df5f13e5992da0d967fab794adbb7ee18370f9849","impliedFormat":1},{"version":"5c96bad5f78466785cdad664c056e9e2802d5482ca5f862ed19ba34ffbb7b3a4","impliedFormat":1},{"version":"81d8603ac527e75cfec72bb9391228b58f161c2b33514a9d814c7f3ebd3ef466","impliedFormat":1},{"version":"5f3dc10ae646f375776b4e028d2bed039a93eebbba105694d8b910feebbe8b9c","impliedFormat":1},{"version":"bb0cd7862b72f5eba39909c9889d566e198fcaddf7207c16737d0c2246112678","impliedFormat":1},{"version":"4545c1a1ceca170d5d83452dd7c4994644c35cf676a671412601689d9a62da35","impliedFormat":1},{"version":"320f4091e33548b554d2214ce5fc31c96631b513dffa806e2e3a60766c8c49d9","impliedFormat":1},{"version":"a2d648d333cf67b9aeac5d81a1a379d563a8ffa91ddd61c6179f68de724260ff","impliedFormat":1},{"version":"d90d5f524de38889d1e1dbc2aeef00060d779f8688c02766ddb9ca195e4a713d","impliedFormat":1},{"version":"a3f41ed1b4f2fc3049394b945a68ae4fdefd49fa1739c32f149d32c0545d67f5","impliedFormat":1},{"version":"bad68fd0401eb90fe7da408565c8aee9c7a7021c2577aec92fa1382e8876071a","impliedFormat":1},{"version":"47699512e6d8bebf7be488182427189f999affe3addc1c87c882d36b7f2d0b0e","impliedFormat":1},{"version":"fec01479923e169fb52bd4f668dbeef1d7a7ea6e6d491e15617b46f2cacfa37d","impliedFormat":1},{"version":"8a8fb3097ba52f0ae6530ec6ab34e43e316506eb1d9aa29420a4b1e92a81442d","impliedFormat":1},{"version":"44e09c831fefb6fe59b8e65ad8f68a7ecc0e708d152cfcbe7ba6d6080c31c61e","impliedFormat":1},{"version":"1c0a98de1323051010ce5b958ad47bc1c007f7921973123c999300e2b7b0ecc0","impliedFormat":1},{"version":"4655709c9cb3fd6db2b866cab7c418c40ed9533ce8ea4b66b5f17ec2feea46a9","impliedFormat":1},{"version":"87affad8e2243635d3a191fa72ef896842748d812e973b7510a55c6200b3c2a4","impliedFormat":1},{"version":"ad036a85efcd9e5b4f7dd5c1a7362c8478f9a3b6c3554654ca24a29aa850a9c5","impliedFormat":1},{"version":"fedebeae32c5cdd1a85b4e0504a01996e4a8adf3dfa72876920d3dd6e42978e7","impliedFormat":1},{"version":"3eecb25bb467a948c04874d70452b14ae7edb707660aac17dc053e42f2088b00","impliedFormat":1},{"version":"cdf21eee8007e339b1b9945abf4a7b44930b1d695cc528459e68a3adc39a622e","impliedFormat":1},{"version":"330896c1a2b9693edd617be24fbf9e5895d6e18c7955d6c08f028f272b37314d","impliedFormat":1},{"version":"1d9c0a9a6df4e8f29dc84c25c5aa0bb1da5456ebede7a03e03df08bb8b27bae6","impliedFormat":1},{"version":"84380af21da938a567c65ef95aefb5354f676368ee1a1cbb4cae81604a4c7d17","impliedFormat":1},{"version":"1af3e1f2a5d1332e136f8b0b95c0e6c0a02aaabd5092b36b64f3042a03debf28","impliedFormat":1},{"version":"30d8da250766efa99490fc02801047c2c6d72dd0da1bba6581c7e80d1d8842a4","impliedFormat":1},{"version":"03566202f5553bd2d9de22dfab0c61aa163cabb64f0223c08431fb3fc8f70280","impliedFormat":1},{"version":"5f0292a40df210ab94b9fb44c8b775c51e96777e14e073900e392b295ca1061b","impliedFormat":1},{"version":"bc9ee0192f056b3d5527bcd78dc3f9e527a9ba2bdc0a2c296fbc9027147df4b2","impliedFormat":1},{"version":"8627ad129bcf56e82adff0ab5951627c993937aa99f5949c33240d690088b803","impliedFormat":1},{"version":"1de80059b8078ea5749941c9f863aa970b4735bdbb003be4925c853a8b6b4450","impliedFormat":1},{"version":"1d079c37fa53e3c21ed3fa214a27507bda9991f2a41458705b19ed8c2b61173d","impliedFormat":1},{"version":"5bf5c7a44e779790d1eb54c234b668b15e34affa95e78eada73e5757f61ed76a","impliedFormat":1},{"version":"5835a6e0d7cd2738e56b671af0e561e7c1b4fb77751383672f4b009f4e161d70","impliedFormat":1},{"version":"5c634644d45a1b6bc7b05e71e05e52ec04f3d73d9ac85d5927f647a5f965181a","impliedFormat":1},{"version":"4b7f74b772140395e7af67c4841be1ab867c11b3b82a51b1aeb692822b76c872","impliedFormat":1},{"version":"27be6622e2922a1b412eb057faa854831b95db9db5035c3f6d4b677b902ab3b7","impliedFormat":1},{"version":"a68d4b3182e8d776cdede7ac9630c209a7bfbb59191f99a52479151816ef9f9e","impliedFormat":99},{"version":"39644b343e4e3d748344af8182111e3bbc594930fff0170256567e13bbdbebb0","impliedFormat":99},{"version":"ed7fd5160b47b0de3b1571c5c5578e8e7e3314e33ae0b8ea85a895774ee64749","impliedFormat":99},{"version":"63a7595a5015e65262557f883463f934904959da563b4f788306f699411e9bac","impliedFormat":1},{"version":"ecbaf0da125974be39c0aac869e403f72f033a4e7fd0d8cd821a8349b4159628","impliedFormat":1},{"version":"4ba137d6553965703b6b55fd2000b4e07ba365f8caeb0359162ad7247f9707a6","impliedFormat":1},{"version":"ceec3c81b2d81f5e3b855d9367c1d4c664ab5046dff8fd56552df015b7ccbe8f","affectsGlobalScope":true,"impliedFormat":1},{"version":"8fac4a15690b27612d8474fb2fc7cc00388df52d169791b78d1a3645d60b4c8b","affectsGlobalScope":true,"impliedFormat":1},{"version":"064ac1c2ac4b2867c2ceaa74bbdce0cb6a4c16e7c31a6497097159c18f74aa7c","impliedFormat":1},{"version":"3dc14e1ab45e497e5d5e4295271d54ff689aeae00b4277979fdd10fa563540ae","impliedFormat":1},{"version":"1d63055b690a582006435ddd3aa9c03aac16a696fac77ce2ed808f3e5a06efab","impliedFormat":1},{"version":"b789bf89eb19c777ed1e956dbad0925ca795701552d22e68fd130a032008b9f9","impliedFormat":1},"85ae5aee75f011967cf2d25cbc342f62d69314e9d925f7f4aa3456fc2cffcca6",{"version":"78647004e18e4c16b8a2e8345fca9267573d1c5a29e11ddfee71858fd077ef6e","impliedFormat":1},{"version":"0804044cd0488cb7212ddbc1d0f8e1a5bd32970335dbfc613052304a1b0318f9","impliedFormat":1},{"version":"b725acb041d2a18fde8f46c48a1408418489c4aa222f559b1ef47bf267cb4be0","impliedFormat":1},{"version":"85084ae98c1d319e38ef99b1216d3372a9afd7a368022c01c3351b339d52cb58","impliedFormat":1},{"version":"898ec2410fae172e0a9416448b0838bed286322a5c0c8959e8e39400cd4c5697","impliedFormat":1},{"version":"692345a43bac37c507fa7065c554258435ab821bbe4fb44b513a70063e932b45","impliedFormat":1},{"version":"7283aaea55499e5a9760db0ef199e3c12a35ff5391733fe1495b2d3add0c58ab","impliedFormat":1},{"version":"c1c8ccb14c76efb31ff84038ec7833a5715ba23e681b158b3c83cc012b8c3cfa","impliedFormat":1},{"version":"abb0a41fa0432cdec9595dbe84bd3efc5b59f04aa85dcd5cec7b453908fc85c3","impliedFormat":1},{"version":"522edc786ed48304671b935cf7d3ed63acc6636ab9888c6e130b97a6aea92b46","impliedFormat":1},{"version":"a9607a8f1ce7582dbeebc0816897925bf9b307cc05235e582b272a48364f8aa0","impliedFormat":1},{"version":"de21641eb8edcbc08dd0db4ee70eea907cd07fe72267340b5571c92647f10a77","impliedFormat":1},{"version":"48af3609dc95fa62c22c8ec047530daf1776504524d284d2c3f9c163725bdbd4","impliedFormat":1},{"version":"6758f7b72fa4d38f4f4b865516d3d031795c947a45cc24f2cfba43c91446d678","impliedFormat":1},{"version":"1fefab6dc739d33b7cb3fd08cd9d35dd279fcd7746965e200500b1a44d32db9e","impliedFormat":1},{"version":"997b94a03707d35abe497e427bc26b403a538838c3a82f2be71d85109b88e32b","impliedFormat":1},{"version":"bdf7abbd7df4f29b3e0728684c790e80590b69d92ed8d3bf8e66d4bd713941fe","impliedFormat":1},{"version":"8decb32fc5d44b403b46c3bb4741188df4fbc3c66d6c65669000c5c9cd506523","impliedFormat":1},{"version":"4beaf337ee755b8c6115ff8a17e22ceab986b588722a52c776b8834af64e0f38","impliedFormat":1},{"version":"c26dd198f2793bbdcc55103823a2767d6223a7fdb92486c18b86deaf63208354","impliedFormat":1},{"version":"93551b302a808f226f0846ad8012354f2d53d6dedc33b540d6ca69836781a574","impliedFormat":1},{"version":"040cb635dff5fc934413fa211d3a982122bf0e46acae9f7a369c61811f277047","impliedFormat":1},{"version":"778b684ebc6b006fcffeab77d25b34bf6e400100e0ec0c76056e165c6399ab05","impliedFormat":1},{"version":"285d50a08440314f7aea3246a5e15acbc38e2867ff07d21ef457ae8cb4e8a31f","impliedFormat":1},{"version":"672701f824ff6b9dab50514c6c4db711fb7ec5e7c2f0f6bc27b2dbe2e445a52a","impliedFormat":1},{"version":"be8f369f8d7e887eab87a3e4e41f1afcf61bf06056801383152aa83bda1f6a72","impliedFormat":1},{"version":"352bfb5f3a9d8a9c2464ad2dc0b2dc56a8212650a541fb550739c286dd341de1","impliedFormat":1},{"version":"ebef680e3597d7b3c8a9fc9e5581eb078461fa1406ded8d9859353dd6286eff2","impliedFormat":1},{"version":"dc923d45c03261241cefb03ea952883784e28fbc1d089af1a5a553a7b0f5e2b5","impliedFormat":1},{"version":"764150c107451d2fd5b6de305cff0a9dcecf799e08e6f14b5a6748724db46d8a","impliedFormat":1},{"version":"b04cf223c338c09285010f5308b980ee6d8bfa203824ed2537516f15e92e8c43","impliedFormat":1},{"version":"4b387f208d1e468193a45a51005b1ed5b666010fc22a15dc1baf4234078b636e","impliedFormat":1},{"version":"70441eda704feffd132be0c1541f2c7f6bbaafce25cb9b54b181e26af3068e79","impliedFormat":1},{"version":"d1addb12403afea87a1603121396261a45190886c486c88e1a5d456be17c2049","impliedFormat":1},{"version":"1e50bda67542964dbb2cfb21809f9976be97b2f79a4b6f8124463d42c95a704c","impliedFormat":1},{"version":"ea4b5d319625203a5a96897b057fddf6017d0f9a902c16060466fe69cc007243","impliedFormat":1},{"version":"a186fde3b1dde9642dda936e23a21cb73428340eb817e62f4442bb0fca6fa351","impliedFormat":1},{"version":"985ac70f005fb77a2bc0ed4f2c80d55919ded6a9b03d00d94aab75205b0778ec","impliedFormat":1},{"version":"ab01d8fcb89fae8eda22075153053fefac69f7d9571a389632099e7a53f1922d","impliedFormat":1},{"version":"bac0ec1f4c61abc7c54ccebb0f739acb0cdbc22b1b19c91854dc142019492961","impliedFormat":1},{"version":"566b0806f9016fa067b7fecf3951fcc295c30127e5141223393bde16ad04aa4a","impliedFormat":1},{"version":"8e801abfeda45b1b93e599750a0a8d25074d30d4cc01e3563e56c0ff70edeb68","impliedFormat":1},{"version":"902997f91b09620835afd88e292eb217fbd55d01706b82b9a014ff408f357559","impliedFormat":1},{"version":"a3727a926e697919fb59407938bd8573964b3bf543413b685996a47df5645863","impliedFormat":1},{"version":"83f36c0792d352f641a213ee547d21ea02084a148355aa26b6ef82c4f61c1280","impliedFormat":1},{"version":"dce7d69c17a438554c11bbf930dec2bee5b62184c0494d74da336daee088ab69","impliedFormat":1},{"version":"1e8f2cda9735002728017933c54ccea7ebee94b9c68a59a4aac1c9a58aa7da7d","impliedFormat":1},{"version":"e327a2b222cf9e5c93d7c1ed6468ece2e7b9d738e5da04897f1a99f49d42cca1","impliedFormat":1},{"version":"65165246b59654ec4e1501dd87927a0ef95d57359709e00e95d1154ad8443bc7","impliedFormat":1},{"version":"f1bacba19e2fa2eb26c499e36b5ab93d6764f2dba44be3816f12d2bc9ac9a35b","impliedFormat":1},{"version":"bce38da5fd851520d0cb4d1e6c3c04968cec2faa674ed321c118e97e59872edc","impliedFormat":1},{"version":"3398f46037f21fb6c33560ceca257259bd6d2ea03737179b61ea9e17cbe07455","impliedFormat":1},{"version":"6e14fc6c27cb2cb203fe1727bb3a923588f0be8c2604673ad9f879182548daca","impliedFormat":1},{"version":"12b9bcf8395d33837f301a8e6d545a24dfff80db9e32f8e8e6cf4b11671bb442","impliedFormat":1},{"version":"04295cc38689e32a4ea194c954ea6604e6afb6f1c102104f74737cb8cf744422","impliedFormat":1},{"version":"7418f434c136734b23f634e711cf44613ca4c74e63a5ae7429acaee46c7024c8","impliedFormat":1},{"version":"27d40290b7caba1c04468f2b53cf7112f247f8acdd7c20589cd7decf9f762ad0","impliedFormat":1},{"version":"2608b8b83639baf3f07316df29202eead703102f1a7e32f74a1b18cf1eee54b5","impliedFormat":1},{"version":"c93657567a39bd589effe89e863aaadbc339675fca6805ae4d97eafbcce0a05d","impliedFormat":1},{"version":"909d5db5b3b19f03dfb4a8f1d00cf41d2f679857c28775faf1f10794cbbe9db9","impliedFormat":1},{"version":"e4504bffce13574bab83ab900b843590d85a0fd38faab7eff83d84ec55de4aff","impliedFormat":1},{"version":"8ab707f3c833fc1e8a51106b8746c8bc0ce125083ea6200ad881625ae35ce11e","impliedFormat":1},{"version":"730ddc2386276ac66312edbcc60853fedbb1608a99cb0b1ff82ebf26911dba1f","impliedFormat":1},{"version":"c1b3fa201aa037110c43c05ea97800eb66fea3f2ecc5f07c6fd47f2b6b5b21d2","impliedFormat":1},{"version":"636b44188dc6eb326fd566085e6c1c6035b71f839d62c343c299a35888c6f0a9","impliedFormat":1},{"version":"3b2105bf9823b53c269cabb38011c5a71360c8daabc618fec03102c9514d230c","impliedFormat":1},{"version":"f96e63eb56e736304c3aef6c745b9fe93db235ddd1fec10b45319c479de1a432","impliedFormat":1},{"version":"acb4f3cee79f38ceba975e7ee3114eb5cd96ccc02742b0a4c7478b4619f87cd6","impliedFormat":1},{"version":"cfc85d17c1493b6217bad9052a8edc332d1fde81a919228edab33c14aa762939","impliedFormat":1},{"version":"eebda441c4486c26de7a8a7343ebbc361d2b0109abff34c2471e45e34a93020a","impliedFormat":1},{"version":"727b4b8eb62dd98fa4e3a0937172c1a0041eb715b9071c3de96dad597deddcab","impliedFormat":1},{"version":"708e2a347a1b9868ccdb48f3e43647c6eccec47b8591b220afcafc9e7eeb3784","impliedFormat":1},{"version":"6bb598e2d45a170f302f113a5b68e518c8d7661ae3b59baf076be9120afa4813","impliedFormat":1},{"version":"c28e058db8fed2c81d324546f53d2a7aaefff380cbe70f924276dbad89acd7d1","impliedFormat":1},{"version":"89d029475445d677c18cf9a8c75751325616d353925681385da49aeef9260ab7","impliedFormat":1},{"version":"826a98cb79deab45ccc4e5a8b90fa64510b2169781a7cbb83c4a0a8867f4cc58","impliedFormat":1},{"version":"618189f94a473b7fdc5cb5ba8b94d146a0d58834cd77cd24d56995f41643ccd5","impliedFormat":1},{"version":"1645dc6f3dd9a3af97eb5a6a4c794f5b1404cab015832eba67e3882a8198ec27","impliedFormat":1},{"version":"b5267af8d0a1e00092cceed845f69f5c44264cb770befc57d48dcf6a098cb731","impliedFormat":1},{"version":"91b0965538a5eaafa8c09cf9f62b46d6125aa1b3c0e0629dce871f5f41413f90","impliedFormat":1},{"version":"2978e33a00b4b5fb98337c5e473ab7337030b2f69d1480eccef0290814af0d51","impliedFormat":1},{"version":"ba71e9777cb5460e3278f0934fd6354041cb25853feca542312807ce1f18e611","impliedFormat":1},{"version":"608dbaf8c8bb64f4024013e73d7107c16dba4664999a8c6e58f3e71545e48f66","impliedFormat":1},{"version":"61937cefd7f4d6fa76013d33d5a3c5f9b0fc382e90da34790764a0d17d6277fb","impliedFormat":1},{"version":"af7db74826f455bfef6a55a188eb6659fd85fdc16f720a89a515c48724ee4c42","impliedFormat":1},{"version":"d6ce98a960f1b99a72de771fb0ba773cb202c656b8483f22d47d01d68f59ea86","impliedFormat":1},{"version":"2a47dc4a362214f31689870f809c7d62024afb4297a37b22cb86f679c4d04088","impliedFormat":1},{"version":"42d907ac511459d7c4828ee4f3f81cc331a08dc98d7b3cb98e3ff5797c095d2e","impliedFormat":1},{"version":"63d010bff70619e0cdf7900e954a7e188d3175461182f887b869c312a77ecfbd","impliedFormat":1},{"version":"1452816d619e636de512ca98546aafb9a48382d570af1473f0432a9178c4b1ff","impliedFormat":1},{"version":"9e3e3932fe16b9288ec8c948048aef4edf1295b09a5412630d63f4a42265370e","impliedFormat":1},{"version":"8bdba132259883bac06056f7bacd29a4dcf07e3f14ce89edb022fe9b78dcf9b3","impliedFormat":1},{"version":"5a5406107d9949d83e1225273bcee1f559bb5588942907d923165d83251a0e37","impliedFormat":1},{"version":"ca0ca4ca5ad4772161ee2a99741d616fea780d777549ba9f05f4a24493ab44e1","impliedFormat":1},{"version":"e7ee7be996db0d7cce41a85e4cae3a5fc86cf26501ad94e0a20f8b6c1c55b2d4","impliedFormat":1},{"version":"72263ae386d6a49392a03bde2f88660625da1eca5df8d95120d8ccf507483d20","impliedFormat":1},{"version":"b498375d015f01585269588b6221008aae6f0c0dc53ead8796ace64bdfcf62ea","impliedFormat":1},{"version":"c37aa3657fa4d1e7d22565ae609b1370c6b92bafb8c92b914403d45f0e610ddc","impliedFormat":1},{"version":"34534c0ead52cc753bdfdd486430ef67f615ace54a4c0e5a3652b4116af84d6d","impliedFormat":1},{"version":"a848339c272ab23e686b5d0b81297e3a7116ba7d27589c66ca1f4ebcd65e7f19","impliedFormat":1},{"version":"566315d39e476ca9e7fd0b1908074cb2a5ff9246cc3ed7da64cde5ad30f7e0b1","impliedFormat":1},{"version":"5f7ed82e82aa5017fe830ac40105321c32e3bf45d3cfcd557601f2ed58ff6ca4","impliedFormat":1},{"version":"f67a80308cecbd6e402e65931b212958cf89c0ef4e67ec8998dccb93bcc4a0f6","impliedFormat":99},{"version":"4c37a2e0d4689addc6307b9bade6214463e621be2cbaa4186e5e84beae3bf04c","impliedFormat":99},{"version":"270fb79c5b57005a01e4082038f13ec71586de194a7bd157a264ce64562d1656","impliedFormat":99},{"version":"146b782ff46f55732980cffd31256b511e1d3afd63cedd818b2712a8325cf473","impliedFormat":99},{"version":"1a3d8da921df61c32cb9db3691339cad87ff9ec7a23686d11a9217a73e0440e5","impliedFormat":99},{"version":"0645209ea239c80ef0eb8aeddaf243e89a0175c56977bbe39f75bb577fde0441","impliedFormat":99},{"version":"7be32b6413399e55a92293595bbd2f727e8457e83ad9c8fecc68cd6d8a1912cd","impliedFormat":99},{"version":"67e01a2e4afd07e424e13d0b779afe83471e18c7895d22f7fc0034e8260498c3","impliedFormat":99},{"version":"4fe80f12b1d5189384a219095c2eabadbb389c2d3703aae7c5376dbaa56061df","impliedFormat":1},{"version":"9eb1d2dceae65d1c82fc6be7e9b6b19cf3ca93c364678611107362b6ad4d2d41","impliedFormat":1},{"version":"8065e20ac0ad0536d4f1c8d4c2303272a4d25c450bea8d25deb25697d19300e5","impliedFormat":1},{"version":"a3f10b207ac34092603a802aa6d932d22372d571d4649c1d48a074b71da95eac","impliedFormat":1},{"version":"f42365baa04389b983f87a8e14c130ea0ab4a913fada35e8e8e8825a450d4840","impliedFormat":1},{"version":"98ad7367a33f8b7cebad1f8b92e56287b28eda1bfd11f8fef8673980b1090a91","impliedFormat":1},{"version":"be43be05fe9cfd2eb3ce785ef8cbc48737843aac7baf8345c0d8857d7703c996","impliedFormat":1},{"version":"2622d23b82f46eecadc419a286395ddfaaee2f5d533b35127235815ed8807b76","impliedFormat":1},{"version":"406820d111d981e35608f3b6525b8b8a818f2ef83083e8b381f3336d7067a593","impliedFormat":1},{"version":"3bc9a5fc50e1b5678284bf0c8f6319e0cc4910e4ecc1bdb3d490850c9a0859b8","impliedFormat":1},{"version":"e480120d79410e40d95f27fd46da84e12e16b8ff57dda7206a97cb165a2c2213","impliedFormat":1},{"version":"54e4b2a4cfdae8bd4fa66c3baa19af1df604959c81f921252dfc2777e6eebd25","impliedFormat":1},{"version":"f00d9f3635a0f2b6427437b01543ecba1dbf4a5db9adb7d045beb90f8497a87e","impliedFormat":1},{"version":"1611551020c708492c66ffcda9e2b593c3ff91ee8875365c057213a8564ee60b","impliedFormat":1},{"version":"d8158d02e93f868ef402ed06e2a33e419585fe069193905c29e80554e87ac15c","impliedFormat":1},{"version":"94eeb315f94439db3bccd50a5427d3fd2e6535807ca57aca28810e63bc9fd1e4","impliedFormat":1},{"version":"8dcf156fc7436c5a104f0ecd75c2f0069061502ce9900607c1667aaca3a6851e","impliedFormat":1},{"version":"afeaa3163ca96eba18a94a8310ea952164ef767d7ae1e3f21b19bad1e204d087","impliedFormat":1},{"version":"9061663f4f28b12ca29ef8940a44ec53d5f9f386e5edee569fdcdfc7e4ca14eb","impliedFormat":1},{"version":"453ea807ecb71949a1ef40b09b2368f3a6a487705f5a2116af925efa2f7e6d92","impliedFormat":1},{"version":"a07ed03a026bf50005a267f7dd20db3797e1662da44ea635d4770420096f02e3","impliedFormat":1},{"version":"a9d62506c38c63df06c007381a4adf5459355ee31a292b86ebea9c836bb7e841","impliedFormat":1},{"version":"758bc9b7e24313108050b10adc80346199b6addcb3912ff96c5445614db63702","impliedFormat":1},{"version":"88c2b2305782a0c969c8c5a4ba189fd2085d765038b6af2f66a878725eeb855e","impliedFormat":1},{"version":"b00498e0f7de6d0b2eaabf6bc6c27d54e224dbde9b8710c37a0c5f9cabff9013","impliedFormat":1},{"version":"26020fd840eba5d9209e6b07df23d7a9ceb7571fde0c3ae9f443c84619de6a41","impliedFormat":1},{"version":"abf974935a0a0649a429cee0e1133049d18ff0cbaf5cc6764626ffae6af7bd83","impliedFormat":1},{"version":"b9dd0d484906d4444d32a4c70451eaed8d54dfd618cc6f9912f0e20a6b54d7e6","impliedFormat":1},{"version":"353eca851a8aace8404c346d91e350c8ed959759f8fb2a33060ab0d850eed9c4","impliedFormat":1},{"version":"83acf2aae8ebbeaeb12566ec0dd22fe40c9a157ffaf826fe2fb541c518d54f69","impliedFormat":1},{"version":"782ede6abab3148ba43fa5c41c3ac045b81299d306ce06bc27c045c99e375aaa","impliedFormat":1},{"version":"93bd377447dcc0ddb93afe519b7ca4f0400eb8d1fd11fa49848f7522789bbc38","impliedFormat":1},{"version":"87f7c14cf79d5c5409e1260dfc1dda3bc9b0d13b81f2ff39b820dde587c569ee","impliedFormat":1},{"version":"993200dc344eac5de024608fe26fbb1cf4764c254229f481ed8aae084f2fe0e4","impliedFormat":1},{"version":"fc23536cabc16a53018f4dbe8be39db84a73cf1c69b85f238b9ae7e09edaa199","impliedFormat":1},{"version":"89163956c437b564e0073e53141646df002e1d57d2e0bc2dbc3b0a4691776c5f","impliedFormat":1},{"version":"4970c3f3f4b6902144173902c3a969517d708ecbd8c50cc6465d4f2c488fad9e","impliedFormat":1},{"version":"9fd0da3a46448bcc367f52f9f57ba10b8eaf06bc9d4f34698298ec2aab991807","impliedFormat":1},{"version":"bdd08c627434274339f7942e251879b5de6bcf628f3f61ccff14dbeca425ef6a","impliedFormat":1},{"version":"c2649fb23b8767464051cf1f92ed0fed53ea7d5cbd6f807a348402e0be37500c","impliedFormat":1},{"version":"0d3646c780151c55b6bcf7c15f66b6769ac554eac2aedf3294edff04a0045cfe","impliedFormat":1},{"version":"bd8ced5d6e15d32bf007b79bb992a07c713c3e803b45c4ad61d240c610cceec9","impliedFormat":1},{"version":"304ec145044d3fd83921ee3bc57f3f9bba7ac84e866aec6bab17820a581f171e","impliedFormat":1},{"version":"e15cc57b8f017cef8e32c06f04b6c724f8681f9442efc2aa4c757464483f32bc","impliedFormat":1},{"version":"bb539d13f42ca588fc5083b94e537ed67fe47449da84d414b14f3d17c7b5c49e","impliedFormat":1},{"version":"592f9ad00e8c3734ecaad7203b05fd72a028aa9fb11e64db927f00d8715476d6","impliedFormat":1},{"version":"0b4046e2e44fbcc8ad9f4e56859ab9874c669249a51217e21d6c2402ff26e615","impliedFormat":1},{"version":"da332d91f1da53266c5eb9af28f0235ab248ad81f68890df1de8b88074b24a4a","impliedFormat":1},{"version":"0764641d314681c58c751f42b47a572115dc842a72072fa868a259a1cc70f6ff","impliedFormat":1},{"version":"3720043192743812e92ee320868617e7f7e55115ea58ad9e5a512c763716a381","impliedFormat":1},{"version":"fa106dbcb508da05acda26c2deb5ecd307fd323f2d491056b980c25d7d9d3d19","impliedFormat":1},{"version":"686c74caa6c90f835616624627be07c4c977c217e400db2d6cab99b3b19681d0","impliedFormat":1},{"version":"33598ffcfddac61cb35af961c6794b6dc03a89fd2e92089113b34dbb42bd2e27","impliedFormat":1},{"version":"1f1852185404db45d03465a19f7c65bb8f2540bfccb6b967cc32779fdf844f72","impliedFormat":1},{"version":"ae51b52a71c70aa77fac061acf81c4da5770ea10a9a1ff5df252eb79d4d93f26","impliedFormat":1},{"version":"55949c519449e0e0c1eb61d34aa42d5297c2e29883b45fd009629e914e856b30","impliedFormat":1},{"version":"0cbc69cf27e58df8b07063583fb2740d9dc664afc058491af2456a2e270b43bb","impliedFormat":1},{"version":"fdcc8e65fff640091ae5db35056ef87a343c373b5b78369ae509be0cda7df5d2","impliedFormat":1},{"version":"2867ebac7aca35b039ea1cc0e0248bf0ced60706877f172a5cb0eddaa599330b","impliedFormat":1},{"version":"ca3c62ca26416a83e1090706d6df86a089a86b76b5bf561298b1fc5afa65b0a3","impliedFormat":1},{"version":"fde60d698983b343d3ace0742f852622230902ebe5917b1a5aabf7db7f34e3d9","impliedFormat":1},{"version":"9e8147e322367517e09022bf0f00886919b922de4fb4f9b856976a3c0c5597f1","impliedFormat":1},{"version":"430aae2003d27d257031cccff62b7c05468ca2201033f01b712959b47d458049","impliedFormat":1},{"version":"fd8b21234303f04f3357ba644ffd76844f02e70a7f07a290142f11ba71ceab92","impliedFormat":1},{"version":"d10535292b8a83db27138475488a427572a558559bf3be5cad89568c66deb5e2","impliedFormat":1},{"version":"54e98342907a1a0170d8d5dc81e4f05c5f6c526421e930aadd3e30c682498a29","impliedFormat":1},{"version":"1539b21903f2f9049f1f637bfd736d593205100dd3b3d2f7cabf23e6c004edbc","impliedFormat":1},{"version":"b04f4d4736305a8fd1910b01ae9c40d0738d952744d1ec904610d1764efa91af","impliedFormat":1},{"version":"1ad05fc69812ce854a3db895e6f9a72877151ff1e5d8af0ec78d5736afaa1fcf","impliedFormat":1},{"version":"0c11d5e2e654790dfa45f9bc2d3b653fe13c4f7a0c8a1d639a5a924b6e09be8c","impliedFormat":1},{"version":"324a44990de071515cb273632ace64d4f32b72f2d9391e003a63ea69aabd3364","impliedFormat":1},{"version":"31333fe58620f76321cc0153a0aa7ae0408e1b7ca3d1c26d2569ec44b6ee3805","impliedFormat":1},{"version":"6fc89c781ebd4d280c684ce1042c9ebbc4a59cf1ecf5983cfa2eefdd3cd449a0","impliedFormat":1},{"version":"593cc5d6276e32b36088a73756514161b750c2957a84ddf5153935eee3f95e3a","impliedFormat":1},{"version":"276b8af5ab99167e0a217186a39ffa44473beecd9a937057bcad2eb3e21c53b4","impliedFormat":1},{"version":"b760d358d0b42de531509e3bff8a9cffb934e3a2ff0d53fa244b3ebfaaef9f91","impliedFormat":1},{"version":"caac24397bd88bf85b02e42ec561181acab9384d9e2429e1ff3d65abe1567407","impliedFormat":1},{"version":"9efa716140d3e52b0dda513aa7b45252af15617d6b9a6b9a5be786a4f60042a8","impliedFormat":1},{"version":"4558f132688cff22a2acc65f44d277546b55435083141779beb11e993dcdbe13","impliedFormat":1},{"version":"2e4cbb24e294d25e6bd050f1a5d6b86422475c049afc65c3cd777b16c7af88b9","impliedFormat":1},{"version":"3e162b63e35c2007cb0eb3db0ba0fdb45e4185e5417440d79d56fc989aaea13e","impliedFormat":1},{"version":"2cef84bf00cbdb452fdc5d8ecfe7b8c0aa3fa788bdc4ad8961e2e636530dbb60","impliedFormat":99},{"version":"24104650185414f379d5cc35c0e2c19f06684a73de5b472bae79e0d855771ecf","impliedFormat":99},{"version":"799003c0ab928582fca04977f47b8d85b43a8de610f4eef0ad2d069fbb9f9399","impliedFormat":99},{"version":"b13dd41c344a23e085f81b2f5cd96792e6b35ae814f32b25e39d9841844ad240","impliedFormat":99},{"version":"17d8b4e6416e48b6e23b73d05fd2fde407e2af8fddbe9da2a98ede14949c3489","impliedFormat":99},{"version":"6d17b2b41f874ab4369b8e04bdbe660163ea5c8239785c850f767370604959e3","impliedFormat":99},{"version":"04b4c044c8fe6af77b6c196a16c41e0f7d76b285d036d79dcaa6d92e24b4982b","impliedFormat":99},{"version":"30bdeead5293c1ddfaea4097d3e9dd5a6b0bc59a1e07ff4714ea1bbe7c5b2318","impliedFormat":99},{"version":"e7df226dcc1b0ce76b32f160556f3d1550124c894aae2d5f73cefaaf28df7779","impliedFormat":99},{"version":"f2b7eef5c46c61e6e72fba9afd7cc612a08c0c48ed44c3c5518559d8508146a2","impliedFormat":99},{"version":"00f0ba57e829398d10168b7db1e16217f87933e61bd8612b53a894bd7d6371da","impliedFormat":99},{"version":"126b20947d9fa74a88bb4e9281462bda05e529f90e22d08ee9f116a224291e84","impliedFormat":99},{"version":"40d9e43acee39702745eb5c641993978ac40f227475eacc99a83ba893ad995db","impliedFormat":99},{"version":"8a66b69b21c8de9cb88b4b6d12f655d5b7636e692a014c5aa1bd81745c8c51d5","impliedFormat":99},{"version":"ebbb846bdd5a78fdacff59ae04cea7a097912aeb1a2b34f8d88f4ebb84643069","impliedFormat":99},{"version":"7321adb29ffd637acb33ee67ea035f1a97d0aa0b14173291cc2fd58e93296e04","impliedFormat":99},{"version":"320816f1a4211188f07a782bdb6c1a44555b3e716ce13018f528ad7387108d5f","impliedFormat":99},{"version":"b2cc8a474b7657f4a03c67baf6bff75e26635fd4b5850675e8cad524a09ddd0c","impliedFormat":99},{"version":"0d081e9dc251063cc69611041c17d25847e8bdbe18164baaa89b7f1f1633c0ab","impliedFormat":99},{"version":"a64c25d8f4ec16339db49867ea2324e77060782993432a875d6e5e8608b0de1e","impliedFormat":99},{"version":"0739310b6b777f3e2baaf908c0fbc622c71160e6310eb93e0d820d86a52e2e23","impliedFormat":99},{"version":"37b32e4eadd8cd3c263e7ac1681c58b2ac54f3f77bb34c5e4326cc78516d55a9","impliedFormat":99},{"version":"9b7a8974e028c4ed6f7f9abb969e3eb224c069fd7f226e26fcc3a5b0e2a1eba8","impliedFormat":99},{"version":"e8100b569926a5592146ed68a0418109d625a045a94ed878a8c5152b1379237c","impliedFormat":99},{"version":"594201c616c318b7f3149a912abd8d6bdf338d765b7bcbde86bca2e66b144606","impliedFormat":99},{"version":"03e380975e047c5c6ded532cf8589e6cc85abb7be3629e1e4b0c9e703f2fd36f","impliedFormat":99},{"version":"fae14b53b7f52a8eb3274c67c11f261a58530969885599efe3df0277b48909e1","impliedFormat":99},{"version":"c41206757c428186f2e0d1fd373915c823504c249336bdc9a9c9bbdf9da95fef","impliedFormat":99},{"version":"e961f853b7b0111c42b763a6aa46fc70d06a697db3d8ed69b38f7ba0ae42a62b","impliedFormat":99},{"version":"3db90f79e36bcb60b3f8de1bc60321026800979c150e5615047d598c787a64b7","impliedFormat":99},{"version":"639b6fb3afbb8f6067c1564af2bd284c3e883f0f1556d59bd5eb87cdbbdd8486","impliedFormat":99},{"version":"49795f5478cb607fd5965aa337135a8e7fd1c58bc40c0b6db726adf186dd403f","impliedFormat":99},{"version":"7d8890e6e2e4e215959e71d5b5bd49482cf7a23be68d48ea446601a4c99bd511","impliedFormat":99},{"version":"d56f72c4bb518de5702b8b6ae3d3c3045c99e0fd48b3d3b54c653693a8378017","impliedFormat":99},{"version":"4c9ac40163e4265b5750510d6d2933fb7b39023eed69f7b7c68b540ad960826e","impliedFormat":99},{"version":"8dfab17cf48e7be6e023c438a9cdf6d15a9b4d2fa976c26e223ba40c53eb8da8","impliedFormat":99},{"version":"38bdf7ccacfd8e418de3a7b1e3cecc29b5625f90abc2fa4ac7843a290f3bf555","impliedFormat":99},{"version":"9819e46a914735211fbc04b8dc6ba65152c62e3a329ca0601a46ba6e05b2c897","impliedFormat":99},{"version":"50f0dc9a42931fb5d65cdd64ba0f7b378aedd36e0cfca988aa4109aad5e714cb","impliedFormat":99},{"version":"894f23066f9fafccc6e2dd006ed5bd85f3b913de90f17cf1fe15a2eb677fd603","impliedFormat":99},{"version":"abdf39173867e6c2d6045f120a316de451bbb6351a6929546b8470ddf2e4b3b9","impliedFormat":99},{"version":"aa2cb4053f948fbd606228195bbe44d78733861b6f7204558bbee603202ee440","impliedFormat":99},{"version":"6911b41bfe9942ac59c2da1bbcbe5c3c1f4e510bf65cae89ed00f434cc588860","impliedFormat":99},{"version":"7b81bc4d4e2c764e85d869a8dd9fe3652b34b45c065482ac94ffaacc642b2507","impliedFormat":99},{"version":"895df4edb46ccdcbce2ec982f5eed292cf7ea3f7168f1efea738ee346feab273","impliedFormat":99},{"version":"8692bb1a4799eda7b2e3288a6646519d4cebb9a0bddf800085fc1bd8076997a0","impliedFormat":99},{"version":"239c9e98547fe99711b01a0293f8a1a776fc10330094aa261f3970aaba957c82","impliedFormat":99},{"version":"34833ec50360a32efdc12780ae624e9a710dd1fd7013b58c540abf856b54285a","impliedFormat":99},{"version":"647538e4007dcc351a8882067310a0835b5bb8559d1cfa5f378e929bceb2e64d","impliedFormat":99},{"version":"992d6b1abcc9b6092e5a574d51d441238566b6461ade5de53cb9718e4f27da46","impliedFormat":99},{"version":"938702305649bf1050bd79f3803cf5cc2904596fc1edd4e3b91033184eae5c54","impliedFormat":99},{"version":"1e931d3c367d4b96fe043e792196d9c2cf74f672ff9c0b894be54e000280a79d","impliedFormat":99},{"version":"05bec322ea9f6eb9efcd6458bb47087e55bd688afdd232b78379eb5d526816ed","impliedFormat":99},{"version":"4c449a874c2d2e5e5bc508e6aa98f3140218e78c585597a21a508a647acd780a","impliedFormat":99},{"version":"dae15e326140a633d7693e92b1af63274f7295ea94fb7c322d5cbe3f5e48be88","impliedFormat":99},{"version":"c2b0a869713bca307e58d81d1d1f4b99ebfc7ec8b8f17e80dde40739aa8a2bc6","impliedFormat":99},{"version":"6e4b4ff6c7c54fa9c6022e88f2f3e675eac3c6923143eb8b9139150f09074049","impliedFormat":99},{"version":"69559172a9a97bbe34a32bff8c24ef1d8c8063feb5f16a6d3407833b7ee504cf","impliedFormat":99},{"version":"86b94a2a3edcb78d9bfcdb3b382547d47cb017e71abe770c9ee8721e9c84857f","impliedFormat":99},{"version":"e3fafafda82853c45c0afc075fea1eaf0df373a06daf6e6c7f382f9f61b2deb3","impliedFormat":99},{"version":"a4ba4b31de9e9140bc49c0addddbfaf96b943a7956a46d45f894822e12bf5560","impliedFormat":99},{"version":"d8a7926fc75f2ed887f17bae732ee31a4064b8a95a406c87e430c58578ee1f67","impliedFormat":99},{"version":"9886ffbb134b0a0059fd82219eba2a75f8af341d98bc6331b6ef8a921e10ec68","impliedFormat":99},{"version":"c2ead057b70d0ae7b87a771461a6222ebdb187ba6f300c974768b0ae5966d10e","impliedFormat":99},{"version":"46687d985aed8485ab2c71085f82fafb11e69e82e8552cf5d3849c00e64a00a5","impliedFormat":99},{"version":"999ca66d4b5e2790b656e0a7ce42267737577fc7a52b891e97644ec418eff7ec","impliedFormat":99},{"version":"ec948ee7e92d0888f92d4a490fdd0afb27fbf6d7aabebe2347a3e8ac82c36db9","impliedFormat":99},{"version":"03ef2386c683707ce741a1c30cb126e8c51a908aa0acc01c3471fafb9baaacd5","impliedFormat":99},{"version":"66a372e03c41d2d5e920df5282dadcec2acae4c629cb51cab850825d2a144cea","impliedFormat":99},{"version":"ddf9b157bd4c06c2e4646c9f034f36267a0fbd028bd4738214709de7ea7c548b","impliedFormat":99},{"version":"3e795aac9be23d4ad9781c00b153e7603be580602e40e5228e2dafe8a8e3aba1","impliedFormat":99},{"version":"98c461ec5953dfb1b5d5bca5fee0833c8a932383b9e651ca6548e55f1e2c71c3","impliedFormat":99},{"version":"5c42107b46cb1d36b6f1dee268df125e930b81f9b47b5fa0b7a5f2a42d556c10","impliedFormat":99},{"version":"7e32f1251d1e986e9dd98b6ff25f62c06445301b94aeebdf1f4296dbd2b8652f","impliedFormat":99},{"version":"2f7e328dda700dcb2b72db0f58c652ae926913de27391bd11505fc5e9aae6c33","impliedFormat":99},{"version":"3de7190e4d37da0c316db53a8a60096dbcd06d1a50677ccf11d182fa26882080","impliedFormat":99},{"version":"a9d6f87e59b32b02c861aade3f4477d7277c30d43939462b93f48644fa548c58","impliedFormat":99},{"version":"2bce8fd2d16a9432110bbe0ba1e663fd02f7d8b8968cd10178ea7bc306c4a5df","impliedFormat":99},{"version":"798bedbf45a8f1e55594e6879cd46023e8767757ecce1d3feaa78d16ad728703","impliedFormat":99},{"version":"62723d5ac66f7ed6885a3931dd5cfa017797e73000d590492988a944832e8bc2","impliedFormat":99},{"version":"03db8e7df7514bf17fc729c87fff56ca99567b9aa50821f544587a666537c233","impliedFormat":99},{"version":"9b1f311ba4409968b68bf20b5d892dbd3c5b1d65c673d5841c7dbde351bc0d0b","impliedFormat":99},{"version":"2d1e8b5431502739fe335ceec0aaded030b0f918e758a5d76f61effa0965b189","impliedFormat":99},{"version":"e725839b8f884dab141b42e9d7ff5659212f6e1d7b4054caa23bc719a4629071","impliedFormat":99},{"version":"4fa38a0b8ae02507f966675d0a7d230ed67c92ab8b5736d99a16c5fbe2b42036","impliedFormat":99},{"version":"50ec1e8c23bad160ddedf8debeebc722becbddda127b8fdce06c23eacd3fe689","impliedFormat":99},{"version":"9a0aea3a113064fd607f41375ade308c035911d3c8af5ae9db89593b5ca9f1f9","impliedFormat":99},{"version":"8d643903b58a0bf739ce4e6a8b0e5fb3fbdfaacbae50581b90803934b27d5b89","impliedFormat":99},{"version":"19de2915ccebc0a1482c2337b34cb178d446def2493bf775c4018a4ea355adb8","impliedFormat":99},{"version":"9be8fc03c8b5392cd17d40fd61063d73f08d0ee3457ecf075dcb3768ae1427bd","impliedFormat":99},{"version":"a2d89a8dc5a993514ca79585039eea083a56822b1d9b9d9d85b14232e4782cbe","impliedFormat":99},{"version":"f526f20cae73f17e8f38905de4c3765287575c9c4d9ecacee41cfda8c887da5b","impliedFormat":99},{"version":"d9ec0978b7023612b9b83a71fee8972e290d02f8ff894e95cdd732cd0213b070","impliedFormat":99},{"version":"7ab10c473a058ec8ac4790b05cae6f3a86c56be9b0c0a897771d428a2a48a9f9","impliedFormat":99},{"version":"451d7a93f8249d2e1453b495b13805e58f47784ef2131061821b0e456a9fd0e1","impliedFormat":99},{"version":"21c56fe515d227ed4943f275a8b242d884046001722a4ba81f342a08dbe74ae2","impliedFormat":99},{"version":"d8311f0c39381aa1825081c921efde36e618c5cf46258c351633342a11601208","impliedFormat":99},{"version":"6b50c3bcc92dc417047740810596fcb2df2502aa3f280c9e7827e87896da168a","impliedFormat":99},{"version":"18a6b318d1e7b31e5749a52be0cf9bbce1b275f63190ef32e2c79db0579328ca","impliedFormat":99},{"version":"6a2d0af2c27b993aa85414f3759898502aa198301bc58b0d410948fe908b07b0","impliedFormat":99},{"version":"2da11b6f5c374300e5e66a6b01c3c78ec21b5d3fec0748a28cc28e00be73e006","impliedFormat":99},{"version":"0729691b39c24d222f0b854776b00530877217bfc30aac1dc7fa2f4b1795c536","impliedFormat":99},{"version":"ca45bb5c98c474d669f0e47615e4a5ae65d90a2e78531fda7862ee43e687a059","impliedFormat":99},{"version":"c1c058b91d5b9a24c95a51aea814b0ad4185f411c38ac1d5eef0bf3cebec17dc","impliedFormat":99},{"version":"3ab0ed4060b8e5b5e594138aab3e7f0262d68ad671d6678bcda51568d4fc4ccc","impliedFormat":99},{"version":"e2bf1faba4ff10a6020c41df276411f641d3fdce5c6bae1db0ec84a0bf042106","impliedFormat":99},{"version":"80b0a8fe14d47a71e23d7c3d4dcee9584d4282ef1d843b70cab1a42a4ea1588c","impliedFormat":99},{"version":"a0f02a73f6e3de48168d14abe33bf5970fdacdb52d7c574e908e75ad571e78f7","impliedFormat":99},{"version":"c728002a759d8ec6bccb10eed56184e86aeff0a762c1555b62b5d0fa9d1f7d64","impliedFormat":99},{"version":"586f94e07a295f3d02f847f9e0e47dbf14c16e04ccc172b011b3f4774a28aaea","impliedFormat":99},{"version":"cfe1a0f4ed2df36a2c65ea6bc235dbb8cf6e6c25feb6629989f1fa51210b32e7","impliedFormat":99},{"version":"8ba69c9bf6de79c177329451ffde48ddab7ec495410b86972ded226552f664df","impliedFormat":99},{"version":"15111cbe020f8802ad1d150524f974a5251f53d2fe10eb55675f9df1e82dbb62","impliedFormat":99},{"version":"782dc153c56a99c9ed07b2f6f497d8ad2747764966876dbfef32f3e27ce11421","impliedFormat":99},{"version":"cc2db30c3d8bb7feb53a9c9ff9b0b859dd5e04c83d678680930b5594b2bf99cb","impliedFormat":99},{"version":"46909b8c85a6fd52e0807d18045da0991e3bdc7373435794a6ba425bc23cc6be","impliedFormat":99},{"version":"e4e511ff63bb6bd69a2a51e472c6044298bca2c27835a34a20827bc3ef9b7d13","impliedFormat":99},{"version":"2c86f279d7db3c024de0f21cd9c8c2c972972f842357016bfbbd86955723b223","impliedFormat":99},{"version":"112c895cff9554cf754f928477c7d58a21191c8089bffbf6905c87fe2dc6054f","impliedFormat":99},{"version":"8cfc293b33082003cacbf7856b8b5e2d6dd3bde46abbd575b0c935dc83af4844","impliedFormat":99},{"version":"d2c5c53f85ce0474b3a876d76c4fc44ff7bb766b14ed1bf495f9abac181d7f5f","impliedFormat":99},{"version":"3c523f27926905fcbe20b8301a0cc2da317f3f9aea2273f8fc8d9ae88b524819","impliedFormat":99},{"version":"9ca0d706f6b039cc52552323aeccb4db72e600b67ddc7a54cebc095fc6f35539","impliedFormat":99},{"version":"a64909a9f75081342ddd061f8c6b49decf0d28051bc78e698d347bdcb9746577","impliedFormat":99},{"version":"7d8d55ae58766d0d52033eae73084c4db6a93c4630a3e17f419dd8a0b2a4dcd8","impliedFormat":99},{"version":"b8b5c8ba972d9ffff313b3c8a3321e7c14523fc58173862187e8d1cb814168ac","impliedFormat":99},{"version":"9c42c0fa76ee36cf9cc7cc34b1389fbb4bd49033ec124b93674ec635fabf7ffe","impliedFormat":99},{"version":"6184c8da9d8107e3e67c0b99dedb5d2dfe5ccf6dfea55c2a71d4037caf8ca196","impliedFormat":99},{"version":"4030ceea7bf41449c1b86478b786e3b7eadd13dfe5a4f8f5fe2eb359260e08b3","impliedFormat":99},{"version":"7bf516ec5dfc60e97a5bde32a6b73d772bd9de24a2e0ec91d83138d39ac83d04","impliedFormat":99},{"version":"e6a6fb3e6525f84edf42ba92e261240d4efead3093aca3d6eb1799d5942ba393","impliedFormat":99},{"version":"45df74648934f97d26800262e9b2af2f77ef7191d4a5c2eb1df0062f55e77891","impliedFormat":99},{"version":"3fe361e4e567f32a53af1f2c67ad62d958e3d264e974b0a8763d174102fe3b29","impliedFormat":99},{"version":"28b520acee4bc6911bfe458d1ad3ebc455fa23678463f59946ad97a327c9ab2b","impliedFormat":99},{"version":"121b39b1a9ad5d23ed1076b0db2fe326025150ef476dccb8bf87778fcc4f6dd7","impliedFormat":99},{"version":"f791f92a060b52aa043dde44eb60307938f18d4c7ac13df1b52c82a1e658953f","impliedFormat":99},{"version":"df09443e7743fd6adc7eb108e760084bacdf5914403b7aac5fbd4dc4e24e0c2c","impliedFormat":99},{"version":"eeb4ff4aa06956083eaa2aad59070361c20254b865d986bc997ee345dbd44cbb","impliedFormat":99},{"version":"ed84d5043444d51e1e5908f664addc4472c227b9da8401f13daa565f23624b6e","impliedFormat":99},{"version":"146bf888b703d8baa825f3f2fb1b7b31bda5dff803e15973d9636cdda33f4af3","impliedFormat":99},{"version":"b4ec8b7a8d23bdf7e1c31e43e5beac3209deb7571d2ccf2a9572865bf242da7c","impliedFormat":99},{"version":"3fba0d61d172091638e56fba651aa1f8a8500aac02147d29bd5a9cc0bc8f9ec2","impliedFormat":99},{"version":"a5a57deb0351b03041e0a1448d3a0cc5558c48e0ed9b79b69c99163cdca64ad8","impliedFormat":99},{"version":"9bcecf0cbc2bfc17e33199864c19549905309a0f9ecc37871146107aac6e05ae","impliedFormat":99},{"version":"d6a211db4b4a821e93c978add57e484f2a003142a6aef9dbfa1fe990c66f337b","impliedFormat":99},{"version":"bd4d10bd44ce3f630dd9ce44f102422cb2814ead5711955aa537a52c8d2cae14","impliedFormat":99},{"version":"08e4c39ab1e52eea1e528ee597170480405716bae92ebe7a7c529f490afff1e0","impliedFormat":99},{"version":"625bb2bc3867557ea7912bd4581288a9fca4f3423b8dffa1d9ed57fafc8610e3","impliedFormat":99},{"version":"d1992164ecc334257e0bef56b1fd7e3e1cea649c70c64ffc39999bb480c0ecdf","impliedFormat":99},{"version":"a53ff2c4037481eb357e33b85e0d78e8236e285b6428b93aa286ceea1db2f5dc","impliedFormat":99},{"version":"4fe608d524954b6857d78857efce623852fcb0c155f010710656f9db86e973a5","impliedFormat":99},{"version":"b53b62a9838d3f57b70cc456093662302abb9962e5555f5def046172a4fe0d4e","impliedFormat":99},{"version":"9866369eb72b6e77be2a92589c9df9be1232a1a66e96736170819e8a1297b61f","impliedFormat":99},{"version":"43abfbdf4e297868d780b8f4cfdd8b781b90ecd9f588b05e845192146a86df34","impliedFormat":99},{"version":"582419791241fb851403ae4a08d0712a63d4c94787524a7419c2bc8e0eb1b031","impliedFormat":99},{"version":"18437eeb932fe48590b15f404090db0ab3b32d58f831d5ffc157f63b04885ee5","impliedFormat":99},{"version":"0c5eaedf622d7a8150f5c2ec1f79ac3d51eea1966b0b3e61bfdea35e8ca213a7","impliedFormat":99},{"version":"fac39fc7a9367c0246de3543a6ee866a0cf2e4c3a8f64641461c9f2dac0d8aae","impliedFormat":99},{"version":"3b9f559d0200134f3c196168630997caedeadc6733523c8b6076a09615d5dec8","impliedFormat":99},{"version":"932af64286d9723da5ef7b77a0c4229829ce8e085e6bcc5f874cb0b83e8310d4","impliedFormat":99},{"version":"adeb9278f11f5561157feee565171c72fd48f5fe34ed06f71abf24e561fcaa1e","impliedFormat":99},{"version":"2269fef79b4900fc6b08c840260622ca33524771ff24fda5b9101ad98ea551f3","impliedFormat":99},{"version":"73d47498a1b73d5392d40fb42a3e7b009ae900c8423f4088c4faa663cc508886","impliedFormat":99},{"version":"7efc34cdc4da0968c3ba687bc780d5cacde561915577d8d1c1e46c7ac931d023","impliedFormat":99},{"version":"3c20a3bb0c50c819419f44aa55acc58476dad4754a16884cef06012d02b0722f","impliedFormat":99},{"version":"4569abf6bc7d51a455503670f3f1c0e9b4f8632a3b030e0794c61bfbba2d13be","impliedFormat":99},{"version":"98b2297b4dc1404078a54b61758d8643e4c1d7830af724f3ed2445d77a7a2d57","impliedFormat":99},{"version":"952ba89d75f1b589e07070fea2d8174332e3028752e76fd46e1c16cc51e6e2af","impliedFormat":99},{"version":"b6c9a2deefb6a57ff68d2a38d33c34407b9939487fc9ee9f32ba3ecf2987a88a","impliedFormat":99},{"version":"f6b371377bab3018dac2bca63e27502ecbd5d06f708ad7e312658d3b5315d948","impliedFormat":99},{"version":"31947dd8f1c8eeb7841e1f139a493a73bd520f90e59a6415375d0d8e6a031f01","impliedFormat":99},{"version":"95cd83b807e10b1af408e62caf5fea98562221e8ddca9d7ccc053d482283ddda","impliedFormat":99},{"version":"19287d6b76288c2814f1633bdd68d2b76748757ffd355e73e41151644e4773d6","impliedFormat":99},{"version":"fc4e6ec7dade5f9d422b153c5d8f6ad074bd9cc4e280415b7dc58fb5c52b5df1","impliedFormat":99},{"version":"3aea973106e1184db82d8880f0ca134388b6cbc420f7309d1c8947b842886349","impliedFormat":99},{"version":"765e278c464923da94dda7c2b281ece92f58981642421ae097862effe2bd30fa","impliedFormat":99},{"version":"de260bed7f7d25593f59e859bd7c7f8c6e6bb87e8686a0fcafa3774cb5ca02d8","impliedFormat":99},{"version":"b5c341ce978f5777fbe05bc86f65e9906a492fa6b327bda3c6aae900c22e76c6","impliedFormat":99},{"version":"686ddbfaf88f06b02c6324005042f85317187866ca0f8f4c9584dd9479653344","impliedFormat":99},{"version":"7f789c0c1db29dd3aab6e159d1ba82894a046bf8df595ac48385931ae6ad83e0","impliedFormat":99},{"version":"8eb3057d4fe9b59b2492921b73a795a2455ebe94ccb3d01027a7866612ead137","impliedFormat":99},{"version":"1e43c5d7aee1c5ec20611e28b5417f5840c75d048de9d7f1800d6808499236f8","impliedFormat":99},{"version":"d42610a5a2bee4b71769968a24878885c9910cd049569daa2d2ee94208b3a7a5","impliedFormat":99},{"version":"f6ed95506a6ed2d40ed5425747529befaa4c35fcbbc1e0d793813f6d725690fa","impliedFormat":99},{"version":"a6fcc1cd6583939506c906dff1276e7ebdc38fbe12d3e108ba38ad231bd18d97","impliedFormat":99},{"version":"ed13354f0d96fb6d5878655b1fead51722b54875e91d5e53ef16de5b71a0e278","impliedFormat":99},{"version":"1193b4872c1fb65769d8b164ca48124c7ebacc33eae03abf52087c2b29e8c46c","impliedFormat":99},{"version":"af682dfabe85688289b420d939020a10eb61f0120e393d53c127f1968b3e9f66","impliedFormat":99},{"version":"0dca04006bf13f72240c6a6a502df9c0b49c41c3cab2be75e81e9b592dcd4ea8","impliedFormat":99},{"version":"79d6ac4a2a229047259116688f9cd62fda25422dee3ad304f77d7e9af53a41ef","impliedFormat":99},{"version":"64534c17173990dc4c3d9388d16675a059aac407031cfce8f7fdffa4ee2de988","impliedFormat":99},{"version":"ba46d160a192639f3ca9e5b640b870b1263f24ac77b6895ab42960937b42dcbb","impliedFormat":99},{"version":"5e5ddd6fc5b590190dde881974ab969455e7fad61012e32423415ae3d085b037","impliedFormat":99},{"version":"1c16fd00c42b60b96fe0fa62113a953af58ddf0d93b0a49cb4919cf5644616f0","impliedFormat":99},{"version":"eb240c0e6b412c57f7d9a9f1c6cd933642a929837c807b179a818f6e8d3a4e44","impliedFormat":99},{"version":"4a7bde5a1155107fc7d9483b8830099f1a6072b6afda5b78d91eb5d6549b3956","impliedFormat":99},{"version":"3c1baaffa9a24cc7ef9eea6b64742394498e0616b127ca630aca0e11e3298006","impliedFormat":99},{"version":"87ca1c31a326c898fa3feb99ec10750d775e1c84dbb7c4b37252bcf3742c7b21","impliedFormat":99},{"version":"d7bd26af1f5457f037225602035c2d7e876b80d02663ab4ca644099ad3a55888","impliedFormat":99},{"version":"2ad0a6b93e84a56b64f92f36a07de7ebcb910822f9a72ad22df5f5d642aff6f3","impliedFormat":99},{"version":"523d1775135260f53f672264937ee0f3dc42a92a39de8bee6c48c7ea60b50b5a","impliedFormat":99},{"version":"e441b9eebbc1284e5d995d99b53ed520b76a87cab512286651c4612d86cd408e","impliedFormat":99},{"version":"76f853ee21425c339a79d28e0859d74f2e53dee2e4919edafff6883dd7b7a80f","impliedFormat":99},{"version":"00cf042cd6ba1915648c8d6d2aa00e63bbbc300ea54d28ed087185f0f662e080","impliedFormat":99},{"version":"f57e6707d035ab89a03797d34faef37deefd3dd90aa17d90de2f33dce46a2c56","impliedFormat":99},{"version":"cc8b559b2cf9380ca72922c64576a43f000275c72042b2af2415ce0fb88d7077","impliedFormat":99},{"version":"1a337ca294c428ba8f2eb01e887b28d080ee4a4307ae87e02e468b1d26af4a74","impliedFormat":99},{"version":"5a15362fc2e72765a908c0d4dd89e3ab3b763e8bc8c23f19234a709ecfd202fe","impliedFormat":99},{"version":"2dffdfe62ac8af0943853234519616db6fd8958fc7ff631149fd8364e663f361","impliedFormat":99},{"version":"5dbdb2b2229b5547d8177c34705272da5a10b8d0033c49efbc9f6efba5e617f2","impliedFormat":99},{"version":"6fc0498cd8823d139004baff830343c9a0d210c687b2402c1384fb40f0aa461c","impliedFormat":99},{"version":"8492306a4864a1dc6fc7e0cc0de0ae9279cbd37f3aae3e9dc1065afcdc83dddc","impliedFormat":99},{"version":"c011b378127497d6337a93f020a05f726db2c30d55dc56d20e6a5090f05919a6","impliedFormat":99},{"version":"f4556979e95a274687ae206bbab2bb9a71c3ad923b92df241d9ab88c184b3f40","impliedFormat":99},{"version":"50e82bb6e238db008b5beba16d733b77e8b2a933c9152d1019cf8096845171a4","impliedFormat":99},{"version":"d6011f8b8bbf5163ef1e73588e64a53e8bf1f13533c375ec53e631aad95f1375","impliedFormat":99},{"version":"693cd7936ac7acfa026d4bcb5801fce71cec49835ba45c67af1ef90dbfd30af7","impliedFormat":99},{"version":"195e2cf684ecddfc1f6420564535d7c469f9611ce7a380d6e191811f84556cd2","impliedFormat":99},{"version":"1dc6b6e7b2a7f2962f31c77f4713f3a5a132bbe14c00db75d557568fe82e4311","impliedFormat":99},{"version":"add93b1180e9aaac2dae4ef3b16f7655893e2ecbe62bd9e48366c305f0063d89","impliedFormat":99},{"version":"594bd896fe37c970aafb7a376ebeec4c0d636b62a5f611e2e27d30fb839ad8a5","impliedFormat":99},{"version":"b1c6a6faf60542ba4b4271db045d7faea56e143b326ef507d2797815250f3afc","impliedFormat":99},{"version":"8c8b165beb794260f462679329b131419e9f5f35212de11c4d53e6d4d9cbedf6","impliedFormat":99},{"version":"ee5a4cf57d49fcf977249ab73c690a59995997c4672bb73fcaaf2eed65dbd1b2","impliedFormat":99},{"version":"f9f36051f138ab1c40b76b230c2a12b3ce6e1271179f4508da06a959f8bee4c1","impliedFormat":99},{"version":"9dc2011a3573d271a45c12656326530c0930f92539accbec3531d65131a14a14","impliedFormat":99},{"version":"091521ce3ede6747f784ae6f68ad2ea86bbda76b59d2bf678bcad2f9d141f629","impliedFormat":99},{"version":"202c2be951f53bafe943fb2c8d1245e35ed0e4dfed89f48c9a948e4d186dd6d4","impliedFormat":99},{"version":"c618aead1d799dbf4f5b28df5a6b9ce13d72722000a0ec3fe90a8115b1ea9226","impliedFormat":99},{"version":"9b0bf59708549c3e77fddd36530b95b55419414f88bbe5893f7bc8b534617973","impliedFormat":99},{"version":"7e216f67c4886f1bde564fb4eebdd6b185f262fe85ad1d6128cad9b229b10354","impliedFormat":99},{"version":"cd51e60b96b4d43698df74a665aa7a16604488193de86aa60ec0c44d9f114951","impliedFormat":99},{"version":"b63341fb6c7ba6f2aeabd9fc46b43e6cc2d2b9eec06534cfd583d9709f310ec2","impliedFormat":99},{"version":"be2af50c81b15bcfe54ad60f53eb1c72dae681c72d0a9dce1967825e1b5830a3","impliedFormat":99},{"version":"be5366845dfb9726f05005331b9b9645f237f1ddc594c0def851208e8b7d297b","impliedFormat":99},{"version":"5ddd536aaeadd4bf0f020492b3788ed209a7050ce27abec4e01c7563ff65da81","impliedFormat":99},{"version":"e243b24da119c1ef0d79af2a45217e50682b139cb48e7607efd66cc01bd9dcda","impliedFormat":99},{"version":"5b1398c8257fd180d0bf62e999fe0a89751c641e87089a83b24392efda720476","impliedFormat":99},{"version":"1588b1359f8507a16dbef67cd2759965fc2e8d305e5b3eb71be5aa9506277dff","impliedFormat":99},{"version":"4c99f2524eee1ec81356e2b4f67047a4b7efaf145f1c4eb530cd358c36784423","impliedFormat":99},{"version":"b30c6b9f6f30c35d6ef84daed1c3781e367f4360171b90598c02468b0db2fc3d","impliedFormat":99},{"version":"79c0d32274ccfd45fae74ac61d17a2be27aea74c70806d22c43fc625b7e9f12a","impliedFormat":99},{"version":"1b7e3958f668063c9d24ac75279f3e610755b0f49b1c02bb3b1c232deb958f54","impliedFormat":99},{"version":"779d4022c3d0a4df070f94858a33d9ebf54af3664754536c4ce9fd37c6f4a8db","impliedFormat":99},{"version":"e662f063d46aa8c088edffdf1d96cb13d9a2cbf06bc38dc6fc62b4d125fb7b49","impliedFormat":99},{"version":"d1d612df1e41c90d9678b07740d13d4f8e6acec2f17390d4ff4be5c889a6d37d","impliedFormat":99},{"version":"c95933fe140918892d569186f17b70ef6b1162f851a0f13f6a89e8f4d599c5a1","impliedFormat":99},{"version":"1d8d30677f87c13c2786980a80750ac1e281bdb65aa013ea193766fe9f0edd74","impliedFormat":99},{"version":"4661673cbc984b8a6ee5e14875a71ed529b64e7f8e347e12c0db4cecc25ad67d","impliedFormat":99},{"version":"7f980a414274f0f23658baa9a16e21d828535f9eac538e2eab2bb965325841db","impliedFormat":99},{"version":"20fb747a339d3c1d4a032a31881d0c65695f8167575e01f222df98791a65da9b","impliedFormat":99},{"version":"dd4e7ebd3f205a11becf1157422f98db675a626243d2fbd123b8b93efe5fb505","impliedFormat":99},{"version":"43ec6b74c8d31e88bb6947bb256ad78e5c6c435cbbbad991c3ff39315b1a3dba","impliedFormat":99},{"version":"b27242dd3af2a5548d0c7231db7da63d6373636d6c4e72d9b616adaa2acef7e1","impliedFormat":99},{"version":"e0ee7ba0571b83c53a3d6ec761cf391e7128d8f8f590f8832c28661b73c21b68","impliedFormat":99},{"version":"072bfd97fc61c894ef260723f43a416d49ebd8b703696f647c8322671c598873","impliedFormat":99},{"version":"e70875232f5d5528f1650dd6f5c94a5bed344ecf04bdbb998f7f78a3c1317d02","impliedFormat":99},{"version":"8e495129cb6cd8008de6f4ff8ce34fe1302a9e0dcff8d13714bd5593be3f7898","impliedFormat":99},{"version":"192db023799edb1b012458cee150ae0dd33675a7359d1d878ccd2522a736a343","impliedFormat":99},{"version":"9091b1d4b73ba7b9ee0ac0e62879e50fa76303473b8407ccf80a9ede2f16cba9","impliedFormat":99},{"version":"1dc28867627f66bdf42018dbf2775079ae9c0d546fc35944639f0c150e279743","impliedFormat":99},{"version":"c8856d84b990d98d34ca5ed5789a89ade507a248e08395100f2aa8f067c29fa2","impliedFormat":99},{"version":"6620537f707f42add26c5f47056cf82eaa587f12faaa364bf078fcbc0200ef6f","impliedFormat":99},{"version":"74e8b44b0f188dbe70f147b5fb899d3c8418b2f211ba2ba383798062961cb720","impliedFormat":99},{"version":"dcbed4422ffc65273eacc59c602cf3e59ce052ad9810cf73e9bc5fbad3381f94","impliedFormat":99},{"version":"7b7a2a15cc92749b88fe8f255f7631e3c65de932c0f3d1e96d87b1a992ed6471","impliedFormat":99},{"version":"6f69c10b1f3f0ac3157f88719a16edd13d718b2c2aa44d59a9483e04b05e113d","impliedFormat":1},{"version":"868f16a33ccfa800b82bd0975bc9fe7a4a3aa0d747873e2f7e5886c32665ad6d","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"e749bbd37dadf82c9833278780527c717226e1e2c9bc7b2576c8ec1c40ec5647","impliedFormat":1},{"version":"06814968f2b43b988057a3c8b131e7b3be765e74ff0f1153d23045ad1d7f0886","impliedFormat":99},{"version":"2e5741105f94b1743b387d2d6c4d4f0429d560291aaf7217e2dbc8d540c0a321","impliedFormat":99},{"version":"2e5c41e56098ae93bc42a15473acb1a176f28b2ba95c38f3c67820434acd85b6","impliedFormat":1},{"version":"b99c4ff8d11110b9699edc4e5c3bb304360a70ca47e4f9851fc42ad0b663ba83","affectsGlobalScope":true,"impliedFormat":1},{"version":"ba340fc8e5b0f08d90c6ef8552b8ce7bb5dc8e18d47b57f90dee105bc77d0d9e","affectsGlobalScope":true,"impliedFormat":1},{"version":"0f263eeea7877199808b1bc220df95b25a72695ec214eb96d740d4b06c7cc868","impliedFormat":1},{"version":"a31f62f1cfa12a838e798814f56cd5e53d6b1cd91acd6a2f62a81ded0c02590b","impliedFormat":99},{"version":"e9e22144b696e9efaecd8be1a363253e62a3a22a5f369fdc5b4dbdf70c33775b","impliedFormat":99},{"version":"2f7d8f9babcf77d58bc93664428ec8c29365c40514625e536dcf91180a0564bf","impliedFormat":99},{"version":"20b27cd029eb327457370983012ec5e5df46685fbddef5817eec0e201581573e","impliedFormat":99},{"version":"6c9cf9719786dca332b6f2b5a6393c2631a18c630e7bb90dc1cf65a03f919c73","impliedFormat":99},{"version":"5ed723815432a740881a4c529cdda221d7f1b381937750cf6c60403657be37c7","impliedFormat":99},{"version":"020419d11b839bdd41c61619920a1bc9fde7a782fdbd2df6924d6ba6422b6256","impliedFormat":99},{"version":"27220a7135f3d3652928e734309de6f748e61c6e07b4fa2c6e27b907a132e39a","impliedFormat":99},{"version":"dc96877c215cabb1311644d14c8e9e6fd08eebdddaf6a90221187cf9d7c02337","impliedFormat":99},{"version":"c9a7afc660b2b029fa3a9268c78bbf47226fd232a3c7b0d00c726ef9e2e69817","impliedFormat":99},{"version":"3858041552bc3e1f28a6c14f2f0d7fd86c041b71830f2fbdc724f8ef03bf0587","impliedFormat":99},{"version":"0d420df443c76c8314d3012a3907ecee1ba07900053825d1177432c4ab8e0d76","impliedFormat":99},{"version":"7c3e1a21e812eea99aa86d26d80d6a35560bbb1b362f89c2b8a66680750a1898","impliedFormat":99},{"version":"e0b1a941d9fda4ad0283d8c1240cf89e6bd13182453be8eaebf61f27c99d274f","impliedFormat":99},{"version":"5a84ebd4f47e1e673211884affaed21053107435ddbcb2c8e6ce1a039ca9fb3f","impliedFormat":99},{"version":"fc7fc70cae59b4c5a5cd3a84ffa7fd312b068f71b5a38a8779e35c754abb7912","impliedFormat":99},{"version":"39698e3bd5691d0d1f8b69785178f5340c738c8bb8675d29acd0f0fe1f1f9046","impliedFormat":99},{"version":"60f113cf1674b19522e11d2ef2a02eb517ca84af06ce4aff4e76fd55e4345571","impliedFormat":99},{"version":"1617515d7ce57089a49b59eaf84d019e5591a6dfef16b5cdb7a9a38f4bca32bc","impliedFormat":99},{"version":"575424818bdf7ecfd8cd9a303a55650e8999730a14756ca20484fb5b9c071645","impliedFormat":99},{"version":"9b87a81ba35d2010ecb3644fc5b31df0c276c6354b28701d7a5809cfeadcdba6","impliedFormat":99},{"version":"8be0cd7dc19d53fe5a4ac3a6ad1b9553d5f4e3931eefffbfb57cb1fe7bcf631d","impliedFormat":99},{"version":"4d7d2d7f20baa8eabba748d6742d7d372aa62b65e82a2603f27d73f318f6e0e9","impliedFormat":99},{"version":"4185c0eb52309769527913a8842e8f423a78ae04d8a69f7791849bd0d5f8460d","impliedFormat":99},{"version":"a4cc16e27586c939f86745fdcc3bb818aa724889a8ffb6d00468778e40ff44de","impliedFormat":99},{"version":"6514508737ddcd89c7a5d876cba5c4eeb289d778bf57d4cb3d41ba36fcfd2c02","impliedFormat":99},{"version":"093f90d5e17557c807b6e76256ccd67060f9143e8f7ce994ac76788a1e87aa92","impliedFormat":99},{"version":"7c0d706f4529bf287e4a560cc5cadbc5fa11291f450541feb194744f0453dd24","impliedFormat":99},{"version":"2d089998f9a228be5baab523d75b1912b31c7280f00d8a88898cb028646b5cd1","impliedFormat":99},{"version":"2be319181c49fb501663ed3d09e50ec6f5f877d584117cbca558f9a51b2978c7","impliedFormat":99},{"version":"392eca4da34bd630c360736b9537ec3c3d77006687f415f66a54d03843169eec","impliedFormat":99},{"version":"cd7fab58f8902c8dcc52b8ed360caaa6b0b8ac107eac91641eb91533512d9cce","impliedFormat":99},{"version":"1b14258578fbacb5905cc302ec81ebb0bd8c786e33bee2108ed381d122da1039","impliedFormat":99},{"version":"fe21d99a203a9f2a170c52875cadbd40fafa6c7e8d3bacf19df19d82cfe60860","impliedFormat":99},{"version":"c40b5f40ad781342ba9e8992ab1df9642f6391313d779a167326d4e45b766dcc","impliedFormat":99},{"version":"f1aec9f26eae8fa039636ba26b19eabe54e442e770848b186562ac88665ef791","impliedFormat":99},{"version":"2f8051cfa22e5a15ae9be6dfe4d5184b32275e92265b04a11c035ca39f0be470","impliedFormat":99},{"version":"4ff469e42e0007139d4c18ac6f31a20955c42c824bd2e290938e17bc816c9427","impliedFormat":99},{"version":"2960a783ca4b5aadf5070ebb1c66cda79b5dfccb4397a070a438bc233b3580a1","impliedFormat":99},{"version":"7c7c116666be0bbc96aca681b9bb4d9afb8c417e6dc3e278ce2c38ad2e36a8e4","impliedFormat":99},{"version":"7afc6c01b90425a4d51508f4ed34be5ffa41f48cf47e396a5ac97f4fa276310f","impliedFormat":99},{"version":"0ea87fbb717c95c9659a0908d3db9d7e09729db35ec0be4fc87f6403d73ee601","impliedFormat":99},{"version":"9ecec578fc9353ec166dabe88b0444483b6c6370016b044651380ec6d45fb2aa","impliedFormat":99},{"version":"f58d04b4d4930fc8dc9045d1e70cd2a04bf512a7493b5af18733846568b7e8cf","impliedFormat":99},{"version":"fda4de01fb822dbb05d76f200a5810f75941c138608281c95c181276172eef33","impliedFormat":99},{"version":"bf7a5d6ebd9f63d59b099f653c3bf3af4f66b46da453ed7db9025c3d73e91471","impliedFormat":99},{"version":"5fd1af014582e6e8e4a43259c934026a4c8c0cad9f69b28df6b69b21785cdb08","impliedFormat":99},{"version":"e43dc8ecc36f0452b708dfcac8c615eb848015d5e91ce2f02109638094b6c99d","impliedFormat":99},{"version":"43d6f4441d9337dfc1c59cc8214a1f82cdd5e2736b175c3aba5146bbf29d2b47","impliedFormat":99},{"version":"3fd6b145df6b932f9a189947cf2a4655ca6cf10a5052a4968ac62698829d210c","impliedFormat":99},{"version":"d4df8c284d02f2e3ac24bb2aaee71289b80d3cb5950d61c8af9b0c3121b8f1ba","impliedFormat":99},{"version":"dcb2a7e17276b7e0eba5f614c89f77b4dbe98092e3d7fdfbd97fddd61d5b9f8c","impliedFormat":99},{"version":"4ddac49230b4420200ba667ad664a33e6ba21cac2b222878fea691bd4c46c94d","impliedFormat":99},{"version":"49de2e31605e50caeeb6d67feb6861d4e7e29b35888375aa1dd81cc90de8cfd5","impliedFormat":99},{"version":"1e3491a13442f711c0e2f17cd8d215967ba11c20b16e8e50b96adfa99ebf1f6a","impliedFormat":99},{"version":"6b3e952229f72a6ca6005e56cb9022710a952a58bd28f521c924db2044b7365e","impliedFormat":99},{"version":"0c1430e7f7b198501bd5ff9be1116ee2ec45aba065c0626821fbcbd684026668","impliedFormat":99},{"version":"a0cd53e94116dc57a8a1c3f281bf954033c4c0eb5f0968654efce5b6586fc75d","impliedFormat":99},{"version":"3312ede115245e7864779a1f3a540948fe26d526708964e0f4585d2a756a3aa9","impliedFormat":99},{"version":"93110ec6a5c245ae8ec96a9d66da36a75b799ed1f5af03751c104c0cf0842d9b","impliedFormat":99},{"version":"3800d26d7e0602d6735ea7f8d7c3e3db1dcf14be6bf89616d3372a7c2df21c6d","impliedFormat":99},{"version":"89bf59c1d834a4b01c7d9b5b4cfa64ffed09e59580d27bbadf1acdd69706c200","impliedFormat":1},{"version":"c8adda9f45d2f7ec9fb28c59859db32da6c2835f1fec96433e2729e5805fa46f","impliedFormat":99},{"version":"f5a1b2ccbcb26cea8b577af7882ff2a9294f4df6a45de84592edb5d076e748fe","impliedFormat":1},{"version":"6ac54ff75639970f9936ce0937b54d9813268c59961b681c272ea2c1a679308e","impliedFormat":99},{"version":"4bd7723f59fd5372c8e0f57d458dc155a3bb034c2a601aed37a341018c13bb6b","impliedFormat":99},{"version":"278807e5fbad9a322630a75afb7382edb4a532900eff1ac8c7b05e574051fc21","impliedFormat":99},{"version":"8db3b730cdd1993dde9f7c0e79c4236091c88a12d2f9fba37a2a216fe8193f65","impliedFormat":99},{"version":"d16b9b51d8abfb8b9e404bcebc942c949f91c8b43ded93d000b0d48729f59583","impliedFormat":99},{"version":"30d3d245e92f425010cab4732dcfca5d97585cfd2cb57a5e9c3abdd902bc98f5","impliedFormat":99},{"version":"88b2eb23d36692162f2bf1e50577ebcde26de017260473e03ed9a0e61e2726a4","impliedFormat":99},{"version":"23ffbd8c0e20a697d2ea5a0cf7513fb6e42c955a7648f021da12541728f62182","impliedFormat":99},{"version":"c127ebf14d1b59d1604865008fb072865c5ca52277621f566092fe1f42ce0954","impliedFormat":99},{"version":"def638da26d84825a312113a20649d3086861de7c06a18ea13121278702976fd","impliedFormat":99},{"version":"fbaf86f8ba11298dea2727ce0da84b4ab6ae6c265e1919d44aff7d9b2bbc578a","impliedFormat":99},{"version":"c1010caaeaca8e420c6e040c2e822dbe18702459c93a7d2d5de38597d477b8cd","impliedFormat":99},{"version":"e1f0d8392efd9d71f2644eb97d3f33d90827e30ea8051d93b6f92bb11dff520a","impliedFormat":99},{"version":"085211167559ca307d4053bb8d2298d5ad83cbc3d2ae9bb4c8435a4cabf59369","impliedFormat":99},{"version":"12a2b25c7c9c05c8994adf193e65749926acfcc076381f7166c2f709a97bdf0a","impliedFormat":99},{"version":"0f93a3fdd517c1e45218cd0027c1d6b82237e379dc6b66d693aab1fe74c82e81","impliedFormat":99},{"version":"3b568b63f0e8b3873629a4d7a918dce4266ad41461004ab979f8dcdfd13532bb","impliedFormat":99},{"version":"8a2619c8e24305f6b9700b35af178394b995dcb28690a57a71cca87ee7e709ae","impliedFormat":99},{"version":"f95fd2fc3cc164921a891f5d6c935fa0d014a576223dd098fc64677e696b0025","impliedFormat":99},{"version":"2b7a82692ecc877c5379df9653902e23f2d0d0bc9f210ec3cf9e47be54413c5c","impliedFormat":99},{"version":"e2ad09c011cf9d7ee128875406bef787eeb504659495f42656a0098c15fe646c","impliedFormat":99},{"version":"eb518567ea6b0b2623f9a6d37c364e1b1ac9d8b508d79e558f64ac05c17e2685","impliedFormat":99},{"version":"aa82876d59912d25becff5a79ed7341af04c71bfeb2221cc0417bc34531125e2","impliedFormat":99},{"version":"b084a412374bdd124048c52c4e8a82d64f3adec6c0a9ad5ecbb7317636039b0f","impliedFormat":99},{"version":"11199daa694c3ced3cc2a382a3fa7bd64e95eb40f9bbc3979fc8fb43f5ba38cc","impliedFormat":99},{"version":"2c86f279d7db3c024de0f21cd9c8c2c972972f842357016bfbbd86955723b223","impliedFormat":99},{"version":"f4e8f4151c3490cf7b68c685aabe901cbab19f962aaa2f118a97550e22689a76","impliedFormat":1},{"version":"799003c0ab928582fca04977f47b8d85b43a8de610f4eef0ad2d069fbb9f9399","impliedFormat":1},{"version":"d998eea476c695d8e4ff9d007d5b46d49ca2ffa052f74dc20ca516425abd57b1","impliedFormat":1},{"version":"310fe80ff40a158c2de408efbe9de11e249c53d2de5e33ca32798e6f3fbc8822","impliedFormat":99},{"version":"9c86abbc4fd0248f56abc12aaecd76854517389af405d5ec2eb187fdb00a606f","impliedFormat":99},{"version":"69fab68a769c17a52a24b868aeb644f3ee14abaa5064115f575ddd59231105ce","impliedFormat":99},{"version":"e181eb86b2caf80fe18c72efce6b913bc226e4a69a5456eaf4f859f1c29c6fd6","impliedFormat":99},{"version":"93f7871380478bc6acf02ad9f3dc7da0c21997caebbe782eb93a11b7bd06a46d","impliedFormat":99},{"version":"154f23902d7a3fcdace4c20b654da7355fee4b7f807d1f77d6c9a24a8756013a","impliedFormat":99},{"version":"1589e5ac394b2b2e64264da3e1798d0e103b4f408f5bae1527d9e706f98269c7","impliedFormat":99},{"version":"a0f8ce72cb02247a112ce4a2fa0f122478a8e99c90a5e6b676b41a68b1891ad2","impliedFormat":99},{"version":"6e957ea18b2bf951cf3995d115ad9bfa439e8d891aeb1afc901d793202c0b90d","impliedFormat":99},{"version":"04718c7325e7df4bac9a6d026a0a2bd5a8b54501f274aaf93a03b5d1d0635bd1","impliedFormat":99},{"version":"405205f932d4e0ce688a380fa3150b1c7ff60e7fc89909e11a33eab7af240edb","impliedFormat":99},{"version":"a0bd46d587005aad4819980f6cf2dbcd80ebf584ed1a946202326a27158ba70e","impliedFormat":1},{"version":"07fcbb61a71bd69a92a5bbde69e60654666cf966b5675c2010c3bf9f436f056a","impliedFormat":1},{"version":"88b2eb23d36692162f2bf1e50577ebcde26de017260473e03ed9a0e61e2726a4","impliedFormat":1},{"version":"23ffbd8c0e20a697d2ea5a0cf7513fb6e42c955a7648f021da12541728f62182","impliedFormat":1},{"version":"43fba5fc019a4ce721a6f53ddb97fdc34c55049cfb793bc544d5c864ee5560b9","impliedFormat":1},{"version":"f4e12292c9a7663a13d152195019711c427c552eb0fa02705e0f61370cd5547a","impliedFormat":1},{"version":"c127ebf14d1b59d1604865008fb072865c5ca52277621f566092fe1f42ce0954","impliedFormat":1},{"version":"def638da26d84825a312113a20649d3086861de7c06a18ea13121278702976fd","impliedFormat":1},{"version":"fbaf86f8ba11298dea2727ce0da84b4ab6ae6c265e1919d44aff7d9b2bbc578a","impliedFormat":1},{"version":"c1010caaeaca8e420c6e040c2e822dbe18702459c93a7d2d5de38597d477b8cd","impliedFormat":1},{"version":"e1f0d8392efd9d71f2644eb97d3f33d90827e30ea8051d93b6f92bb11dff520a","impliedFormat":1},{"version":"085211167559ca307d4053bb8d2298d5ad83cbc3d2ae9bb4c8435a4cabf59369","impliedFormat":1},{"version":"55fc49198d8a85a73cdb79e596d9381cfdc9de93c32c77d42e661c1c1e7268ef","impliedFormat":1},{"version":"6a53fb3df8dd32ed1a65502ca30aeae19cfe80990e78ba68162d6cb2a7fed129","impliedFormat":1},{"version":"b5dcc18d7902597a5584a43c1146ca4fe0295ceb5125f724c1348f6a851dd6ed","impliedFormat":1},{"version":"0c6b0f3fbe6eb6a3805170b3766a341118c92ed7b6d1f193b9f35aa82f594846","impliedFormat":1},{"version":"60eaadb36cf157c5cae9c40e84fa367d04f52a150db3920dbe35139780739143","impliedFormat":1},{"version":"4680a32b1098c49dc87881329af1e68af9af94e051e1b9e19fed555a786f6ce6","impliedFormat":1},{"version":"89fcd129ec37f321cddcdb6b258ffe562de4281e90ec3ccbe7c1199ba39359ca","impliedFormat":1},{"version":"4313011f692861c2c1f5205d7f9a473e763adab6444f9853b96937b187fb19f7","impliedFormat":1},{"version":"caa57157e7bdb8d5f1efe56826fb84a6c8f22a1927bba7fa21fd54e2a44ccba2","impliedFormat":1},{"version":"6b74700abfe4a9b88be957fd8e373cfd998efb1a5f6ad122da49a92997e183ad","impliedFormat":1},{"version":"9ef1342f193bd8bae86c64e450c3ac468ef08652110355e1f3cdd45362eb95c4","impliedFormat":1},{"version":"6853c91662c36a2bf4c8371a87177c819007c76a23c293ef3f686ce9157ae4c8","impliedFormat":1},{"version":"9be1c5dabce43380d13fc621100676b03d420b5687b08d1288f479bee68ab7a8","impliedFormat":1},{"version":"8996d218010896712678e6a0337d8ef8b81c1066ab76f637dd8253f0d6ff838d","impliedFormat":1},{"version":"a15603bf387fc45defe28a68f405a6c29105e135c4e8538eeb6d0a1ef5b69a81","impliedFormat":1},{"version":"84e2532e4d42949a2775cdd8bb7b2b97370dd6ddb683d0c199b21bf6978b152d","impliedFormat":1},{"version":"22bf5f19f620db3b8392cfece44bdd587cdbed80ba39c88a53697d427135bf37","impliedFormat":1},{"version":"23ebbd8d484d07e1c1d8783169c20570ed8409966b28f6be6cf8e970d76ef491","impliedFormat":1},{"version":"18b6fa2c778cad6489f2febf76433453f5e2432ec3535f2d45ae7d803b93cc17","impliedFormat":1},{"version":"609d0d7419999cf44529e6ba687e2944b2fc7ad2570d278fd4e6b1683c075149","impliedFormat":1},{"version":"249cf421b8878a3fe948d9c02f6b0bae65491b3bb974c2ffc612341406fa78ff","impliedFormat":1},{"version":"b4aa22522d653428c8148ddbf1dcc1fb3a3471e15eb1964429a67c390d8c7f38","impliedFormat":1},{"version":"30b2cee905b1848b61c7d28082ebfa2675dd5545c0d25d1c093ce21a905cdccc","impliedFormat":1},{"version":"0a2a2eed4137368735205de97c245f2a685af1a7f1bf8d636b918a0ee4ff4326","impliedFormat":1},{"version":"69f342ce86706aa2835a62898e93ea7a1f21b1d89c70845da69371441bb6cd56","impliedFormat":1},{"version":"b5ab4282affcfd860dd1cc3201653f591509a586d110f8e5b1b010508ba79b2c","impliedFormat":1},{"version":"d396233f6cd3edf0d33c2fbfc84ded029c3ea4a05af3c94d09d31a367cced111","impliedFormat":1},{"version":"bc41a726c817624a5136ae893d7aac7c4dc93c771e8d243a670324bccf39b02b","impliedFormat":1},{"version":"710728600e4b3197f834c4dd1956443be787d2e647a72f190bf6519f235aaadd","impliedFormat":1},{"version":"a45097e01ef30ba26640fed365376ab3ccd5faf97d03f20daff3355a7e60286a","impliedFormat":1},{"version":"763cbb7c22199f43fd5c2b1566af5ba96bf7366f125dd31a038a2291cbc89254","impliedFormat":1},{"version":"031933bf279b7563e11100b5e1746397caf3a278596796a87bc0db23cf68dc9e","impliedFormat":1},{"version":"a4a54c1f58fc6e25a82e2c0f651bf680058bd7f72cfb2d43b85ee0ab5fe2e87e","impliedFormat":1},{"version":"9613d789b6f1037f2523a8f70e1b736f1da4566b470593da062be5c9e13dac57","impliedFormat":1},{"version":"0d2a320763a0c9c71493f8f1069971018c8720a6e7e5a8f10c26b6de79aa2f7d","impliedFormat":1},{"version":"817e0df27a237a268dc16e5acffc19f9a74467093af7a0ba164ee927007a4d25","impliedFormat":1},{"version":"43102521b5ca50ff1865188c3c60790feaed94dc9262b25d4adec4dbc76f9035","impliedFormat":1},{"version":"f99947f8d873b960b0115e506ef9c43f4e40c2071b1d20375564538af4a6023b","impliedFormat":1},{"version":"c1e5ad5ca89d18d2a36d25e8ec105623648cf35615825e202c7d8295a49d61ab","impliedFormat":1},{"version":"2b6c9cb81da4e0a2e32a58230e8c0dec49fc5b345efb7f7a3648b98956be4b13","impliedFormat":1},{"version":"99e34af3ede50062dcc826a1c3ce2d45562060dfd0f29f8066381a6ef548bf2a","impliedFormat":1},{"version":"49f5c2a23ea5fc4b2cdb4426f09d1c8b83f8409fa2af13ef38845cc9b9d4bc3d","impliedFormat":1},{"version":"e935227675144b64ecde3489e4a5e242eeb25fdd6b7464b8c21ad1f7a0faa88b","impliedFormat":1},{"version":"b42e6bbe88dc79c2d6dc5605fb9c15184e70f64bdd7b8d4069b802b90ce86df6","impliedFormat":1},{"version":"b9cd712399fdc00fdae07e96c9b39c3cb311e2a8a5425f1bd583f13cab35e44b","impliedFormat":1},{"version":"5a978550ae131b7fef441d67372fd972abab98ea9fdb9fa266e8bdc89edcb8d6","impliedFormat":1},{"version":"4f287919cfc1d26420db9f0457cd5c8780b1ef0a9f949570936abe48d3a43d91","impliedFormat":1},{"version":"496b23b2fd07e614bc01d90dd4388996cb18cd5f3a612d98201e9f683e58ad2e","impliedFormat":1},{"version":"dcfbe42824f37c5fb6dc7b9427ef2500791ec0d30825ecb614f15b8d5bf5a667","impliedFormat":1},{"version":"390124ad2361b46bf01851d25e331cd7eed355d04451d8b2a4aa985c9de4f8ce","impliedFormat":1},{"version":"14d94f17772c3a58eda01b6603490983d845ee2012cd643f7497b4e22566aacb","impliedFormat":1},{"version":"03ef2386c683707ce741a1c30cb126e8c51a908aa0acc01c3471fafb9baaacd5","impliedFormat":1},{"version":"66a372e03c41d2d5e920df5282dadcec2acae4c629cb51cab850825d2a144cea","impliedFormat":1},{"version":"5b48ba9a30a93176a93c87f9e0abf26a9df457eeb808928009439ca578b56f27","impliedFormat":1},{"version":"4707625392316d3c16edbd0716f4ac310e8ff5d346d58f4d01a2b7e0533a23df","impliedFormat":1},{"version":"154d58a4b2d9c552dc864ea39c223d66efd0ed2dd8b55bd13db5225d14322915","impliedFormat":1},{"version":"6a830433fa072931b4ea3eb9aa5fa7d283f470080586a27bfe69837a0f12de9a","impliedFormat":1},{"version":"d25e930e181f4f69b2b128514538f2abb54ef1d48a046ad776ac6f1cda885a72","impliedFormat":1},{"version":"0259b4c21bc93b52ca82c755f97fc90481072bcc44a8010131b2ea7326cf03fe","impliedFormat":1},{"version":"bea43a13a1104a640da0cb049db85c6993f484a6cc03660496b97824719ecc91","impliedFormat":1},{"version":"0224239d61fe66d4900544d912b2e11c2cca24b4707d53fdb94b874a01e29f48","impliedFormat":1},{"version":"2bce8fd2d16a9432110bbe0ba1e663fd02f7d8b8968cd10178ea7bc306c4a5df","impliedFormat":1},{"version":"9c4ad63738346873d685e5c086acbf41199e7022eff5b72bb668931e9ca42404","impliedFormat":1},{"version":"cfb6329bf8ce324e83fe4bbdee537d866a0d5328246f149a0958b75d033de409","impliedFormat":1},{"version":"efc3816f19ea87a7050c84271ea3d3aad9631a517c168013c4f4b6724c287ce0","impliedFormat":1},{"version":"f99f6737336140047e8dd4ade3859f08331aa4b17bc2bd5f156a25c54e0febbc","impliedFormat":1},{"version":"12a2b25c7c9c05c8994adf193e65749926acfcc076381f7166c2f709a97bdf0a","impliedFormat":1},{"version":"0f93a3fdd517c1e45218cd0027c1d6b82237e379dc6b66d693aab1fe74c82e81","impliedFormat":1},{"version":"03c753da0bee80ad0d0f1819b9b42dfe9bf9f436664caf15325aa426246fd891","impliedFormat":1},{"version":"18f5bf1dae429c451f20171427c9e3223fade4346af4dfd817725cbeb247a09d","impliedFormat":1},{"version":"a4eece5fab202e840dd84f7239e511017a8162edb8fc8b54ff2851c5c844125c","impliedFormat":1},{"version":"c4a94af483a63bf947d89f97553a55df5107c605ec8a26f0b9b8bdcc14bd6d89","impliedFormat":1},{"version":"19de2915ccebc0a1482c2337b34cb178d446def2493bf775c4018a4ea355adb8","impliedFormat":1},{"version":"9be8fc03c8b5392cd17d40fd61063d73f08d0ee3457ecf075dcb3768ae1427bd","impliedFormat":1},{"version":"3b568b63f0e8b3873629a4d7a918dce4266ad41461004ab979f8dcdfd13532bb","impliedFormat":1},{"version":"a5e5223c775fe30d606b8aaa521953c925d5ad176a531c2b69437d2461aaabbd","impliedFormat":1},{"version":"8cbf41d2d1ce8ac2066783ae00613c33feef07493796f638e30beaf892e4354a","impliedFormat":1},{"version":"e22ad737718160df198cd428f18da707177d0467934cecdeed4be6e067b0c619","impliedFormat":1},{"version":"15bf5ed8cb7c1a1e1db53fa9b45bc1a1c73c0497735343a8d0c59fdb596a3744","impliedFormat":1},{"version":"791fce84bce8b6948e4f23422d9cbbd7d08c74b3f91cca12dcae83d96079798b","impliedFormat":1},{"version":"8a2619c8e24305f6b9700b35af178394b995dcb28690a57a71cca87ee7e709ae","impliedFormat":1},{"version":"f95fd2fc3cc164921a891f5d6c935fa0d014a576223dd098fc64677e696b0025","impliedFormat":1},{"version":"8c9cecaaa9caba9a8caa47f46dcf24b524b27899b286d8edcc75a81b370d2ba3","impliedFormat":1},{"version":"2b7a82692ecc877c5379df9653902e23f2d0d0bc9f210ec3cf9e47be54413c5c","impliedFormat":1},{"version":"e2ad09c011cf9d7ee128875406bef787eeb504659495f42656a0098c15fe646c","impliedFormat":1},{"version":"eb518567ea6b0b2623f9a6d37c364e1b1ac9d8b508d79e558f64ac05c17e2685","impliedFormat":1},{"version":"630a48fb8f6b07161588e0aee3f9d301c59c97e1532c884118f89368baf4073b","impliedFormat":1},{"version":"14736c608aa46120f8d6d0bc5e0721b46b927bc7eba20e479600571935f27062","impliedFormat":1},{"version":"7574803692d2230db13205a7749b9c3587dccaccdf9e76f003f9e08078bb6d09","impliedFormat":1},{"version":"f3cc1588e666651c51353b1728460bee8acbc6e0f36be8c025eaaf292dca525d","impliedFormat":1},{"version":"0d4ea8a20527dcf3ad6cf1bd188b8ad4e449df174fad09b9e540ed81080af834","impliedFormat":1},{"version":"aa82876d59912d25becff5a79ed7341af04c71bfeb2221cc0417bc34531125e2","impliedFormat":1},{"version":"6f4b0389f439adc84cba35d45428668eabcfbdd351ba17e459d414ca51ab8eb8","impliedFormat":1},{"version":"d5dd33d15fbb07668c264b38065ac542a07a7650af4917727bbc09b58570e862","impliedFormat":1},{"version":"7d90202d0212e9cdc91a20bfddf04a539c89f09fe1d64db3343546fa2eb37e71","impliedFormat":1},{"version":"1a5d073c95a3a4480b17d2fa7fd41862a9df0cb2afaee86834b13649e96bdb45","impliedFormat":1},{"version":"2092495a5b3116c760527a690c4529748f2d8b126cdd5f56b2ce2230b48aba3f","impliedFormat":1},{"version":"620b29d6adbd4061bc0a8fedf145fcc8e8fc9648fb6e0a39726e33babb4e07bc","impliedFormat":1},{"version":"931eda51b5977f7f3fa7a0d9afde01cfd8b0cc1df0bb66dcf8c2cf6e7090384e","impliedFormat":1},{"version":"b084a412374bdd124048c52c4e8a82d64f3adec6c0a9ad5ecbb7317636039b0f","impliedFormat":1},{"version":"11199daa694c3ced3cc2a382a3fa7bd64e95eb40f9bbc3979fc8fb43f5ba38cc","impliedFormat":1},{"version":"2c86f279d7db3c024de0f21cd9c8c2c972972f842357016bfbbd86955723b223","impliedFormat":1},{"version":"dfb53b9d748df3e140b0fddb75f74d21d7623e800bb1f233817a1a2118d4bb24","impliedFormat":1},{"version":"8cfc293b33082003cacbf7856b8b5e2d6dd3bde46abbd575b0c935dc83af4844","impliedFormat":1},{"version":"7730c538d6d35efe95d2c0d246b1371565b13037e893178033360b4c9d2ac863","impliedFormat":1},{"version":"b256694544b0d45495942720852d9597116979d52f2b53c559fda31f635c60df","impliedFormat":1},{"version":"794e8831c68cc471671430ee0998397ea7a62c3b706b30304efdc3eaff77545a","impliedFormat":1},{"version":"9cfc1b227477e31988e3fb18d26b6988618f4a5da9b7da6bc3df7fc12fb2602e","impliedFormat":1},{"version":"264a292b6024567dd901fdabbf3239a8742bea426432cdbda4cf390b224188e1","impliedFormat":1},{"version":"f1556a28bb8e33862dcfa9da7e6f1dca0b149faf433fe6a50153ae76f3362db1","impliedFormat":1},{"version":"1d321aea1c6a77b2a44e02e5c2aeff290e3f1675ead1a86652b6d77f5fea2b32","impliedFormat":1},{"version":"4910efc2ce1f96d6e71a9e7c9437812ffae5764b33ab3831c614663f62294124","impliedFormat":1},{"version":"e3ceab51a36e8b34ab787af1a7cf02b9312b6651bac67c750579b3f05af646c1","impliedFormat":1},{"version":"baf9f145bcee1b765bed6e79fd45e1ff0ca297a81315944de81eb5d6fff2d13d","impliedFormat":1},{"version":"2afd62362b83db93cd20de22489fe4d46c6f51822069802620589a51ccad4b99","impliedFormat":1},{"version":"9f0cd9bd4ab608123b88328c78814738cbdee620f29258b89ef8cd923f07ff9c","impliedFormat":1},{"version":"801186c9e765583c825f28dab63a7ad12db5609e36dc6d9acbdc97d23888a463","impliedFormat":1},{"version":"96c515141c6135ccd6fb655fb9e3500074a9216ba956fb685dc8edc33f689594","impliedFormat":1},{"version":"416af6d65fc76c9ced6795f255cb1096c9d7947bede75b82289732b74d902784","impliedFormat":1},{"version":"a280c68b128ebba35fb044965d67895201c2f83b6b28281bb8b023ade68bf665","impliedFormat":1},{"version":"6fa118f15723b099a41d3beea98ed059bcd1b3eda708acf98c5eff0c7e88832f","impliedFormat":1},{"version":"dcbf582243e20ea50d283f28f4f64e9990b4ed4a608757e996160c63cff6aa99","impliedFormat":1},{"version":"efa432d8fd562529c4e9f859fd936676dd8fef5d3b4bedb06f754e4740056ea9","impliedFormat":1},{"version":"a59b66720b2ccf2e0150fafb49e8da8dabdf4e1be36244a4ccd92f5bd18e1e9e","impliedFormat":1},{"version":"c657fb1ec3b727d6a14a24c71ea20c41cb7d26a503e8e41b726bb919eb964534","impliedFormat":1},{"version":"50d6d3174868f6e974355bf8e8db8c8b3fcf059315282a0c359ecf799d95514a","impliedFormat":1},{"version":"86bf79091014a1424fc55122caa47f08622b721a4d614b97dd620e3037711541","impliedFormat":1},{"version":"7a63313dff3a57f824a926e49a7262f7bd14e0e833cf45fa5af6da25286769c2","impliedFormat":1},{"version":"36dcaeffe1a1aed1cb84d4feba32895bf442795170edccc874fa32232b2354e5","impliedFormat":1},{"version":"686c6962d04d90edafc174aa5940acb9c9db8949c8d425131c01d796cf9a3aef","impliedFormat":1},{"version":"2b1dbc3d5762d6865744b6e7be94b8b9004097698c37e93e06983e42dd8fe93b","impliedFormat":1},{"version":"eb5e8f74826bdf3a6a0644d37a0f48133f8ad0b5298cc2c574102868542ba4eb","impliedFormat":1},{"version":"c6a82a9673ba517cf04dd0803513257d0adf101aed2e3b162a54d840c9a1a3b2","impliedFormat":1},{"version":"fc9f0f415abaa323efcecc4a4e0b6763bfe576e32043546d44f1de6541b6399b","impliedFormat":1},{"version":"2c4d772ac7ac56a44deef82903364eb7c78dd7bc997701123df0ce4639fe39bb","impliedFormat":1},{"version":"9369ef11eed17c1c223fdea9c0fa39e83f3722914ef390b1448db3d71620c93a","impliedFormat":1},{"version":"aa84130dbc9049bba6095f87932138698f53259b642635f6c9e92dd0ddc7512c","impliedFormat":1},{"version":"084ceadd21efabd4b58667dca00d4f644306099151d2ee18cd28a395855b8009","impliedFormat":1},{"version":"b9503e29f06c99b352b7cae052da19e3599fa42899509d32b23a27c9bb5bebf6","impliedFormat":1},{"version":"75188920fe6ccc14070fe9a65c036049f1141d968c627b623d4a897ec3587e15","impliedFormat":1},{"version":"e2e1df7f45013d2b34f8d08e6ae5a9339724b0ea251b5445fcca3e170e640105","impliedFormat":1},{"version":"af06feb5d18a6ea11c088b683bdb571800d1f76b98d848eecdf41e5ec8f317fd","impliedFormat":1},{"version":"0596af52b95e0c8adc2c07f49f109d746b164739c5866fa8bb394dd6329a3725","impliedFormat":1},{"version":"c3365d08fe7a1ccc3b8e8638edc30123007f3241b4604e2585b9f14422ab97d8","impliedFormat":1},{"version":"a7a3d96b04bb0ec8cb7d2669767c4756f97dd70d08548f9e6522dde4de8e8a03","impliedFormat":1},{"version":"745e960e885a4ba04c872225cbb44bd67a7490d169ceaefab7c0dfc444768676","impliedFormat":1},{"version":"0b1ce1768cde3535493a9daf99e3bbb8c7dcc3a7f9d8cd358cb846af71ce5cdf","impliedFormat":1},{"version":"48b9603f6e8a7c94b727277592a089f94261baa64e6c9d18165da0481663a69e","impliedFormat":1},{"version":"3c20a3bb0c50c819419f44aa55acc58476dad4754a16884cef06012d02b0722f","impliedFormat":1},{"version":"4dc64902cb86e677a928293593658fbf53388f9a30d2b934140c70a7267b07ec","impliedFormat":1},{"version":"cb4fd56539a61d163ea9befe6b0292c32aa68a104c1f68f61416f1bc769bcfba","impliedFormat":1},{"version":"0d852bdc2b72b22393a8eebe374ee3efe3e0d44e630037b5e1b6087985388e62","impliedFormat":1},{"version":"b6c9a2deefb6a57ff68d2a38d33c34407b9939487fc9ee9f32ba3ecf2987a88a","impliedFormat":1},{"version":"f6b371377bab3018dac2bca63e27502ecbd5d06f708ad7e312658d3b5315d948","impliedFormat":1},{"version":"faa72893e85cb8ebb1dafde6b427e5204e60bb5f3ee6576bb64c01db1f255bc8","impliedFormat":1},{"version":"95b7ed47b31a6eaddcdd853ee0871f2bb61e39ce36a01d03dfafb83766f6c10c","impliedFormat":1},{"version":"19287d6b76288c2814f1633bdd68d2b76748757ffd355e73e41151644e4773d6","impliedFormat":1},{"version":"fc4e6ec7dade5f9d422b153c5d8f6ad074bd9cc4e280415b7dc58fb5c52b5df1","impliedFormat":1},{"version":"3aea973106e1184db82d8880f0ca134388b6cbc420f7309d1c8947b842886349","impliedFormat":1},{"version":"765e278c464923da94dda7c2b281ece92f58981642421ae097862effe2bd30fa","impliedFormat":1},{"version":"de260bed7f7d25593f59e859bd7c7f8c6e6bb87e8686a0fcafa3774cb5ca02d8","impliedFormat":1},{"version":"d95c4eaad4df9e564859f0c74a177fa0b2e5f8a155939b52580566ab6b311c3f","impliedFormat":1},{"version":"7192a6d17bfa06e83ba14287907b7c671bef9b7111c146f59c6ea753cfc736b9","impliedFormat":1},{"version":"5156d3d392db5d77e1e2f3ea723c0a8bd3ca8acffe3b754b10c84b12f55a6e10","impliedFormat":1},{"version":"a6494e7833ee04386a9f0c686726f7cb05f52f6e069d9293475ccb1e791ee0da","impliedFormat":1},{"version":"d9af0c89a310256851238f509a22aa1071a464d35dc22ea8c2a0bae42dd81bc5","impliedFormat":1},{"version":"291642a66e55e6ca38b029bc6921c7301f5c7b7acf21ae588a5f352e6c1f6d58","impliedFormat":1},{"version":"43cd7c37298b051d1ce0307d94105bcd792c6c7e017282c9d13f1097c27408e8","impliedFormat":1},{"version":"e00d8cce6e2e627654e49c543b582568ad0bf27c1d4ad1018d26aff78d7599df","impliedFormat":1},{"version":"ed13354f0d96fb6d5878655b1fead51722b54875e91d5e53ef16de5b71a0e278","impliedFormat":1},{"version":"fcb934d0fcdee06a8571bd90aa3a63aa288c784b3ebcecfe7ae90d3104d321f4","impliedFormat":1},{"version":"af682dfabe85688289b420d939020a10eb61f0120e393d53c127f1968b3e9f66","impliedFormat":1},{"version":"0dca04006bf13f72240c6a6a502df9c0b49c41c3cab2be75e81e9b592dcd4ea8","impliedFormat":1},{"version":"7dc0b5e3d7be8e1f451f0545448c2eaa02683f230797d24434b36f9820d5a641","impliedFormat":1},{"version":"247af61cdc3f4ec7876b9e993a2ecdd069e10934ff790c9cee5811842bff49eb","impliedFormat":1},{"version":"4be8c2c63d5cd1381081d90021ddfaef106881df4129eddeeaba906f2d0f75d0","impliedFormat":1},{"version":"012f621d6eb28172afb1b2dc23898d8bc74cf35a6d76b63e5581aa8e50fa71b3","impliedFormat":1},{"version":"3a561fa91097e4580c5349ce72e69d247c31c11d29f39e1d0bd3716042ff2c0b","impliedFormat":1},{"version":"bc9981a79dda3badea61d716d368a280c370267e900f43321f828495f4fef23c","impliedFormat":1},{"version":"2ed3b93d55aea416d7be8d49fe25016430caab0fe64c87d641e4c2c551130d17","impliedFormat":1},{"version":"3d66dfc31dd26092c3663d9623b6fc5cec90878606941a19e2b884c4eacd1a24","impliedFormat":1},{"version":"6916c678060af14a8ce8d78a1929d84184e9507fba7ab75142c1bcb646e1c789","impliedFormat":1},{"version":"3eea74afae095028597b3954bde69390f568afc66d457f64fff56e416ea47811","impliedFormat":1},{"version":"549fb2d19deb7d7cae64922918ddddf190109508cc6c7c47033478f7359556d2","impliedFormat":1},{"version":"e7023afc677a74f03f8ccb567532fe9eedd1f5241ee74be7b75ac2336514f6f6","impliedFormat":1},{"version":"ff55505622eac7d104b9ab9570f4cc67166ba47dd8f3badfb85605d55dd6bdc9","impliedFormat":1},{"version":"102fac015b1eebfa13305cb90fd91a4f0bbcabb10f2343556b3483bbb0a04b62","impliedFormat":1},{"version":"18a1f4493f2dbad5fd4f7d9bfba683c98cf5ed5a4fa704fa0d9884e3876e2446","impliedFormat":1},{"version":"f57e6707d035ab89a03797d34faef37deefd3dd90aa17d90de2f33dce46a2c56","impliedFormat":1},{"version":"cc8b559b2cf9380ca72922c64576a43f000275c72042b2af2415ce0fb88d7077","impliedFormat":1},{"version":"1a337ca294c428ba8f2eb01e887b28d080ee4a4307ae87e02e468b1d26af4a74","impliedFormat":1},{"version":"310fe80ff40a158c2de408efbe9de11e249c53d2de5e33ca32798e6f3fbc8822","impliedFormat":1},{"version":"d6ce96c7bb34945c1d444101f44e0f8ba0bba8ab7587a6cc009a9934b538c335","impliedFormat":1},{"version":"1b10a2715917601939a9288d49beccd45b591723256495b229569cd67bbe48a8","impliedFormat":1},{"version":"7498dfdeed2e003ec49cdf726ff6c293002d1d7fdadbc398ce8aafe6d0688de7","impliedFormat":1},{"version":"8492306a4864a1dc6fc7e0cc0de0ae9279cbd37f3aae3e9dc1065afcdc83dddc","impliedFormat":1},{"version":"9c86abbc4fd0248f56abc12aaecd76854517389af405d5ec2eb187fdb00a606f","impliedFormat":1},{"version":"9ffd906f14f8b059d6b95d6640920f530507e596e548f7a595da58ab66e3ce76","impliedFormat":1},{"version":"1884bccc10ce40adca470c2c371c1c938b36824f169c56f7f43d860416ca0a4c","impliedFormat":1},{"version":"986b55b4f920c99d77c1845f2542df6f746cb5adc9ab93eb1545a7e6ef37590d","impliedFormat":1},{"version":"cd00906068b81fbd8a22d021580ac505e272844408174520fafed0ae00627a5d","impliedFormat":1},{"version":"69fab68a769c17a52a24b868aeb644f3ee14abaa5064115f575ddd59231105ce","impliedFormat":1},{"version":"e181eb86b2caf80fe18c72efce6b913bc226e4a69a5456eaf4f859f1c29c6fd6","impliedFormat":1},{"version":"93f7871380478bc6acf02ad9f3dc7da0c21997caebbe782eb93a11b7bd06a46d","impliedFormat":1},{"version":"d00279ab020713264f570d5181c89ca362b7de8abddf96733de86bce0eca082c","impliedFormat":1},{"version":"f7db473f1d5d2a124f14886ac9dbfeccfbb94a98bbe1610a47c30c2933afa279","impliedFormat":1},{"version":"f44cf6c6d608ef925831e550b19841b5d71bd87195bd346604ff05644fb0d29c","impliedFormat":1},{"version":"154f23902d7a3fcdace4c20b654da7355fee4b7f807d1f77d6c9a24a8756013a","impliedFormat":1},{"version":"562f4f3c75a497d3ad7709381f850bb8c7646a9c6e94fdf8e91928e23d155411","impliedFormat":1},{"version":"4583380b676ee59b70a9696b42acfa986cd5f32430f37672e04f31f40b05df74","impliedFormat":1},{"version":"ad0a13f35a0d88803979f8ea9050ad7441e09d21a509abf2f303e18c1267af17","impliedFormat":1},{"version":"ba9781c718ab3d09cbde1216029072698d2da6135f0d2f856ba387d6caceb13e","impliedFormat":1},{"version":"d7c597c14698ba5fc8010076afa426f029b2d8edabb5073270c070cc645ba638","impliedFormat":1},{"version":"bd2afc69cf1d85cd950a99813bc7eff007d8afa496e7c2142a845cd1181d0474","impliedFormat":1},{"version":"558b462b23ea186d094dbff158d652acd58c0988c9fd53af81a8903412aa5901","impliedFormat":1},{"version":"0e984ae642a15973d652fd7b0d2712a284787d0d7a1db99aa49af0121e47f1df","impliedFormat":1},{"version":"0ad53ee208a23eef2a5cb3d85f2a9dc1019fd5e69179c4b0c02dc56c40d611c4","impliedFormat":1},{"version":"7a6898b26947bd356f33f4efef3eb23e61174d85dca19f41a8780d6bb4bfb405","impliedFormat":1},{"version":"9fe30349d26f34e85209fb06340bac34177f7eae3d6bb69dc12cd179d2c13ddf","impliedFormat":1},{"version":"d568c51d2c4360fd407445e39f4d86891dba04083402602bf5f24fd3969cacbb","impliedFormat":1},{"version":"b2483a924349ec835f4d778dd6787447a2f8bfbb651164851bff29d5b3d990a6","impliedFormat":1},{"version":"aae66889332cff4b2f7586c5c8758abc394d8d1c48f9b04b0c257e58f629d285","impliedFormat":1},{"version":"0f86c85130c64d6dbe6a9090bb3df71c4b0987bce4a08afe1ac4ece597655b9c","impliedFormat":1},{"version":"0ce28ad2671baed24517e1c1f4f2a986029137635bce788ee8fb542f002ac5b8","impliedFormat":1},{"version":"cd12e4fe77d24db98d66049360a4269299bcfb9dc3a1b47078ab1b4afac394cb","impliedFormat":1},{"version":"1589e5ac394b2b2e64264da3e1798d0e103b4f408f5bae1527d9e706f98269c7","impliedFormat":1},{"version":"ff8181aa0fde5ec2d737aecc5ebaa9e881379041f13e5ce1745620e17f78dcf9","impliedFormat":1},{"version":"0b2e54504b568c08df1e7db11c105786742866ba51e20486ab9b2286637d268f","impliedFormat":1},{"version":"bc1ffc3a2dca8ee715571739be3ec74d079e60505e1d0d2446e4978f6c75ba5c","impliedFormat":1},{"version":"770a40373470dff27b3f7022937ea2668a0854d7977c9d22073e1c62af537727","impliedFormat":1},{"version":"a0f8ce72cb02247a112ce4a2fa0f122478a8e99c90a5e6b676b41a68b1891ad2","impliedFormat":1},{"version":"6e957ea18b2bf951cf3995d115ad9bfa439e8d891aeb1afc901d793202c0b90d","impliedFormat":1},{"version":"a1c65bd78725f9172b5846c3c58ddf4bcbb43a30ab19e951f0102552fbfd3d5d","impliedFormat":1},{"version":"04718c7325e7df4bac9a6d026a0a2bd5a8b54501f274aaf93a03b5d1d0635bd1","impliedFormat":1},{"version":"405205f932d4e0ce688a380fa3150b1c7ff60e7fc89909e11a33eab7af240edb","impliedFormat":1},{"version":"566fc1a6616a522f8b45082032a33e6d37ff7df3f7d4d63c3cce9017d0345178","impliedFormat":1},{"version":"3b699b08db04559803b85aa0809748e61427b3d831f77834b8206e9f2ed20c93","impliedFormat":1},{"version":"b27242dd3af2a5548d0c7231db7da63d6373636d6c4e72d9b616adaa2acef7e1","impliedFormat":1},{"version":"e0ee7ba0571b83c53a3d6ec761cf391e7128d8f8f590f8832c28661b73c21b68","impliedFormat":1},{"version":"072bfd97fc61c894ef260723f43a416d49ebd8b703696f647c8322671c598873","impliedFormat":1},{"version":"e70875232f5d5528f1650dd6f5c94a5bed344ecf04bdbb998f7f78a3c1317d02","impliedFormat":1},{"version":"8e495129cb6cd8008de6f4ff8ce34fe1302a9e0dcff8d13714bd5593be3f7898","impliedFormat":99},{"version":"36e29bad31d34a8c5ef2a7bffd1d1d4a6ecb56cf7044bba3f3fb53af664cc995","impliedFormat":1},{"version":"0b66db734128f1dc8452ce19ac48a36b302c9d5f1471c9185dc00f7a1be37df4","impliedFormat":1},{"version":"ee11a267440026e7c77125f45576cbc1c10d16b7adb54455cc01b6e3921c2a50","impliedFormat":1},{"version":"c985b87d83e53c26af225df37603fe0ac73038f573ab483b0f6e46b007c5e26d","impliedFormat":1},{"version":"16644569c814ea007149afbc849ba0dc726887e4baa513156787fbeccc96bb5f","impliedFormat":1},{"version":"7f1a813bfc91a99771d5ded13f6f4c55138567f145051ffccd14219ac6495156","impliedFormat":1},{"version":"0693e3c9523391eb333248236f4e4df9a63961d729cda0081302ebf04e4745be","impliedFormat":1},{"version":"8456ecc963bc4816e34b14dba7c5806a674a9305778fedd44bd3fb9f7cd0a278","impliedFormat":1},{"version":"ef79a08ff6dbf02d7aa850d03768dfa7da8d38f1f8f1f70b5554b2eb69e30ef9","impliedFormat":1},{"version":"4b01bf8cb509dd9235289ae0f1dc1d11973eeae5c4e8a6f4f1f7e7a0fbd9981f","impliedFormat":1},{"version":"42333ff4abd55ed8522227f405936132874e3d9a3bb1cd43aa65816352ce51cc","impliedFormat":1},{"version":"360564742c5dc4a3606c7460c857b8602bd3642c463cc97468b40288bf8bbea2","impliedFormat":1},{"version":"69cb2a2d292615c3a90be6ae20cdfbba3e2a934c698c0b08aa042b70f3d1cf81","impliedFormat":1},{"version":"296d4f462ea7a071d145b4d2cbd5171ae1656a2b96e23aa95359c4d3fc1d9956","impliedFormat":1},{"version":"381efc65dd0d9c42d29cba0b662de1cf59e8d90c7e49fe1adcbb5f0e76a26ca0","impliedFormat":1},{"version":"fa1cba739d46abb87fbb0c567976c22412c64a8c319bc44e20f14c04b06fb96f","impliedFormat":1},{"version":"18c93713d0d514633603fe9a8cd44d7fbc90f23a231cd2c9a90aeaa3996837d6","impliedFormat":1},{"version":"48c5cee2757d97d85d2f01d3f29a9268f56eaea28cbbada0e98f948cfcbc7770","impliedFormat":1},{"version":"9d883529d433813184507105831699ae39720823464470da0f9584d0225b36b7","impliedFormat":1},{"version":"2b4276dde46aa2faf0dd86119999c76b81e6488cd6b0d0fcf9fb985769cd11c0","impliedFormat":99},{"version":"38d4cff03e87dc58bfd50ffe5a3fb25e6e6d4136a1282883285baf71d35967c5","impliedFormat":99},{"version":"5ecea63968444d55f7c3cf677cbec9525db9229953b34f06be0386a24b0fffd2","impliedFormat":99},{"version":"6ea9c8bf2ae4d47a0dbc2a1f9ac1e36c639b2ac9225c4d271c2f63a2faf24831","impliedFormat":99},{"version":"a3d603c46b55d51493799241b8a456169d36301cc926ff72c75f5480e7eb25bf","impliedFormat":99},{"version":"90fcbd9deee8433092df459e5d136eb37667255f249d434f950874c96c27a81c","impliedFormat":99},{"version":"4e2d11861154220b941057210b53821022eb078f52a69bad9c44a0f3f4aaedb9","impliedFormat":1},{"version":"0c9175b5bd2e620bf90a40f4cdd308d533e348a9157dd6f2b8c2d5e181ce77bc","impliedFormat":1},{"version":"64a969b47b262c15b44bfcaaaa5a54339297ae5f1469a0c1d7d4620decbc5cfe","impliedFormat":1},{"version":"1bb9f4917e13faf29f47d4ca63641fbb2d304bd9a95e234dd74d8978231d8c8c","impliedFormat":1},{"version":"83ca8a0119f730a4200e6af658a21b838dd22cc79067e521b86b996fd415cbc6","impliedFormat":99},{"version":"f22075cd085a130131c0ebcdd471f2424bbe460ef68d7d5b50bf691b58ba2bac","impliedFormat":99},{"version":"a44f76fff2f69355e47e2895eca18af4c28a6862abc9125fe266a67111753b5a","impliedFormat":99},{"version":"fa65cce77db690964d095c4ef94f386b8a925d4c164ab89babb427f8557d865c","impliedFormat":99},{"version":"3f0136f80003bf8b2841adb7f3f5e27128eebe41dd3cfa6772586048a3e32311","impliedFormat":99},{"version":"a212fad2d57539fb4523624ae54bbe0b25073927aa84d4bca39735dc0e8531a7","impliedFormat":99},{"version":"a288a8cb67c1c923801463083573c9d2042b51c6bca982c41687b134cb101628","impliedFormat":99},{"version":"f35f9295848dda94b0a134d2b456e96b51fb658c29f816520daa289ca42485e8","impliedFormat":99},{"version":"9ba6e9061b3feb1a2d855586d67db82ea048720fa2202aa7e231aa5da4f7c1ac","impliedFormat":99},{"version":"9d3ab4f2ede93d02afe035f45822ecaf2ee0cc4b2c4d690f930f7eb417c2d317","impliedFormat":99},{"version":"9cb1abef450de3c94f0fb8868e08fee13ce0284a1d799ceb0d62d20f7e44d915","impliedFormat":99},{"version":"63bcf5cf036269d1cafe17c5f41314658afa0955d95efcbbdccf3916cac6ce49","impliedFormat":99},{"version":"756213e07866fa181de30d9b031d63ccd616bdf2003fc319612514916406f5ff","impliedFormat":99},{"version":"f39e2ee6ed6a453dbb5aa583bd8508912a7f0a1236dd4a42255dcd8aacc5c6e7","impliedFormat":99},{"version":"d5df36eb8879f0fd592e0fbde3b29318b989c97eb93e4727e9b304d7564adcf7","impliedFormat":99},{"version":"2178c14f77641be7147cbfbcf5d4381a6740b579693971c9829bb485c50b808e","impliedFormat":99},{"version":"188c0a555bb354ebce13d88f9d59341d5beec73aa0cd4688b422f8375019295e","impliedFormat":99},{"version":"45aa152e9a85a5a895e9d81171414cd803b5c3aac5c9a120f527dfe202d18424","impliedFormat":99},{"version":"edab0e84c0ea36b2c682ea68390d2b6571db78de209e58a60b51ca5712289be7","impliedFormat":99},{"version":"ee27415e33df9b86af9f0a0c58b9a4ffdf393ef49462429423ac2bcb5e00db0e","impliedFormat":99},{"version":"d986dfe24545378173b2674fbf41939395abf993432a5b5831a75900b86780d1","impliedFormat":99},{"version":"62914eae016cc07be599c7c594d9aca77aecda9688e285f0e9b28b01eb0c6b5d","impliedFormat":99},{"version":"8acce26b02c92d26c2937f3fab228ad635db5218e16bca90d20a609d7103103d","impliedFormat":99},{"version":"58c966c3de7741c7657080e3a7287e65d4b24e8eb730fba5d20c27ba8c657194","impliedFormat":99},{"version":"3cb574913ea25e7b27d26350a6a86a5c88000d054d6ae67ecc4dc2da3c346ff2","impliedFormat":99},{"version":"db064e58ec48dc1919d5527a4c8d3cdd64d315a7b2117f410a0d8eba023f5e5a","impliedFormat":99},{"version":"1ebf664b312148f43ab66b0697e7705e342b5224b07663b9739a9036f2e8a5df","impliedFormat":99},{"version":"8633998b325554c7bc52b4863fdad0bd22dd69554888ae5551977d6c62fa7234","impliedFormat":99},{"version":"568780fcdac2403b5e4944c680be60f04466f16b6d8830459eaf341e4635aec8","impliedFormat":99},{"version":"43f5e5d9786a6f7ac58b72df14ea7f3dae1935b244e5175fcd34c89fbcb3edbe","impliedFormat":99},{"version":"08d88160e4d9614577b36d09b56607b0ea066963d97e500deadb1c0671c802b1","impliedFormat":99},{"version":"6b6936838074331a1e4ed2a836672b4612bb336ef2e8eef56b5cb1df1f163bc9","impliedFormat":99},{"version":"a40125dc53d6e8fd92b6f521f6a339b8892e1e1ab2ec20c3739f305f0a2b3b7a","impliedFormat":99},{"version":"63c14f1a25cc9af22040f4e50b2ef46c8c5c746acd3629fae2db1d8be17262f0","impliedFormat":99},{"version":"b37f94a72f75b015035682f3fca650a3997b23416379f2430afe8a78c7ff199f","impliedFormat":99},{"version":"d91ac32532d59d549aea318a1dd4346228e69180623c26d78cc77ff96e7e527a","impliedFormat":99},{"version":"634eaea224f99dead236b11bd9a612371551654d84f1f77a2943df2f8a464567","impliedFormat":99},{"version":"a9ec13c0152633b349e7f85bcc1849eee49ea0ba1b6f2d30594a0207041b87ed","impliedFormat":99},{"version":"4a068a0e2cb2e8263521977da21b35ebdee3bf7ae2f0ee3182030f344925ea34","impliedFormat":99},{"version":"aaeedd2494f6963f742f3c732cbc6707532b1125045b70ee9dc15d70aea4e6eb","impliedFormat":99},{"version":"1817b2e383223f38a5cfbb95fdd9d2824eeac637b752f4593d8ded810df686b7","impliedFormat":99},{"version":"636b68c90155a7b3e44852e7c6700b2773d70a88535d827bcef0b2ec0e43d1d6","impliedFormat":99},{"version":"fe25b7a29f635a3faf406792174c87223af5cbb2f2b7916f723e3b1bee1db6b0","impliedFormat":99},{"version":"a6f01bfdefdc0b7f68f3c73cf50d966d8e004559aaa00f9b957e5c15c9fb6daf","impliedFormat":99},{"version":"b4b781ac2fa564ddd469604057941b084c34b9f17cba20c6c5fb64f81fe20eda","impliedFormat":99},{"version":"0960051f0e7beeb8e7e00bc526dd17ceebfc49c918989a88e31b7b348455c55e","impliedFormat":99},{"version":"ceec621e7f442ca6ce7f89886531de82cedac0f207475d7988461678ccdbc46f","impliedFormat":99},{"version":"289133e7b6d773a0dd8a38e31252f8ff19a5a3c11ae0ef354acb36ebab79a08c","impliedFormat":99},{"version":"c11f63e3cf21540be513088ea6dfab1fc474ee011e7686f96e846f3caeb79f53","impliedFormat":99},{"version":"0c228ad3d53c5d7eb6b1f8b306fffff5bc1e4d6c7663790b7813f44a11277555","impliedFormat":99},{"version":"c852ec8f5257701147c8e19d8dbb8b9f89659982559678b3cf4df1b87c6b61db","impliedFormat":99},{"version":"c05bffd82ccef5be3dbaa20cafe4460f141bee5419fbd3f8fd421926546375fe","impliedFormat":99},{"version":"95ba593633b6f71e400f9b0bbce20d55b01baf8da698866af87ea3d204929c7b","impliedFormat":99},{"version":"ee63e12faec9f15ece2215f8ffe3400dc3c58bf3598f23e06eb393443d622bc6","impliedFormat":99},{"version":"3fd396436c5f6447620ec2b10cbb73c0fb6bdbb40255875471ba9099b5cef057","impliedFormat":99},{"version":"d3b484173a40d96e1a1f84607c6d3181ec58f99a2ccb44a9a9483c746ff1d889","impliedFormat":99},{"version":"b2f4c5c351eb14e0491a835a7df6edfbf9add2a9ee0398d27dbc23cc2154fce2","impliedFormat":99},{"version":"3a4104be36d6764f94b49da4c2912436ce8db9b596af87ad8208fd30edf67cc3","impliedFormat":99},{"version":"89e4dee3d22af342783f1be94b90086b76050eac85183ae5f99349ff3be34620","impliedFormat":99},{"version":"72e003b2c2d73b8980f2cc091dd2ed5fdd58ca3901bda2dae148964b1424b68d","impliedFormat":99},{"version":"b62c6e4674b2ec3b4f37c17bd0fa88e5a8b0c3130e0d77b3c739cbc8eb7f7b7b","impliedFormat":99},{"version":"e26a17cdd3eae370141f54212e65d035755ab759da211eab198663b1f5571e78","impliedFormat":99},{"version":"acdcd28f22beeb7564926225c41a2a4f018b61cf7ed2874bc351059b9c82521c","impliedFormat":99},{"version":"b816c66fd566bf325d3f2fbbae36f480afb1d04f960135dc8254e5d0d3d6403e","impliedFormat":99},{"version":"4525de65826e7dc48909a0349696b4b400ad2312c2cf04a656d949600491e793","impliedFormat":99},{"version":"a51ef269c38659810a4400bc61d058d64a023b0ba4d99eae1f96a1a8ba3c0889","impliedFormat":99},{"version":"8b95503320d19cc20b4455b13e8abfd5b6bac1cd3d64d1099d3f943c1f75d16d","impliedFormat":99},{"version":"a9cfc9543943d597dc5f3cc4231bd606c0891b5b7d95d3c0a3c357247ad13efb","impliedFormat":99},{"version":"26bf7ff148c9858001df0e926c4754ed98e14578603a57abd01bc1ff47b74646","impliedFormat":99},{"version":"959d339c34aed58f8951ff5694412a0de7bc524b970c6c1809df8f84526204b2","impliedFormat":99},{"version":"5f072af48d5448c3bf1a42dfbce09ecbe619dfad5e755b46aa9208657ca3ac91","impliedFormat":99},{"version":"ae55114dc5769203d4624c4ec1443dacb65756eb2a4f3501514e0b55d8261e10","impliedFormat":99},{"version":"bb76ffd17b2f2dc89a695943c524fd253b2e62850003296d05451437b036930a","impliedFormat":99},{"version":"359b15bb457cd98409e1bedfafff3a326dd653e57ce332a163ee7531bc503e7b","impliedFormat":99},{"version":"6f4dd5823236e281bd9777d27110c889bae179c950534a65482b3bd8b6450590","impliedFormat":99},{"version":"e201187dd90a20af63deed3787aaf5510f5887ce2b8e56dbed848e687f776ef7","impliedFormat":99},{"version":"485ce8923b4c68f1e973e58e5c99de8c3a5495b7e3fa86bed2b18face29d691c","impliedFormat":99},{"version":"1d0bceb8eff6e81e5d2e082f74fdfb0c870845135433f2e2a5a08fd0ea86cdf7","impliedFormat":99},{"version":"d9affb744ad7c29dc28bbc1b09f6edb7ef98d78554cd5bb8b5e449cfdc75b922","impliedFormat":99},{"version":"f22410a757278fc59e6e6e2b11ff934ddb03273d9c9102271b711e533b1f19e1","impliedFormat":99},{"version":"745ea53849be153ed733f5be27722378c89fe813b43b3b2798db370dd204df63","impliedFormat":99},{"version":"9fcbdf19795129354ce740c9e6f3f87e3646a158b0ff8ae9370d4d6d8427c585","impliedFormat":99},{"version":"ce2b3d20407b51a5d3176d05dfe66824ef5bd810e4dce3d6653073a9b8135c0f","impliedFormat":99},{"version":"33ec1dfc03c64c66974c8e3b1428045efdcbb9c121914467396b2c21d9d4eb4a","impliedFormat":99},{"version":"93a5f2a6b98cb165fe56377ca9d1c786062bf5f60dbc0dbd1b8ffc37bf2058ed","impliedFormat":99},{"version":"ac3d71a464b0c0d7b74e5e54cdfc8b66ca0c4d24e479c541be105a6a5f3437d4","impliedFormat":99},{"version":"8a309783376df92e49ec85d8d67644e9c68529e3ff8981eca03a5d182970a370","impliedFormat":99},{"version":"ebcc8c9286da7ffa1c10f126ff13b9e17b459f52348160a4e6e799c55b16c8cd","impliedFormat":99},{"version":"a35800efccf9b29ad232b07b7f4477b832f737c27b23a0f80d0c15d9fc7a83d1","impliedFormat":99},{"version":"a729483a0cfda4e5cd0da3610856aaa0047885ce965ef7e906eb501c4cc83ab1","impliedFormat":99},{"version":"1a8d13160ce2d91ae12f99391ff8d45e8025f655e8b3ca5493bb97e7a551b8cf","impliedFormat":99},{"version":"ee306cf4448abdc53b27bdd079f944d60b8b97fdf3807ab8f2ef6ac338058e27","impliedFormat":99},{"version":"3f6e344f84f047c66cae945e44e5efc833cf74d70ff9c2fd43ed931f8b4f613b","impliedFormat":99},{"version":"fd74e506283ed9a0fd33380c787833107763698bacd3de89fce55bf386f10530","impliedFormat":99},{"version":"cc629838fedbcb3b019abeae39d7633b23e316b1f4e07e8b3bd6af3dbb3352fd","impliedFormat":99},{"version":"6519c8402b2ca27e658cb4e357a51b5ef921fd17459d0f7ff1a809623e89e65d","impliedFormat":99},{"version":"e64df60cfb87bc304f8955948297bcc08cc56bf4eac3aa8307655edf2e3f4c94","impliedFormat":99},{"version":"6f6c565c4922ea624dd9e4fa147e0f954ed483cfae04c1a79e3dfbbe5a34b301","impliedFormat":99},{"version":"4b26dc473060c217ffdee9d8acbeb42f2b5f47e456abf642bc9bf43c55b631d5","impliedFormat":99},{"version":"b8c22ef6bac62298a1d42beaa496a5c25d41d58aa52c75ab20a180bdf0e40d20","impliedFormat":99},{"version":"3b193ba20407b9c7593e89f3b60471e542f1eb5b3d96086db92303088bc4c7d1","impliedFormat":99},{"version":"b45c8cc49500a28c92220eee45f2a5114d050c7bdb47db2f3ccac84e0820519f","impliedFormat":99},{"version":"ec4fae13ecde25181827193439d8e1b65c5f1046274ff4bc77221440cb289814","impliedFormat":99},{"version":"ff562477c8a16ee5f4bcef5a6fa4f15f81c7d6b266ee70f65f148c58daca4e1f","impliedFormat":99},{"version":"4546f9dab5bb28dbd5e7107837d8e831c7f711d93aef4158e4a7bccb6b6c6434","impliedFormat":99},{"version":"7c5bb0778e9a110cf9d7bc56778092e0c7085ca9310614232b5976d60d155eab","impliedFormat":99},{"version":"ff03706640bcac77e4f58adf06ec0031be0d0cca8a923a1faf20556e44bd050d","impliedFormat":99},{"version":"5254d6dcd66682e15c0391b36cf203b4835bdd06f7645c06cdbf3048a7e9453d","impliedFormat":99},{"version":"3363113ee6288a60931f54adb1f0642cbfd1e5b56e0222658d8f286762a0ebc7","impliedFormat":99},{"version":"f5d111df38da163ed1524d80053818f4a8b7a6ef9f1038b71438cd37155a5636","impliedFormat":99},{"version":"1e8325d4006884b0f386f48ba38b6da98ef76101275c8df9dcadc2791ced930e","impliedFormat":99},{"version":"57fc1c850ea0621398ce9b2eef1478a84d81dce619d9166929677111d19354b4","impliedFormat":99},{"version":"aaee889cd9f6dadecd10cd1b2200862b472c495f50e559b9c8eaae345ad26f9a","impliedFormat":99},{"version":"bc792fe4deb6e29a4ee455abe81ccc82e8f812893df98f372d9939e4a0f531d5","impliedFormat":99},{"version":"7e535aa0b32594cfac46eee313f8cb29e6b4bc45756701bbd0005c2cae78d02b","impliedFormat":99},{"version":"38a0236a27a2010cd8f7dc7549015cd2a7b7ec134b20bdc7a7ad4131c8b25922","impliedFormat":99},{"version":"2c4ed82fb9ac542cb6462700c8efc5d3159f6eafa1df20becfef616747339212","impliedFormat":99},{"version":"cacab561eb0ae2fecb00c1a144017cd07db81369e51084307e211e916bfc3934","impliedFormat":99},{"version":"ea4729dc4e138eddca2938e106676d9b1213978c2a01c883ab777c215319bfb5","impliedFormat":99},{"version":"a4f66519474561c34c96e0725de0f843876ca29c8f3809b228600f3da43c45d3","impliedFormat":99},{"version":"7b08db00400f9d3a46cb8cc38b41c2030374afb2104d26cece2d044d19764921","impliedFormat":99},{"version":"80412d2831bb2f40d8a0262f1206f016fbae8b853d5032a887e96c0693611f3e","impliedFormat":99},{"version":"8d5f1e5e5d70505b92d4fe6115799343827aabbc1d79d78cdaad40f9496196d6","impliedFormat":99},{"version":"ede9149cc681915a2c58c4d6b769eb6a710fa7ee8349375ed1b248489f02fdf1","impliedFormat":99},{"version":"41067082ac23b2056b6798738ad14fcdf44cb61baa544105fc58a8d0087a4b7f","impliedFormat":99},{"version":"cded066f47040ea576d4a8a5a1d23bd36998586eb0fccb9ee2397d0d867fcabc","impliedFormat":99},{"version":"292c62ec0f13939485b1d07267efda774a1f1c28427d9ce0587bee7814a272ab","impliedFormat":99},{"version":"e4cfb3009d72aa786b5aaeda0e30d92f31d9a3068256300a533ea212a597c1db","impliedFormat":99},{"version":"ff06cc0f0c793791fbeaefdcb53f07ce4e8339b6943f70f8f63948059f6fa15b","impliedFormat":99},{"version":"69b1d5ea3808a205019bc47b0589e2281d79723e2ba063e6cdaf53db98e32762","impliedFormat":99},{"version":"5c18fd2063e3009ca9440e29b2b9f772dc50481e6e904bb3d7e1b7c581f44e6c","impliedFormat":99},{"version":"a3516a2ebe7d9db121c789fb16e1b8bf8a00533a460e6caf864c620cd8e2bd5a","impliedFormat":99},{"version":"9f338bcdf0a130fcbf8c6e1b815319a363d41d4fc4268dfeaf9d1a3e46783107","impliedFormat":99},{"version":"0c69100576e37fd513901728ca6c65b5010760ae951d67506438e28ecf1dfa5b","impliedFormat":99},{"version":"4fa4071720ba6a030140ad344a0be0632e45ae2bcdfe42ded1e180536a6e5ba2","impliedFormat":99},{"version":"977955f2b26844057f12b835a3e77880f28eccc4ced877078dcada38ef8104c9","impliedFormat":99},{"version":"db9df25d2b7a5698d615faa1abf5ee735f06d1a3655e09ca1dd8d42350b8bc5b","impliedFormat":99},{"version":"fa7eb1ccc4909ff72c4706df9089f068a64c39850c3c256040ebaec356be458b","impliedFormat":99},{"version":"c2544841c726a93e4f08010807a9d779d8ea49ddc8868beb7f57f4dda3935a19","impliedFormat":99},{"version":"89840555c11535e071c554ed1228c3614be696d349e82d6e3e24dc6e974d29dd","impliedFormat":99},{"version":"6303c8204067ff8a09f72a91cdc30d4050dfef631d303723cbeb90cab254f1e5","impliedFormat":99},{"version":"b7353f7699ad7820260f1a706519e6ec1fc21a02cb7f6486e81d5d764fd804f3","impliedFormat":99},{"version":"2e564d47026dcf106b73ebb6e1881e0579a82fbbb33d042e76fa9ec00e08be5e","impliedFormat":99},{"version":"342b1c58e51174ae888f5a5a9775da7ba93c02bd532381a7be2b8db892e526ea","impliedFormat":99},{"version":"f02bfbd0e9fa87e770c74a5975cad0297e76e14df5ce03ba9c9a8f06dafd0792","impliedFormat":99},{"version":"ebc91af1b516925754acc43500b0a70413e61d056ecfba030e6ff3b36a5f3ede","impliedFormat":99},{"version":"1bac668988ffddd316531ae0a6c0b37a1ed45f111f8d40970f607cec2fe48612","impliedFormat":99},{"version":"c92fb3ddd606dbfb1b0775d34ecabed90bf663ab80db33132104339c020bffc5","impliedFormat":99},{"version":"942c63de4c8e50c87753d1f341352dcfa9d72b706318b28c0e1f121b9aa9ec5d","impliedFormat":99},{"version":"129be44dd4295bc4e5ffd5542597336e57990d9b7a81e39b7234a9a598706cfe","impliedFormat":99},{"version":"3b674726455d2a57b39784de2acd0d6d320e45a851afefdabef606af08df8603","impliedFormat":99},{"version":"1c4a26f6150f60a77396ef2150f4ca1afd0bd83d3f800fe52cd3d06ac0d4f6f1","impliedFormat":99},{"version":"ad6def877dee2d3c3993c41053e2c1af8475bc969b35de4538c97f4662f3de0b","impliedFormat":99},{"version":"1d6211f24b5d168b493dc22a53db1e55dd716b5f4b0aefce397b38cc02a445b5","impliedFormat":99},{"version":"2d3f848df16ecca7d60100360c6349dec0ad9a7f0d0e39eab92f66e3bc8f098b","impliedFormat":99},{"version":"2ef18933b69b23254b0306267212f048f4fa8aefc819fcd88e0fa52552895f5c","impliedFormat":99},{"version":"a44c3aaa3483362da75c408b4cff42d8c1d218d68920d59958917aebe3477e92","impliedFormat":99},{"version":"df6d299edea81d27b89945a5cb15aa1208ae9b09b39aed06129bb24ee6ed0051","impliedFormat":99},{"version":"e5062ae8bbf2b40ff2eb2787926ddb9998bcef55d958da8bfb2cc4b8b5d1c75f","impliedFormat":99},{"version":"d0b61c74289ce1c6b6eb9eb3841296d380ef1de607ce4cbaebc4acae871e40ed","impliedFormat":99},{"version":"bc0aa6e9796b091b57cea1210f81c1f1f0091c7eed4eb04b9543d676685894b7","impliedFormat":99},{"version":"e91fa2ba0cef937bd2e9e25202bffb97bf39e04f6c2d942315d1f6c6a76020f2","impliedFormat":99},{"version":"c8d20e6ff2b7f33cac83372c716d10cfd83f64a740bbd9a8b1089a8807c1c492","impliedFormat":99},{"version":"849ac05886b0e90cb64b699d967641777b211900251365fa619771e3a7361482","impliedFormat":99},{"version":"99abeb91f93b28adf402476fe260087498c6d47e98776c5378a60f8439dd91ee","impliedFormat":99},{"version":"6000f6c1f8f865cf09210a15c95a5f8edb985c253ba8ed58b5af0772c465384b","impliedFormat":99},{"version":"113b410c407fe216ad5085197d483044d29e6ca0c7108f322ff266cb2d8ec4f3","impliedFormat":99},{"version":"fd67e0b30ec2dad92d809951f63b5982b00595ca4cf3f83823429573e40095a0","impliedFormat":99},{"version":"339f6afadcfeadf85d64924ba460411bbcca6aa599ac7eac0ed81b88d5fe5336","impliedFormat":99},{"version":"0696f165aa010e7966568dd1149b180cb9c18eada93850c8bfbdb86f5fd20017","impliedFormat":99},{"version":"f2ce7d4493d33bc2f445e367d692c52511ee0a176b64366d09a416f85e9f200d","impliedFormat":99},{"version":"7af8d19815c33100c69f36ef5fe821ee93dbd946aea977fa61ef0a566f6a604a","impliedFormat":99},{"version":"d3b9e915c202d52b0c38ff2a79703474170ee1c4e48373d275e9de659553bea5","impliedFormat":99},{"version":"556abfc8927d79afaaf0959e30e354b261cc63b9c92f8232e270f03bed7a6187","impliedFormat":99},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"156a859e21ef3244d13afeeba4e49760a6afa035c149dda52f0c45ea8903b338","impliedFormat":1},{"version":"10ec5e82144dfac6f04fa5d1d6c11763b3e4dbbac6d99101427219ab3e2ae887","impliedFormat":1},{"version":"615754924717c0b1e293e083b83503c0a872717ad5aa60ed7f1a699eb1b4ea5c","impliedFormat":1},{"version":"14e9acf826baba0ef4b5665704084896e7bcc06f65a9ab13af7e93d27d6b7069","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"21adf13435b9b748529c8cedf80f884e5130b9684188120a686cd2b26a2059c7","impliedFormat":1},{"version":"eec76bf6b9346f3f95fa402621b889489e96930e72295b0369022f332e9b4a6a","impliedFormat":1},{"version":"0ecd58f413f9bc3b7d4383eae31b0c8fc576985cd7404d6f99f8c643543ade74","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"9c32412007b5662fd34a8eb04292fb5314ec370d7016d1c2fb8aa193c807fe22","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"4d327f7d72ad0918275cea3eee49a6a8dc8114ae1d5b7f3f5d0774de75f7439a","impliedFormat":1},{"version":"6ebe8ebb8659aaa9d1acbf3710d7dae3e923e97610238b9511c25dc39023a166","impliedFormat":1},{"version":"e85d7f8068f6a26710bff0cc8c0fc5e47f71089c3780fbede05857331d2ddec9","impliedFormat":1},{"version":"7befaf0e76b5671be1d47b77fcc65f2b0aad91cc26529df1904f4a7c46d216e9","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"d33ce35e3f9cfcc1d94eca415bdd3bde94d5b153ffdd33e6c4455c029986c630","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"8aee8b6d4f9f62cf3776cda1305fb18763e2aade7e13cea5bbe699112df85214","impliedFormat":1},{"version":"98498b101803bb3dde9f76a56e65c14b75db1cc8bec5f4db72be541570f74fc5","impliedFormat":1},{"version":"4dc59f6e1dbf3d5f66660fceabe6c174d3261b37b696ae1854f0dbaf255fc753","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"436d7b4543b340b0f3eef4310d524242e41369b9652aa9c70428767c4dcac455","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"12950411eeab8563b349cb7959543d92d8d02c289ed893d78499a19becb5a8cc","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"114f493b30f364255290472111b5a4791d5902c308645670cd0401429cbc6930","impliedFormat":1},{"version":"b3fb72492a07a76f7bfa29ecadd029eea081df11512e4dfe6f930a5a9cb1fb75","impliedFormat":1},{"version":"1edd9ccdc3b948db3bb3c5484aadeb0d68e55cfa34a999d9723a80b2ab99d06d","impliedFormat":99},{"version":"984640935b059f2be0b787f57a69bfe4c76a009e339551e30d91a760471075a4","impliedFormat":99},{"version":"fe2f8331dbc13f000247ac1db1558ab40bd4e6454b2840b2fc3463b42441985e","impliedFormat":99},{"version":"951dd0bcaf733fa65e1dcb4aaa2ca671c7ea8d462299765c70173d1e66f994b4","impliedFormat":99},{"version":"733f17063c289ff48359075868c95c5327a0e024ad8898dc3b61dfffa0c52503","impliedFormat":99},{"version":"b46a0ab42c99352442a41e7aa875eb9a5128331fd663c63a07b70a82c74ef19c","impliedFormat":99},{"version":"4f1dcc1dd4a02eb27e32ec3b7d261909b26f86b0f227c3d3123b18f8d619d258","impliedFormat":99},{"version":"faf0c122fb78be6d3225da99da1b8e3f827313f73036b2e32531490948d67ea6","impliedFormat":99},{"version":"d3d1d4dad3c6deb08c0e23e6e20977f81de9cdf6370973333e3f03b7d1b79a20","impliedFormat":99},{"version":"12930cb1ba852946639362633fc6b2af3a05165c7f962fb8ef819f4c7887312d","impliedFormat":99},{"version":"146ba4b99c5feb82663e17a671bf9f53bb39c704cd76345d6c5a801c26372f44","impliedFormat":1},{"version":"13d9a439d2c92b610799100bc4f434142bc557732b14ba1080000e34928c3c76","impliedFormat":99},{"version":"8bf01f2227d670e5c0e2472b7f0aebcdd80fed20d5f3e5b1e6637f466c107e29","impliedFormat":99},{"version":"67a6f25ac963d05fc7482d0262d01c87b35db52837ef012078c3c9335ae13fa8","impliedFormat":99},{"version":"b67550edd008ae2ce5be54579b686bf3d2dd224e71f57630671025d8d41eec52","impliedFormat":99},{"version":"ed94a21dbeaca6f8935aeea03c3f327930ba0df2efd20e10d695c8b7fe434a01","impliedFormat":99},{"version":"c5245e464fdba99fdeed4ab74ec3a1c15440fbf52447260cc889a078d09455f9","impliedFormat":99},{"version":"868762eb332580bcf7bf431eb6220f2d01d1ef865e2dc3c4bf3dd84cd719cc0f","impliedFormat":99},{"version":"7ff7d567b4ba5e84f3ca58f787f532a9e99e5d06bc5f6c291793cffa81abaca4","impliedFormat":99},{"version":"01938d705887bcd95db9bf5e84688f36df79f8d51d83305dfc74d0011e06d90e","impliedFormat":99},{"version":"81dcbd9e98743a166d4ffa15c3e33ec6061f660d0fbfb22ba0500c644d062ca6","impliedFormat":99},{"version":"ffb47e8a12928de9b95df9fa79f4b97ed20da433f237658ed5e777ec7141fd42","impliedFormat":99},{"version":"d92ceb2aad8f84f3c80362706230a8090bbb9e4a4055b227ef82640d7bddd946","impliedFormat":99},{"version":"cd412c34cbc5e418fcece22c80356fd67699d31b2f5426a7690fa9ad86feae97","impliedFormat":99},{"version":"2094f98caffbe54b58453a14ce6db7acac166add0dfa70dcf12546d9156f7818","impliedFormat":99},{"version":"87226120f7b78a78ddfec32b09e29346216ba185e870fd3852fc6d4e509ce7a0","impliedFormat":99},{"version":"03cf443b7b965982549cddae7684cfac860b1f4c0f3c4e3e2ba95bfde30e4eea","impliedFormat":99},{"version":"4eb41ea325cd80a8bdf56c79cb45af166c285513b452c84710130c4da4394e02","impliedFormat":99},{"version":"05ee472e5758f04fb053b0ae36ba66ab02511e7e0e13b11393c2ac50e864726d","impliedFormat":99},{"version":"c2de9445c869aa70e9492b3ce329fdefed8dbbaeb989eeac5f001b8721ee0cd5","impliedFormat":99},{"version":"f4eaec4a1cb0fa8cbfe8b80965da5d55e5cd97b00d20e3b231a8dbb99d208988","impliedFormat":99},{"version":"e989a0466063593b86c5fcb35b524c43eb3c24424eba9b8c70b15077ce11deb7","impliedFormat":99},{"version":"c50eeb9862d51f9853a2b108326ae8eecf0ea3e2bc860c5dea783dbe1d1d119a","impliedFormat":99},{"version":"ab92533c044f8ee27832278d7d6d67ec6263a45dfee9c36cdf87a4cbbce3fb8f","impliedFormat":99},{"version":"e0b07c87c1a9f2aefb0aa63b6e271c5c8d3c67384c61f152d758667172427e4f","impliedFormat":99},{"version":"ee918800aadf43a771fa1b119fa9b683625e5b506f3fd369ca5a0be9ab44153d","impliedFormat":99},{"version":"a1effb9d7868973b135964873f9db4c39bc5718340f65be76b9a5b5dc08afcbf","impliedFormat":99},{"version":"d1ea2ab67db6ca678ffb06158cae8c42c69ef5b17356d0d73d4ff0fedfd57353","impliedFormat":99},{"version":"b5874ea4d4ff7c1f82c09d86e0f66cc2aa976a5399ba014e8c2ebfa12afa0806","impliedFormat":99},{"version":"489c205a3528f8e790dec9b2c236360b25f857c2d4416bcad88e0d7e0b0a1e94","impliedFormat":99},{"version":"dcf7e1f6ae6b3ae810c310363bd6aa38bd80eacf5d958bb16f698e09e945310e","impliedFormat":99},{"version":"dc88c40dd4bd140b17d4d2916cda76fc57eec4a2656bbf104f71b1bb2e06ca44","impliedFormat":99},{"version":"3256aba0efb5dc262160f3cc281a4de18b03402ef49a54909c0bd5003fd52b7c","impliedFormat":99},{"version":"40e5410bb58dfc9ef9b4944a7d64ce79f3684d538dbab7a721892237a6f61e1c","impliedFormat":99},{"version":"d91ed294eff78f7ef07816c514503d6b7ae9de3876d71eb3fbf550c1d173997e","impliedFormat":99},{"version":"5f3b7ec5e68ae224717da6ec98ef94c8e7eead088e3997f1723d07c4b01651af","impliedFormat":99},{"version":"87b3487a5e5f1082b57a300aaca5f7cd79784e01dda8e2b2d8dadc1457d460e1","impliedFormat":99},{"version":"91211d69e33976023d7471ecfd596ef61d303c9689ae7d9e9a9c716db855b474","impliedFormat":99},{"version":"06d41f39164e70f6316a65e0bfbf1c5e254871f73bb41738d1f566544d69adc9","impliedFormat":99},{"version":"97123d5a37d790101dddd782ab6a429a6a11b8ceae548c65e34b1f2b74110056","impliedFormat":99},{"version":"2068ec01d9de09eab73bb3b2d8da67cadfd0213be04eaefaf9d94b26d26299c7","impliedFormat":99},{"version":"91e30683efc46ed947ac79397b85405a884dcbfd3e4bb87a37a2292534e88fe3","impliedFormat":99},{"version":"06153bb1551459f400cf80503cae3063e28f88dd6c47197b60cb1e0752992b44","impliedFormat":99},{"version":"1ad02d0fcba0cf447235f6d1edfb77e2f3576faa2163e3bd1f36c8a98757c1ba","impliedFormat":99},{"version":"15be380a7098838df81e84c1b7c742227932225bffb86e8d0352ea188e211ea7","impliedFormat":99},{"version":"fdc56cc70e1d36d7ae9c3bdddc3dba4298281c2673942a554af7b3208a8c6eba","impliedFormat":99},{"version":"d4ef28f2fa80536cc251a6fedb82acae7af14cf07ab6a6f5b995b61225ce2dcf","impliedFormat":99},{"version":"30159f3e6c8472a4ee4a0f5d3180b41733a7e66993743da476acd46920513603","impliedFormat":99},{"version":"0348a564954ef638d4fd9e530367ee732c4af536b043d8250458c56a9d21433f","impliedFormat":99},{"version":"d4ef28f2fa80536cc251a6fedb82acae7af14cf07ab6a6f5b995b61225ce2dcf","impliedFormat":99},{"version":"633fc6aead993eb3e21e96d92d781a56d2012b34a3f4e68a466e0747a55a4051","impliedFormat":99},{"version":"04652108a353c1814e7f71d1463e8202ba3bd4adcee093b489065b250f73ec33","impliedFormat":99},{"version":"11e21d75da9a8b6c4fc37c17641c6faf61d2d491b827355a7e22bb88325cb994","impliedFormat":99},{"version":"f1a339847338888b27677a13936236270e73d8a7815386e4665a42248f765dee","impliedFormat":99},{"version":"bab780528e40e70b6043f3c748ebf98467f50c8c0b5fab59610c841feafe06bd","impliedFormat":99},{"version":"5594e6f917dd9e2b2987afa15211c5f483c55d466ce778ba25b545ca16d811c9","impliedFormat":99},{"version":"c6fe327c538417b8dd5b9bb32abcd7911534b10da3a4514f3445cdb28cf3abf2","impliedFormat":99},{"version":"32c6e3ef96f2bcbc1db7d7f891459241657633aa663cab6812fb28ade7c90608","impliedFormat":99},{"version":"17da8f27c18a2a07c1a48feb81887cb69dacc0af77c3257217016dacf9202151","impliedFormat":99},{"version":"0065cdb7ac9f5b19921632de63f888ec2cc11ad57f7fc868f44bf0faad2fce3e","impliedFormat":99},{"version":"8c1adc3171d0287f3a26f4891a7d1834c89999573a9b444aa5ff519dcc43a2b7","impliedFormat":99},{"version":"27aee784c447854a4719f11058579e49f08faa70d06d8e30abe00f5e25538de6","impliedFormat":99},{"version":"fbc610f9dde70f0bbea39eefec2e31ca1d99f715e9c71fb118bd2306a832bcb5","impliedFormat":99},{"version":"a829052855dca3affb8e2ef0afa0f013b03fa9b55762348b1fba76d9c2741c99","impliedFormat":99},{"version":"1d61288b34b2dd2029b85bc70fabbb1da90c2a370396d5df5f620e62eb47ddbe","impliedFormat":99},{"version":"5a2cf4cd852a58131b320da62269b2143850920ce27e8fdec41fed5c2c54ec95","impliedFormat":99},{"version":"f193437b3919bbe63c2c1bb1abe20fa3eb717ce34fc719d903077784e11e9fc7","impliedFormat":99},{"version":"6a99940a8a76a1aa20ae6f2afd8e909e47e0b17df939e7cf5a585171480655ff","impliedFormat":99},{"version":"043195af0b52aadd10713870dd60369df0377ed153104b26e6bac1213b19f63e","impliedFormat":99},{"version":"ad17a36132569045ab97c8e5badf8febb556011a8ed7b2776ff823967d6d5aca","impliedFormat":99},{"version":"698d2b22251dbbfc0735e2d6ed350addead9ad031fac48b8bb316e0103d865db","impliedFormat":99},{"version":"7298d28b75c52e89c0b3e5681eac19e14480132cd30baaba5e5ca10211a740ef","impliedFormat":99},{"version":"ff10facf373a13d2864ff4de38c4892d74be27d9c6468dac49c08adabbf9b0eb","impliedFormat":99},{"version":"97b1cf4599cc3bc2e84b997aa1af60d91ca489d96bea0e20aaff0e52a5504b29","impliedFormat":99},{"version":"853dfbcd0999d3edc6be547d83dc0e0d75bf44530365b9583e75519d35984c35","impliedFormat":99},{"version":"9c80bed388d4ed47080423402db9cb1b35a31449045a83a0487f4dfde3d9d747","impliedFormat":99},{"version":"f29bc6a122a4a26c4e23289daae3aa845a18af10da90989cb8b51987e962b7be","impliedFormat":99},{"version":"3a1f39e098971c10633a064bd7a5dbdec464fcf3864300772763c16aa24457f9","impliedFormat":99},{"version":"20e614d6e045d687c3f7d707561b7655ad6177e859afc0c55649b7e346704c77","impliedFormat":99},{"version":"aa0ae1910ba709bc9db460bdc89a6a24d262be1fbea99451bedac8cbbc5fb0cd","impliedFormat":99},{"version":"161d113c2a8b8484de2916480c7ba505c81633d201200d12678f7f91b7a086f0","impliedFormat":99},{"version":"b998a57d4f43e32ac50a1a11f4505e1d7f71c3b87f155c140debe40df10386c8","impliedFormat":99},{"version":"5710e8ed9797ae0042e815eb8f87df2956cb1bf912939c9b98eeb58494a63c13","impliedFormat":99},{"version":"a6bb421dccfec767dbd3e99180b24c07c4a216c0fd549f54a3313f6ce3f9d2c7","impliedFormat":99},{"version":"3b6f1be46f573b1c1f3e6cd949890bfb96b40ff90b6f313e425a379c1c4d5d77","impliedFormat":99},{"version":"28a2c54d0a78d32c29f7279ca04dc6c7860c008579e4e3033938c0ed0201eb9a","impliedFormat":99},{"version":"c2714a402843287624210a47ebea2b1c8dd3ad1438f448633f6831e31eaf37b8","impliedFormat":99},{"version":"b89945ec6707415d739f3e76f2820982d4927dc6b681910b3c433b5ad261b817","impliedFormat":99},{"version":"a72d5822fb2a2c1ef985b30aed889f4c00342c90e12318762fccc550c6a599cf","impliedFormat":99},{"version":"c8616ab60eda93ca87fbb20aada1d6a6cdbcd2cb181a70a2d7728a3cb0613391","impliedFormat":99},{"version":"eeddfd3e0b09890822068de5248d38144f8328e74b5292847eb4e558d8aba8cb","impliedFormat":99},{"version":"d4dc0b6592543314c8549c71e35ad2ec4a57904662d905ff9585836bde1c855a","impliedFormat":99},{"version":"56e1687a174cd10912a35a4676af434bb213aafa5d4371040986c578afe644ab","impliedFormat":99},{"version":"470c280cc484340b97d0942e0c3aa312399eba3849ceb95312d0d7413bac7458","impliedFormat":99},{"version":"ae183f4a6300aad2be92cdbd4dd12d8bcd36eddf8dd1846f998c237235fe0c33","impliedFormat":99},{"version":"4b0eeffddaf51b967e95926a825a6ba1205b81b3a8fecddbe21eaf0e86bdee91","impliedFormat":99},{"version":"bf3ec0d42e33e487c359a989b30e1c9e90fa06de484dc4751e93fb34a9b5cf90","impliedFormat":99},{"version":"7b9656a61d83df1a46c38c2984dbf96dd057bf48f477ddf3f8990311ab98ec23","impliedFormat":99},{"version":"366b85ddb698f3a035e0caa68dc9fef39a85c4368c0810eaf937c3a3c63ac31e","impliedFormat":99},{"version":"d440ee730bc60a5c605903842e398863e7ecdb7a91fc32a9152f14061bf6cc17","impliedFormat":99},{"version":"a12c86c4a691608d19a75320946c80bbce38bb62c091dda32572aee7158edd38","impliedFormat":99},{"version":"3109cb3f8ab0308d2944c26742b6a8a02b4a4ffc23f479a81f0e945d6a6721dd","impliedFormat":99},{"version":"a2289c12a987f2a06f4cf049afde4fdc9455a4af37913445148865938c6eb613","impliedFormat":99},{"version":"55933c1450edcfaf166429425dbbad0a27c0ae8672d5ab5d427e46946a6f2f63","impliedFormat":99},{"version":"6c684fda6998db4112e82367c9e82e27996dc8086a10d58ac9b51d89770d5f9d","impliedFormat":99},{"version":"5c4b4dd983471fcaed17ad3241c98a1f880729f1ca579ddbcdae7e0bf04035df","impliedFormat":99},{"version":"9e430429c7e9e70071a836ac91a1bf6e6651f91d47d9f4baf0a92eefc6130818","impliedFormat":99},{"version":"b3db7f6d7ef72669dc83fa1ff7b90a2ec31d1d8f82778f2a00ef6d101f5247e5","impliedFormat":99},{"version":"354f61bd2a5acaf20462bc4d61048aa25f8fc0dd04dfe3d2f30bdbabbab54e7d","impliedFormat":99},{"version":"d51756340928e549f076c832d7bc2b4180385597b0b4daaa50e422bed53e1a72","impliedFormat":99},{"version":"ac2ea00eb8f73665842e57e729e14c6d3feabe9859dc5e87a1ed451b20b889e4","impliedFormat":99},{"version":"730cb342a128f5a8a036ffbd6dbc1135b623ce2100cefe1e1817bb8845bc7100","impliedFormat":99},{"version":"78e387f16df573a98dd51b3c86d023ddbd5bf68e510711a9fee8340e7ccc3703","impliedFormat":99},{"version":"e2381c64702025b4d57b005e94ed0b994b5592488d76f1e5f67f59d1860ebb70","impliedFormat":99},{"version":"d7dfcb039ff9cff38ccd48d2cc1ba95ca45c316670eddbcf81784e21b7128692","impliedFormat":99},{"version":"acaf0a60eb243938f7742df08bf5d52482fbea033fd27141ee3a6d878bbb0d3d","impliedFormat":99},{"version":"fb89aeecfc8eb28f5677c2c89bced74d13442b7f4ebd01ce2ce92127d1b36d69","impliedFormat":99},{"version":"9e91cb0a5bd7aefa2b94a2872828d6d2321df0ca44412e74d99e8b94e579b7d8","impliedFormat":99},{"version":"a56827adea79fb04ecb27671b6a3529fe74c6937ebb9ca9bdd53b7bd0e8c861b","impliedFormat":99},{"version":"192c1a207b44af476190ae66920636de5d56c33b57206bbc2421adc23f673e2e","impliedFormat":99},{"version":"e5aa35b3740170492e06e60989d35a222cfda2148507c650ea55753f726c9213","impliedFormat":99},{"version":"057aa42f6983120c35373aed62b219ffcbd7b476b2df08709139a9eb8dfeed26","impliedFormat":99},{"version":"95a0c46b4675d4d02de6a7c167738f1176b53b26ebec9ccfe8e5d9acb0dc7aee","impliedFormat":99},{"version":"94ad4d9745811c482ae3bad61e5b206e0904f77e0dacf783199193a3df9f6ce6","impliedFormat":99},{"version":"407dc18ecd25802296fade17be81d0d4f499ae75fe88ed132f94e7efdad269e2","impliedFormat":99},{"version":"77dabe31d44c48782c529d5c9acddc41f799bf9b424b259596131efc77355478","impliedFormat":99},{"version":"f6dfe21d867aa5e13bc53d536b69b66427f571707a01e7c3604dc51ded097313","impliedFormat":99},{"version":"4ecd02d0e4ccf7befb9c28802c6c208060e33291d56fd1868900ca295c399077","impliedFormat":99},{"version":"37ada75be4b3f6b888f538091020d81b2a0ad721dc42734f70f639fa4703a5c8","impliedFormat":99},{"version":"aa73ff0024d5434a3e87ea2824f6faece7aad7b9f6c22bd399268241ca051dc7","impliedFormat":99},{"version":"4c9fb50b0697756bab3e4095f28839cf5b55430a4744d2ebbaf850ec8dca54d8","impliedFormat":99},{"version":"782868b723c055c5612c4a243f72a78a8b3c0c3b707ae04954e36e8ab966df4c","impliedFormat":99},{"version":"3de9d9ad4876972e7599fc0b3bddb0fddb1923be75787480a599045a30f14292","impliedFormat":99},{"version":"0f4b3c05937bbdb9cf954722ddc97cd72624e3b810f6f2cf4be334adb1796ec1","impliedFormat":99},{"version":"9fc243c4c87d8560348501080341e923be2e70bf7b5e09a1b26c585d97ae8535","impliedFormat":99},{"version":"4f97089fe15655ae448c9d005bb9a87cc4e599b155edc9e115738c87aa788464","impliedFormat":99},{"version":"f948d562d0a8085f1bd17b50798d5032529a75c147f40adfeb4fd3e453368643","impliedFormat":99},{"version":"22929f9874783b059156ee3cfa864d6f718e1abf9c139f298a037ae0274186f6","impliedFormat":99},{"version":"c72a7c316459b2e872ca4a9aca36cc05d1354798cee10077c57ff34a34440ac2","impliedFormat":99},{"version":"3e5bbf8893b975875f5325ebf790ab1ab38a4173f295ffea2ed1f108d9b1512c","impliedFormat":99},{"version":"9e4a38448c1d26d4503cf408cc96f81b7440a3f0a95d2741df2459fe29807f67","impliedFormat":99},{"version":"84124d21216da35986f92d4d7d1192ca54620baeca32b267d6d7f08b5db00df9","impliedFormat":99},{"version":"efba354914a2dc1056a55510188b6ced85ead18c5d10cc8a767b534e2db4b11b","impliedFormat":99},{"version":"25f5bf39f0785a2976d0af5ac02f5c18ca759cde62bc48dd1d0d99871d9ad86f","impliedFormat":99},{"version":"e711fa7718a2060058ff98ac6bff494c1615b9d42c4f03aa9c8270bc34927164","impliedFormat":99},{"version":"e324b2143fa6e32fac37ed9021b88815e181b045a9f17dbb555b72d55e47cdc1","impliedFormat":99},{"version":"3e90ea83e3803a3da248229e3027a01428c3b3de0f3029f86c121dc76c5cdcc2","impliedFormat":99},{"version":"9368c3e26559a30ad3431d461f3e1b9060ab1d59413f9576e37e19aaf2458041","impliedFormat":99},{"version":"915e5bb8e0e5e65f1dc5f5f36b53872ffcdcaef53903e1c5db7338ea0d57587a","impliedFormat":99},{"version":"92cf986f065f18496f7fcb4f135bff8692588c5973e6c270d523191ef13525ad","impliedFormat":99},{"version":"652f2bd447e7135918bc14c74b964e5fe48f0ba10ff05e96ed325c45ac2e65fb","impliedFormat":99},{"version":"cc2156d0ec0f00ff121ce1a91e23bd2f35b5ab310129ad9f920ddaf1a18c2a4d","impliedFormat":99},{"version":"7b371e5d6e44e49b5c4ff88312ae00e11ab798cfcdd629dee13edc97f32133d8","impliedFormat":99},{"version":"e9166dab89930e97bb2ce6fc18bcc328de1287b1d6e42c2349a0f136fc1f73e6","impliedFormat":99},{"version":"6dc0813d9091dfaed7d19df0c5a079ee72e0248ce5e412562c5633913900be25","impliedFormat":99},{"version":"e704c601079399b3f2ec4acdfc4c761f5fe42f533feaaab7d2c1c1528248ca3e","impliedFormat":99},{"version":"49104d28daa32b15716179e61d76b343635c40763d75fe11369f681a8346b976","impliedFormat":99},{"version":"04cd3418706b1851d2c1d394644775626529c23e615a829b8abfe26ec0ee3aef","impliedFormat":99},{"version":"21e459e9485fc48f21708d946c102e4aaa4a87b4c9ad178e1c5667e3ff6bbc59","impliedFormat":99},{"version":"97e685ac984fc93dcdae6c24f733a7a466274c103fdcf5d3b028eaa9245f59d6","impliedFormat":99},{"version":"68526ea8f3bbf75a95f63a3629bebe3eb8a8d2f81af790ce40bc6aad352a0c12","impliedFormat":99},{"version":"bcab57f5fe8791f2576249dfcc21a688ecf2a5929348cfe94bf3eb152cff8205","impliedFormat":99},{"version":"b5428f35f4ebf7ea46652b0158181d9c709e40a0182e93034b291a9dc53718d8","impliedFormat":99},{"version":"0afcd28553038bca2db622646c1e7fcf3fb6a1c4d3b919ef205a6014edeeae0f","impliedFormat":99},{"version":"ee016606dd83ceedc6340f36c9873fbc319a864948bc88837e71bd3b99fdb4f6","impliedFormat":99},{"version":"0e09ffe659fdd2e452e1cbe4159a51059ae4b2de7c9a02227553f69b82303234","impliedFormat":99},{"version":"4126cb6e6864f09ca50c23a6986f74e8744e6216f08c0e1fe91ab16260dab248","impliedFormat":99},{"version":"4927dba9193c224e56aa3e71474d17623d78a236d58711d8f517322bd752b320","impliedFormat":99},{"version":"3d3f189177511d1452e7095471e3e7854b8c44d94443485dc21f6599c2161921","impliedFormat":99},{"version":"bb0519ff5ef245bbf829d51ad1f90002de702b536691f25334136864be259ec5","impliedFormat":99},{"version":"a64e28f2333ea0324632cf81fd73dc0f7090525547a76308cb1dfe5dab96596a","impliedFormat":99},{"version":"883f9faa0229f5d114f8c89dadd186d0bdf60bdafe94d67d886e0e3b81a3372e","impliedFormat":99},{"version":"d204b9ae964f73721d593e97c54fc55f7fd67de826ce9e9f14b1e762190f23d1","impliedFormat":99},{"version":"91830d20b424859e5582a141efe9a799dc520b5cce17d61b579fb053c9a6cd85","impliedFormat":99},{"version":"68115cdc58303bad32e2b6d59e821ccaada2c3fb63f964df7bd4b2ebd6735e80","impliedFormat":99},{"version":"ee27e47098f1d0955c8a70a50ab89eb0d033d28c5f2d76e071d8f52a804afe07","impliedFormat":99},{"version":"7957b11f126c6af955dc2e08a1288013260f9ec2776ff8cc69045270643bf43e","impliedFormat":99},{"version":"d010efe139c8bb78497dc7185dddbbcefc84d3059b5d8549c26221257818a961","impliedFormat":99},{"version":"85059ed9b6605d92c753daf3a534855ba944be69ff1a12ab4eca28cefbabd07a","impliedFormat":99},{"version":"687208233ae7a969baa2d0c565c9f24eb4cb1e64d6cfb30f71afec9e929e58c2","impliedFormat":99},{"version":"ea68a96f4e2ba9ca97d557b7080fbdb7f6e6cf781bb6d2e084e54da2ac2bb36c","impliedFormat":99},{"version":"fdae6a221872468d5b6ef3ee06a5ede1b7b3168b6c8346d0bf389fe0490b5269","impliedFormat":99},{"version":"424df1d45a2602f93010cb92967dfe76c3fcadad77d59deb9ca9f7ab76995d40","impliedFormat":99},{"version":"21f96085ed19d415725c5a7d665de964f8283cacef43957de10bdd0333721cc4","impliedFormat":99},{"version":"e8d4da9e0859c6d41c4f1c3f4d0e70446554ba6a6ab91e470f01af6a2dcac9bf","impliedFormat":99},{"version":"2e2421a3eec7afefa5a1344a6852d6fee6304678e2d4ee5380b7805f0ac8b58a","impliedFormat":99},{"version":"a10fd5d76a2aaba572bec4143a35ff58912e81f107aa9e6d97f0cd11e4f12483","impliedFormat":99},{"version":"1215f54401c4af167783d0f88f5bfb2dcb6f0dacf48495607920229a84005538","impliedFormat":99},{"version":"476f8eb2ea60d8ad6b2e9a056fdda655b13fd891b73556b85ef0e2af4f764180","impliedFormat":99},{"version":"2fe93aef0ee58eaa1b22a9b93c8d8279fe94490160703e1aabeff026591f8300","impliedFormat":99},{"version":"bbb02e695c037f84947e56da3485bb0d0da9493ed005fa59e4b3c5bc6d448529","impliedFormat":99},{"version":"ba666b3ab51c8bc916c0cebc11a23f4afec6c504c767fd5f0228358f7d285322","impliedFormat":99},{"version":"c10972922d1887fe48ed1722e04ab963e85e1ac12263a167edef9b804a2af097","impliedFormat":99},{"version":"6efeacbd1759ea57a4c7264eb766c531ae0ab2c00385294be58bc5031ef43ad1","impliedFormat":99},{"version":"1c261f5504d0175be4f1b6b99f101f4c3a129a5a29fc768e65c52d6861ca5784","impliedFormat":99},{"version":"f0e69b5877b378d47cbac219992b851e2bbc0f7e3a3d3579d67496dabd341ec4","impliedFormat":99},{"version":"b5ea27f19a54feca5621f5ba36a51026128ea98e7777e5d47f08b79637527cf5","impliedFormat":99},{"version":"b54890769fa3c34ab3eb7e315b474f52d5237c86c35f17d59eb21541e7078f11","impliedFormat":99},{"version":"c133db4b6c17a96db7fa36607c59151dec1e5364d9444cbe15e8c0ea4943861e","impliedFormat":99},{"version":"3a0514f77606d399838431166a0da6dbd9f3c7914eae5bbfbd603e3b6a552959","impliedFormat":99},{"version":"fa568f8d605595e1cffbfca3e8c8c492cf88ae2c6ed151f6c64acf0f9e8c25d8","impliedFormat":99},{"version":"c76fb65cb2eb09a0ee91f02ff5b43a607b94a12c34d16d005b2c0afc62870766","impliedFormat":99},{"version":"cf7af60a0d4308a150df0ab01985aabb1128638df2c22dd81a2f5b74495a3e45","impliedFormat":99},{"version":"913bbf31f6b3a7388b0c92c39aec4e2b5dba6711bf3b04d065bd80c85b6da007","impliedFormat":99},{"version":"42d8c168ca861f0a5b3c4c1a91ff299f07e07c2dd31532cd586fd1ee7b5e3ae6","impliedFormat":99},{"version":"a29faa7cb35193109ec1777562ca52c72e7382ffe9916b26859b5874ad61ff29","impliedFormat":99},{"version":"15bdf2eeef95500ba9f1602896e288cb425e50462b77a07fa4ca23f1068abb21","impliedFormat":99},{"version":"452db58fd828ab87401f6cecc9a44e75fa40716cc4be80a6f66cf0a43c5a60cc","impliedFormat":99},{"version":"54592d0215a3fd239a6aa773b1e1a448dc598b7be6ce9554629cd006ee63a9d6","impliedFormat":99},{"version":"9ee28966bb038151e21e240234f81c6ba5be6fde90b07a9e57d4d84ae8bc030c","impliedFormat":99},{"version":"2fe1c1b2b8a41c22a4e44b0ac7316323d1627d8c72f3f898fa979e8b60d83753","impliedFormat":99},{"version":"956e43b28b5244b27fdb431a1737a90f68c042e162673769330947a8d727d399","impliedFormat":99},{"version":"92a2034da56c329a965c55fd7cffb31ccb293627c7295a114a2ccd19ab558d28","impliedFormat":99},{"version":"c1b7957cd42a98ab392ef9027565404e5826d290a2b3239a81fbac51970b2e63","impliedFormat":99},{"version":"4861ee34a633706bcbba4ea64216f52c82c0b972f3e790b14cf02202994d87c5","impliedFormat":99},{"version":"7af4e33f8b95528de005282d6cca852c48d293655dd7118ad3ce3d4e2790146f","impliedFormat":99},{"version":"df345b8d5bf736526fb45ae28992d043b2716838a128d73a47b18efffe90ffa7","impliedFormat":99},{"version":"d22c5b9861c5fc08ccd129b5fc3dcdc7536e053c0c1d463f3ab39820f751c923","impliedFormat":99},{"version":"dcc38f415a89780b34d827b45493d6dbadb05447d194feb4498172e508c416ac","impliedFormat":99},{"version":"7e917e3b599572a2dd9cfa58ff1f68fda9e659537c077a2c08380b2f2b14f523","impliedFormat":99},{"version":"20b108e922abd1c1966c3f7eb79e530d9ac2140e5f51bfa90f299ad5a3180cf9","impliedFormat":99},{"version":"2bc82315d4e4ed88dc470778e2351a11bc32d57e5141807e4cdb612727848740","impliedFormat":99},{"version":"e2dd1e90801b6cd63705f8e641e41efd1e65abd5fce082ef66d472ba1e7b531b","impliedFormat":99},{"version":"a3cb22545f99760ba147eec92816f8a96222fbb95d62e00706a4c0637176df28","impliedFormat":99},{"version":"287671a0fe52f3e017a58a7395fd8e00f1d7cd9af974a8c4b2baf35cfda63cfa","impliedFormat":99},{"version":"e2cdad7543a43a2fb6ed9b5928821558a03665d3632c95e3212094358ae5896b","impliedFormat":99},{"version":"326a980e72f7b9426be0805774c04838e95195b467bea2072189cefe708e9be7","impliedFormat":99},{"version":"e3588e9db86c6eaa572c313a23bf10f7f2f8370e62972996ac79b99da065acaa","impliedFormat":99},{"version":"1f4700278d1383d6b53ef1f5aecd88e84d1b7e77578761838ffac8e305655c29","impliedFormat":99},{"version":"6362a4854c52419f71f14d3fee88b3b434d1e89dcd58a970e9a82602c0fd707a","impliedFormat":99},{"version":"fb1cc1e09d57dfeb315875453a228948b904cbe1450aaf8fda396ff58364a740","impliedFormat":99},{"version":"50652ed03ea16011bb20e5fa5251301bb7e88c80a6bf0c2ea7ed469be353923b","impliedFormat":99},{"version":"d388e0c1c9a42d59ce88412d3f6ce111f63ce2ff558e0a3f84510092431dfee0","impliedFormat":99},{"version":"35ea0a1e995aef5ae19b1553548a793c76eb31bdf7fef30bc74656660c3a09c3","impliedFormat":99},{"version":"56f4ae4e34cbff1e4158ccada4feea68a357bae86adb3bedaa65260d0af579df","impliedFormat":99},{"version":"6eebdacf8e85b2cf70ad7a2f43ead1f8acccfd214ab57ff1d989e9e35661015d","impliedFormat":99},{"version":"a4f90a12cbfac13b45d256697ce70a6b4227790ca2bf3898ffd2359c19eab4eb","impliedFormat":99},{"version":"4a6c2ac831cff2d8fa846dfb010ee5f7afce3f1b9bd294298ee54fdc555f1161","impliedFormat":99},{"version":"8395cc6350a8233a4da1c471bdac6b63d5ed0a0605da9f1e0c50818212145b5b","impliedFormat":99},{"version":"b58dda762d6bd8608d50e1a9cc4b4a1663a9d4aa50a9476d592a6ecdc6194af4","impliedFormat":99},{"version":"bc14cb4f3868dab2a0293f54a8fe10aa23c0428f37aece586270e35631dd6b67","impliedFormat":99},{"version":"2d4530d6228c27906cb4351f0b6af52ff761a7fab728622c5f67e946f55f7f00","impliedFormat":99},{"version":"ec359d001e98bf56b0e06b4882bd1421fd088d4d181dff3138f52175c0582a51","impliedFormat":99},{"version":"2ac845b89cae82a74e549c7c1d9f983f993033ba14376ea83cd13b3e38a8537a","impliedFormat":99},{"version":"a8d491b4eb728dab387933a518d9e1f32d5c9d5a5225ff134d847b0c8cc9c8ce","impliedFormat":99},{"version":"668f628ae1f164dcf6ea8f334ea6a629d5d1a8e7a2754245720a8326ff7f1dc0","impliedFormat":99},{"version":"5105c00e1ae2c0a17c4061e552fa9ec8c74ec41f69359b8719cb88523781018e","impliedFormat":99},{"version":"d2c033af6f2ea426de4657177f0e548ee5bed6756c618a8b3b296c424e542388","impliedFormat":99},{"version":"45be28de10e6f91aacb29fbd2955ba65a0fd3d1b5fddefece9c381043e91e68d","impliedFormat":99},{"version":"77dabe31d44c48782c529d5c9acddc41f799bf9b424b259596131efc77355478","impliedFormat":99},{"version":"6801ebe0b7ab3b24832bc352e939302f481496b5d90b3bc128c00823990d7c7d","impliedFormat":99},{"version":"0abb1feddc76a0283c7e8e8910c28b366612a71f8bfdd5ca42271d7ad96e50b2","impliedFormat":99},{"version":"ac56b2f316b70d6a727fdbbcfa8d124bcd1798c293487acb2b27a43b5c886bb0","impliedFormat":99},{"version":"d849376baf73ec0b17ffd29de702a2fdbbe0c0390ec91bebf12b6732bf430d29","impliedFormat":99},{"version":"40dcd290c10cc7b04a55f7ee5c76f77250f48022cea1624eba2c0589753993b4","impliedFormat":99},{"version":"0f9c9f7d13a5cf1c63eb56318b6ae4dfa2accef1122b2e88b5ed1c22a4f24e3b","impliedFormat":99},{"version":"9c4178832d47d29c9af3b1377c6b019f7813828887b80bb96777393f700eb260","impliedFormat":99},{"version":"dddb8672a0a6d0e51958d539beb906669a0f1d3be87425aaa0ae3141a9ad6402","impliedFormat":99},{"version":"6b514d5159d0d189675a1d5a707ba068a6da6bc097afb2828aae0c98d8b32f08","impliedFormat":99},{"version":"39d7dbcfec85393fedc8c7cf62ee93f7e97c67605279492b085723b54ccaca8e","impliedFormat":99},{"version":"81882f1fa8d1e43debb7fa1c71f50aa14b81de8c94a7a75db803bb714a9d4e27","impliedFormat":99},{"version":"c727a1218e119f1549b56dd0057e721d67cfa456c060174bac8a5594d95cdb2d","impliedFormat":99},{"version":"bca335fd821572e3f8f1522f6c3999b0bc1fe3782b4d443c317df57c925543ed","impliedFormat":99},{"version":"73332a05f142e33969f9a9b4fb9c12b08b57f09ada25eb3bb94194ca035dc83d","impliedFormat":99},{"version":"c366621e6a8febe9bbca8c26275a1272d99a45440156ca11c860df7aa9d97e6d","impliedFormat":99},{"version":"d9397a54c21d12091a2c9f1d6e40d23baa327ae0b5989462a7a4c6e88e360781","impliedFormat":99},{"version":"dc0e2f7f4d1f850eb20e226de8e751d29d35254b36aa34412509e74d79348b75","impliedFormat":99},{"version":"af3102f6aec26d237c750decefdc7a37d167226bb1f90af80e1e900ceb197659","impliedFormat":99},{"version":"dea1773a15722931fbfe48c14a2a1e1ad4b06a9d9f315b6323ee112c0522c814","impliedFormat":99},{"version":"b26e3175cf5cee8367964e73647d215d1bf38be594ac5362a096c611c0e2eea8","impliedFormat":99},{"version":"4280093ace6386de2a0d941b04cff77dda252f59a0c08282bd3d41ccc79f1a50","impliedFormat":99},{"version":"fe17427083904947a4125a325d5e2afa3a3d34adaedf6630170886a74803f4a2","impliedFormat":99},{"version":"0246f9f332b3c3171dcdd10edafab6eccb918c04b2509a74e251f82e8d423fb7","impliedFormat":99},{"version":"f6ef33c2ff6bbdf1654609a6ca52e74600d16d933fda1893f969fc922160d4d7","impliedFormat":99},{"version":"1abd22816a0d992fd33b3465bf17a5c8066bf13a8c6ca4fc0cd28884b495762d","impliedFormat":99},{"version":"82032a08169ea01cf01aa5fd3f7a02f1f417697df5e42fc27d811d23450bc28d","impliedFormat":99},{"version":"9c8cbd1871126e98602502444cffb28997e6aa9fbc62d85a844d9fd142e9ae1b","impliedFormat":99},{"version":"b0e20abc4a73df8f97b3f1223cc330e9ba3b2062db1908aa2a97754a792139ac","impliedFormat":99},{"version":"bc1f2428d738ab789339030078adf313100471c37d8d69f6cf512a5715333afc","impliedFormat":99},{"version":"dc500c6a23c9432849c82478bdab762fa7bdf9245298c2279a7063dd05ae9f9a","impliedFormat":99},{"version":"cd1b6a2503fc554dcab602e053565c4696e4262b641b897664d840a61f519229","impliedFormat":99},{"version":"af1580cd202df0e33fc592fe1d75d720c15930a4127a87633542b33811316724","impliedFormat":99},{"version":"538608f9242fbf4260d694f19c95b454f855152ab3b882ac72114f19b08984d2","impliedFormat":99},{"version":"cd0e1083bd8ae52661544329c311836abdda5d5dda89fc5d7ab038956c0394e8","impliedFormat":99},{"version":"9ea6fea875302b2bb3976f7431680affc45a4319499d057ce12be04e4f487bf9","impliedFormat":99},{"version":"66e0c3f9875da7be383d0c78c8b8940b6ebae3c6a0fbfd7e77698b5e8ade3b05","impliedFormat":99},{"version":"da38d326fe6a72491cad23ea22c4c94dfc244363b6a3ec8a03b5ad5f4ee6337b","impliedFormat":99},{"version":"da587bf084b08ea4e36a134ec5fb19ae71a0f32ec3ec2a22158029cb2b671e28","impliedFormat":99},{"version":"517a31c520e08c51cfe6d372bc0f5a6bf7bd6287b670bcaa180a1e05c6d4c4da","impliedFormat":99},{"version":"0263d94b7d33716a01d3e3a348b56c2c59e6d897d89b4210bdbf27311127223c","impliedFormat":99},{"version":"d0120e583750834bf1951c8b9936781a98426fe8d3ad3d951f96e12f43090469","impliedFormat":99},{"version":"a2e6a99c0fb4257e9301d592da0834a2cb321b9b1e0a81498424036109295f8b","impliedFormat":99},{"version":"c6b5ae9f99f1fccadc23d56307a28c8490c48e687678f2cafa006b3b9b8e73e4","impliedFormat":99},{"version":"eae178ee8d7292bcd23be2b773dda60b055bc008a0ddce2acc1bfe30cc36cf04","impliedFormat":99},{"version":"e0b5f197fb47b39a4689ad356b8488e335bbf399b283492c0ffae0cfda88837b","impliedFormat":99},{"version":"adb7aa4b8d8b423d0d7e78b6a8affb88c3a32a98e21cd54fcafd570ad8588d0c","impliedFormat":99},{"version":"643e22362c15304f344868ec0e7c0b4a1bc2b56c8b81d5b9f0ee0a6f3c690fff","impliedFormat":99},{"version":"f89e713e33bfcc7cc1d505a1e76f260b7aae72f8ba83f800ab47b5db2fed8653","impliedFormat":99},{"version":"4e095c719ab15aa641872ab286d8be229562c4b3dc4eec79888bc4e8e0426ed8","impliedFormat":99},{"version":"6022afc443d2fe0af44f2f5912a0bdd7d17e32fd1d49e6c5694cbc2c0fa11a8f","impliedFormat":99},{"version":"6dd3f823ac463041d89c84d7bbf74931a38d874a9716040492ac7a16c7d2f023","impliedFormat":99},{"version":"a5bf6d947ce6a4f1935e692c376058493dbfbd9f69d9b60bbaf43fd5d22c324b","impliedFormat":99},{"version":"4927ef881b202105603e8416d63f317a1f1ea47d321e32826b9b20a44caa55e2","impliedFormat":99},{"version":"914d11655546eba92ac24d73e6efdb350738bcf4a9a161a2b96e904bad4de809","impliedFormat":99},{"version":"f9fdd2efc37eefc321338d39b5bd341b2aa82292b72610cb900f205f6803ff66","impliedFormat":99},{"version":"687208233ae7a969baa2d0c565c9f24eb4cb1e64d6cfb30f71afec9e929e58c2","impliedFormat":99},{"version":"ab043784438ef8945a95124d2325308554c8b53dc92ce801f09702e79234282a","impliedFormat":99},{"version":"3fb3501967b0f0224023736d0ad41419482b88a69122e5cb46a50ae5635adb6a","impliedFormat":99},{"version":"06d66a6723085295f3f0ecd254a674478c4dba80e7b01c23a9693a586682252f","impliedFormat":99},{"version":"cc411cd97607f993efb008c8b8a67207e50fdd927b7e33657e8e332c2326c9f3","impliedFormat":99},{"version":"b144c6cdf6525af185cd417dc85fd680a386f0840d7135932a8b6839fdee4da6","impliedFormat":99},{"version":"e8dfa804c81c6b3e3dc411ea7cea81adf192fe20b7c6db21bf5574255f1c9c0e","impliedFormat":99},{"version":"572ee8f367fe4068ccb83f44028ddb124c93e3b2dcc20d65e27544d77a0b84d3","impliedFormat":99},{"version":"7d604c1d876ef8b7fec441cf799296fd0d8f66844cf2232d82cf36eb2ddff8fe","impliedFormat":99},{"version":"7b86b536d3e8ca578f8fbc7e48500f89510925aeda67ed82d5b5a3213baf5685","impliedFormat":99},{"version":"861596a3b58ade9e9733374bd6b45e5833b8b80fd2eb9fe504368fc8f73ae257","impliedFormat":99},{"version":"a3da7cf20826f3344ad9a8a56da040186a1531cace94e2788a2db795f277df94","impliedFormat":99},{"version":"900a9da363740d29e4df6298e09fad18ae01771d4639b4024aa73841c6a725da","impliedFormat":99},{"version":"442f6a9e83bb7d79ff61877dc5f221eea37f1d8609d8848dfbc6228ebc7a8e90","impliedFormat":99},{"version":"4e979a85e80e332414f45089ff02f396683c0b5919598032a491eb7b981fedfd","impliedFormat":99},{"version":"6d3496cac1c65b8a645ecbb3e45ec678dd4d39ce360eecbcb6806a33e3d9a7ae","impliedFormat":99},{"version":"9909129eb7301f470e49bbf19f62a6e7dcdfe9c39fdc3f5030fd1578565c1d28","impliedFormat":99},{"version":"95cdad1f759b74b014cea71cf1a68567b17e4165ec8139930305ba1e21b10a0c","impliedFormat":99},{"version":"7e4fc245cc369ba9c1a39df427563e008b8bfe5bf73c6c3f5d3a928d926a8708","impliedFormat":99},{"version":"3aa7c4c9a6a658802099fb7f72495b9ba80d8203b2a35c4669ddfcbbe4ff402b","impliedFormat":99},{"version":"d39330cb139d83d5fa5071995bb615ea48aa093018646d4985acd3c04b4e443d","impliedFormat":99},{"version":"663800dc36a836040573a5bb161d044da01e1eaf827ccc71a40721c532125a80","impliedFormat":99},{"version":"f28691d933673efd0f69ac7eae66dea47f44d8aa29ec3f9e8b3210f3337d34df","impliedFormat":99},{"version":"ae89fb16575dc616df3ff907c6338d94cfa731881ecef82155b21ab4134b3826","impliedFormat":99},{"version":"687208233ae7a969baa2d0c565c9f24eb4cb1e64d6cfb30f71afec9e929e58c2","impliedFormat":99},{"version":"f716500cce26a598e550ac0908723b9c452e0929738c55a3c7fe3c348416c3d0","impliedFormat":99},{"version":"6b7c511d20403a5a1e3f5099056bc55973479960ceff56c066ff0dd14174c53c","impliedFormat":99},{"version":"48b83bd0962dac0e99040e91a49f794d341c7271e1744d84e1077e43ecda9e04","impliedFormat":99},{"version":"b8fd98862aa6e7ea8fe0663309f15b15f54add29d610e70d62cbccff39ea5065","impliedFormat":99},{"version":"ffa53626a9de934a9447b4152579a54a61b2ea103dbbf02b0f65519bfef98cdd","impliedFormat":99},{"version":"d171a70a6e5ff6700fa3e2f0569a15b12401ad9bc5f4d650f8b844f7f20ef977","impliedFormat":99},{"version":"b6e9b15869788861fff21ec7f371bda9a2e1a1b15040cc005db4d2e792ece5ca","impliedFormat":99},{"version":"22c844fbe7c52ee4e27da1e33993c3bbb60f378fa27bb8348f32841baecb9086","impliedFormat":99},{"version":"dee6934166088b55fe84eae24de63d2e7aae9bfe918dfe635b252f682ceca95a","impliedFormat":99},{"version":"c39b9c4f5cc37a8ed51bef12075f5d023135e11a9b215739fd0dd87ee8da804a","impliedFormat":99},{"version":"db027bc9edef650cff3cbe542959f0d4ef8532073308c04a5217af25fc4f5860","impliedFormat":99},{"version":"a4e026fe4d88d36f577fbd38a390bd846a698206b6d0ca669a70c226e444af1b","impliedFormat":99},{"version":"b5a0d4f7a2d54acbe0d05f4d9f5c9efaaeddc06c3ee0ca0c66aba037e1dca34b","impliedFormat":99},{"version":"fa910f88f55844718a277ee9519206abce66629de2692676c3e2ad1c9278bdfd","impliedFormat":99},{"version":"a886a5af337cce28fe3e956fd0ed921345933163f5b14f739266ba9400b92484","impliedFormat":99},{"version":"9ae87bd743e93b6384efbfa306bde1fa70b6ff27533983e1e1fe08a4ef7037b8","impliedFormat":99},{"version":"5f7c0a4aad7a3406db65d674a5de9e36e0d08773f638b0f49d70e441de7127c0","impliedFormat":99},{"version":"29062edaa0d16f06627831f95681877b49c576c0a439ccd1a2f2a8173774d6b2","impliedFormat":99},{"version":"49fcfda71ea42a9475b530479a547f93d4e88c2deb0c713845243f5c08af8d76","impliedFormat":99},{"version":"6d640d840f53fb5f1613829a7627096717b9b0d98356fb86bb771b6168299e2e","impliedFormat":99},{"version":"cee41a6af55d502f3863fe3238a75108dea16ac9c7339e96c2974ad3babd6d78","impliedFormat":99},{"version":"6bd4aa523d61e94da44cee0ee0f3b6c8d5f1a91ef0bd9e8a8cf14530b0a1a6df","impliedFormat":99},{"version":"e3ee1b2216275817b78d5ae0a448410089bc1bd2ed05951eb1958b66affbdec0","impliedFormat":99},{"version":"c53548c66ddac62cb003e737c8599c3d75f7fba43e0ac8e109a8956086e7e012","impliedFormat":99},{"version":"cd0e881c6b0bc9a5ec74bcfa372e681a44ff9f5723d8ea3c1f2a7cf9e25bc84f","impliedFormat":99},{"version":"838c13b48725ba6d0630c0ec11fc8a33acff855551300e787cf404b093ca3f34","impliedFormat":99},{"version":"30a66b168efc5508e9fedfff14559b3c680b31bbe853e12310efda6e52dc585a","impliedFormat":99},{"version":"2fac70f99da22181acfda399eed248b47395a8eeb33c9c82d75ca966aee58912","impliedFormat":99},{"version":"35f50e2adbdf8dd774e5296c87740f5d03dc443757bf75aee87e2b3831ae552b","impliedFormat":1},{"version":"d75ca53134de3b91925e889738a1e5cda0715fc1947380424bd61f4e9b8f7a2e","impliedFormat":1},{"version":"17230b34bb564a3a2e36f9d3985372ccab4ad1722df2c43f7c5c2b553f68e5db","impliedFormat":1},{"version":"6e5c9272f6b3783be7bdddaf207cccdb8e033be3d14c5beacc03ae9d27d50929","impliedFormat":1},{"version":"21ac4cf3f8d8c6e1201cb31f600be708c9a37867fc5c73b7ccf80560fae591c8","impliedFormat":1},{"version":"0dfe35191a04e8f9dc7caeb9f52f2ee07402736563d12cbccd15fb5f31ac877f","impliedFormat":1},{"version":"a929f77f7afe6b8ea082fe4fc5f7461cf40ef8ca2a8f3cedb3e8a6d10bea49ba","impliedFormat":1},{"version":"45a7a6658917b9178eaf4288b8a22757dba3bc24676e166f28a3c2a4e858c4e0","impliedFormat":99},{"version":"7c699b5fea191ce032277394b78fa00208f26901efd288636d932c4b35ec4704","impliedFormat":99},{"version":"2fac70f99da22181acfda399eed248b47395a8eeb33c9c82d75ca966aee58912","impliedFormat":99},{"version":"f5f45f28f1799fe0520b6714be5157cc1e53fac060ae68691a6c86f62e9f4501","impliedFormat":99},{"version":"9a201d2fe34b5826c2062f0975612603595f6164a8856c9241862d1ecd06a191","impliedFormat":99},{"version":"55e382f5d8e33f6ce7a274873ba3a7f82eaeaa1e6c81d2ad3fc3a9a72468fd58","impliedFormat":99},{"version":"2fac70f99da22181acfda399eed248b47395a8eeb33c9c82d75ca966aee58912","impliedFormat":99},{"version":"2fac70f99da22181acfda399eed248b47395a8eeb33c9c82d75ca966aee58912","impliedFormat":99},{"version":"d3cfde44f8089768ebb08098c96d01ca260b88bccf238d55eee93f1c620ff5a5","impliedFormat":1},{"version":"293eadad9dead44c6fd1db6de552663c33f215c55a1bfa2802a1bceed88ff0ec","impliedFormat":1},{"version":"833e92c058d033cde3f29a6c7603f517001d1ddd8020bc94d2067a3bc69b2a8e","impliedFormat":1},{"version":"08b2fae7b0f553ad9f79faec864b179fc58bc172e295a70943e8585dd85f600c","impliedFormat":1},{"version":"f12edf1672a94c578eca32216839604f1e1c16b40a1896198deabf99c882b340","impliedFormat":1},{"version":"e3498cf5e428e6c6b9e97bd88736f26d6cf147dedbfa5a8ad3ed8e05e059af8a","impliedFormat":1},{"version":"dba3f34531fd9b1b6e072928b6f885aa4d28dd6789cbd0e93563d43f4b62da53","impliedFormat":1},{"version":"f672c876c1a04a223cf2023b3d91e8a52bb1544c576b81bf64a8fec82be9969c","impliedFormat":1},{"version":"e4b03ddcf8563b1c0aee782a185286ed85a255ce8a30df8453aade2188bbc904","impliedFormat":1},{"version":"2329d90062487e1eaca87b5e06abcbbeeecf80a82f65f949fd332cfcf824b87b","impliedFormat":1},{"version":"25b3f581e12ede11e5739f57a86e8668fbc0124f6649506def306cad2c59d262","impliedFormat":1},{"version":"4fdb529707247a1a917a4626bfb6a293d52cd8ee57ccf03830ec91d39d606d6d","impliedFormat":1},{"version":"a9ebb67d6bbead6044b43714b50dcb77b8f7541ffe803046fdec1714c1eba206","impliedFormat":1},{"version":"5780b706cece027f0d4444fbb4e1af62dc51e19da7c3d3719f67b22b033859b9","impliedFormat":1},{"version":"aa9e5835d6b7901b493368c6de2405a91fd4d0a9e451d9b31bd9d7872d52ccf9","impliedFormat":99},{"version":"0c8dad6023fa5ba611d8af2eb1ec79de1e359a583a5f84d6fcc97f95f2504ba1","impliedFormat":99},{"version":"ef204b804d92a897d0a561739b09154b37c45742c1712ac2cbcca5a307c077ad","impliedFormat":99},{"version":"966cd6faabf0ffa1ce07edd2fc8b21cbf58a34ffc475e67e727db0cbb73aa8da","impliedFormat":99},{"version":"85bc585d0174c5037bb2ccd86c9a666cda689bdafe8fab6033f385900955345e","impliedFormat":99},{"version":"8481fde24e4475aec613f71e39b4123f880c1f8860fa810a47e2921d159910cc","impliedFormat":99},{"version":"531b9350e8b7c0e89904adc4e262cb9cda836029b28ca304f18a2a2dc660691e","impliedFormat":99},{"version":"3f18284465d50e60405cd31f81ba4480367240edea1060f1309c2b717cf2e57b","impliedFormat":99},{"version":"01f8b2706df18d6f9be625b1a4aeef149b8f00c1c0b74e662345b927d99f651a","impliedFormat":99},{"version":"270cb7bde69342a53bdda03cd84fe856a4c25bb0a973af0b622be09d6112c617","impliedFormat":99},{"version":"45b3de3c266e92253de0c6aab28642f29860f50a0706c52714bfcafa98930eff","impliedFormat":99},{"version":"402e84589ae1525fd52ca4811e03ad74caf9ed2cccd3e10b1548985ed2d78dbf","impliedFormat":99},{"version":"4897bae7c28f78092a4f345995236dead78fc739bc8f9c4575e948b4f9a984b8","impliedFormat":99},{"version":"6070624b38dbc46781cd583f5cc0997a6ae6046a3f44bfbfcce5895907b26ed4","impliedFormat":99},{"version":"92397fd0f9a0277fdda1046ffdcc4338ad820343fa7ef0585bd283c61fcea6a7","impliedFormat":99},{"version":"cd757f923f1c05194bf41f9bbe8ac70445ea3aeb37f78bead4def17c31bf9542","impliedFormat":99},{"version":"3b896877c981fdf24d1f5c3f724ba0a8e457c75625f78ab80965f88e967f4817","impliedFormat":99},{"version":"4f4bd9fddf330a643f2b41d01cd697286756d3590a380695d5e22699f3d54be5","impliedFormat":99},{"version":"aa8822871877daa102442f6d61cdf04ff6dfd551b0a6971a29adc1c83d96f84e","impliedFormat":99},{"version":"82b5169e6cebee4c045a0c701f90df9e75cd6c6a717fccde20955463aac3060d","impliedFormat":99},{"version":"247fcdfe4b85e91fbb05c742cfad30a150c7d9deaa67bdd197fdcf5be360cefe","impliedFormat":99},{"version":"de2a0897621e39d747e1cca9447d3b6d81c9ade1373bdcfc4edb7ac4b4bad773","impliedFormat":99},{"version":"1ff3bbbfbc81f93c90045555c146cdd6d7c9d96de47bd800df168f46b267969f","impliedFormat":99},{"version":"f810d2d769d37cce91bbb44566ca58e80c2ab95616070ff56c0adfe466147652","impliedFormat":99},{"version":"7377c2f18d9c728fdc4bac134e0f9ac07f6ad3f357191f3243b1152d516d1035","impliedFormat":99},{"version":"7231ec9400548c0515b71dcc46008d7c780f3ab7e10e76ef8b6a9456b94452c4","impliedFormat":99},{"version":"c1ecf97a03b9bfd3824771d08eed4e1f8d657f042bf80320323b1b41cab09477","impliedFormat":99},{"version":"a41c88b22a03b48045abd54c9fb144567fa639048914ef453f3feff96509ceaf","impliedFormat":99},{"version":"15c0060ae45c4536320da9cd0b2c4efe5a357f41ec40495f89e29d17af24043b","impliedFormat":99},{"version":"c1490d3da1d7da0ec66a6aa283f743a7f2186b3352d344d0f5eb28a8cb6c6316","impliedFormat":99},{"version":"45bb3dd222e9b5c7ea2eed9b14c7390aa48d4784b5962883c3f6ace3000f300f","impliedFormat":99},{"version":"f6fb4cf4e117ee8d845f361598ac9c19e9ec4df09581702941e238ddecaf2254","impliedFormat":99},{"version":"b75700b0c451d8596f9c29528613d48584c82f190381c6aa8047c19f14272cf1","impliedFormat":99},{"version":"ac0efdb9a86146242f5bb2060dccbdfe743db956e253b290aca5b00bb4f15f22","impliedFormat":99},{"version":"4cbd25cde19d5d52704f84e93f9b648671c41262a12005b695cce3cf904e6dfa","impliedFormat":99},{"version":"bc21653478cf6b46f14040c82ec5d0df8c3a9f0421cb4050dbc36f831b222292","impliedFormat":99},{"version":"d3c7021ac45e25926ecb99ffb6d8016aa0fa9ad0854033d3921439d1707e85f1","impliedFormat":99},{"version":"b471c43e0e164fddeca3b880ab82dff6ff41cc1827575f5942258f52121fa640","impliedFormat":99},{"version":"ceccd6e27502a11f9b59edf79e11efa6debb0edde134820fb1e1f54da5694b5e","impliedFormat":99},{"version":"f62d1db65c973e8b4d87d00d81bb4e379d12e55fb8ed4bc699f6666ce9ff9886","impliedFormat":99},{"version":"2d9e565828f9149609d344c338d03bc579e9d0299f7cef5825b240df01f5246e","impliedFormat":99},{"version":"baa860eca2f436200f15f98537665bc88acbef57bae1f1ac00da521376ad9066","impliedFormat":99},{"version":"7e14cbb2e3dd8a32a7cd9a5f3b8f13a85ca501099181b868b479c8536a9473fb","impliedFormat":99},{"version":"357027211d253c42a19736cf6b7eabe096f7036805e6c89b35ad15bb386854cc","impliedFormat":99},{"version":"3e1b2c2ee5bda3dcb7ab76374700ab816ae6db477623b07b550280786e6470cb","impliedFormat":99},{"version":"5fe5e365cff077f3dc7dc1895f86ac78fb312018e8355958b58527bf4c9feba6","impliedFormat":99},{"version":"90f775adcf7fb6d865593e3a1c4528298fee68146fd0375335e34866b84a09ec","impliedFormat":99},{"version":"544ef9db8c8e612a1c8dee3fef7aaf01cd6aa721137d17db7f7d7b3d2c5cbfb0","impliedFormat":99},{"version":"1190f38b2d825ece9518c158ba966c19d42ce2e4f17aee2a0eced09a94372751","impliedFormat":99},{"version":"0ddcd0644863f122e3d12148f1447f6035f1c6f349d101422ee78a44656ac862","impliedFormat":99},{"version":"4bb933740ef6c9cbeb00ba53073bb171f97a4bc2d4f66ccabbab35afa546e202","impliedFormat":99},{"version":"90aab01d2a7bb75ab416585099e1086792b576761d23a8bce0346de782928b06","impliedFormat":99},{"version":"82f439b5b38c7613567168b691e16b88330fcdd5e87840de61dead0c4cc6a192","impliedFormat":99},{"version":"01a0873b621780693a2723be1b48ac4d500619f5a1f2d33a559752a1c46d1197","impliedFormat":99},{"version":"573227457b7ee7f526119594bb218b9d405b6768eae594e838d38c8dc0cb6568","impliedFormat":99},{"version":"8486ef2c6b50fcc1eedf9b1fdb689391080f9606e2892b2c137a3b86116ee6e9","impliedFormat":99},{"version":"69d60b2977fff07328adb946457a2f0de6f1f6e89722a7c698d96a6a2f83e3d0","impliedFormat":99},{"version":"3fdd16c2821927cfaf6e365f134bf34ba33af597558bc4deaf2f00254273322c","impliedFormat":99},{"version":"61fe4f0252672d7669a3950802212f070bfb606b091c6046ac6143138f6eed60","impliedFormat":99},{"version":"d2abc9997cd77957130d1ea9a4ba4b23b803317f16afb771fed6d3b63cc8d0cd","impliedFormat":99},{"version":"993fca3556263faa04a5d5d7c9b2e7e41cdcd3596a611120313dbe0b37937c6c","impliedFormat":99},{"version":"8f10bb5f1b826ac2532233a705d30ec1892f2fdee7eb915d3e3a4d7acbc0046c","impliedFormat":99},{"version":"f496394b492b0251aa7c9abfed0cc3c1a96b163b3295ee977006551bdbb23be6","impliedFormat":99},{"version":"e735c8e47a6993b48d85c706fcd974bedb67901445662a1825b16df4dd97dac4","impliedFormat":99},{"version":"b3a3fdab86e68136132a794a995adc47ccca4c3214509450c8cf9b786797ab77","impliedFormat":99},{"version":"24b7602376d435a1fb46d817f1f12d70c599eefcdd7ba3adfe34c82daea6565e","impliedFormat":99},{"version":"3a0f8e778b0be125ecc6274c494dbe26d4f92e82d6d0c23df46d5e43419cf95e","impliedFormat":99},{"version":"0e00b25da0663add71e89155a2198fa086a5a2653a80c410c467f6f0efa6cbcc","impliedFormat":99},{"version":"057187022b0d6ba72bb259ce190d1e33fb9d9a9fe57350b55b6d2d722831149e","impliedFormat":99},{"version":"8d677432ae16b8e105c1c616fc1443d0ec52aaea55e19e13f952fc32aa858c87","impliedFormat":99},{"version":"6517c6927d58529f58ffd55ade8d82d8089ffb8f9dce125b3de210ad86d03b86","impliedFormat":99},{"version":"2fb6e6b06b727e554d3f0934af3c6d10e32da9fc20c3df1fe43cb92e06be5c0f","impliedFormat":99},{"version":"d2681901bd36444ff7757d0e2ec3e17a064082f62b0cbfa9e228aace025e9c42","impliedFormat":99},{"version":"65cbdfab18b014a6840b68fe80183b1cf3637d435b497c99ba1a502f8303e391","impliedFormat":1},{"version":"3b133b5cb1fab24798fee6c349c3925d9b2e46429669c3a290f5324d9a210025","impliedFormat":1},{"version":"ef783fa8760c66a585666ee47571f1b5beb6ee39c65feac3c6d11b9419b23a73","impliedFormat":1},{"version":"e66b54d888e7c4aa706f68cb4f423c9a7e4466c116140b3b751f94b9f6cdefd0","impliedFormat":1},{"version":"6a334b9a856fb9942989438d731fdba29babdfbfae340b4f7182f1db740de71f","impliedFormat":1},{"version":"e184c188c53f56fb830a9baac037236bfe181e9e56034686eeabe17af4ce47fe","impliedFormat":1},{"version":"c894ba99b642d34dc85b6f996ba006bb5c75262e8ba01d6989cde022ff91c33e","impliedFormat":1},{"version":"1e71697fb2c00b3cc4abe7b458acf90fffdec4996e9a885ab868d2a88876ac43","impliedFormat":1},{"version":"9a32c6873b8adfe2da4a2fb2e2fbb574227f13810d7596cdbf83b5eb9b9ca0d2","impliedFormat":1},{"version":"1b95f9db514599f21c2330d53b93495513c679fcef1aebf767098d6a9c61833a","impliedFormat":1},{"version":"b0d3f577d89cafb77845b87ca77553e992435b919221f3c8397075bdcb7a32ef","impliedFormat":1},{"version":"af7770fb80c5c4bfd4e9a2b245ae35ca927e618161bdb3cc4b305ee3928187d7","impliedFormat":1},{"version":"2c3ec41b38f7758ee3e53609a4d473205caf25f8b10ca6978587a760842d179f","impliedFormat":1},{"version":"2c2c3d4340a36df89a0f4d8776618705fb4a03f6a20b6136e53c522f4080663e","impliedFormat":1},{"version":"56bbd1661909b6600753fc71ed0243f6e8adcae647ef67fc0b62b60e2675a5b5","impliedFormat":1},{"version":"0f99e68df1ea45629adae539a99c2905fe434028fe6704f167271f4ff4f05264","impliedFormat":1},{"version":"eb4f06e379b9718725fbad551937cfc3ed1d279a4a4c7557f255d58858c7d857","impliedFormat":1},{"version":"85788c0c598c4056da67fe8a59fe45a5500fb99419aad0f674bb6da07f793288","impliedFormat":1},{"version":"3da22475af910d44c68144a18133de616353aeb85218516e3d7324d8d5dde33f","impliedFormat":1},{"version":"3ec462a0e5c193a2fbb9132b3ac1554512475b2889555c2842686fd4fad53540","impliedFormat":1},{"version":"f7fe6ae99cdb6d40c8a49235f43532d6aa6386f62dea97bbbe5b40fff5d9e7bf","impliedFormat":1},{"version":"3f6da7b72f49f175c8697f0b595c61b9c6379ccbd5bb52c188af80e97755d91d","impliedFormat":1},{"version":"c26e3f5d9b91fcf817e6ed3565abc561ae1b8b5510d26b1780f7c36565463ea7","impliedFormat":1},{"version":"ba82909968e9b21ba2756849a8e3960378bba2071e7e534678c97a6d0923141d","impliedFormat":1},{"version":"77b3fc3e5036f6d435fd1a7ceac8301d654cddb9ea50d9c77f9c8b9400711685","impliedFormat":1},{"version":"3b7765c7de1b17a0ec47070ee2000bf0da31cdecef6f61647cd2eb17d33cdef8","impliedFormat":1},{"version":"3da62cc0ecc4ccc373936142c3aef5219493ee7fd013a1426d733a1de178d064","impliedFormat":1},{"version":"3bd67be4d356ced8037d48437abd6fa8c4c2aa2b44b5e6fd98df41127807197a","impliedFormat":1},{"version":"70ef66c42dc83eb786c79d24d292e9f40407b03d6c37112adbced4c5fd353303","impliedFormat":1},{"version":"12a7629d2d48dda27e51c66aa511f28721e78a7d50877d87d656db7256e5f8b4","impliedFormat":1},{"version":"8d7e6cba8878f619bbe9c913c60f806609ed6527aa2da09ee4daeda99581befa","impliedFormat":1},{"version":"90cc2fca0550efc03063c7fc512eeddca0f91738a68391309a344f99ecdaf9e7","impliedFormat":99},{"version":"598fb14b8dc10fa1db2e6487999b25b75e54e08f7f24fc0394888a49284aa62d","impliedFormat":99},{"version":"a513b399e094c24ac5e4cee5b5c6b38d8dacbd1eefd46fcae71bc46be6b2e120","impliedFormat":99},{"version":"7310ba815b1298a1524c4e2edd3224cdca56bd4db7adee668d95b85f3a2cedf9","impliedFormat":99},{"version":"91b36942c9f7fb5e8b3ff2a6cfc950ef5dc3a12d3eddee5cc4f2f493a4e618d8","impliedFormat":99},{"version":"826b3e7d42891cc1a2bca7d688ae4967e3ccfd061adcb0becb2f8586adb7227f","impliedFormat":99},{"version":"39af3a83e76fe852e363c316d7025cc6227a230c019332463550a521c5af4ecd","impliedFormat":99},{"version":"73af554a9d886e748c44fc9a189cffa3e7a01b5d349139422b15f560fe0399bc","impliedFormat":1},{"version":"40c7cc279bebbbb93fe4d92194dc882e7bedd78a5a8863c032e257af3beeaf0d","impliedFormat":99},{"version":"e9f8eac5df99bd55620267edbc1e3052df609aff1eec199121ed40924d6f4c77","impliedFormat":1},{"version":"e20cb5ecbb81fef3b43a3819a964d7493606fd72460918f6cc19859e9e9f1fbc","impliedFormat":99},{"version":"82f9e99f5d09b9b40fb1e0338051f614f2fba2f0eb6ffb493e9cbe0cdd775858","impliedFormat":1},{"version":"268011eaa3e078d8e8f3cf68270bfaea3d847c02b3a787a557199d242ba6d859","impliedFormat":1},{"version":"454ad66df309d5c0bd00933afcb2c494e1e920bb9d71dc2f5c6eeae71e17d63b","impliedFormat":1},{"version":"ffda5bfa664984a6b5fb52c5305b3305b0b4226e507defb219986d2851dbf271","impliedFormat":1},{"version":"e4f54b323cbf50a0c7dd16d2e00fbb65fe703507bd1b6c92834760f3818c73ee","impliedFormat":1},{"version":"e943f29aad5d086910fa813644df591992329f1ae3216ddad2cbbeba8b498ce8","impliedFormat":1},{"version":"f77731933f64e0282d2f817631c33ce4968308f0105a9d00c02b3da0d4e1bec9","impliedFormat":1},{"version":"4961298a242a5b62c67d7ab4f9b6e8cc5a00e13f15db729d41b0d52bf657fd0f","impliedFormat":1},{"version":"dba5195f554b93eb70c5d095707ce8a8fbbaf8ef529e43164e29839dc2b52cf2","impliedFormat":1},{"version":"27dba65ef76f5a18dacf979f7318823f6477b3001ad0d5c768e97195dbe1a9cf","impliedFormat":1},{"version":"b5d9f34b4093ac500ae683bc619adc06ee2fa7894dd6c48bc6c6d547e3e17c8f","impliedFormat":1},{"version":"abc82190d7bae3005c472d8d05bbcd985ede5656fc0207aa68fa4e7da9a9ec65","impliedFormat":1},{"version":"949b926885b92ea08bba54d67dfcfba17c70ef891a9782f47be2a60eb90beafc","impliedFormat":1},{"version":"6af5270cfa74794027a2bce6f4206f93c92ea44134ebe8565a25a29207b8b448","impliedFormat":1},{"version":"f8d5ed9aeabcb45105f2123ad38d4a2f92f0d2aae404126354c2eb3b58c220b6","impliedFormat":1},{"version":"5e12507f43f37d079ad3832b65d5db02ed6dbe97efaa91c49d2e4012c743b058","impliedFormat":1},{"version":"71db4f6d5abbc45e7eb3efbc2895920efea43b1ae608d5a5ba3bc729034938f6","impliedFormat":1},{"version":"db7ca7e8f700305416677ef26504c9771e18cfe7d4e44dc0db56793911de0479","impliedFormat":1},{"version":"21f8a2249185447d1704a8bd027ce6e3b347f23fc94469cda8d904e51380dd0a","impliedFormat":1},{"version":"031fc5bb9689da434671316d76b4c4edb048d3d1ba65f517b7f72a27b276cddf","impliedFormat":1},{"version":"a5e7563b2030f9c076daa5347416ef3679b58441d6c8ec41dbf25dea39140591","impliedFormat":1},{"version":"116e06ad30ce51f3ddda64ca96da17c9c91763d32391f156fbe257d7d7314ad2","impliedFormat":1},{"version":"0f8a804a7f912f83768aadb08e60153be70037e11c63c34e8fec0352d7f6b128","impliedFormat":1},{"version":"d04253b154d2a9ea9f68c979c8613b08d6496d0cf9e6513b73d334e817aab32d","impliedFormat":1},{"version":"7231e125b797ca135cafc311bd151e347b59860aedd79944084cf8d01ac96a1a","impliedFormat":1},{"version":"f4e6a219c97362672f211d82773c8b3642fa266967830b99b1b0a1fe1f264ff0","impliedFormat":1},{"version":"33436b63f7c6073de5a917147a773a77e8fd58364d25c5faedb74478241c6269","impliedFormat":1},{"version":"1c6442e524d59ab72c6e5be929eecb0184efb6201e122c93aac2c96092c665dc","impliedFormat":1},{"version":"ef64c5812115a256a091275f64b96478dc1be0ba0d8c6ad15a2b48bace79f2e4","impliedFormat":1},{"version":"8a466f153abbf98b54f3f11114805d958ebc1d10cfde25489cbf4eee3ab73d24","impliedFormat":99},{"version":"2cb377393bc1fec5c94bf6a66b9589428552ef8f43555c4d56ed9dbb39d3b6ab","impliedFormat":99},{"version":"a1d02fc6158be3e0747db28fce83d868675f0d534b5e709e49ceb402b5fa1546","impliedFormat":99},{"version":"5488d985eda0089f9af84428ba3b87b0fa324fc606b53ed92a330d75544c1fa0","impliedFormat":99},{"version":"9503abb5f4cec90d15508bea5b9b346ee318b61cd216197abdfba7c23a1b7f98","impliedFormat":1},{"version":"b6f079ae4e4700f39f0c3a298bd5b392759538f78b7bed691b5395a84af7240c","impliedFormat":1},{"version":"06b9d7d5f165d6d8943165b6c35ac4f58168a22e7e84e3d998c7d3f2e309aa1d","impliedFormat":1},{"version":"06fec4cdde20d9ceb1ce713c1c2800581de2cd20df5ec10aca8dbf80c4b13f02","impliedFormat":1},{"version":"b8c81a0bde3f27c47431b3345ad687ae2a3b88fdfaa15bce56746778153004c9","impliedFormat":1},{"version":"bb315cb4e4267dde7d4a2c11d9e743a4d8d2ed210c23d807086e0809dd8b3431","impliedFormat":1},{"version":"fca6802d418b89ed3ae99dec5c0d42ae80c09702ce6bbe14aa9af053af58c109","impliedFormat":99},{"version":"b0e5e70d6cbc087dd7f842ed1f0548a25c746783b6bc88a13696ca517f6538fc","impliedFormat":99},{"version":"5691211f2d3d4b15831333bae27895431f2fa61a49284bf1ddf3cb13229ab0e7","impliedFormat":99},{"version":"76057b4c42aa46cf0d241022f7b4a34b9c4b42e1d3039584938342d701325f54","impliedFormat":99},{"version":"9f12d9ebe66646a1a62476a2fdcd54436f80704fee604bcfead5e561c8a06d82","impliedFormat":99},{"version":"0d9ed3d0a1d658e265fca4544f7bd72cb0e4ac04289e567999fccacb8bf23942","impliedFormat":99},{"version":"6ddef35d1c1c53be9d1c969d7be42061c6206ceb4f315f2f73ae574db2b66c9f","impliedFormat":99},{"version":"3b7d93b9e956702e70bd2719b098aed1dc38db124fc8b05be38df72d74aea1ba","impliedFormat":99},{"version":"8c03f1e4bf31dd93f401b624bb7bb9e6049ab4bd729ece7a0a333a43513da05f","impliedFormat":99},{"version":"e7607b9510c9b7682838272d3c291687825703f98cabd9b626aec9c13777638b","impliedFormat":99},{"version":"7313d5c65f476d10d7a4302985485fe5f32fc26cc5db5b3c90f19db153f3b147","impliedFormat":99},{"version":"70263cf1cce52834940415495b990b79e8d0c3d33722a413def2427fbd0e7335","impliedFormat":99},{"version":"250788d9295815dfb48fcc07ca0ecca9cc1362eca3e412ced9440337a6845e02","impliedFormat":99},{"version":"1654da9df0c97cef6f6e73522e774d47648b56f42d7f0a389a0b832029240ca8","impliedFormat":99},{"version":"032708cc4f65648d1e7928d56c599a3d33a7e5343af046b4907ecb5167e9fd28","impliedFormat":99},{"version":"a26c849da4fb379def16137714fe7865292c4f57a0c680957f11d8626b2a5d58","impliedFormat":99},{"version":"eb4589f330b2b662f7102b807385f21a77ed47daf527f2d7413bf1f59f827926","impliedFormat":99},{"version":"005081fe2ac323e05c9250762659ca1fb2655ffe195db42ac401db7656a33434","impliedFormat":99},{"version":"194b40df34d512f018c94ed400c12ced47ec0d0d0024e93193f5f1ddec197209","impliedFormat":99},{"version":"b61a325187e209370a66fdbde0c4ea4e3eea5a0eb62028308a09708ecf22df0c","impliedFormat":99},{"version":"6af4b184c107adadb6eb713b1f94f7cf2fa3d2682dceedf7de5809f61c32a4c0","impliedFormat":99},{"version":"d8e642501089a62b205907e642ec6d170e524433914086bcb55e356d837c195a","impliedFormat":99},{"version":"b96edc0f63de60acc4a02123810c41872a6c36af81395d93a466b0c48e854ead","impliedFormat":99},{"version":"47585511fdb670f049ac9cf6d99ca1415db4b2860c01ac0d5c0285e26ae67137","impliedFormat":99},{"version":"02c582136d29f693b8653f245492efe67c300da6f512186f57119320602d8c42","impliedFormat":99},{"version":"a19c526d364dba0b2d4bf90bc48027899c4a463a970198158fc3ddd9d50d22e6","impliedFormat":99},{"version":"5a34310e8a277f46f226de3f14f85b28045134382d2e7bb0dcf7b1940e867d75","impliedFormat":99},{"version":"e994ac3e5e1fbaf99c9231e5efc2792742bb119fc80d2cc5601a286083519f08","impliedFormat":99},{"version":"9a7f9992781334b2d6842a4c4678c69ad5953d0af869038231ff130b8d362ecc","impliedFormat":99},{"version":"26af0ec63cc0ecf6cf908ca0b3371d747c5b16b31b458664fc84e42829fcfc91","impliedFormat":99},{"version":"6931e8c252c1c7adc2ea4fa1054cd3af9ca16c2e0970803e74ae0cbd6b6eeb04","impliedFormat":99},{"version":"4504f968ae4e1dfabcbb9455e50d4b8b9bd8812fe7944df4936908008be7bd9f","impliedFormat":99},{"version":"495d72307d8883127dff213871cd3fe8bfd456ef2a94170855094133d7e1bc24","impliedFormat":99},{"version":"132e407c15a07359bfaea24b075e83101da95241a0b3f5a2abeb41938e5167b1","impliedFormat":99},{"version":"82a0e39185ae3c8750c776e3512da3b490b42c40d640d7896b747432b1fed080","impliedFormat":99},{"version":"990a5eaa839432e8959bdf25d57e5446fc2a3b6c04a08c3d98218ef4b6f35084","impliedFormat":99},{"version":"16c33a8f8b4068b34ae7b4df4e349e11245859669b18e1cf0a72d3dbc1d39a4c","impliedFormat":99},{"version":"f279cb3696fc7ca366af09364912113fcffa02aea3d11f4e16a91ce621706258","impliedFormat":99},{"version":"06624476f5501305c27aa846a30690abbcaaa04db1a34b11045d7d8c22c2e0bf","impliedFormat":99},{"version":"8a225e7475a2d199dbba92f932df219fce36ae90c2dff3b9a388b49c5cb42abf","impliedFormat":99},{"version":"22c6d2f13b648b3fa5df4a394919e4c6f5ecf6160bd6a8755c7a6f0b2f7abf14","impliedFormat":99},{"version":"1b8f0d8a29503b796431c542c484b0ebafe1223e48fdd74237a42eb371987517","impliedFormat":99},{"version":"fb652a27ee66ae1232d67cc79ace76e1d444f8d37064fe234c7b2e762712d54b","impliedFormat":99},{"version":"bdc90d2feef36b907cdad5d9876023165d3bacff85b4a57df085c316ce252cad","impliedFormat":99},{"version":"1d9dedb0dd8b0eb5b3105d577e65627786185e5f467484b12a419aa97c0f197f","impliedFormat":99},{"version":"27a25e21a230be7cca2d75db5a67e2be375282e7b1699a15f4e33211dd0f0f2c","impliedFormat":99},{"version":"4a5d17a0faf8af0e14987dbebb1e39350fcb087237452dddce936dca8e869d9d","impliedFormat":99},{"version":"87cb24ebc66080f5faa3e609fea0c67f01dbbdb1224c72d0a2338c08c901b0d8","impliedFormat":99},{"version":"8a1dcf16706e4597681fff57326c1f9ac14082accace6332acf5d6dc89a3ec2f","impliedFormat":99},{"version":"be112a9b78578a7eb57cdef2e48f17d1fce438b741cbef3b34c64620ca4f07f6","impliedFormat":99},{"version":"35ccc7e81030498057f8666924ad88b9e0e54a1fb03b4455e47a64642824912d","impliedFormat":99},{"version":"9dd1ada2bd479d0ff7958b09cb20b28537ffb3d9f1c6f3341c4c60c2e0cf1574","impliedFormat":99},{"version":"a8e2c4132e615e8f5343269e9001c1a403726a772dfa5f64fb6201500fee928a","impliedFormat":99},{"version":"220cc181f0647eb24d6fefddde0d6c827b0aff763be1129f3df8cb1fa9fd9a1c","impliedFormat":99},{"version":"5d4afee41b54667c69f7a105fbb8f87905501d6e7634fc25a2377475a8d30a6b","impliedFormat":99},{"version":"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","impliedFormat":1},{"version":"c338bbb9e72e70bba9467696867875e750d68409c7effef79505ca665b9c6dc5","impliedFormat":99},{"version":"3e610c3431f5c3fd1f2b0155516656233e4122e187f643f31054837ea684fe99","impliedFormat":99},{"version":"e0ba304c13972fcffd284205b440bf806aa4e19681c6665408e3ec306125ad07","impliedFormat":99},{"version":"87ec934346c216050d4d2bf59f9cc5dac7484f7f1ee768bda33efef37bab1b82","impliedFormat":99},{"version":"6c2525d9c51d3093e361f4740f5582911f6767a207fcbb7a8f9b16735d5608c7","impliedFormat":99},{"version":"bb4c626cb469e577cbe2e6ba83f6f9b572807c15a44817b508296fdbeb408506","impliedFormat":99},{"version":"96a212be4232ab83443032662adc8e4a106a40cabc95b129c370a70dbfa3b79c","impliedFormat":99},{"version":"fa0b1b7f810b5f5b9331d1d1e43f9b2f313c1ca68a13f1db5094971d5d14ad50","impliedFormat":99},{"version":"fab367e53a92895c438a4a9752dda6ad898841d5da5ffd20cb4d5bc98fdf79b9","impliedFormat":99},{"version":"702e07c623b683daca1be9dc86f68b98bea08594d2fa58152569194374cb7803","impliedFormat":99},{"version":"773fece125c0873100581c4cb60cce66fb7c6c251309ac157af298a1254c41f2","impliedFormat":99},{"version":"4ca6063a2377f4b044de856ce0d77eba0b831311c2d0b03540f74c07925460b5","impliedFormat":99},{"version":"5b0334c5e38d76152dc097b5bd59387dbf9b1eb6e4a2dd3c0283e3a84fc06c84","impliedFormat":99},{"version":"723510cb216fc96c1c07a87a2b9d7884e8b661a05b9a4ae797bd3b8dd56492f7","impliedFormat":99},{"version":"0d3399df5e693f63359193350cfb41c89285d28399a0f630ce0cbc416983803c","impliedFormat":99},{"version":"62b3e968c398fee4b0eed5a13fd541680c5e9c9f019a647411a6b4bfd19dd41c","impliedFormat":99},{"version":"2b27e8692192cabb5d59515ea899376ffe02222e98c6925293acbcb9c2fa0210","impliedFormat":99},{"version":"f4086ac8586359d3ac82e741ee189964c584ac093d21ec56ca76a243999ef235","impliedFormat":99},{"version":"fd69f4ad6d59e73cfb16e701c4a30ba7462f821ae431dbf1422f4dbb46b5ef24","impliedFormat":99},{"version":"9078f5664d7334f5e21ac358bda1e84cd7ae595482e07d8f4784625cb30308a1","impliedFormat":99},{"version":"6f03983429227448d460dd7250746696edd2ef6a19bfd4465c01d27de049d2b1","impliedFormat":99},{"version":"dd21320e5700d960be5c16810fb2fff4122f8778d5cc7c05f943c25b623fc2a2","impliedFormat":99},"a0fa15d72caf3a0eb1a57a912370f346538a34eeecd51234c13a0d3b4b915503","2aa6d406f44a668f06b31f8123707af3a10693e93322692120c0027e61e4d24f","4331e6c683b1c6cd14c04d7406e9c36b5e2f885a2783ed8299279a888ef4bbbc","e256a8cd5e2ef7fe911a8eeee649b05d04ff44e242e4399b7fe10de489575930","8a5ebc2bb1003e04d74afea72e996b9182b611cbcbce7e9f5d668471fbf7ce4f","9df29fa4db42e17296245ec0b52d5489cfd838f74f840e8c3fa793c43ffb16c5","95944601f00c02dff61b3d079ed5e9f0fa296cbc078412314925ee17a448eae6","7c6dd44ff6314b2ab6a18830164e50e38ea8bf41b3723e2f24debe3a5289bdc5","c70d5e0bdca57bd7bfb671564f85599d85a7d5b24cb356453bbbd55a636a1d1a","4da3b87db7f1f556e7644e37d765a72e0d427032a60663b9307655b42e8b71e4","43d75ec26ee0a57dcb80d9da94052f1ecec9b0ea132ffa052439e0d492305553",{"version":"6103fa99fe88002eb16c3f1c62d5ca63884d80f6d329e88ad13e6564ac595596","signature":"ed6c62e4f1932b752c78df12a86d4028f6bf24dd6c37884ad8ebf26f8ab600b0"},{"version":"fef2db242bd3486e86d617ffdfa6b5a9371ec030fa531bcaab82d0cf5a599e47","impliedFormat":99},{"version":"d87ff16af50e72711758976381737ede44d715273ade5ff140233a5161582bc5","impliedFormat":99},{"version":"c28a53b3debdcff691654a953fb40de42c564c5fc83aa9f33e09f6d49f8b394c","impliedFormat":99},{"version":"26155b3fae8d5952ef37c56c7cade1697698a13372bf8a13322efaf07e374fb0","impliedFormat":99},{"version":"a9fbf6fb1fdc341ecd3dd1a9d51550dac66a2c4ed59d4262a6e2aeca5f3bb331","impliedFormat":99},{"version":"8eb5d04499441a78b88685b5c3c1859139852edcd185d40af342e72063e3b82d","signature":"dfcff0190f0ce958c6f1626c93c6ea931eb3ec3f38c370985e3f39368109cee3"},{"version":"1660f54ca2d7a967c9882face77715e8f5f150126ea079ba4cb968deab23f07a","signature":"8a9d0852b2a32da297fd3e7ded81189d56a6dbb56e5da31475fddfd684dde8a8"},{"version":"821cf8cc7a50af39f22c6a2ecf7d4137401282fa014e65c2595f7342250ff5a3","impliedFormat":99},{"version":"712ee8dc42325becd013d1a357e2fb5a2f75ce9a0a940a6cf096126d3f7f2066","impliedFormat":99},{"version":"921b8080f123c91354f3fe3ad0ab205eb376967db2d54194ee78897b55710876","impliedFormat":99},{"version":"a7b9137d0b509b67c77c73f5ad28df8cec2d409f63244e2e5e70954dc483b3b8","impliedFormat":99},{"version":"92aa3dcbb3b66c2d1c65e4b9e9d87e72c6e1c12b95384558ae880a66e54f9ece","impliedFormat":99},{"version":"bae4588384de5cb284da1537bc3f3ea5e5432958de3d5766960e5e379adf7236","impliedFormat":99},{"version":"3ad287701c259460658a837dfd4fd96b9735a8d55fa8c9c792f0bb821484f248","impliedFormat":99},{"version":"b03d8f58754200d5df2d160082544fb2e580d805b28dc41dfaeec52f1e10d5db","impliedFormat":99},{"version":"39e55367e1c6b453ef5e9cc896148c8a32b915a50abde4489cd91e990e395d63","impliedFormat":99},{"version":"5961a865f796c4d6275c10c8e8ff74443b3fcb49ebbd8fbedc0a19dbc14f5e25","impliedFormat":99},{"version":"8018ae9a209d66b657652e2b6b02ff1b2118d420fddecfecb060a7538ea76ccc","impliedFormat":99},{"version":"09b973c7e71fb73095726002749918d3fa7018338c90b36c8d4ee784820d2685","impliedFormat":99},{"version":"d7106ed6de78fc12e129ea5306dfef61f9213090bc915aaad04640638235a477","impliedFormat":99},{"version":"178623f07777df7ea84f4db248b044438ac476f0601b0523411c65e070620a7c","impliedFormat":99},{"version":"76d56188b11cacf23943e6c30957c8d7d57676d7b9a90e067c29871c42e20705","impliedFormat":99},{"version":"51f944cadca25866bc3880e6c3691eb273adbce3ca3a62c9db554811743810bf","impliedFormat":99},{"version":"f071a8dbfc3599b3ca0337d790468efa1adef72150055b6652b0d50d25238756","impliedFormat":99},{"version":"17747d42dbd39e6cafb81d576d6f1f1d1473034a3a4555aa211cb8ffc464f7db","impliedFormat":99},{"version":"e9da1ec146b41a98842501a2c509e67919085211f2321da4edcdaca53e958a4d","impliedFormat":99},{"version":"d6330014ef23a6471a75cb9019060c31c28cd34d13729fa9069b54dea0a1bdac","impliedFormat":99},{"version":"af08fb458edf0daa6aca2989102f3bf1ca6f1745c450ba2ed9268c66ec438270","impliedFormat":99},{"version":"6b8dcb88b7478073beed5c1dfea1324f852ba78559a42174fa8952ae764802eb","impliedFormat":99},{"version":"ee5691716de0fc8a3a36eb7378d3e3501e06a4317ca8493a94ca5e4f939c62e7","impliedFormat":99},{"version":"b12c44ae8b9db7944112e476f61ab5a1f92fcc514bb588b3fcad9d5e691d0505","impliedFormat":99},{"version":"c6db756cf38e61f811fd90bf3a85badb5dd6e98073682cfd15ede01e21755e78","impliedFormat":99},{"version":"75b102f8fe95a94d04b9b9cc0c533ceb532a400596693e1f78aa746583ae0611","impliedFormat":99},{"version":"aa9943cf689d692aae09d29a6ed5c99a17ca9da4d37e64ef591c13fafacccd34","impliedFormat":99},{"version":"4c86ea12224cc626df20fcc23447e15c48e721b1c55fbe8a49a2289e3f0c3855","impliedFormat":99},{"version":"f52db84ac3dd4348ce92916d77e184701b81cbcf7a05776397bea018fa7cbbe6","impliedFormat":99},{"version":"6c7a31e162b0bf6dc7a4e1565ef9094e5c2d2d95a79227bdaea1e915ae89f436","impliedFormat":99},{"version":"7fe038f195fb8693452fbf164693d585de5256391b8460e1b6aea2b85139749d","impliedFormat":99},{"version":"51cba6a662cd4918c3998a3255c07df018e963d46e74816b505b63ebdfefaf24","impliedFormat":99},{"version":"5763f8320321e3f67b05606e67592f7843230724c285f05324659d5005516df6","impliedFormat":99},{"version":"e9528b36256cac681c8639569354acfcc420af39940bd98e725a8e31a3a840d7","impliedFormat":99},{"version":"ef03fbcc932888878a630634a7dc5da6ca61269ff30fd029150a63931b565ca8","impliedFormat":99},{"version":"12ab5fa2dedfaf2aae44362f283a37268231d8019de41571583dd7a597c6dbb1","impliedFormat":99},{"version":"a76791548cff88e615e4d3c1c70083a762885ffb59ee536eaff7e7785dc8ac5e","impliedFormat":99},{"version":"a059fcc73970bf49ebaf6cd56637c70f0aed9eab5810163935c56063bd245497","impliedFormat":99},{"version":"c82bf6f1c60aecc5806faf91c95ba1bc0acfb7c8dddc3e66b0e1347732cd3bf6","impliedFormat":99},{"version":"b076480df86dd4e1f0ba7cbb48a9e99b459804fec727c607678b67fa24f46992","impliedFormat":99},{"version":"c8c65e3fdb0b9cfbdf2b7e8b47349338d8cff610474fe6a9ec0cad7fd8e158d0","impliedFormat":99},{"version":"0c2f59e1b1ff1ea5667e1530e5e70168b59ed829a66a26ecab52851b60255bef","impliedFormat":99},{"version":"58977431cc57502da97125b04690799a9aaeea6f1d769435db69cd88953eaec8","impliedFormat":99},{"version":"0cce36fa853b49c6cd0c298c606cbbc56df6d99d7cd3a759e41dc7604321eb52","impliedFormat":99},{"version":"1762961f9d7bb52e85a6905ba5d4b5f5dc1d078efcf7ceb7a2b44d6bd8872812","impliedFormat":99},{"version":"a1de5f96046e3017d4b0167c9c4e2f78aaabe3309d785cc36a6f78697896997e","impliedFormat":99},{"version":"589ddad39d47c8085a591fef69304cb66cf736dbdee3b11028acd6b7db8a9809","impliedFormat":99},{"version":"ef694cd28a1c62309de5d5b971821a6d476339f623e48f290c7d099903285a4b","impliedFormat":99},{"version":"f949aa37ad84953419f3ab0f7b2819fc531328dfd200eeeec14c5476e69560b0","impliedFormat":99},{"version":"70d4a447d23d0c0b810fae806ef1852cf31b8c7f01018b664409cf6765608fe3","impliedFormat":99},{"version":"2314106831c0f9904a8afaf6a275b4fdefc7828539225313bd43f6c8ae666bb3","impliedFormat":99},{"version":"84d7d38acdf8bc33fc1178a937d192fb7be52532772102f6d2035042d5c389e3","impliedFormat":99},{"version":"07af35aafc0b6c7d2d03fa40c03fe6bba8a4376eb64e85d0bb7eead4b325b914","impliedFormat":99},{"version":"e199e314407ade4a8937a8bf579b2b3e48d0d75d07970db3726c58ea9dd8f14c","impliedFormat":99},{"version":"6abcb17ed78188eae726f3e7f0beeae74423418a1f7d3399d2ab3c023bf0f223","impliedFormat":99},{"version":"9a287eaaf5cde42e630c05818f497aae84ff772543b688c22896afe0f524925b","impliedFormat":99},{"version":"f848c1c657fe44c477721b37faf2194e0ac9da75d16895e872ad4004b04cb208","impliedFormat":99},{"version":"39df61e00a70393b97c6412cde6b66de168d2534d3c37ff8607250c5adfb5233","impliedFormat":99},{"version":"4a17241ed939a801aca0ca71ea883bdc217f466dba45deabcfb53b2eb68215fc","impliedFormat":99},{"version":"92fede0ffb993cde7596122355512db5ebdd3de0fbdf9a37e5b37580093bf175","impliedFormat":99},{"version":"c2982f92e96adc31e0dd27cab795e136e0a2470251a16a2bcf77a5697fe59f3a","impliedFormat":99},{"version":"1a50afd03f1d2b4d5d0a3a66a188fdd438a954c7f8aa9cde8fdac6b5b69f6ac7","impliedFormat":99},{"version":"fa096e423abccd556bc25a7a45c7274539e5ca7f756ec5c1dd3d23ca0c13d62b","impliedFormat":99},{"version":"92f0b155ff361b7cc7ca278c741e64feb03122b4ed1d635d4006908d0e6821e7","impliedFormat":99},{"version":"d3587784c0bdb756ac6cd68d21450ce8602a08ba8ec2d1718df1f58f20401ad0","impliedFormat":99},{"version":"7b599e46ef95b7372286c31e97558a019690aea0b6ebbb101f27e5e503be6c6b","impliedFormat":99},{"version":"03dbe5f092e00693e6cb63f7eb6d2f3631ef37d23ee2e2a027cfa915e9678e5e","impliedFormat":99},{"version":"e7318d62e2932c2fd75d5f9edc9f3c37ed3afc0a2c9c22e2442e3e87322b2c15","impliedFormat":99},{"version":"deea6f16a2b6e68aebe932c5d5f17098a45233538589a1bdd320357944dfc334","impliedFormat":99},{"version":"2a8adc0150a6c80c9c46f93e34cbb7ef5d1b8c186b1e7ab95dab59a2fcd0892e","signature":"dd2dafc0311ded655b937c769b234a93f20b88354877e4f50175d8d37efcaff5"},{"version":"f7995d62ea31c71272947e5d0513fcb3cf74e56a937706f042ec3b9116d9b315","signature":"8f7cb824d2df46f358acf025475e2d9f2fd85dcb7ececa776da6b5d80539fc21"},{"version":"851ebc659de9577dedb88786f5fc436f013f1ad7915d2ea18d0aefbd474ac0d5","impliedFormat":99},{"version":"1251f73e967e9cd222d15e74a6cae7f7894da2fbf18ad685e3a5948fc0c382ad","impliedFormat":99},{"version":"fd183dc1e639c9c0f8b7200d0b0bfdc03864b5f2ce3d41549a8656c44a524231","impliedFormat":99},{"version":"1a82833bf7fcd9c9328a1d36433a92bab811624ad3707f1b01d7835d677b326e","impliedFormat":99},{"version":"d9a6bc7381fc831cb81c3eaa79edeaccef9aa84817bb0aacc13e759eb8e7ced4","impliedFormat":99},{"version":"c83d08ceff7925a80f98c793df2bc5e7b92cff63562e307b33709fdc9b2ccdfc","impliedFormat":99},{"version":"e81d402982f27d8f03a8e1f9c9faa0edfbb55830295ac8cc1225bb19a6aafef0","impliedFormat":99},{"version":"73476e16d2a9ef32a03b87e53f48e78c58a188dfb09bb0fdd006eb9a8fd90d7e","impliedFormat":99},{"version":"b91b59c2351aa74d0959c40ec7e1600a0392fecd68435f52d88f781bbeee57d2","impliedFormat":99},{"version":"25cc3d5e79484c39e344bb3eebcd2a723dd9defebfbc2b3162ba4a34b9efb3ef","impliedFormat":99},{"version":"a467fad74c6526604167f8b143643bcf6d13f836c6cb0d31000be599a34e180f","impliedFormat":99},{"version":"69978bbc97ed626a53595f9bd6e844dd6cd3846d76b495514e8b730feb554c7f","impliedFormat":99},{"version":"35663e26c95fc36c5218c3d53206276d0a0c2778b1ce2a707bea2e2ae263cf15","impliedFormat":99},{"version":"846f27b3e0050f8a79b101355ffbde70e029b16447d3aca3d450bbeedb603cf7","impliedFormat":99},{"version":"4d5b76fd27a2dda2f6c4abb20b16bc5d699dbec6f49817f2592ad61938cce40c","impliedFormat":99},{"version":"641aea821c0a88528e7a0d012d0c31702315a53be9a8c2f753bb9e9ac5919e3a","impliedFormat":99},{"version":"d3802b885d7bde7cbdcb6bf19ea27741d589d77893c1c1c57b40cb094f185154","impliedFormat":99},{"version":"09390aa916e1d20c1e61675b9d8f5240a640e209f14125ca439841bb8863516a","impliedFormat":99},{"version":"0f81ef5be073cc999261bde6d4e59bb89bfa49beaa26146c0f281a3247e92362","impliedFormat":99},{"version":"8ff8a030bc5969ed9209b220313126b854532d6aa34bbe86d5e26a9f4a67df33","impliedFormat":99},{"version":"f7b32eb93598e42a7d40aec1533c231a519718a865ef7ab3a399c42ae21544e1","impliedFormat":99},{"version":"4ce139d50c9593e7c386a4352c8602a060429294c9571696dad7f39e222e7589","impliedFormat":99},{"version":"2e53b1d30228b5bb46f82396a9206794ae3026ad4f16c3e6bbc7bac37c320809","impliedFormat":99},{"version":"b8795cf7bcc9ea20da65e9873a142699cf64bfc6137456ff15f845a615d2f261","impliedFormat":99},{"version":"4d4235593f4f13dc93d4050b3a9df37404946a0b82f077533670cb9754447eba","impliedFormat":99},{"version":"0b09602c13dae37adae341f15e72d301e55ecc4543ed5dd60d2bbb7bed84cec3","impliedFormat":99},{"version":"4c7058c3815612df88c1a6ba62b61909ba6f773e5fad0af63cec37ff5fd33ed3","impliedFormat":99},{"version":"9ba0ee48f5778a9537a46e5d66bdddceb785f85f9fe07e4f0f0d8bc4074ecf2c","impliedFormat":99},{"version":"2acd1e27cf84600ace83d68fdf4a1f36d03eb2975323ecffd7ede7257dac8576","impliedFormat":99},{"version":"a0ac9df2ca9f62827cebe38132e276a6728402dd779cd855415641080f088ecb","impliedFormat":99},{"version":"3568f0864aace6a5acfec058629bbf464c5b9f3efe72875e327d717b566ce7df","impliedFormat":99},{"version":"e9b961d3cbbf4e994a29b4c576794b0c9604c44d27c990ebc88938e7310919c0","impliedFormat":99},{"version":"0e0753e126914590a6825849c22221483235f8262013aaaa9370214c11f704a5","impliedFormat":99},{"version":"38a679a441fca691e6db7b411c786c9c1974894dc9d4e135dfbe66ee601324ef","impliedFormat":99},{"version":"c7352891cb8a9dbb2db4b126880c5afd5d486af158aca0a4ddfe2d996f2faaf0","impliedFormat":99},{"version":"8fb568102deb8c2c1e3a226a46d23a664ef74ddb95f5f3882a1fa1eed2ad8623","impliedFormat":99},{"version":"e127f5d3a3ae440afc76d275b23d8d4471b6d08be0f9b723ce21083699f59fca","impliedFormat":99},{"version":"fcd2a91c523c98182c7abd3f330d34efb1d2cc09402af9ebfb7719c7dbaebb80","impliedFormat":99},{"version":"e08183795498a71762048d429707cd403c4fd511e12b02a9151e147c20a39133","signature":"13db349367aa11bf9f7ff93ac09c7a74f761088e422adb1df2f9d6c1df697f0a"},{"version":"6c3ba691f4577c7705e4763a0f9ea5643fa78bdc1f5e982e54b6155cf658fa55","signature":"e093b2aaa25dd0933df3738a5245a4e5f1d0bc017bce2846088cfdecf18cdadd"},"2552a31fad45a9ed1bde87e51b038dc0e786cd364b597162263abbf57018949b",{"version":"2950cde9cefba5dc7cf24fa2727a1b28e6e5a18cd1d468b21c29e9f28316909b","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"88f15b122a0f032fd2ed35c539af453f4c0623409159d91955a8352092802a25","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"},{"version":"23916e459d83772039ee6fac894defe1853f4311c71c5de98e39df6b4e578f41","signature":"89b0f68f8f0b901f9dfff2b9e7255520283a783d6af7f2bc2953d771232317a2"}],"root":[60,478,2191,2197,2198,2269,[2308,2313]],"options":{"allowJs":true,"declaration":true,"declarationMap":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"experimentalDecorators":true,"jsx":1,"module":99,"noUncheckedIndexedAccess":true,"skipLibCheck":true,"strict":true,"target":9},"referencedMap":[[2313,1],[2312,2],[2310,3],[60,4],[2311,5],[478,6],[2308,7],[2309,7],[2268,8],[2197,9],[2198,9],[2269,10],[2191,11],[1324,12],[1326,13],[1327,14],[1328,15],[1323,4],[1325,4],[2068,16],[2069,16],[2070,17],[2071,18],[2072,19],[2077,20],[2073,17],[2074,17],[2075,17],[2082,21],[2076,17],[2078,22],[2067,23],[2079,24],[2066,25],[2080,26],[2081,23],[2098,17],[2099,27],[2101,28],[2096,17],[2097,17],[2100,29],[2061,18],[2059,17],[2091,30],[2063,17],[2064,17],[2083,31],[2087,32],[2086,33],[2088,34],[2089,17],[2084,35],[2085,36],[2090,37],[942,4],[945,38],[225,4],[2020,39],[2019,40],[1953,41],[1954,41],[1955,41],[1956,41],[1957,42],[1958,42],[1959,42],[1960,42],[1961,41],[1962,41],[1963,41],[1964,41],[2017,43],[2018,44],[1965,41],[1950,4],[1966,41],[1967,41],[1968,41],[1969,42],[1970,41],[2002,45],[1971,44],[1972,44],[1973,44],[1974,44],[1975,44],[1976,44],[1952,44],[2004,46],[2005,46],[2006,46],[2007,44],[2008,47],[2009,46],[2010,46],[2011,46],[2012,41],[2013,46],[2014,41],[2015,44],[2016,48],[2003,49],[1929,50],[1949,51],[1977,52],[1978,41],[1979,44],[1980,44],[1981,41],[1982,41],[1983,41],[1951,53],[1984,42],[1985,42],[1986,41],[1987,41],[1988,41],[1989,42],[1990,41],[1992,54],[1991,55],[1993,42],[1994,41],[1995,44],[1996,42],[1998,56],[1997,51],[1999,41],[2000,44],[2001,42],[2202,57],[2203,57],[2204,57],[2201,58],[2196,59],[2267,60],[2307,61],[2199,57],[2192,41],[2194,62],[2193,41],[2195,41],[2200,41],[2270,57],[2271,57],[2300,63],[2301,57],[2302,57],[2303,57],[2304,64],[2305,65],[2306,66],[2113,67],[2060,68],[2107,69],[2114,57],[2115,70],[2116,71],[2062,72],[2106,73],[2117,74],[2120,75],[2119,76],[2118,17],[2121,77],[2122,77],[2123,77],[2124,77],[2125,78],[2126,79],[2055,80],[2127,81],[2128,82],[2129,83],[2130,74],[2131,75],[2132,84],[2133,67],[2134,67],[2135,67],[2092,85],[2136,67],[2137,67],[2138,67],[2139,67],[2140,67],[2141,67],[2142,67],[2093,68],[2143,67],[2094,86],[2144,67],[2148,87],[2145,88],[2147,89],[2146,90],[2095,91],[2149,92],[2150,67],[2151,67],[2102,93],[2152,67],[2153,17],[2154,67],[2155,71],[2103,72],[2156,4],[2158,94],[2159,95],[2160,67],[2109,96],[2110,97],[2056,98],[2161,99],[2162,100],[2163,101],[2104,72],[2179,102],[2108,103],[2164,104],[2165,105],[2166,105],[2057,106],[2167,104],[2058,107],[2168,17],[2169,4],[2105,108],[2054,109],[2053,110],[2052,17],[2170,17],[2171,41],[2112,111],[2172,112],[2111,80],[2173,105],[2174,113],[2175,57],[2176,4],[2177,4],[2178,41],[929,4],[935,114],[1615,115],[928,116],[930,117],[932,118],[1614,4],[933,119],[934,117],[931,117],[2205,120],[2206,121],[2207,57],[2208,57],[2209,4],[2210,122],[2272,123],[2273,121],[2274,41],[2266,124],[2299,125],[2275,41],[2211,41],[2276,41],[2212,121],[2277,121],[2278,121],[2213,121],[2279,41],[2280,41],[2281,4],[2282,4],[2214,41],[2283,41],[2284,126],[2285,127],[2286,120],[2215,120],[2259,128],[2287,41],[2289,129],[2290,41],[2288,120],[2291,130],[2292,130],[2260,41],[2261,41],[2293,41],[2294,41],[2295,41],[2296,4],[2262,131],[2263,41],[2297,4],[2298,41],[2264,41],[2265,57],[2065,4],[937,132],[938,4],[122,133],[123,133],[124,134],[77,135],[125,136],[126,137],[127,138],[72,4],[75,139],[73,4],[74,4],[128,140],[129,141],[130,142],[131,143],[132,144],[133,145],[134,145],[135,146],[136,147],[137,148],[138,149],[78,4],[76,4],[139,150],[140,151],[141,152],[175,153],[142,154],[143,4],[144,155],[145,156],[146,157],[147,158],[148,159],[149,160],[150,161],[151,162],[152,163],[153,163],[154,164],[155,4],[156,165],[157,166],[159,167],[158,168],[160,169],[161,170],[162,171],[163,172],[164,173],[165,174],[166,175],[167,176],[168,177],[169,178],[170,179],[171,180],[172,181],[79,4],[80,4],[81,4],[119,182],[120,4],[121,4],[173,183],[174,184],[1925,185],[179,186],[335,121],[180,187],[178,188],[337,189],[336,190],[176,191],[333,4],[177,192],[61,4],[63,193],[332,121],[243,121],[1008,4],[1425,4],[2157,4],[62,4],[936,4],[1134,194],[1113,195],[1210,4],[1114,196],[1050,194],[1051,4],[1016,4],[1052,4],[1017,4],[1053,4],[1054,4],[1055,4],[1018,4],[1056,4],[1019,4],[1057,4],[1020,4],[1058,4],[1021,4],[1059,4],[1022,4],[1060,4],[1023,4],[1061,4],[1062,194],[1063,194],[1064,4],[1065,4],[1066,4],[1067,4],[1068,4],[1069,4],[1070,4],[1071,4],[1072,4],[1074,4],[1073,4],[1075,4],[1076,4],[1077,194],[1078,4],[1079,4],[1080,194],[1081,4],[1082,4],[1083,194],[1084,4],[1085,194],[1086,194],[1087,194],[1088,4],[1089,194],[1090,194],[1091,194],[1092,194],[1093,194],[1095,194],[1096,4],[1097,4],[1094,194],[1098,194],[1099,4],[1100,4],[1101,4],[1102,4],[1103,4],[1104,4],[1105,4],[1106,4],[1107,4],[1108,4],[1109,4],[1110,194],[1111,4],[1112,4],[1115,197],[1116,194],[1117,194],[1118,198],[1119,199],[1120,194],[1121,194],[1122,194],[1123,194],[1126,194],[1124,4],[1125,4],[1037,4],[1127,4],[1024,4],[1128,4],[1025,4],[1129,4],[1130,4],[1131,4],[1132,4],[1133,4],[1135,200],[1026,4],[1136,4],[1137,4],[1138,4],[1140,4],[1139,4],[1141,4],[1027,4],[1142,4],[1028,4],[1143,4],[1144,194],[1029,4],[1145,4],[1030,4],[1146,4],[1031,4],[1147,4],[1148,4],[1149,194],[1150,194],[1152,194],[1151,194],[1032,4],[1153,4],[1154,4],[1155,4],[1156,4],[1303,201],[1157,194],[1158,194],[1159,4],[1160,4],[1033,4],[1161,4],[1034,4],[1162,4],[1035,4],[1163,4],[1164,4],[1165,4],[1166,4],[1167,4],[1168,4],[1169,4],[1170,4],[1171,194],[1172,4],[1173,4],[1174,4],[1175,4],[1176,4],[1177,4],[1178,4],[1179,4],[1180,4],[1181,4],[1182,194],[1183,4],[1184,4],[1185,4],[1186,4],[1187,4],[1188,4],[1189,4],[1190,4],[1191,4],[1192,194],[1193,4],[1194,4],[1195,4],[1196,4],[1197,4],[1198,4],[1199,4],[1200,4],[1201,194],[1202,4],[1203,4],[1204,4],[1205,4],[1206,4],[1207,4],[1208,194],[1209,4],[1211,202],[1036,194],[1212,4],[1213,194],[1214,4],[1215,4],[1216,4],[1217,4],[1218,4],[1219,4],[1220,4],[1221,4],[1222,4],[1223,194],[1224,4],[1225,4],[1226,4],[1227,4],[1228,4],[1229,4],[1230,4],[1235,203],[1233,204],[1234,205],[1232,206],[1231,194],[1236,4],[1237,4],[1238,194],[1239,4],[1240,4],[1241,4],[1242,4],[1243,4],[1244,4],[1245,4],[1246,4],[1247,4],[1248,194],[1249,194],[1250,4],[1251,4],[1252,4],[1039,194],[1253,194],[1254,4],[1255,194],[1256,4],[1257,200],[1040,4],[1258,4],[1259,4],[1260,4],[1261,4],[1262,4],[1041,4],[1263,4],[1042,4],[1264,4],[1043,4],[1265,4],[1266,4],[1267,194],[1268,194],[1044,4],[1269,4],[1270,4],[1271,4],[1272,4],[1273,4],[1274,4],[1275,4],[1276,4],[1277,4],[1278,4],[1279,4],[1280,4],[1281,194],[1282,194],[1283,4],[1284,4],[1285,194],[1286,4],[1045,4],[1287,4],[1288,4],[1289,4],[1290,4],[1291,4],[1046,4],[1292,4],[1047,4],[1293,4],[1294,4],[1048,4],[1295,4],[1049,4],[1296,4],[1297,4],[1298,194],[1038,207],[1299,4],[1300,4],[1301,4],[1302,4],[758,208],[737,209],[834,4],[738,210],[674,208],[675,208],[676,208],[677,208],[678,208],[679,208],[680,208],[681,208],[682,208],[683,208],[684,208],[685,208],[686,208],[687,208],[688,208],[689,208],[690,208],[691,208],[670,4],[692,208],[693,208],[694,4],[695,208],[696,208],[698,208],[697,208],[699,208],[700,208],[701,208],[702,208],[703,208],[704,208],[705,208],[706,208],[707,208],[708,208],[709,208],[710,208],[711,208],[712,208],[713,208],[714,208],[715,208],[716,208],[717,208],[719,208],[720,208],[721,208],[718,208],[722,208],[723,208],[724,208],[725,208],[726,208],[727,208],[728,208],[729,208],[730,208],[731,208],[732,208],[733,208],[734,208],[735,208],[736,208],[739,211],[740,208],[741,208],[742,212],[743,213],[744,208],[745,208],[746,208],[747,208],[750,208],[748,208],[749,208],[672,4],[751,208],[752,208],[753,208],[754,208],[755,208],[756,208],[757,208],[759,214],[760,208],[761,208],[762,208],[764,208],[763,208],[765,208],[766,208],[767,208],[768,208],[769,208],[770,208],[771,208],[772,208],[773,208],[774,208],[776,208],[775,208],[777,208],[778,4],[779,4],[780,4],[927,215],[781,208],[782,208],[783,208],[784,208],[785,208],[786,208],[787,4],[788,208],[789,4],[790,208],[791,208],[792,208],[793,208],[794,208],[795,208],[796,208],[797,208],[798,208],[799,208],[800,208],[801,208],[802,208],[803,208],[804,208],[805,208],[806,208],[807,208],[808,208],[809,208],[810,208],[811,208],[812,208],[813,208],[814,208],[815,208],[816,208],[817,208],[818,208],[819,208],[820,208],[821,208],[822,4],[823,208],[824,208],[825,208],[826,208],[827,208],[828,208],[829,208],[830,208],[831,208],[832,208],[833,208],[835,216],[671,208],[836,208],[837,208],[838,4],[839,4],[840,4],[841,208],[842,4],[843,4],[844,4],[845,4],[846,4],[847,208],[848,208],[849,208],[850,208],[851,208],[852,208],[853,208],[854,208],[859,217],[857,218],[858,219],[856,220],[855,208],[860,208],[861,208],[862,208],[863,208],[864,208],[865,208],[866,208],[867,208],[868,208],[869,208],[870,4],[871,4],[872,208],[873,208],[874,4],[875,4],[876,4],[877,208],[878,208],[879,208],[880,208],[881,214],[882,208],[883,208],[884,208],[885,208],[886,208],[887,208],[888,208],[889,208],[890,208],[891,208],[892,208],[893,208],[894,208],[895,208],[896,208],[897,208],[898,208],[899,208],[900,208],[901,208],[902,208],[903,208],[904,208],[905,208],[906,208],[907,208],[908,208],[909,208],[910,208],[911,208],[912,208],[913,208],[914,208],[915,208],[916,208],[917,208],[918,208],[919,208],[920,208],[921,208],[922,208],[673,221],[923,4],[924,4],[925,4],[926,4],[1561,4],[1948,222],[1910,223],[1914,224],[1619,225],[1859,226],[1618,4],[1621,227],[1908,228],[1909,229],[1617,4],[1911,230],[1692,231],[1636,232],[1659,233],[1668,234],[1639,234],[1640,235],[1641,235],[1667,236],[1642,237],[1643,235],[1649,238],[1644,239],[1645,235],[1646,235],[1669,240],[1638,241],[1647,234],[1648,239],[1650,242],[1651,242],[1652,239],[1653,235],[1654,234],[1655,235],[1656,243],[1657,243],[1658,235],[1679,244],[1687,245],[1666,246],[1695,247],[1660,248],[1662,249],[1663,246],[1673,250],[1681,251],[1686,252],[1683,253],[1688,254],[1676,255],[1677,256],[1684,257],[1685,258],[1691,259],[1682,260],[1661,230],[1693,261],[1637,230],[1680,262],[1678,263],[1665,264],[1664,246],[1694,265],[1670,266],[1689,4],[1690,267],[1913,268],[1915,269],[1916,270],[1918,271],[1917,272],[1620,230],[1730,4],[1747,273],[1696,274],[1721,275],[1728,276],[1697,276],[1698,276],[1699,277],[1727,278],[1700,279],[1715,276],[1701,280],[1702,280],[1703,277],[1704,276],[1705,277],[1706,276],[1729,281],[1707,276],[1708,276],[1709,282],[1710,276],[1711,276],[1712,282],[1713,277],[1714,276],[1716,283],[1717,282],[1718,276],[1719,277],[1720,276],[1742,284],[1738,285],[1726,286],[1750,287],[1722,288],[1723,286],[1739,289],[1731,290],[1740,291],[1737,292],[1735,293],[1741,294],[1734,295],[1746,296],[1736,297],[1748,298],[1743,299],[1732,300],[1725,301],[1724,286],[1749,302],[1733,266],[1744,4],[1745,303],[1931,304],[1932,305],[1930,306],[1927,307],[1928,308],[1926,309],[1623,310],[1816,311],[1751,312],[1786,313],[1795,314],[1752,315],[1753,315],[1754,316],[1755,315],[1794,317],[1756,318],[1757,319],[1758,320],[1759,315],[1796,321],[1797,322],[1760,315],[1762,323],[1763,314],[1765,324],[1766,325],[1767,325],[1768,316],[1769,315],[1770,315],[1771,321],[1772,316],[1773,316],[1774,325],[1775,315],[1776,314],[1777,315],[1778,316],[1779,326],[1764,327],[1780,315],[1781,316],[1782,315],[1783,315],[1784,315],[1785,315],[1804,328],[1811,329],[1793,330],[1821,331],[1787,332],[1789,333],[1790,330],[1799,334],[1806,335],[1810,336],[1808,337],[1812,338],[1800,339],[1801,256],[1802,340],[1809,341],[1815,342],[1807,343],[1788,230],[1817,344],[1761,230],[1805,345],[1803,346],[1792,347],[1791,330],[1818,348],[1819,4],[1820,349],[1798,266],[1813,4],[1814,350],[1632,351],[1625,352],[1674,230],[1671,353],[1675,354],[1672,51],[1870,355],[1847,356],[1853,357],[1822,357],[1823,357],[1824,358],[1852,359],[1825,360],[1840,357],[1826,361],[1827,361],[1828,358],[1829,357],[1830,362],[1831,357],[1854,363],[1832,357],[1833,357],[1834,364],[1835,357],[1836,357],[1837,364],[1838,358],[1839,357],[1841,365],[1842,364],[1843,357],[1844,358],[1845,357],[1846,357],[1867,366],[1858,367],[1873,368],[1848,369],[1849,370],[1862,371],[1855,372],[1866,373],[1857,374],[1865,375],[1864,376],[1869,377],[1856,378],[1871,379],[1868,380],[1863,381],[1851,382],[1850,370],[1872,383],[1861,384],[1933,385],[1860,386],[1628,387],[1630,388],[1629,387],[1631,387],[1634,389],[1633,390],[1635,391],[1626,392],[1906,393],[1874,394],[1899,395],[1903,396],[1902,397],[1875,398],[1904,399],[1895,400],[1896,396],[1897,401],[1898,402],[1883,403],[1891,404],[1901,405],[1907,406],[1876,407],[1877,405],[1880,408],[1886,409],[1890,410],[1888,411],[1892,412],[1881,413],[1884,414],[1889,415],[1905,416],[1887,417],[1885,418],[1882,419],[1900,420],[1878,421],[1894,422],[1879,266],[1893,423],[1624,266],[1622,424],[1627,425],[1912,4],[584,4],[587,426],[586,427],[585,427],[583,428],[581,4],[582,428],[588,429],[489,430],[556,431],[555,432],[554,433],[494,434],[510,435],[508,436],[509,437],[495,438],[580,439],[480,4],[482,4],[483,440],[484,4],[487,441],[490,4],[507,442],[485,4],[502,443],[488,444],[503,445],[506,446],[504,446],[501,447],[481,4],[486,4],[505,448],[511,449],[499,4],[493,450],[491,451],[500,452],[497,453],[496,453],[492,454],[498,455],[575,456],[569,457],[562,458],[561,459],[570,460],[571,446],[563,461],[576,462],[557,463],[558,464],[559,465],[579,466],[560,459],[564,462],[565,467],[578,468],[572,469],[573,444],[574,467],[577,446],[566,465],[512,470],[567,471],[568,472],[553,473],[551,474],[552,474],[517,474],[518,474],[519,474],[520,474],[521,474],[522,474],[523,474],[524,474],[543,474],[515,474],[525,474],[526,474],[527,474],[528,474],[529,474],[530,474],[550,474],[531,474],[532,474],[533,474],[548,474],[534,474],[549,474],[535,474],[546,474],[547,474],[536,474],[537,474],[538,474],[544,474],[545,474],[539,474],[540,474],[541,474],[542,474],[516,475],[514,476],[513,477],[479,4],[2031,478],[2032,479],[2045,480],[2048,481],[2043,4],[2046,4],[2047,480],[2044,482],[2051,483],[2033,484],[2026,485],[2029,486],[2025,487],[2034,488],[2030,489],[2027,490],[2035,17],[2023,491],[2036,492],[2028,4],[2037,493],[2038,494],[2039,495],[2021,496],[2040,488],[2041,497],[2024,498],[2042,499],[2022,497],[2049,4],[2050,4],[943,4],[944,500],[70,501],[424,502],[429,3],[431,503],[201,504],[229,505],[407,506],[224,507],[212,4],[193,4],[199,4],[397,508],[260,509],[200,4],[366,510],[234,511],[235,512],[331,513],[394,514],[349,515],[401,516],[402,517],[400,518],[399,4],[398,519],[231,520],[202,521],[281,4],[282,522],[197,4],[213,523],[203,524],[265,523],[262,523],[186,523],[227,525],[226,4],[406,526],[416,4],[192,4],[307,527],[308,528],[302,121],[452,4],[310,4],[311,529],[303,530],[458,531],[456,532],[451,4],[393,533],[392,4],[450,534],[304,121],[345,535],[343,536],[453,4],[457,4],[455,537],[454,4],[344,538],[445,539],[448,540],[272,541],[271,542],[270,543],[461,121],[269,544],[254,4],[464,4],[467,4],[466,121],[468,545],[182,4],[403,546],[404,547],[405,548],[215,4],[191,549],[181,4],[323,121],[184,550],[322,551],[321,552],[312,4],[313,4],[320,4],[315,4],[318,553],[314,4],[316,554],[319,555],[317,554],[198,4],[189,4],[190,523],[244,556],[245,557],[242,558],[240,559],[241,560],[237,4],[329,529],[351,529],[423,561],[432,562],[436,563],[410,564],[409,4],[257,4],[469,565],[419,566],[305,567],[306,568],[297,569],[287,4],[328,570],[288,571],[330,572],[325,573],[324,4],[326,4],[342,574],[411,575],[412,576],[290,577],[294,578],[285,579],[389,580],[418,581],[264,582],[367,583],[187,584],[417,585],[183,507],[238,4],[246,586],[378,587],[236,4],[377,588],[71,4],[372,589],[214,4],[283,590],[368,4],[188,4],[247,4],[376,591],[196,4],[252,592],[293,593],[408,594],[292,4],[375,4],[239,4],[380,595],[381,596],[194,4],[383,597],[385,598],[384,599],[217,4],[374,584],[387,600],[373,601],[379,602],[205,4],[208,4],[206,4],[210,4],[207,4],[209,4],[211,603],[204,4],[359,604],[358,4],[364,605],[360,606],[363,607],[362,607],[365,605],[361,606],[251,608],[352,609],[415,610],[471,4],[440,611],[442,612],[289,4],[441,613],[413,575],[470,614],[309,575],[195,4],[291,615],[248,616],[249,617],[250,618],[280,619],[388,619],[266,619],[353,620],[267,620],[233,621],[232,4],[357,622],[356,623],[355,624],[354,625],[414,626],[301,627],[339,628],[300,629],[334,630],[338,631],[396,632],[395,633],[391,130],[348,634],[350,635],[347,636],[386,637],[341,4],[428,4],[340,638],[390,4],[253,639],[286,546],[284,640],[255,641],[258,642],[465,4],[256,643],[259,643],[426,4],[425,4],[427,4],[463,4],[261,644],[299,121],[69,4],[346,645],[230,4],[219,646],[295,4],[434,121],[444,647],[279,121],[438,529],[278,648],[421,649],[277,647],[185,4],[446,650],[275,121],[276,121],[268,4],[218,4],[274,651],[273,652],[216,653],[296,162],[263,162],[382,4],[370,654],[369,4],[430,4],[327,655],[298,121],[422,656],[64,121],[67,657],[68,658],[65,121],[66,4],[228,659],[223,660],[222,4],[221,661],[220,4],[420,662],[433,663],[435,664],[437,665],[439,666],[443,667],[477,668],[447,668],[476,669],[449,670],[459,671],[460,672],[462,673],[472,674],[475,549],[474,4],[473,675],[1015,676],[1333,677],[1334,678],[1335,4],[1336,678],[1337,678],[1338,678],[1339,678],[1340,678],[1341,679],[1342,678],[1343,678],[1344,680],[1345,681],[1346,682],[1347,681],[1348,683],[1349,684],[1350,681],[1351,681],[1352,684],[1353,685],[950,684],[1354,681],[1355,681],[1356,681],[1357,681],[1358,681],[956,681],[1359,686],[1360,681],[1013,684],[1361,682],[1362,682],[1363,687],[1364,681],[1365,688],[1366,689],[949,690],[948,691],[1014,692],[1367,693],[1368,678],[1371,694],[965,127],[957,695],[1375,696],[1372,41],[966,697],[1373,698],[967,699],[1374,700],[1429,679],[1430,679],[1431,679],[1432,679],[1433,679],[1434,679],[1435,679],[958,701],[1427,4],[1436,702],[1437,703],[1438,704],[959,703],[1439,705],[1440,706],[1441,707],[960,708],[1442,4],[1443,705],[1402,709],[1380,710],[1444,711],[1403,712],[1404,713],[1405,714],[1406,709],[1407,709],[1381,710],[1445,706],[1376,715],[1377,706],[1446,710],[1382,710],[1383,710],[1447,706],[2216,716],[1448,703],[1449,717],[1450,710],[946,718],[1012,678],[1451,719],[2217,720],[2218,678],[1452,678],[962,721],[2219,722],[1399,723],[1453,724],[1384,710],[1385,710],[1386,710],[1387,710],[1388,710],[1454,725],[1455,726],[1389,727],[1391,728],[1392,729],[1393,730],[1395,731],[1408,709],[1428,709],[1409,732],[1410,710],[1411,733],[1394,727],[1412,734],[1413,41],[1414,730],[1415,735],[1416,710],[1417,736],[1456,737],[1396,733],[1397,733],[1398,738],[1457,678],[964,739],[1458,678],[2220,4],[1459,740],[1460,678],[1011,741],[1461,711],[1462,742],[1463,743],[1464,711],[1466,744],[1467,743],[1468,4],[1469,745],[1470,745],[1471,743],[1472,743],[1473,743],[1474,743],[1475,743],[1476,701],[1477,4],[1478,745],[1479,4],[1465,746],[1480,747],[1481,747],[952,730],[968,711],[940,4],[969,748],[970,749],[971,749],[972,750],[973,748],[974,748],[975,748],[976,748],[992,751],[977,749],[978,752],[979,752],[980,749],[981,748],[982,749],[983,752],[984,752],[985,752],[986,748],[987,748],[988,749],[989,752],[993,753],[990,748],[991,748],[941,754],[2258,755],[1482,679],[1483,679],[1369,756],[2221,678],[961,757],[1484,758],[955,759],[1485,711],[2222,760],[1486,761],[1390,762],[1487,763],[1488,761],[1489,764],[1490,761],[1491,4],[954,679],[994,710],[2223,706],[2224,765],[1492,766],[963,767],[953,768],[1493,769],[1419,770],[1494,771],[1495,772],[1418,709],[1420,773],[1421,774],[1422,775],[1423,776],[1424,777],[1496,778],[1497,779],[1616,780],[1498,781],[1499,782],[1426,706],[2225,4],[947,709],[995,783],[1500,784],[1001,785],[1006,786],[996,787],[999,788],[1000,789],[1501,790],[1005,791],[1502,792],[1002,793],[1004,794],[998,795],[997,709],[1503,796],[1003,797],[1504,4],[1505,798],[1400,4],[1401,799],[2226,4],[1506,711],[2227,4],[1378,800],[1551,801],[1379,802],[1552,711],[1553,803],[2228,41],[2229,804],[1554,711],[2230,711],[1555,805],[1556,806],[1557,4],[1558,709],[1559,702],[1560,711],[1562,807],[1563,4],[1564,4],[1565,4],[1566,4],[2231,4],[1567,4],[1568,679],[1569,808],[2232,678],[1570,809],[1571,4],[2233,4],[1572,810],[1573,678],[2234,685],[1574,811],[2235,812],[1575,4],[1576,813],[2236,4],[2237,711],[2238,685],[2239,4],[2240,814],[1577,678],[1578,711],[1579,805],[1580,815],[2241,4],[2242,4],[1581,4],[1582,4],[2243,121],[1583,4],[1584,805],[1585,711],[1010,816],[1586,4],[1587,4],[2244,817],[1588,41],[2245,685],[1589,818],[2246,4],[1590,711],[1591,711],[1592,711],[2247,4],[2248,4],[2249,4],[2250,4],[1593,819],[2251,4],[1370,820],[2252,711],[1594,811],[2253,4],[2254,4],[2255,711],[2256,4],[2257,4],[1595,821],[1596,822],[1597,701],[1598,4],[1599,709],[1600,711],[1601,706],[1602,815],[1603,729],[1604,823],[1611,824],[1605,711],[1607,825],[1606,711],[1608,711],[1610,826],[1609,711],[1612,762],[1613,41],[951,4],[1924,827],[1921,675],[1923,828],[1922,4],[1920,829],[1919,4],[1007,830],[1009,831],[589,832],[591,833],[1319,834],[1331,121],[1320,121],[1318,121],[1304,835],[1306,836],[1332,837],[1305,121],[1309,838],[1311,839],[1310,121],[1313,840],[1312,836],[1330,841],[1321,121],[1322,121],[1314,836],[1308,842],[1307,121],[1329,843],[1315,836],[1317,844],[1316,121],[939,830],[371,830],[590,845],[597,4],[616,4],[598,846],[652,4],[602,847],[601,4],[668,4],[635,848],[593,849],[659,4],[615,4],[660,850],[639,851],[636,852],[637,853],[640,854],[633,855],[642,854],[644,856],[645,853],[646,853],[634,857],[604,4],[603,846],[653,4],[650,858],[664,4],[665,4],[666,859],[667,4],[663,4],[654,860],[669,861],[613,4],[625,4],[626,862],[614,4],[632,4],[622,863],[594,4],[624,4],[628,864],[629,4],[631,865],[606,866],[605,4],[607,4],[655,4],[651,867],[608,4],[638,4],[609,4],[610,4],[647,4],[612,868],[618,869],[648,870],[619,4],[661,4],[662,871],[611,4],[592,4],[656,4],[627,872],[649,873],[620,846],[641,874],[643,875],[595,4],[596,4],[599,876],[657,860],[658,4],[621,4],[617,877],[630,878],[600,4],[623,879],[58,4],[59,4],[10,4],[11,4],[13,4],[12,4],[2,4],[14,4],[15,4],[16,4],[17,4],[18,4],[19,4],[20,4],[21,4],[3,4],[22,4],[23,4],[4,4],[24,4],[28,4],[25,4],[26,4],[27,4],[29,4],[30,4],[31,4],[5,4],[32,4],[33,4],[34,4],[35,4],[6,4],[39,4],[36,4],[37,4],[38,4],[40,4],[7,4],[41,4],[46,4],[47,4],[42,4],[43,4],[44,4],[45,4],[8,4],[51,4],[48,4],[49,4],[50,4],[52,4],[9,4],[53,4],[54,4],[55,4],[57,4],[56,4],[1,4],[97,880],[107,881],[96,880],[117,882],[88,883],[87,884],[116,675],[110,885],[115,886],[90,887],[104,888],[89,889],[113,890],[85,891],[84,675],[114,892],[86,893],[91,894],[92,4],[95,894],[82,4],[118,895],[108,896],[99,897],[100,898],[102,899],[98,900],[101,901],[111,675],[93,902],[94,903],[103,904],[83,905],[106,896],[105,894],[109,4],[112,906],[1550,907],[1525,908],[1538,909],[1522,910],[1539,905],[1548,911],[1513,912],[1514,913],[1512,884],[1547,675],[1542,914],[1546,915],[1516,916],[1535,917],[1515,918],[1545,919],[1510,920],[1511,914],[1517,921],[1518,4],[1524,922],[1521,921],[1508,923],[1549,924],[1540,925],[1528,926],[1527,921],[1529,927],[1532,928],[1526,929],[1530,930],[1543,675],[1519,931],[1520,932],[1533,933],[1509,905],[1537,934],[1536,921],[1523,932],[1531,935],[1534,936],[1541,4],[1507,4],[1544,937],[1947,938],[1939,939],[1946,940],[1941,4],[1942,4],[1940,941],[1943,942],[1934,4],[1935,4],[1936,938],[1938,943],[1944,4],[1945,944],[1937,945],[2187,946],[2188,947],[2190,948],[2189,949],[2180,4],[2183,41],[2182,41],[2181,41],[2184,4],[2185,4],[2186,950]],"affectedFilesPendingEmit":[[2313,49],[2312,49],[2311,49],[2308,49],[2309,49],[2268,49],[2197,49],[2198,49],[2269,49],[2191,49]],"version":"5.9.3"} \ No newline at end of file diff --git a/apps/web-next/tsconfig.tsbuildinfo b/apps/web-next/tsconfig.tsbuildinfo new file mode 100644 index 0000000..6cb9a4c --- /dev/null +++ b/apps/web-next/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"fileNames":["../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/global.d.ts","../../node_modules/.pnpm/csstype@3.2.3/node_modules/csstype/index.d.ts","../../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/index.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/styled-jsx/types/css.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/styled-jsx/types/macro.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/styled-jsx/types/style.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/styled-jsx/types/global.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/styled-jsx/types/index.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/amp.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/amp.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/get-page-files.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/compatibility/disposable.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/compatibility/indexable.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/compatibility/index.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/buffer.buffer.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/globals.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/web-globals/domexception.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/web-globals/events.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/web-globals/fetch.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/web-globals/navigator.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/web-globals/storage.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/assert.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/assert/strict.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/async_hooks.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/buffer.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/child_process.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/cluster.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/console.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/constants.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/crypto.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/dgram.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/dns.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/dns/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/domain.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/events.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/fs.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/fs/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/http.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/http2.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/https.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/inspector.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/inspector.generated.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/module.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/net.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/os.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/path.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/perf_hooks.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/process.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/punycode.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/querystring.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/readline.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/readline/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/repl.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/sea.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/sqlite.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/stream.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/stream/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/stream/consumers.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/stream/web.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/string_decoder.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/test.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/timers.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/timers/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/tls.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/trace_events.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/tty.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/url.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/util.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/v8.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/vm.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/wasi.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/worker_threads.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/zlib.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/index.d.ts","../../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/canary.d.ts","../../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/experimental.d.ts","../../node_modules/.pnpm/@types+react-dom@19.2.3_@types+react@19.2.14/node_modules/@types/react-dom/index.d.ts","../../node_modules/.pnpm/@types+react-dom@19.2.3_@types+react@19.2.14/node_modules/@types/react-dom/canary.d.ts","../../node_modules/.pnpm/@types+react-dom@19.2.3_@types+react@19.2.14/node_modules/@types/react-dom/experimental.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/fallback.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/compiled/webpack/webpack.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/config.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/load-custom-routes.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/image-config.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/webpack/plugins/subresource-integrity-plugin.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/body-streams.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/cache-control.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/setup-exception-listeners.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/worker.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/constants.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/app-router-headers.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/rendering-mode.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/router-utils/build-prefetch-segment-data-route.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/require-hook.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/experimental/ppr.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/webpack/plugins/app-build-manifest-plugin.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/page-types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/segment-config/app/app-segment-config.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/segment-config/pages/pages-segment-config.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/analysis/get-page-static-info.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/webpack/loaders/get-module-build-info.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/webpack/plugins/middleware-plugin.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/node-polyfill-crypto.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/node-environment-baseline.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/node-environment-extensions/error-inspect.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/node-environment-extensions/random.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/node-environment-extensions/date.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/node-environment-extensions/web-crypto.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/node-environment-extensions/node-crypto.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/node-environment.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/page-extensions-type.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/instrumentation/types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/coalesced-function.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/router-utils/types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/modern-browserslist-target.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/constants.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/trace/types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/trace/trace.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/trace/shared.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/trace/index.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/load-jsconfig.d.ts","../../node_modules/.pnpm/@next+env@15.5.14/node_modules/@next/env/dist/index.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/webpack/plugins/telemetry-plugin/use-cache-tracker-utils.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/webpack/plugins/telemetry-plugin/telemetry-plugin.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/telemetry/storage.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/build-context.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/bloom-filter.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/webpack-config.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-kind.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-definitions/route-definition.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/swc/generated-native.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/swc/types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/dev/parse-version-info.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/next-devtools/shared/types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/dev/dev-indicator-server-state.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/parse-stack.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/next-devtools/server/shared.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/next-devtools/shared/stack-frame.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/next-devtools/dev-overlay/utils/get-error-by-type.d.ts","../../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/jsx-runtime.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/next-devtools/dev-overlay/container/runtime-error/render-error.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/next-devtools/dev-overlay/shared.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/dev/hot-reloader-types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/cache-handlers/types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/response-cache/types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/resume-data-cache/cache-store.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/resume-data-cache/resume-data-cache.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/render-result.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/i18n-provider.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/web/next-url.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/compiled/@edge-runtime/cookies/index.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/web/spec-extension/cookies.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/web/spec-extension/request.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/after/builtin-request-context.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/web/spec-extension/fetch-event.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/web/spec-extension/response.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/segment-config/middleware/middleware-config.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/web/types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/router/utils/parse-url.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/base-http/node.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/webpack/plugins/next-font-manifest-plugin.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-definitions/locale-route-definition.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-definitions/pages-route-definition.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/mitt.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/with-router.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/router.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/route-loader.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/page-loader.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/router/router.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/router-context.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/loadable-context.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/loadable.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/image-config-context.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-definitions/app-page-route-definition.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/webpack/loaders/metadata/types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/webpack/loaders/next-app-loader/index.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/app-dir-module.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/async-storage/draft-mode-provider.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/web/spec-extension/adapters/headers.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/app-render/cache-signal.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/app-render/dynamic-rendering.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/request/fallback-params.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/app-render/work-unit-async-storage-instance.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/response-cache/index.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/lazy-result.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/implicit-tags.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/app-render/work-unit-async-storage.external.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/deep-readonly.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/router/utils/parse-relative-url.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/app-render/app-render.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/amp-context.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/entrypoints.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-modules/app-page/module.compiled.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/error-boundary.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/layout-router.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/render-from-template-context.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/app-render/action-async-storage-instance.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/app-render/action-async-storage.external.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/client-page.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/client-segment.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/request/search-params.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/hooks-server-context.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/http-access-fallback/error-boundary.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/metadata/types/alternative-urls-types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/metadata/types/extra-types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/metadata/types/metadata-types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/metadata/types/manifest-types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/metadata/types/opengraph-types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/metadata/types/twitter-types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/metadata/types/metadata-interface.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/metadata/types/resolvers.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/metadata/types/icons.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/metadata/resolve-metadata.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/metadata/metadata.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/lib/framework/boundary-components.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/app-render/rsc/preloads.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/app-render/rsc/postpone.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/app-render/rsc/taint.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/segment-cache/segment-value-encoding.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/app-render/collect-segment-data.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/app-render/entry-base.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/templates/app-page.d.ts","../../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/jsx-dev-runtime.d.ts","../../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/compiler-runtime.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/entrypoints.d.ts","../../node_modules/.pnpm/@types+react-dom@19.2.3_@types+react@19.2.14/node_modules/@types/react-dom/client.d.ts","../../node_modules/.pnpm/@types+react-dom@19.2.3_@types+react@19.2.14/node_modules/@types/react-dom/static.d.ts","../../node_modules/.pnpm/@types+react-dom@19.2.3_@types+react@19.2.14/node_modules/@types/react-dom/server.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/entrypoints.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-modules/app-page/module.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/web/adapter.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/use-cache/cache-life.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/app-render/types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/router-reducer/router-reducer-types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/flight-data-helpers.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/router-reducer/fetch-server-response.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/app-router-context.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-modules/pages/vendored/contexts/entrypoints.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-modules/pages/module.compiled.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/templates/pages.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-modules/pages/module.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-setup.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/render.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-definitions/pages-api-route-definition.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-matches/pages-api-route-match.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-matchers/route-matcher.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-matcher-providers/route-matcher-provider.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-matcher-managers/route-matcher-manager.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/normalizers/normalizer.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/normalizers/locale-route-normalizer.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/normalizers/request/pathname-normalizer.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/normalizers/request/suffix.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/normalizers/request/rsc.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/normalizers/request/prefetch-rsc.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/normalizers/request/next-data.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/normalizers/request/segment-prefix-rsc.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/static-paths/types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/base-server.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/async-callback-set.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/router/utils/route-regex.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/router/utils/route-matcher.d.ts","../../node_modules/.pnpm/sharp@0.34.5/node_modules/sharp/lib/index.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/image-optimizer.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/next-server.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/lru-cache.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/dev-bundler-service.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/dev/static-paths-worker.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/dev/next-dev-server.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/next.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/render-server.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/router-server.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/router/utils/path-match.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/router-utils/filesystem.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/router-utils/router-server-context.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-modules/route-module.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/load-components.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-definitions/app-route-route-definition.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/async-storage/work-store.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/web/http.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-modules/app-route/shared-modules.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/redirect-status-code.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/redirect-error.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/templates/app-route.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-modules/app-route/module.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-modules/app-route/module.compiled.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/segment-config/app/app-segments.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/utils.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/turborepo-access-trace/types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/turborepo-access-trace/result.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/turborepo-access-trace/helpers.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/turborepo-access-trace/index.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/export/routes/types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/export/types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/export/worker.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/worker.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/build/index.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/lib/incremental-cache/index.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/after/after.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/after/after-context.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/app-render/work-async-storage-instance.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/app-render/work-async-storage.external.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/request/params.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/route-matches/route-match.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/request-meta.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/cli/next-test.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/config-shared.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/base-http/index.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/api-utils/index.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/html-context.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/utils.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/pages/_app.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/app.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/web/spec-extension/unstable-cache.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/web/spec-extension/revalidate.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/web/spec-extension/unstable-no-store.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/use-cache/cache-tag.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/cache.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/runtime-config.external.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/config.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/pages/_document.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/document.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/dynamic.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dynamic.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/pages/_error.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/error.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/head.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/head.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/request/cookies.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/request/headers.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/request/draft-mode.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/headers.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/get-img-props.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/image-component.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/shared/lib/image-external.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/image.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/link.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/link.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/redirect.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/not-found.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/forbidden.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/unauthorized.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/unstable-rethrow.server.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/unstable-rethrow.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/navigation.react-server.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/unrecognized-action-error.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/components/navigation.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/navigation.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/router.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/client/script.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/script.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/web/spec-extension/user-agent.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/compiled/@edge-runtime/primitives/url.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/web/spec-extension/image-response.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/compiled/@vercel/og/satori/index.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/compiled/@vercel/og/emoji/index.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/compiled/@vercel/og/types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/after/index.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/request/root-params.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/dist/server/request/connection.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/server.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/types/global.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/types/compiled.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/types.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/index.d.ts","../../node_modules/.pnpm/next@15.5.14_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.99.0/node_modules/next/image-types/global.d.ts","./next-env.d.ts","../../node_modules/.pnpm/@trpc+server@11.16.0_typescript@5.9.3/node_modules/@trpc/server/dist/index.d-d4qzxqjh.d.mts","../../node_modules/.pnpm/@trpc+server@11.16.0_typescript@5.9.3/node_modules/@trpc/server/dist/unstable-core-do-not-import.d-bl-_61jq.d.mts","../../node_modules/.pnpm/@trpc+server@11.16.0_typescript@5.9.3/node_modules/@trpc/server/dist/index.d-vq_qhko2.d.mts","../../node_modules/.pnpm/@trpc+server@11.16.0_typescript@5.9.3/node_modules/@trpc/server/dist/adapters/fetch/index.d.mts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/typealiases.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/index.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/zoderror.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseutil.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/enumutil.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorutil.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/partialutil.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/standard-schema.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/index.d.cts","../../packages/auth/src/entities/user.ts","../../packages/auth/src/entities/session.ts","../../packages/auth/src/entities/cookie.ts","../../node_modules/.pnpm/@trpc+server@11.16.0_typescript@5.9.3/node_modules/@trpc/server/dist/index.d.mts","../../node_modules/.pnpm/superjson@2.2.6/node_modules/superjson/dist/transformer.d.ts","../../node_modules/.pnpm/superjson@2.2.6/node_modules/superjson/dist/plainer.d.ts","../../node_modules/.pnpm/superjson@2.2.6/node_modules/superjson/dist/types.d.ts","../../node_modules/.pnpm/superjson@2.2.6/node_modules/superjson/dist/registry.d.ts","../../node_modules/.pnpm/superjson@2.2.6/node_modules/superjson/dist/class-registry.d.ts","../../node_modules/.pnpm/superjson@2.2.6/node_modules/superjson/dist/custom-transformer-registry.d.ts","../../node_modules/.pnpm/superjson@2.2.6/node_modules/superjson/dist/index.d.ts","../../packages/core-shared/src/trpc/init.ts","../../packages/auth/src/entities/errors.ts","../../node_modules/.pnpm/reflect-metadata@0.2.2/node_modules/reflect-metadata/index.d.ts","../../node_modules/.pnpm/@inversifyjs+common@1.4.0/node_modules/@inversifyjs/common/lib/esm/index.d.ts","../../node_modules/.pnpm/@inversifyjs+core@1.3.5_reflect-metadata@0.2.2/node_modules/@inversifyjs/core/lib/esm/index.d.ts","../../node_modules/.pnpm/inversify@6.2.2_reflect-metadata@0.2.2/node_modules/inversify/lib/esm/index.d.ts","../../packages/auth/src/application/repositories/users-repository.interface.ts","../../packages/auth/src/application/services/authentication-service.interface.ts","../../packages/auth/src/infrastructure/repositories/mock-users.repository.ts","../../packages/auth/src/di/symbols.ts","../../packages/auth/src/config.ts","../../packages/auth/src/infrastructure/services/mock-authentication.service.ts","../../packages/auth/src/di/module.ts","../../packages/auth/src/di/container.ts","../../packages/auth/src/application/use-cases/sign-in.use-case.ts","../../packages/auth/src/interface-adapters/controllers/sign-in.controller.ts","../../packages/auth/src/application/use-cases/sign-up.use-case.ts","../../packages/auth/src/interface-adapters/controllers/sign-up.controller.ts","../../packages/auth/src/application/use-cases/sign-out.use-case.ts","../../packages/auth/src/interface-adapters/controllers/sign-out.controller.ts","../../packages/auth/src/integrations/api/router.ts","../../packages/auth/src/index.ts","../../packages/blog/src/entities/article.ts","../../packages/blog/src/entities/errors.ts","../../packages/blog/src/application/repositories/articles-repository.interface.ts","../../packages/blog/src/infrastructure/repositories/mock-articles.repository.ts","../../packages/blog/src/di/symbols.ts","../../packages/blog/src/di/module.ts","../../packages/blog/src/di/container.ts","../../packages/blog/src/application/use-cases/get-articles.use-case.ts","../../packages/blog/src/application/use-cases/create-article.use-case.ts","../../packages/blog/src/interface-adapters/controllers/articles.controller.ts","../../packages/blog/src/integrations/api/router.ts","../../packages/blog/src/ui/query.ts","../../packages/blog/src/index.ts","../../packages/marketing-pages/src/entities/page.ts","../../packages/marketing-pages/src/entities/site-settings.ts","../../packages/marketing-pages/src/entities/errors.ts","../../packages/marketing-pages/src/application/repositories/pages-repository.interface.ts","../../packages/marketing-pages/src/application/repositories/site-settings-repository.interface.ts","../../packages/marketing-pages/src/infrastructure/repositories/mock-pages.repository.ts","../../packages/marketing-pages/src/infrastructure/repositories/mock-site-settings.repository.ts","../../packages/marketing-pages/src/di/symbols.ts","../../packages/marketing-pages/src/di/module.ts","../../packages/marketing-pages/src/di/container.ts","../../packages/marketing-pages/src/application/use-cases/get-page-by-slug.use-case.ts","../../packages/marketing-pages/src/application/use-cases/get-site-settings.use-case.ts","../../packages/marketing-pages/src/interface-adapters/controllers/pages.controller.ts","../../packages/marketing-pages/src/integrations/api/router.ts","../../packages/marketing-pages/src/ui/query.ts","../../packages/marketing-pages/src/index.ts","../../packages/navigation/src/entities/header.ts","../../packages/navigation/src/application/repositories/header-repository.interface.ts","../../packages/navigation/src/infrastructure/repositories/mock-header.repository.ts","../../packages/navigation/src/di/symbols.ts","../../packages/navigation/src/di/module.ts","../../packages/navigation/src/di/container.ts","../../packages/navigation/src/application/use-cases/get-header.use-case.ts","../../packages/navigation/src/interface-adapters/controllers/header.controller.ts","../../packages/navigation/src/integrations/api/router.ts","../../packages/navigation/src/ui/query.ts","../../packages/navigation/src/index.ts","../../packages/core-api/src/root.ts","../../packages/core-api/src/index.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/version.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/jsutils/maybe.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/language/source.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/jsutils/objmap.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/jsutils/path.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/jsutils/promiseorvalue.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/language/kinds.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/language/tokenkind.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/language/ast.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/language/location.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/error/graphqlerror.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/language/directivelocation.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/type/directives.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/type/schema.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/type/definition.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/execution/execute.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/graphql.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/type/scalars.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/type/introspection.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/type/validate.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/type/assertname.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/type/index.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/language/printlocation.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/language/lexer.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/language/parser.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/language/printer.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/language/visitor.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/language/predicates.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/language/index.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/execution/subscribe.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/execution/values.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/execution/index.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/subscription/index.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/typeinfo.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/validationcontext.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/validate.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/maxintrospectiondepthrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/specifiedrules.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/executabledefinitionsrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/fieldsoncorrecttyperule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/fragmentsoncompositetypesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/knownargumentnamesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/knowndirectivesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/knownfragmentnamesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/knowntypenamesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/loneanonymousoperationrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/nofragmentcyclesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/noundefinedvariablesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/nounusedfragmentsrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/nounusedvariablesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/overlappingfieldscanbemergedrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/possiblefragmentspreadsrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/providedrequiredargumentsrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/scalarleafsrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/singlefieldsubscriptionsrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/uniqueargumentnamesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/uniquedirectivesperlocationrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/uniquefragmentnamesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/uniqueinputfieldnamesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/uniqueoperationnamesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/uniquevariablenamesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/valuesofcorrecttyperule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/variablesareinputtypesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/variablesinallowedpositionrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/loneschemadefinitionrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/uniqueoperationtypesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/uniquetypenamesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/uniqueenumvaluenamesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/uniquefielddefinitionnamesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/uniqueargumentdefinitionnamesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/uniquedirectivenamesrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/possibletypeextensionsrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/custom/nodeprecatedcustomrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/rules/custom/noschemaintrospectioncustomrule.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/validation/index.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/error/syntaxerror.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/error/locatederror.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/error/index.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/getintrospectionquery.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/getoperationast.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/getoperationroottype.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/introspectionfromschema.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/buildclientschema.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/buildastschema.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/extendschema.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/lexicographicsortschema.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/printschema.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/typefromast.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/valuefromast.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/valuefromastuntyped.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/astfromvalue.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/coerceinputvalue.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/concatast.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/separateoperations.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/stripignoredcharacters.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/typecomparators.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/assertvalidname.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/findbreakingchanges.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/typedquerydocumentnode.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/resolveschemacoordinate.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/utilities/index.d.ts","../../node_modules/.pnpm/graphql@16.13.2/node_modules/graphql/index.d.ts","../../node_modules/.pnpm/graphql-http@1.22.4_graphql@16.13.2/node_modules/graphql-http/lib/common.d.mts","../../node_modules/.pnpm/graphql-http@1.22.4_graphql@16.13.2/node_modules/graphql-http/lib/handler.d.mts","../../node_modules/.pnpm/graphql-http@1.22.4_graphql@16.13.2/node_modules/graphql-http/lib/client.d.mts","../../node_modules/.pnpm/graphql-http@1.22.4_graphql@16.13.2/node_modules/graphql-http/lib/audits/common.d.mts","../../node_modules/.pnpm/graphql-http@1.22.4_graphql@16.13.2/node_modules/graphql-http/lib/audits/server.d.mts","../../node_modules/.pnpm/graphql-http@1.22.4_graphql@16.13.2/node_modules/graphql-http/lib/audits/render.d.mts","../../node_modules/.pnpm/graphql-http@1.22.4_graphql@16.13.2/node_modules/graphql-http/lib/audits/index.d.mts","../../node_modules/.pnpm/graphql-http@1.22.4_graphql@16.13.2/node_modules/graphql-http/lib/index.d.mts","../../node_modules/.pnpm/pino-std-serializers@7.1.0/node_modules/pino-std-serializers/index.d.ts","../../node_modules/.pnpm/sonic-boom@4.2.1/node_modules/sonic-boom/types/index.d.ts","../../node_modules/.pnpm/pino@9.14.0/node_modules/pino/pino.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/primitive/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/built-in/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/key-of-base/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/strict-exclude/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/strict-extract/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/any-array/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/any-record.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/strict-omit/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/writable/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/async-or-sync/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/async-or-sync-type/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/dictionary/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/dictionary-values/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/merge/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/merge-n/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/newable/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/non-never/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/omit-properties/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/opaque/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/prettify/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/path-value/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/is-any/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/is-never/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/create-type-options.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/any-function/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/value-of/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/paths/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/pick-properties/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/safe-dictionary/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/union-to-intersection/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/is-unknown/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/xor/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/mark-optional/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/is-equal-considering-writability.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/is-fully-writable.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/readonly-keys/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/mark-readonly/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/mark-required/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/writable-keys/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/mark-writable/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/is-tuple/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/deep-partial/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/deep-writable/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/buildable/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/deep-non-nullable/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/deep-nullable/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/non-undefinable.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/deep-modify.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/deep-omit/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/strict-deep-omit/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/deep-pick/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/strict-deep-pick/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/deep-readonly/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/deep-required/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/deep-undefinable/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/optional-keys/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/pick-keys/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/required-keys/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/exact/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/non-empty-object/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/array-or-single/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/element-of/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/head/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/non-empty-array/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/readonly-array-or-single/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/tail/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/tuple/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/camel-case/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/deep-camel-case-properties/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/predicate-function/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/predicate-type/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/functions/unreachable-case-error/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/functions/assert/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/functions/create-factory-with-constraint/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/functions/is-exact/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/functions/noop/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/awaited/index.d.ts","../../node_modules/.pnpm/ts-essentials@10.0.3_typescript@5.9.3/node_modules/ts-essentials/dist/index.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/constants.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/types.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/fp/types.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/types.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/add.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addbusinessdays.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/adddays.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addhours.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addisoweekyears.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addmilliseconds.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addminutes.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addmonths.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addquarters.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addseconds.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addweeks.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addyears.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/areintervalsoverlapping.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/clamp.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/closestindexto.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/closestto.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/compareasc.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/comparedesc.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/constructfrom.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/constructnow.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/daystoweeks.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceinbusinessdays.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceincalendardays.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceincalendarisoweekyears.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceincalendarisoweeks.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceincalendarmonths.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceincalendarquarters.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceincalendarweeks.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceincalendaryears.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceindays.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceinhours.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceinisoweekyears.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceinmilliseconds.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceinminutes.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceinmonths.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceinquarters.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceinseconds.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceinweeks.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceinyears.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/eachdayofinterval.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/eachhourofinterval.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/eachminuteofinterval.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/eachmonthofinterval.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/eachquarterofinterval.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/eachweekofinterval.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/eachweekendofinterval.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/eachweekendofmonth.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/eachweekendofyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/eachyearofinterval.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endofday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endofdecade.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endofhour.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endofisoweek.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endofisoweekyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endofminute.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endofmonth.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endofquarter.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endofsecond.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endoftoday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endoftomorrow.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endofweek.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endofyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endofyesterday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/_lib/format/formatters.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/_lib/format/longformatters.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/format.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatdistance.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatdistancestrict.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatdistancetonow.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatdistancetonowstrict.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatduration.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatiso.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatiso9075.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatisoduration.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatrfc3339.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatrfc7231.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatrelative.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/fromunixtime.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getdate.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getdayofyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getdaysinmonth.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getdaysinyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getdecade.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/_lib/defaultoptions.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getdefaultoptions.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/gethours.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getisoday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getisoweek.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getisoweekyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getisoweeksinyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getmilliseconds.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getminutes.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getmonth.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getoverlappingdaysinintervals.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getquarter.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getseconds.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/gettime.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getunixtime.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getweek.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getweekofmonth.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getweekyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getweeksinmonth.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/hourstomilliseconds.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/hourstominutes.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/hourstoseconds.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/interval.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/intervaltoduration.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/intlformat.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/intlformatdistance.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isafter.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isbefore.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isdate.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isequal.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isexists.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isfirstdayofmonth.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isfriday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isfuture.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/islastdayofmonth.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isleapyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/ismatch.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/ismonday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/ispast.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/issameday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/issamehour.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/issameisoweek.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/issameisoweekyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/issameminute.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/issamemonth.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/issamequarter.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/issamesecond.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/issameweek.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/issameyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/issaturday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/issunday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isthishour.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isthisisoweek.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isthisminute.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isthismonth.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isthisquarter.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isthissecond.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isthisweek.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isthisyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isthursday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/istoday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/istomorrow.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/istuesday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isvalid.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/iswednesday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isweekend.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/iswithininterval.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isyesterday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/lastdayofdecade.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/lastdayofisoweek.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/lastdayofisoweekyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/lastdayofmonth.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/lastdayofquarter.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/lastdayofweek.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/lastdayofyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/_lib/format/lightformatters.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/lightformat.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/max.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/milliseconds.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/millisecondstohours.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/millisecondstominutes.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/millisecondstoseconds.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/min.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/minutestohours.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/minutestomilliseconds.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/minutestoseconds.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/monthstoquarters.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/monthstoyears.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/nextday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/nextfriday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/nextmonday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/nextsaturday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/nextsunday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/nextthursday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/nexttuesday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/nextwednesday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/types.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/setter.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parser.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parsers.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parseiso.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parsejson.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/previousday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/previousfriday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/previousmonday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/previoussaturday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/previoussunday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/previousthursday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/previoustuesday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/previouswednesday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/quarterstomonths.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/quarterstoyears.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/roundtonearesthours.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/roundtonearestminutes.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/secondstohours.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/secondstomilliseconds.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/secondstominutes.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/set.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setdate.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setdayofyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setdefaultoptions.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/sethours.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setisoday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setisoweek.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setisoweekyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setmilliseconds.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setminutes.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setmonth.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setquarter.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setseconds.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setweek.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setweekyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofdecade.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofhour.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofisoweek.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofisoweekyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofminute.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofmonth.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofquarter.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofsecond.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startoftoday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startoftomorrow.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofweek.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofweekyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofyear.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofyesterday.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/sub.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/subbusinessdays.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/subdays.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/subhours.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/subisoweekyears.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/submilliseconds.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/subminutes.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/submonths.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/subquarters.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/subseconds.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/subweeks.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/subyears.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/todate.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/transpose.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/weekstodays.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/yearstodays.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/yearstomonths.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/yearstoquarters.d.ts","../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/index.d.ts","../../node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/importdatefnslocale.d.ts","../../node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/clientkeys.d.ts","../../node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/languages/en.d.ts","../../node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/utilities/languages.d.ts","../../node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/types.d.ts","../../node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/utilities/gettranslation.d.ts","../../node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/utilities/init.d.ts","../../node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/exports/index.d.ts","../../node_modules/.pnpm/dataloader@2.2.3/node_modules/dataloader/index.d.ts","../../node_modules/.pnpm/@types+busboy@1.5.4/node_modules/@types/busboy/index.d.ts","../../node_modules/.pnpm/@types+json-schema@7.0.15/node_modules/@types/json-schema/index.d.ts","../../node_modules/.pnpm/sharp@0.33.5/node_modules/sharp/lib/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/apierror.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/validationerror.d.ts","../../node_modules/.pnpm/@monaco-editor+loader@1.7.0/node_modules/@monaco-editor/loader/lib/types.d.ts","../../node_modules/.pnpm/monaco-editor@0.55.1/node_modules/monaco-editor/esm/vs/editor/editor.api.d.ts","../../node_modules/.pnpm/monaco-editor@0.55.1/node_modules/monaco-editor/esm/vs/editor/editor.main.d.ts","../../node_modules/.pnpm/@monaco-editor+react@4.7.0_monaco-editor@0.55.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@monaco-editor/react/dist/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/types.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/preferences/types.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/forms/field.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/forms/error.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/join.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/types.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/types.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/globals/config/types.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/validations.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/config/types.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/richtext.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/richtext.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/cookies.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/extractjwt.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/config/client.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/config/client.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/globals/config/client.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/config/client.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/languageoptions.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/views/document.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/views/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/email/types.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/authenticationerror.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/duplicatecollection.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/duplicatefieldname.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/duplicateglobal.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/errordeletingfile.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/fileretrievalerror.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/fileuploaderror.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/forbidden.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/invalidconfiguration.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/invalidfieldname.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/invalidfieldrelationship.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/locked.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/lockedauth.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/missingcollectionlabel.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/missingeditorprop.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/missingfieldinputoptions.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/missingfieldtype.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/missingfile.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/notfound.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/queryerror.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/reservedfieldname.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/unauthorizederror.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/unverifiedemail.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/errors/types.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/folders/types.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/query-presets/types.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/queues/config/types/tasktypes.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/queues/operations/runjobs/runjob/getupdatejobfunction.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/queues/operations/runjobs/runjob/getruntaskfunction.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/queues/config/types/workflowjsontypes.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/queues/config/types/workflowtypes.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/queues/config/global.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/queues/operations/handleschedules/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/queues/operations/runjobs/runjob/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/queues/operations/runjobs/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/queues/localapi.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/queues/config/types/index.d.ts","../../node_modules/.pnpm/pino-abstract-transport@2.0.0/node_modules/pino-abstract-transport/index.d.ts","../../node_modules/.pnpm/colorette@2.0.20/node_modules/colorette/index.d.ts","../../node_modules/.pnpm/pino-pretty@13.1.2/node_modules/pino-pretty/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/logger.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/config/types.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/bin/generateimportmap/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/tabs.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/forms/form.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/elements/cell.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/adddays.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addhours.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addminutes.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addmonths.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addquarters.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addseconds.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addweeks.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addyears.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getdate.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getday.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/gethours.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getminutes.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getmonth.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getquarter.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getseconds.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/gettime.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getyear.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isafter.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isbefore.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isdate.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/locale/types.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/fp/types.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/types.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/set.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/sethours.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setminutes.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setmonth.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setquarter.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setyear.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/subdays.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/submonths.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/subquarters.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/subweeks.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/subyears.d.mts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/add.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addbusinessdays.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/adddays.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addhours.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addisoweekyears.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addmilliseconds.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addminutes.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addmonths.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addquarters.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addseconds.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addweeks.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addyears.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/areintervalsoverlapping.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/clamp.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/closestindexto.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/closestto.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/compareasc.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/comparedesc.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/constructfrom.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/constructnow.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/daystoweeks.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceinbusinessdays.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceincalendardays.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceincalendarisoweekyears.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceincalendarisoweeks.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceincalendarmonths.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceincalendarquarters.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceincalendarweeks.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceincalendaryears.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceindays.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceinhours.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceinisoweekyears.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceinmilliseconds.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceinminutes.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceinmonths.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceinquarters.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceinseconds.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceinweeks.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceinyears.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/eachdayofinterval.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/eachhourofinterval.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/eachminuteofinterval.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/eachmonthofinterval.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/eachquarterofinterval.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/eachweekofinterval.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/eachweekendofinterval.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/eachweekendofmonth.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/eachweekendofyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/eachyearofinterval.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/endofday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/endofdecade.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/endofhour.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/endofisoweek.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/endofisoweekyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/endofminute.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/endofmonth.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/endofquarter.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/endofsecond.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/endoftoday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/endoftomorrow.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/endofweek.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/endofyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/endofyesterday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/_lib/format/formatters.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/_lib/format/longformatters.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/format.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/formatdistance.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/formatdistancestrict.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/formatdistancetonow.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/formatdistancetonowstrict.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/formatduration.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/formatiso.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/formatiso9075.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/formatisoduration.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/formatrfc3339.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/formatrfc7231.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/formatrelative.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/fromunixtime.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getdate.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getdayofyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getdaysinmonth.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getdaysinyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getdecade.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/_lib/defaultoptions.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getdefaultoptions.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/gethours.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getisoday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getisoweek.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getisoweekyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getisoweeksinyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getmilliseconds.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getminutes.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getmonth.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getoverlappingdaysinintervals.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getquarter.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getseconds.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/gettime.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getunixtime.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getweek.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getweekofmonth.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getweekyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getweeksinmonth.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/hourstomilliseconds.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/hourstominutes.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/hourstoseconds.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/interval.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/intervaltoduration.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/intlformat.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/intlformatdistance.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isafter.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isbefore.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isdate.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isequal.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isexists.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isfirstdayofmonth.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isfriday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isfuture.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/islastdayofmonth.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isleapyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/ismatch.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/ismonday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/ispast.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/issameday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/issamehour.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/issameisoweek.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/issameisoweekyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/issameminute.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/issamemonth.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/issamequarter.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/issamesecond.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/issameweek.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/issameyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/issaturday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/issunday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isthishour.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isthisisoweek.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isthisminute.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isthismonth.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isthisquarter.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isthissecond.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isthisweek.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isthisyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isthursday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/istoday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/istomorrow.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/istuesday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isvalid.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/iswednesday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isweekend.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/iswithininterval.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isyesterday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/lastdayofdecade.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/lastdayofisoweek.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/lastdayofisoweekyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/lastdayofmonth.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/lastdayofquarter.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/lastdayofweek.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/lastdayofyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/_lib/format/lightformatters.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/lightformat.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/max.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/milliseconds.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/millisecondstohours.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/millisecondstominutes.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/millisecondstoseconds.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/min.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/minutestohours.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/minutestomilliseconds.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/minutestoseconds.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/monthstoquarters.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/monthstoyears.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/nextday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/nextfriday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/nextmonday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/nextsaturday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/nextsunday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/nextthursday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/nexttuesday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/nextwednesday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/types.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/setter.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/parser.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/parsers.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parseiso.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parsejson.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/previousday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/previousfriday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/previousmonday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/previoussaturday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/previoussunday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/previousthursday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/previoustuesday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/previouswednesday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/quarterstomonths.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/quarterstoyears.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/roundtonearesthours.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/roundtonearestminutes.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/secondstohours.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/secondstomilliseconds.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/secondstominutes.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/set.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setdate.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setdayofyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setdefaultoptions.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/sethours.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setisoday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setisoweek.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setisoweekyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setmilliseconds.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setminutes.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setmonth.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setquarter.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setseconds.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setweek.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setweekyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startofday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startofdecade.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startofhour.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startofisoweek.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startofisoweekyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startofminute.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startofmonth.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startofquarter.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startofsecond.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startoftoday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startoftomorrow.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startofweek.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startofweekyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startofyear.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startofyesterday.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/sub.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/subbusinessdays.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/subdays.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/subhours.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/subisoweekyears.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/submilliseconds.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/subminutes.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/submonths.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/subquarters.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/subseconds.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/subweeks.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/subyears.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/todate.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/transpose.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/weekstodays.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/yearstodays.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/yearstomonths.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/yearstoquarters.d.ts","../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/index.d.mts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/date_utils.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/input_time.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/day.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/week_number.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/week.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/month.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/month_dropdown_options.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/month_dropdown.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/month_year_dropdown_options.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/month_year_dropdown.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/time.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/year.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/year_dropdown_options.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/year_dropdown.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/click_outside_wrapper.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/calendar.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/calendar_icon.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/portal.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/tab_loop.d.ts","../../node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.d.mts","../../node_modules/.pnpm/@floating-ui+core@1.7.5/node_modules/@floating-ui/core/dist/floating-ui.core.d.mts","../../node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.d.mts","../../node_modules/.pnpm/@floating-ui+dom@1.7.6/node_modules/@floating-ui/dom/dist/floating-ui.dom.d.mts","../../node_modules/.pnpm/@floating-ui+react-dom@2.1.8_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.d.mts","../../node_modules/.pnpm/@floating-ui+react@0.27.19_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@floating-ui/react/dist/floating-ui.react.d.mts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/with_floating.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/popper_component.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/calendar_container.d.ts","../../node_modules/.pnpm/react-datepicker@7.6.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/elements/datepicker.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/elements/editmenuitems.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/elements/nav.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/elements/previewbutton.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/elements/publishbutton.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/elements/savebutton.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/elements/savedraftbutton.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/elements/status.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/elements/table.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/elements/unpublishbutton.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/elements/upload.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/elements/withserversideprops.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/array.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/blocks.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/checkbox.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/code.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/collapsible.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/date.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/email.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/group.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/hidden.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/json.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/number.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/point.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/radio.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/relationship.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/row.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/select.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/text.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/textarea.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/ui.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/fields/upload.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/forms/description.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/forms/diff.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/forms/label.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/forms/rowlabel.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/basefields/slug/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/transformcolumnpreferences.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/functions/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/views/dashboard.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/views/folderlist.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/views/list.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/admin/types.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/operations/me.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/operations/refresh.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/uploads/optionallyappendmetadata.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/uploads/types.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/operations/forgotpassword.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/operations/login.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/operations/resetpassword.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/operations/unlock.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/count.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/countversions.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/create.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/delete.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/deletebyid.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/find.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/hooks/afterread/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/findbyid.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/finddistinct.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/findversionbyid.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/local/find.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/findversions.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/update.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/updatebyid.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/utilities/types.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/config/types.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/types/constants.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/types/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/operations/auth.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/operations/local/forgotpassword.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/operations/local/login.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/operations/local/resetpassword.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/operations/local/unlock.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/operations/local/verifyemail.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/local/count.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/local/create.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/local/delete.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/local/duplicate.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/local/findbyid.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/local/finddistinct.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/local/findversionbyid.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/local/findversions.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/local/restoreversion.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/local/update.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/globals/operations/local/countversions.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/globals/operations/findone.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/globals/operations/local/findone.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/globals/operations/local/findversionbyid.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/globals/operations/local/findversions.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/globals/operations/local/restoreversion.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/globals/operations/local/update.d.ts","../../node_modules/.pnpm/croner@9.1.0/node_modules/croner/dist/croner.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/kv/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/crypto.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/local/countversions.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/basefields/accountlock.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/basefields/apikey.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/basefields/auth.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/basefields/email.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/basefields/sessions.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/basefields/username.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/basefields/verification.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/executeaccess.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/executeauthstrategies.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/extractaccessfrompermission.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/getaccessresults.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/getfieldstosign.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/getloginoptions.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/jwt.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/operations/access.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/operations/init.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/operations/logout.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/operations/registerfirstuser.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/operations/verifyemail.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/strategies/jwt.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/strategies/local/incrementloginattempts.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/strategies/local/resetloginattempts.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/bin/generateimportmap/iteratefields.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/bin/migrate.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/dataloader.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/docaccess.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/duplicate.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/operations/restoreversion.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/config/build.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/config/defaults.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/config/orderable/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/config/sanitize.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/combinequeries.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/createdatabaseadapter.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/defaultbegintransaction.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/flattenwheretooperators.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/queryvalidation/types.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/getlocalizedpaths.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/migrations/createmigration.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/migrations/findmigrationdir.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/migrations/getmigrations.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/migrations/getpredefinedmigration.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/migrations/migrate.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/migrations/migratedown.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/migrations/migraterefresh.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/migrations/migratereset.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/migrations/migratestatus.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/migrations/migrationscollection.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/migrations/migrationtemplate.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/migrations/readmigrationfiles.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/migrations/writemigrationindex.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/queryvalidation/validatequerypaths.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/database/queryvalidation/validatesearchparams.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/basefields/baseblockfields.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/basefields/baseidfield.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/config/sanitize.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/getdefaultvalue.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/hooks/afterchange/traversefields.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/hooks/afterread/promise.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/hooks/afterread/traversefields.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/hooks/beforechange/traversefields.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/hooks/beforevalidate/traversefields.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/sortablefieldtypes.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/folders/utils/getfolderdata.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/globals/operations/docaccess.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/globals/operations/findversionbyid.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/globals/operations/findversions.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/globals/operations/restoreversion.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/globals/operations/update.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/kv/adapters/databasekvadapter.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/kv/adapters/inmemorykvadapter.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/queues/config/collection.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/queues/errors/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/queues/operations/handleschedules/countrunnableoractivejobsforqueue.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/queues/operations/runjobs/runjob/importhandlerpath.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/queues/utilities/getcurrentdate.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/translations/getlocali18n.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/uploads/getfilebypath.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/utility.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/header.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/readable.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/fetch.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/formdata.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/connector.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/client-stats.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/client.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/errors.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/dispatcher.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/global-dispatcher.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/global-origin.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/pool-stats.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/pool.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/handlers.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/balanced-pool.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/round-robin-pool.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/h2c-client.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/agent.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/mock-interceptor.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/mock-call-history.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/mock-agent.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/mock-client.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/mock-pool.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/snapshot-agent.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/mock-errors.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/proxy-agent.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/socks5-proxy-agent.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/env-http-proxy-agent.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/retry-handler.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/retry-agent.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/api.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/cache-interceptor.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/interceptors.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/util.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/cookies.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/patch.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/websocket.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/eventsource.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/diagnostics-channel.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/content-type.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/cache.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/types/index.d.ts","../../node_modules/.pnpm/undici@7.24.4/node_modules/undici/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/uploads/safefetch.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/adddataandfiletorequest.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/addlocalestorequest.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/canaccessadmin.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/committransaction.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/configtojsonschema.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/createarrayfromcommadelineated.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/createlocalreq.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/createpayloadrequest.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/deepcopyobject.d.ts","../../node_modules/.pnpm/deepmerge@4.3.1/node_modules/deepmerge/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/deepmerge.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/dependencies/dependencychecker.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/dependencies/getdependencies.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/dynamicimport.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/escaperegexp.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/findup.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/flattenallfields.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/flattentoplevelfields.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/formaterrors.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/formatlabels.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getblockselect.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getcollectionidfieldtypes.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getfieldbypath.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getobjectdotnotation.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getrequestlanguage.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/handleendpoints.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/headerswithcors.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/inittransaction.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/isentityhidden.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/isolateobjectproperty.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/isplainobject.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/isvalidid.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/killtransaction.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/logerror.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/mapasync.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/mergeheaders.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/parsedocumentid.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/sanitizefallbacklocale.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/sanitizejoinparams.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/sanitizepopulateparam.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/sanitizeselectparam.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/stripunselectedfields.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/traversefields.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/buildcollectionfields.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/buildglobalfields.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/buildversioncompoundindexes.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/defaults.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/deletecollectionversions.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/drafts/appendversiontoquerykey.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/drafts/getquerydraftssort.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/enforcemaxversions.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/getlatestcollectionversion.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/getlatestglobalversion.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/migrations/localizestatus/mongo/down.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/migrations/localizestatus/mongo/up.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/migrations/localizestatus/mongo/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/migrations/localizestatus/sql/down.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/migrations/localizestatus/sql/up.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/migrations/localizestatus/sql/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/migrations/localizestatus/index.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/saveversion.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/schedule/types.d.ts","../../node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/utilities/deepmergesimple.d.ts","../../node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/exports/utilities.d.ts","../../node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/entity.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/cache/core/types.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/cache/core/cache.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/logger.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/casing.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/table.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/operations.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/subquery.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/query-builders/select.types.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sql/sql.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/utils.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sql/expressions/conditions.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sql/expressions/select.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sql/expressions/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sql/functions/aggregate.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/query-builders/query-builder.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sql/functions/vector.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sql/functions/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sql/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/checks.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/sequence.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/int.common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/bigintt.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/boolean.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/bytes.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/custom.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/date-duration.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/decimal.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/double-precision.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/duration.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/integer.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/json.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/date.common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/localdate.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/localtime.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/real.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/relative-duration.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/smallint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/text.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/timestamp.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/timestamptz.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/uuid.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/all.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/indexes.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/roles.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/policies.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/primary-keys.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/unique-constraint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/table.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/foreign-keys.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/bigint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/columns/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/view-base.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/relations.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/session.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/query-builders/count.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/query-promise.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/runnable-query.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/query-builders/query.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/query-builders/raw.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/subquery.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/db.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/session.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/query-builders/delete.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/query-builders/update.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/query-builders/insert.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/query-builders/refresh-materialized-view.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/query-builders/select.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/query-builders/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/dialect.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/query-builders/query-builder.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/view-common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/view.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/query-builders/select.types.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/alias.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/schema.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/utils.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/gel-core/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/checks.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/binary.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/boolean.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/char.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/custom.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/date.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/datetime.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/decimal.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/double.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/enum.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/float.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/int.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/json.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/mediumint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/real.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/serial.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/smallint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/text.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/time.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/date.common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/timestamp.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/tinyint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/varbinary.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/varchar.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/year.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/all.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/indexes.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/primary-keys.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/unique-constraint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/table.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/foreign-keys.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/bigint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/columns/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/migrator.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/query-builders/delete.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/subquery.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/view-base.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/query-builders/select.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/query-builders/query-builder.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/query-builders/update.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/query-builders/insert.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/dialect.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/query-builders/count.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/query-builders/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/query-builders/query.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/db.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/session.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/view-common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/view.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/query-builders/select.types.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/alias.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/schema.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/utils.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql-core/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/checks.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/bigserial.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/boolean.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/char.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/cidr.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/custom.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/date.common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/date.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/double-precision.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/inet.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/sequence.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/int.common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/integer.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/timestamp.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/interval.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/json.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/jsonb.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/line.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/macaddr.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/macaddr8.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/numeric.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/point.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/postgis_extension/geometry.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/real.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/serial.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/smallint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/smallserial.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/text.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/time.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/uuid.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/varchar.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/vector_extension/bit.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/vector_extension/halfvec.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/vector_extension/sparsevec.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/vector_extension/vector.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/all.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/indexes.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/roles.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/policies.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/primary-keys.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/unique-constraint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/table.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/foreign-keys.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/bigint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/enum.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/columns/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/view-base.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/query-builders/count.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/query-builders/query.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/query-builders/raw.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/query-builders/refresh-materialized-view.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/subquery.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/db.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/session.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/query-builders/delete.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/query-builders/update.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/query-builders/insert.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/query-builders/select.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/query-builders/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/dialect.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/query-builders/query-builder.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/view-common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/view.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/query-builders/select.types.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/alias.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/schema.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/utils.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/utils/array.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/utils/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/pg-core/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/binary.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/boolean.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/char.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/custom.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/date.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/datetime.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/decimal.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/double.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/enum.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/float.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/int.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/json.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/mediumint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/real.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/serial.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/smallint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/text.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/time.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/date.common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/timestamp.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/tinyint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/varbinary.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/varchar.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/vector.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/year.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/all.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/indexes.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/primary-keys.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/unique-constraint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/table.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/bigint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/columns/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/query-builders/delete.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/query-builders/update.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/query-builders/insert.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/dialect.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/cache/core/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore/session.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore/driver.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/query-builders/count.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/subquery.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/query-builders/select.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/query-builders/query-builder.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/query-builders/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/db.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/session.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/query-builders/select.types.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/alias.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/schema.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/utils.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore-core/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/checks.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/columns/custom.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/indexes.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/primary-keys.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/unique-constraint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/view-base.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/query-builders/count.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/query-builders/query.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/subquery.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/db.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/query-builders/raw.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/session.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/query-builders/delete.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/query-builders/update.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/query-builders/insert.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/query-builders/select.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/query-builders/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/dialect.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/query-builders/query-builder.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/view.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/utils.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/columns/integer.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/columns/numeric.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/columns/real.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/columns/text.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/columns/all.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/table.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/foreign-keys.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/columns/common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/columns/blob.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/columns/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/query-builders/select.types.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/alias.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/sqlite-core/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/column-builder.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/column.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/alias.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/errors.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/view-common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/batch.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/libsql/driver-core.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/libsql/driver.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/libsql/session.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/libsql/index.d.ts","../../node_modules/.pnpm/pg-types@4.1.0/node_modules/pg-types/lib/builtins.d.ts","../../node_modules/.pnpm/pg-types@4.1.0/node_modules/pg-types/index.d.ts","../../node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/messages.d.ts","../../node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/serializer.d.ts","../../node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/parser.d.ts","../../node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/index.d.ts","../../node_modules/.pnpm/@types+pg@8.10.2/node_modules/@types/pg/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/node-postgres/session.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/node-postgres/driver.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/node-postgres/index.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/queries/buildquery.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql2/session.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql2/driver.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/mysql2/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.7_@types+pg@8.10.2_pg@8.16.3/node_modules/drizzle-orm/singlestore/index.d.ts","../../node_modules/.pnpm/drizzle-kit@0.31.7/node_modules/drizzle-kit/api.d.mts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/queries/operatormap.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/find/chainmethods.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/types.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/postgres/columntocodeconverter.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/count.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/countglobalversions.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/countversions.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/create.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/createglobal.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/createglobalversion.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/createtablename.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/createversion.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/deletemany.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/deleteone.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/deleteversions.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/destroy.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/find.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/finddistinct.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/findglobal.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/findglobalversions.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/findone.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/findversions.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/migrate.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/migratedown.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/migratefresh.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/migraterefresh.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/migratereset.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/migratestatus.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/queries/parseparams.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/querydrafts.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/schema/builddrizzlerelations.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/schema/buildrawschema.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/transactions/begintransaction.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/transactions/committransaction.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/transactions/rollbacktransaction.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/updateglobal.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/updateglobalversion.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/updatejobs.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/updatemany.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/updateone.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/updateversion.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/upsert.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/upsertrow/types.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/upsertrow/index.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/utilities/blockstojsonmigrator.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/utilities/buildcreatemigration.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/utilities/buildindexname.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/utilities/createschemagenerator.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/utilities/extenddrizzletable.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/utilities/executeschemahooks.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/utilities/haslocalestable.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/utilities/pushdevschema.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/utilities/validateexistingblockisidentical.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/index.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/postgres/types.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/postgres/countdistinct.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/postgres/createdatabase.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/postgres/createextensions.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/postgres/createjsonquery/index.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/postgres/defaultsnapshot.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/postgres/deletewhere.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/postgres/dropdatabase.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/postgres/execute.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/postgres/init.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/postgres/insert.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/postgres/predefinedmigrations/v2-v3/index.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/postgres/requiredrizzlekit.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/postgres/schema/geometrycolumn.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/exports/postgres.d.ts","../../node_modules/.pnpm/@payloadcms+drizzle@3.81.0_@types+pg@8.10.2_payload@3.81.0_graphql@16.13.2_typescript@5.9.3__pg@8.16.3/node_modules/@payloadcms/drizzle/dist/exports/types-deprecated.d.ts","../../node_modules/.pnpm/@payloadcms+db-postgres@3.81.0_payload@3.81.0_graphql@16.13.2_typescript@5.9.3_/node_modules/@payloadcms/db-postgres/dist/types.d.ts","../../node_modules/.pnpm/@payloadcms+db-postgres@3.81.0_payload@3.81.0_graphql@16.13.2_typescript@5.9.3_/node_modules/@payloadcms/db-postgres/dist/index.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/nodes/lexicalelementnode.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/nodes/lexicaltextnode.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/lexicalselection.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/nodes/lexicalrootnode.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/lexicaleditorstate.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/lexicalconstants.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/lexicalnodestate.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/lexicalupdatetags.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/lexicaleditor.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/lexicalnode.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/caret/lexicalcaret.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/caret/lexicalcaretutils.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/lexicalcommands.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/lexicalevents.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/lexicalnormalization.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/lexicalupdates.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/lexicalutils.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/nodes/artificialnode.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/nodes/lexicaldecoratornode.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/nodes/lexicallinebreaknode.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/nodes/lexicalparagraphnode.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/nodes/lexicaltabnode.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/extension-core/internal.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/extension-core/types.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/extension-core/defineextension.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/extension-core/safecast.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/extension-core/shallowmergeconfig.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/extension-core/index.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/utils/classnames.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/utils/mergeregister.d.ts","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/packages/@lexical/markdown/markdowntransformers.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/packages/@lexical/markdown/markdownshortcuts.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/packages/@lexical/markdown/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/converters/lexicaltohtml_deprecated/converter/types.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/typesserver.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/lexical/config/types.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/lexical/plugins/slashmenu/lexicaltypeaheadmenuplugin/types.d.ts","../../node_modules/.pnpm/@lexical+rich-text@0.41.0/node_modules/@lexical/rich-text/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/blockquote/server/index.d.ts","../../node_modules/.pnpm/@lexical+react@0.41.0_react-dom@19.2.4_react@19.2.4__react@19.2.4_yjs@13.6.30/node_modules/@lexical/react/lexicaldecoratorblocknode.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/blocks/server/nodes/blocksnode.d.ts","../../node_modules/.pnpm/@lexical+table@0.41.0/node_modules/@lexical/table/lexicaltablecellnode.d.ts","../../node_modules/.pnpm/@lexical+table@0.41.0/node_modules/@lexical/table/lexicaltablecommands.d.ts","../../node_modules/.pnpm/@preact+signals-core@1.14.1/node_modules/@preact/signals-core/dist/signals-core.d.ts","../../node_modules/.pnpm/@lexical+extension@0.41.0/node_modules/@lexical/extension/signals.d.ts","../../node_modules/.pnpm/@lexical+extension@0.41.0/node_modules/@lexical/extension/namedsignals.d.ts","../../node_modules/.pnpm/@lexical+extension@0.41.0/node_modules/@lexical/extension/autofocusextension.d.ts","../../node_modules/.pnpm/@lexical+extension@0.41.0/node_modules/@lexical/extension/cleareditorextension.d.ts","../../node_modules/.pnpm/@lexical+extension@0.41.0/node_modules/@lexical/extension/config.d.ts","../../node_modules/.pnpm/@lexical+extension@0.41.0/node_modules/@lexical/extension/decoratortextextension.d.ts","../../node_modules/.pnpm/@lexical+extension@0.41.0/node_modules/@lexical/extension/editorstateextension.d.ts","../../node_modules/.pnpm/@lexical+extension@0.41.0/node_modules/@lexical/extension/getextensiondependencyfromeditor.d.ts","../../node_modules/.pnpm/@lexical+extension@0.41.0/node_modules/@lexical/extension/getpeerdependencyfromeditor.d.ts","../../node_modules/.pnpm/@lexical+extension@0.41.0/node_modules/@lexical/extension/horizontalruleextension.d.ts","../../node_modules/.pnpm/@lexical+extension@0.41.0/node_modules/@lexical/extension/initialstateextension.d.ts","../../node_modules/.pnpm/@lexical+extension@0.41.0/node_modules/@lexical/extension/extensionrep.d.ts","../../node_modules/.pnpm/@lexical+extension@0.41.0/node_modules/@lexical/extension/lexicalbuilder.d.ts","../../node_modules/.pnpm/@lexical+extension@0.41.0/node_modules/@lexical/extension/nodeselectionextension.d.ts","../../node_modules/.pnpm/@lexical+extension@0.41.0/node_modules/@lexical/extension/tabindentationextension.d.ts","../../node_modules/.pnpm/@lexical+extension@0.41.0/node_modules/@lexical/extension/watchedsignal.d.ts","../../node_modules/.pnpm/@lexical+extension@0.41.0/node_modules/@lexical/extension/index.d.ts","../../node_modules/.pnpm/@lexical+table@0.41.0/node_modules/@lexical/table/lexicaltableextension.d.ts","../../node_modules/.pnpm/@lexical+table@0.41.0/node_modules/@lexical/table/lexicaltableselection.d.ts","../../node_modules/.pnpm/@lexical+table@0.41.0/node_modules/@lexical/table/lexicaltableselectionhelpers.d.ts","../../node_modules/.pnpm/@lexical+table@0.41.0/node_modules/@lexical/table/lexicaltableobserver.d.ts","../../node_modules/.pnpm/@lexical+table@0.41.0/node_modules/@lexical/table/lexicaltablenode.d.ts","../../node_modules/.pnpm/@lexical+table@0.41.0/node_modules/@lexical/table/lexicaltablepluginhelpers.d.ts","../../node_modules/.pnpm/@lexical+table@0.41.0/node_modules/@lexical/table/lexicaltablerownode.d.ts","../../node_modules/.pnpm/@lexical+table@0.41.0/node_modules/@lexical/table/lexicaltableutils.d.ts","../../node_modules/.pnpm/@lexical+table@0.41.0/node_modules/@lexical/table/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/experimental_table/server/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/heading/server/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/horizontalrule/server/nodes/horizontalrulenode.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/link/nodes/types.d.ts","../../node_modules/.pnpm/@lexical+list@0.41.0/node_modules/@lexical/list/lexicallistitemnode.d.ts","../../node_modules/.pnpm/@lexical+list@0.41.0/node_modules/@lexical/list/lexicallistnode.d.ts","../../node_modules/.pnpm/@lexical+list@0.41.0/node_modules/@lexical/list/checklist.d.ts","../../node_modules/.pnpm/@lexical+list@0.41.0/node_modules/@lexical/list/formatlist.d.ts","../../node_modules/.pnpm/@lexical+list@0.41.0/node_modules/@lexical/list/utils.d.ts","../../node_modules/.pnpm/@lexical+list@0.41.0/node_modules/@lexical/list/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/lists/plugin/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/relationship/server/nodes/relationshipnode.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/upload/server/nodes/uploadnode.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/nodetypes.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/blocks/server/nodes/inlineblocksnode.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/blocks/client/nodes/inlineblocksnode.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/lexical/config/client/editorconfigprovider.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/toolbars/types.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/typesclient.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/utilities/buildinitialstate.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/types.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/align/server/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/blocks/premade/codeblock/component/code.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/blocks/premade/codeblock/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/blocks/server/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/converters/htmltolexical/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/converters/lexicaltohtml/shared/types.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/converters/lexicaltohtml/async/types.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/converters/lexicaltohtml/async/field/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/converters/lexicaltohtml_deprecated/converter/converters/linebreak.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/converters/lexicaltohtml_deprecated/converter/converters/paragraph.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/converters/lexicaltohtml_deprecated/converter/converters/tab.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/converters/lexicaltohtml_deprecated/converter/converters/text.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/converters/lexicaltohtml_deprecated/converter/defaultconverters.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/converters/lexicaltohtml_deprecated/converter/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/converters/lexicaltohtml_deprecated/field/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/converters/lexicaltohtml_deprecated/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/converters/lexicaltomarkdown/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/converters/markdowntolexical/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/converters/utilities/payloadpopulatefn.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/converters/utilities/restpopulatefn.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/debug/jsxconverter/server/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/debug/testrecorder/server/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/debug/treeview/server/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/format/bold/feature.server.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/format/inlinecode/feature.server.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/format/italic/feature.server.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/format/strikethrough/feature.server.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/format/subscript/feature.server.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/format/superscript/feature.server.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/format/underline/feature.server.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/horizontalrule/server/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/indent/server/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/link/client/plugins/floatinglinkeditor/types.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/link/nodes/linknode.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/link/nodes/autolinknode.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/link/client/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/link/server/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/lists/checklist/server/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/lists/orderedlist/server/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/lists/unorderedlist/server/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/migrations/slatetolexical/converter/types.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/paragraph/server/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/relationship/server/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/textstate/defaultcolors.d.ts","../../node_modules/.pnpm/csstype@3.1.3/node_modules/csstype/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/textstate/feature.server.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/toolbars/fixed/server/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/toolbars/inline/server/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/typeutilities.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/upload/client/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/features/upload/server/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/lexical/config/server/default.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/lexical/config/server/loader.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/lexical/config/server/sanitize.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/lexical/nodes/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/lexical/utils/nodeformat.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/lexical/utils/url.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/populategraphql/defaultvalue.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/populategraphql/populate.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/utilities/buildeditorstate.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/utilities/createserverfeature.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/utilities/editorconfigfactory.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/utilities/fieldsdrawer/drawer.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/utilities/jsx/extractpropsfromjsxpropsstring.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/utilities/jsx/jsx.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/utilities/upgradelexicaldata/index.d.ts","../../node_modules/.pnpm/@payloadcms+richtext-lexical@3.81.0_@faceless-ui+modal@3.0.0_react-dom@19.2.4_react@19.2.4__r_rrknrjvkt3bjokoirn6dmqksxq/node_modules/@payloadcms/richtext-lexical/dist/index.d.ts","../../packages/auth/src/integrations/cms/collections/users.ts","../../packages/auth/src/integrations/cms/index.ts","../../packages/core-shared/src/payload/access/is-admin.ts","../../packages/core-shared/src/payload/fields/slug-field.ts","../../packages/core-shared/src/payload/fields/seo-fields.ts","../../packages/core-shared/src/payload/blocks/cta.ts","../../packages/core-shared/src/payload/hooks/set-published-at.ts","../../packages/core-shared/src/payload/hooks/slugify-if-missing.ts","../../packages/core-shared/src/payload/index.ts","../../packages/blog/src/integrations/cms/collections/articles.ts","../../packages/blog/src/integrations/cms/index.ts","../../packages/media/src/integrations/cms/collections/media.ts","../../packages/media/src/integrations/cms/index.ts","../../packages/marketing-pages/src/integrations/cms/collections/pages.ts","../../packages/marketing-pages/src/integrations/cms/globals/site-settings.ts","../../packages/marketing-pages/src/integrations/cms/index.ts","../../packages/navigation/src/integrations/cms/globals/header.ts","../../packages/navigation/src/integrations/cms/index.ts","../../packages/core-cms/src/payload.config.ts","../../packages/core-cms/src/index.ts","../../packages/blog/src/infrastructure/repositories/payload-articles.repository.ts","../../packages/blog/src/di/bind-production.ts","../../packages/auth/src/di/bind-production.ts","../../packages/marketing-pages/src/infrastructure/repositories/payload-pages.repository.ts","../../packages/marketing-pages/src/infrastructure/repositories/payload-site-settings.repository.ts","../../packages/marketing-pages/src/di/bind-production.ts","../../packages/navigation/src/infrastructure/repositories/payload-header.repository.ts","../../packages/navigation/src/di/bind-production.ts","./src/server/bind-production.ts","./src/app/api/trpc/[trpc]/route.ts","../../node_modules/.pnpm/@tanstack+query-core@5.96.2/node_modules/@tanstack/query-core/build/modern/_tsup-dts-rollup.d.ts","../../node_modules/.pnpm/@tanstack+query-core@5.96.2/node_modules/@tanstack/query-core/build/modern/index.d.ts","../../node_modules/.pnpm/@tanstack+react-query@5.96.2_react@19.2.4/node_modules/@tanstack/react-query/build/modern/_tsup-dts-rollup.d.ts","../../node_modules/.pnpm/@tanstack+react-query@5.96.2_react@19.2.4/node_modules/@tanstack/react-query/build/modern/index.d.ts","../../node_modules/.pnpm/@trpc+client@11.16.0_@trpc+server@11.16.0_typescript@5.9.3__typescript@5.9.3/node_modules/@trpc/client/dist/subscriptions.d-dlr1nwgd.d.mts","../../node_modules/.pnpm/@trpc+server@11.16.0_typescript@5.9.3/node_modules/@trpc/server/dist/observable/index.d.mts","../../node_modules/.pnpm/@trpc+server@11.16.0_typescript@5.9.3/node_modules/@trpc/server/dist/unstable-core-do-not-import.d.mts","../../node_modules/.pnpm/@trpc+client@11.16.0_@trpc+server@11.16.0_typescript@5.9.3__typescript@5.9.3/node_modules/@trpc/client/dist/types.d-car6snh0.d.mts","../../node_modules/.pnpm/@trpc+client@11.16.0_@trpc+server@11.16.0_typescript@5.9.3__typescript@5.9.3/node_modules/@trpc/client/dist/unstable-internals.d-bomv7ek1.d.mts","../../node_modules/.pnpm/@trpc+client@11.16.0_@trpc+server@11.16.0_typescript@5.9.3__typescript@5.9.3/node_modules/@trpc/client/dist/httputils.d-c5t5to0d.d.mts","../../node_modules/.pnpm/@trpc+client@11.16.0_@trpc+server@11.16.0_typescript@5.9.3__typescript@5.9.3/node_modules/@trpc/client/dist/httpbatchlink.d-p8y9qm8p.d.mts","../../node_modules/.pnpm/@trpc+client@11.16.0_@trpc+server@11.16.0_typescript@5.9.3__typescript@5.9.3/node_modules/@trpc/client/dist/httplink.d-cjppcq4q.d.mts","../../node_modules/.pnpm/@trpc+client@11.16.0_@trpc+server@11.16.0_typescript@5.9.3__typescript@5.9.3/node_modules/@trpc/client/dist/loggerlink.d-0abgt7oh.d.mts","../../node_modules/.pnpm/@trpc+client@11.16.0_@trpc+server@11.16.0_typescript@5.9.3__typescript@5.9.3/node_modules/@trpc/client/dist/splitlink.d-ckhng1se.d.mts","../../node_modules/.pnpm/@trpc+server@11.16.0_typescript@5.9.3/node_modules/@trpc/server/dist/index.d-ch63no6z.d.mts","../../node_modules/.pnpm/@types+ws@8.18.1/node_modules/@types/ws/index.d.mts","../../node_modules/.pnpm/@trpc+server@11.16.0_typescript@5.9.3/node_modules/@trpc/server/dist/adapters/ws.d.mts","../../node_modules/.pnpm/@trpc+server@11.16.0_typescript@5.9.3/node_modules/@trpc/server/dist/http.d.mts","../../node_modules/.pnpm/@trpc+client@11.16.0_@trpc+server@11.16.0_typescript@5.9.3__typescript@5.9.3/node_modules/@trpc/client/dist/wslink.d-pfn64nkg.d.mts","../../node_modules/.pnpm/@trpc+client@11.16.0_@trpc+server@11.16.0_typescript@5.9.3__typescript@5.9.3/node_modules/@trpc/client/dist/index.d.mts","../../node_modules/.pnpm/@trpc+client@11.16.0_@trpc+server@11.16.0_typescript@5.9.3__typescript@5.9.3/node_modules/@trpc/client/dist/unstable-internals.d.mts","../../node_modules/.pnpm/@trpc+tanstack-react-query@11.16.0_@tanstack+react-query@5.96.2_react@19.2.4__@trpc+client@11_7rbeclslycny2xbqjwuxfbobtu/node_modules/@trpc/tanstack-react-query/dist/index.d.mts","../../packages/core-trpc/src/client.ts","../../packages/core-trpc/src/query-client.ts","../../packages/core-trpc/src/providers/next-provider.tsx","./src/app/providers.tsx","./src/app/layout.tsx","./src/app/page.tsx","./src/app/about/page.tsx","./src/app/blog/[slug]/page.tsx","./.next/types/routes.d.ts"],"fileIdsList":[[76,124,141,142,475,476,2318],[76,124,141,142,570,2286],[76,124,141,142,481,570,2286],[76,124,141,142,458,570,2286],[76,124,141,142,475,2313],[76,124,141,142,448,570,2286],[76,124,141,142,2312],[76,124,141,142,2277,2279,2280,2283,2285],[76,124,141,142,1415],[76,124,141,142,1416,1417],[62,76,124,141,142,1418],[62,76,124,141,142,1419],[76,124,141,142],[76,124,141,142,510],[76,124,141,142,2129,2145],[76,124,141,142,2129],[62,76,124,141,142,2129],[76,124,141,142,2129,2143],[76,124,141,142,2129,2156],[76,124,141,142,2129,2144,2145,2146,2147,2148,2149,2150,2151,2152,2153,2154,2156,2157,2158,2159],[76,124,141,142,2129,2155],[76,124,141,142,2144],[76,124,141,142,2129,2144],[76,124,141,142,2143],[76,124,141,142,2129,2144,2145],[76,124,141,142,2175,2179],[76,124,141,142,2129,2160,2174,2175,2176,2177,2178],[76,124,141,142,2129,2179],[76,124,141,142,2141,2142,2161,2162,2163,2164,2165,2166,2167,2168],[76,124,141,142,2129,2160],[76,124,141,142,2129,2141,2164],[76,124,141,142,2129,2141,2162,2163,2165],[76,124,141,142,2129,2160,2161],[76,124,141,142,2129,2141,2165],[76,124,141,142,2129,2141,2162,2164,2165],[76,124,141,142,2129,2141,2162,2164,2165,2167,2169],[62,76,124,141,142,1034,1036],[76,124,141,142,1708,2005,2095,2097],[76,124,141,142,1708,1913,2005,2017,2020,2095,2096],[76,124,141,142,1708,2097],[76,124,141,142,1708,2029,2097],[76,124,141,142,2030,2081,2082,2083,2084,2085,2086,2087,2088,2089,2090,2091,2092,2093,2094],[76,124,141,142,2029],[76,124,141,142,2021,2027,2028,2029,2031,2032,2033,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2068,2070,2071,2072,2073,2074,2075,2076,2077,2078,2079],[76,124,141,142,2081],[76,124,141,142,2026],[76,124,141,142,1913],[76,124,141,142,1708,1884,1913,1999,2005,2017,2020,2026,2029,2080,2097],[76,124,141,142,1708,1913,2005,2029,2097],[76,124,141,142,2005],[76,124,141,142,1708,2005,2021,2029,2097],[76,124,141,142,1708,1913,1976,1977,1999,2005,2010,2017,2020,2021,2026,2027,2028,2097],[76,124,141,142,1708,2069,2097],[76,124,141,142,1708,2005,2029,2097],[76,124,141,142,2029,2075],[76,124,141,142,2134],[76,124,141,142,2129,2134,2137,2183],[62,76,124,141,142,2129,2184],[62,76,124,141,142,1708,2097],[76,124,141,142,1708,2097,2192],[76,124,141,142,1708,2097,2134],[62,76,124,141,142,1708,2097,2129,2139,2183],[62,76,124,141,142,1708,2097,2129,2183],[76,124,141,142,2129,2135,2183],[76,124,141,142,1708,2097,2197],[76,124,141,142,1708,2097,2129,2183,2196],[76,124,141,142,2133,2183],[76,124,141,142,2133],[76,124,141,142,1708,2097,2129,2133],[76,124,141,142,1708,2097,2129],[76,124,141,142,1708,2097,2133,2135],[76,124,141,142,2133,2134],[76,124,141,142,2129,2135],[76,124,141,142,2197],[76,124,141,142,2129,2134,2169,2183],[62,76,124,141,142,2129,2183],[76,124,141,142,2188,2227],[76,124,141,142,2129,2173],[76,124,141,142,2129,2173,2224],[76,124,141,142,2129,2173,2223],[76,124,141,142,1708,2097,2129,2183],[76,124,141,142,1708,2097,2134,2226],[76,124,141,142,2129,2179,2183,2188],[76,124,141,142,761,2134,2235],[76,124,141,142,2134,2187],[62,76,124,141,142,1027,2129,2186,2190],[62,76,124,141,142,1708,2097,2129,2132,2135,2136,2187,2190],[76,124,141,142,1027,1030,1708,2097,2129,2132,2133,2135,2188,2190],[76,124,141,142,2129,2134],[76,124,141,142,2188,2241],[76,124,141,142,1708,2097,2134,2240],[76,124,141,142,2132,2133,2134,2135,2136,2138,2140,2170,2171,2173,2181,2182,2183,2184,2186,2187,2188,2190,2191,2193,2194,2195,2198,2199,2200,2201,2202,2203,2204,2205,2206,2207,2208,2209,2210,2211,2212,2213,2214,2215,2216,2217,2218,2219,2220,2221,2222,2224,2225,2227,2228,2229,2230,2231,2232,2233,2234,2236,2237,2238,2239,2241,2242,2243,2244,2245,2246,2247,2248,2249,2250,2251,2252,2253,2254,2255,2256],[62,76,124,141,142,761,2129,2135,2185,2190],[76,124,141,142,2129,2134,2135],[76,124,141,142,1708,2097,2134,2135],[76,124,141,142,2129,2134,2188,2190],[62,76,124,141,142,1027,2129,2190],[76,124,141,142,2129,2138,2140,2170,2171,2172,2173,2180,2181,2182,2184],[76,124,141,142,2129,2130,2131],[76,124,141,142,2129,2130],[76,124,141,142,1708,2097,2129,2134,2135,2188,2189],[76,124,141,142,2129,2183],[76,124,141,142,1708,2097,2129,2134,2135,2190],[76,124,141,142,1020,1023,1024,1025,1026],[76,124,141,142,1706],[76,124,141,142,1019],[76,124,141,142,1024],[76,124,141,142,1019,1021,1022,1023],[62,76,124,141,142,1024],[76,124,141,142,2288],[62,76,124,141,142,242,2289],[76,124,141,142,2290],[76,124,141,142,499,2294,2295,2297],[76,124,141,142,2294,2295,2297],[76,124,141,142,2294,2295,2296],[76,124,141,142,499,2292,2293,2294,2295,2296,2297,2298,2299,2300,2301,2306],[76,124,141,142,2294,2295],[76,124,141,142,2292,2293,2294],[76,124,141,142,2294],[76,124,141,142,2292,2296],[76,124,141,142,499,2292,2293,2294,2295,2296,2304,2305],[76,124,141,142,478,479,480],[76,124,138,141,142,478,479,480,2302,2303],[76,124,141,142,478,479],[76,124,138,139,141,142,479],[76,124,141,142,478],[62,76,124,141,142,499,2291,2293,2294,2307,2308],[76,124,138,141,142,156,174],[76,121,122,124,141,142],[76,123,124,141,142],[124,141,142],[76,124,129,141,142,159],[76,124,125,130,135,141,142,144,156,167],[76,124,125,126,135,141,142,144],[71,72,73,76,124,141,142],[76,124,127,141,142,168],[76,124,128,129,136,141,142,145],[76,124,129,141,142,156,164],[76,124,130,132,135,141,142,144],[76,123,124,131,141,142],[76,124,132,133,141,142],[76,124,134,135,141,142],[76,123,124,135,141,142],[76,124,135,136,137,141,142,156,167],[76,124,135,136,137,141,142,151,156,159],[76,117,124,132,135,138,141,142,144,156,167],[76,124,135,136,138,139,141,142,144,156,164,167],[76,124,138,140,141,142,156,164,167],[74,75,76,77,78,79,80,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173],[76,124,135,141,142],[76,124,141,142,143,167],[76,124,132,135,141,142,144,156],[76,124,141,142,145],[76,124,141,142,146],[76,123,124,141,142,147],[76,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173],[76,124,141,142,149],[76,124,141,142,150],[76,124,135,141,142,151,152],[76,124,141,142,151,153,168,170],[76,124,136,141,142],[76,124,135,141,142,156,157,159],[76,124,141,142,158,159],[76,124,141,142,156,157],[76,124,141,142,159],[76,124,141,142,160],[76,121,124,141,142,156,161,167],[76,124,135,141,142,162,163],[76,124,141,142,162,163],[76,124,129,141,142,144,156,164],[76,124,141,142,165],[76,124,141,142,144,166],[76,124,138,141,142,150,167],[76,124,129,141,142,168],[76,124,141,142,156,169],[76,124,141,142,143,170],[76,124,141,142,171],[76,117,124,141,142],[76,117,124,135,137,141,142,147,156,159,167,169,170,172],[76,124,141,142,156,173],[76,124,135,141,142,156,164,174,2012,2013,2016,2017],[62,66,76,124,141,142,175,176,177,179,419,467],[62,76,124,141,142],[62,66,76,124,141,142,175,176,177,178,334,419,467],[62,66,76,124,141,142,175,176,178,179,419,467],[62,76,124,141,142,179,334,335],[62,76,124,141,142,179,334],[62,66,76,124,141,142,176,177,178,179,419,467],[62,66,76,124,141,142,175,177,178,179,419,467],[60,61,76,124,141,142],[76,124,135,138,140,141,142,144,156,164,167,173,174],[76,124,141,142,1130],[76,124,141,142,1128,1130],[76,124,141,142,1128],[76,124,141,142,1130,1205,1206],[76,124,141,142,1208],[76,124,141,142,1209],[76,124,141,142,1226],[76,124,141,142,1130,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394],[76,124,141,142,1302],[76,124,141,142,1130,1206,1326],[76,124,141,142,1128,1323,1324],[76,124,141,142,1325],[76,124,141,142,1323],[76,124,141,142,1128,1129],[76,124,141,142,765],[76,124,141,142,763,765],[76,124,141,142,763],[76,124,141,142,765,829,830],[76,124,141,142,765,832],[76,124,141,142,765,833],[76,124,141,142,850],[76,124,141,142,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018],[76,124,141,142,765,926],[76,124,141,142,765,830,950],[76,124,141,142,763,947,948],[76,124,141,142,949],[76,124,141,142,765,947],[76,124,141,142,762,763,764],[76,124,141,142,164,495,1913,2010,2024,2025],[76,124,141,142,1709,1714,1718,1763,2001],[76,124,141,142,1767,2000],[76,124,141,142,1709,1710,2005],[76,124,141,142,1711],[76,124,141,142,1709,1719,2001],[76,124,141,142,1709,1718,1719,1787,1842,1913,1965,1999,2001],[76,124,141,142,1709,1714,1718,1719,2000],[76,124,141,142,1709],[76,124,141,142,1757,1762,1783],[76,124,141,142,1709,1727,1757],[76,124,141,142,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1742,1743,1744,1745,1746,1747,1748,1749,1750,1760],[76,124,141,142,1709,1730,1759,2000,2001],[76,124,141,142,1709,1759,2000,2001],[76,124,141,142,1709,1718,1719,1752,1757,1758,2000,2001],[76,124,141,142,1709,1718,1719,1757,1759,2000,2001],[76,124,141,142,1709,1759,2000],[76,124,141,142,1709,1757,1759,2000,2001],[76,124,141,142,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1742,1743,1744,1745,1746,1747,1748,1749,1750,1759,1760],[76,124,141,142,1709,1729,1759,2000],[76,124,141,142,1709,1741,1759,2000,2001],[76,124,141,142,1709,1741,1757,1759,2000,2001],[76,124,141,142,1709,1711,1716,1718,1719,1724,1757,1761,1762,1763,1765,1768,1769,1770,1772,1778,1779,1783],[76,124,141,142,1709,1718,1719,1757,1761,1763,1778,1782,1783],[76,124,141,142,1709,1757,1761],[76,124,141,142,1728,1729,1752,1753,1754,1755,1756,1757,1758,1761,1770,1771,1772,1778,1779,1781,1782,1784,1785,1786],[76,124,141,142,1709,1718,1757,1761],[76,124,141,142,1709,1718,1753,1757],[76,124,141,142,1709,1718,1757,1772],[76,124,141,142,1709,1716,1717,1718,1757,1766,1767,1772,1779,1783],[76,124,141,142,1773,1774,1775,1776,1777,1780,1783],[76,124,141,142,1709,1714,1716,1717,1718,1724,1752,1757,1759,1766,1767,1772,1774,1779,1780,1783],[76,124,141,142,1709,1716,1718,1724,1761,1770,1777,1779,1783],[76,124,141,142,1709,1718,1719,1757,1763,1766,1767,1772,1779],[76,124,141,142,1709,1718,1764,1766,1767],[76,124,141,142,1709,1718,1766,1767,1772,1779,1782],[76,124,141,142,1709,1710,1716,1717,1718,1719,1724,1757,1761,1762,1766,1767,1770,1772,1779,1783],[76,124,141,142,1714,1715,1716,1717,1718,1719,1724,1757,1761,1762,1772,1777,1782],[76,124,141,142,1709,1714,1716,1717,1718,1719,1757,1759,1762,1766,1767,1772,1779,1783,2001],[76,124,141,142,1709,1718,1729,1757],[76,124,141,142,1709,1710,1711,1719,1727,1763,1764,1771,1779,1783],[76,124,141,142,1716,1717,1718],[76,124,141,142,1709,1714,1728,1751,1752,1754,1755,1756,1758,1759,2000],[76,124,141,142,1716,1718,1728,1752,1754,1755,1756,1757,1758,1761,1762,1782,1787,2000,2001],[76,124,141,142,1709,1718],[76,124,141,142,1709,1717,1718,1719,1724,1759,1762,1780,1781,2000],[76,124,141,142,1709,1712,1714,1715,1716,1719,1727,1763,1766,2000,2001,2002,2003,2004],[76,124,141,142,1709,1975,2006],[76,124,141,142,1719,2007],[76,124,141,142,2008,2009],[76,124,141,142,1709,1710,1712,1718,1763,1951,1977,1983,1997,1999,2006],[76,124,141,142,1817,1825,1838],[76,124,141,142,1709,1718,1817],[76,124,141,142,1789,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1800,1801,1802,1803,1804,1805,1806,1808,1809,1810,1811,1812,1820],[76,124,141,142,1709,1819,2000,2001],[76,124,141,142,1709,1719,1819,2000,2001],[76,124,141,142,1709,1718,1719,1817,1818,2000,2001],[76,124,141,142,1709,1718,1719,1817,1819,2000,2001],[76,124,141,142,1709,1719,1817,1819,2000,2001],[76,124,141,142,1789,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1800,1801,1802,1803,1804,1805,1806,1808,1809,1810,1811,1812,1819,1820],[76,124,141,142,1709,1799,1819,2000,2001],[76,124,141,142,1709,1719,1807,2000,2001],[76,124,141,142,1709,1711,1716,1718,1719,1763,1817,1824,1825,1830,1831,1832,1833,1835,1838],[76,124,141,142,1709,1718,1719,1763,1817,1819,1822,1823,1828,1829,1835,1838],[76,124,141,142,1709,1817,1821],[76,124,141,142,1788,1814,1815,1816,1817,1818,1821,1824,1830,1832,1834,1835,1836,1837,1839,1840,1841],[76,124,141,142,1709,1718,1817,1821],[76,124,141,142,1709,1718,1817,1825,1835],[76,124,141,142,1709,1716,1718,1719,1766,1817,1819,1830,1835,1838],[76,124,141,142,1823,1826,1827,1828,1829,1838],[76,124,141,142,1709,1710,1714,1718,1724,1766,1767,1817,1819,1827,1828,1830,1835,1838],[76,124,141,142,1709,1716,1824,1826,1830,1838],[76,124,141,142,1709,1718,1719,1763,1766,1817,1830,1835],[76,124,141,142,1709,1710,1716,1717,1718,1719,1724,1766,1814,1817,1821,1824,1825,1830,1835,1838],[76,124,141,142,1714,1715,1716,1717,1718,1719,1724,1817,1821,1825,1826,1835,1837],[76,124,141,142,1709,1710,1716,1718,1719,1766,1817,1819,1830,1835,1838,2001],[76,124,141,142,1709,1817,1837],[76,124,141,142,1709,1710,1711,1718,1719,1763,1830,1834,1838],[76,124,141,142,1716,1717,1718,1724,1827],[76,124,141,142,1709,1714,1788,1813,1814,1815,1816,1818,1819,2000],[76,124,141,142,1716,1788,1814,1815,1816,1817,1818,1825,1826,1837,1842,2005],[76,124,141,142,1709,1717,1718,1724,1821,1825,1827,1836,2000],[76,124,141,142,1709,1712,1719,1763,1830,1834,1835,1951,2022],[76,124,141,142,2022,2023],[76,124,141,142,1709,1710,1712,1718,1719,1763,1830,1835,1838,1951],[76,124,141,142,1709,1711,1712,1719,1763,1896,1903,2017,2018],[76,124,141,142,2018,2019],[76,124,141,142,1709,1710,1712,1718,1719,1763,1897,1903,1907,1913,1951,2017],[76,124,141,142,1714,1718,2001],[76,124,141,142,1884,1890,1907],[76,124,141,142,1709,1727,1884],[76,124,141,142,1844,1845,1846,1847,1848,1850,1851,1852,1855,1856,1857,1858,1859,1860,1861,1862,1863,1864,1865,1866,1867,1868,1869,1870,1871,1872,1873,1874,1875,1876,1877,1887],[76,124,141,142,1709,1854,1886,2000,2001],[76,124,141,142,1709,1886,2000,2001],[76,124,141,142,1709,1719,1886,2000,2001],[76,124,141,142,1709,1718,1719,1879,1884,1885,2000,2001],[76,124,141,142,1709,1718,1719,1884,1886,2000,2001],[76,124,141,142,1709,1886,2000],[76,124,141,142,1709,1719,1849,1886,2000,2001],[76,124,141,142,1709,1719,1884,1886,2000,2001],[76,124,141,142,1844,1845,1846,1847,1848,1850,1851,1852,1854,1855,1856,1857,1858,1859,1860,1861,1862,1863,1864,1865,1866,1867,1868,1869,1870,1871,1872,1873,1874,1875,1876,1877,1886,1887,1888],[76,124,141,142,1709,1853,1886,2000],[76,124,141,142,1709,1856,1886,2000,2001],[76,124,141,142,1709,1884,1886,2000,2001],[76,124,141,142,1709,1849,1856,1884,1886,2000,2001],[76,124,141,142,1709,1719,1849,1884,1886,2000,2001],[76,124,141,142,1709,1711,1716,1718,1719,1763,1884,1889,1890,1891,1892,1893,1894,1895,1897,1902,1903,1906,1907],[76,124,141,142,1709,1718,1719,1763,1822,1884,1889,1897,1902,1906,1907],[76,124,141,142,1709,1884,1889],[76,124,141,142,1843,1853,1879,1880,1881,1882,1883,1884,1885,1889,1895,1896,1897,1902,1903,1905,1906,1908,1909,1910,1912],[76,124,141,142,1709,1718,1884,1889],[76,124,141,142,1709,1718,1880,1884],[76,124,141,142,1709,1718,1719,1884,1897],[76,124,141,142,1709,1710,1716,1717,1718,1724,1766,1767,1884,1897,1903,1907],[76,124,141,142,1894,1898,1899,1900,1901,1904,1907],[76,124,141,142,1709,1710,1714,1716,1717,1718,1724,1766,1767,1879,1884,1886,1897,1899,1903,1904,1907],[76,124,141,142,1709,1716,1718,1889,1895,1901,1903,1907],[76,124,141,142,1709,1718,1719,1763,1766,1767,1884,1897,1903],[76,124,141,142,1709,1718,1766,1767,1897,1903,1906],[76,124,141,142,1709,1710,1716,1717,1718,1719,1724,1766,1767,1884,1889,1890,1895,1897,1903,1907],[76,124,141,142,1714,1715,1716,1717,1718,1719,1724,1884,1889,1890,1897,1901,1906],[76,124,141,142,1709,1710,1714,1716,1717,1718,1719,1724,1766,1767,1884,1886,1890,1897,1903,1907,2001],[76,124,141,142,1709,1718,1719,1853,1884,1888,1906],[76,124,141,142,1709,1710,1711,1719,1727,1763,1764,1896,1903,1907],[76,124,141,142,1716,1717,1718,1724,1904],[76,124,141,142,1709,1714,1843,1878,1879,1881,1882,1883,1885,1886,2000],[76,124,141,142,1716,1718,1843,1879,1881,1882,1883,1884,1885,1889,1890,1906,1913,2000,2001],[76,124,141,142,1911],[76,124,141,142,1709,1717,1718,1719,1724,1886,1890,1904,1905,2000],[76,124,141,142,1709,1727],[76,124,141,142,1714,1715,1716,1718,1719,2000,2001],[76,124,141,142,1709,1714,1718,1719,1722,2001,2005],[76,124,141,142,2000],[76,124,141,142,1943,1961],[76,124,141,142,1914,1915,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,1930,1931,1933,1934,1935,1936,1937,1938,1945],[76,124,141,142,1709,1944,2000,2001],[76,124,141,142,1709,1719,1944,2000,2001],[76,124,141,142,1709,1719,1943,2000,2001],[76,124,141,142,1709,1718,1719,1943,1944,2000,2001],[76,124,141,142,1709,1719,1943,1944,2000,2001],[76,124,141,142,1709,1719,1727,1944,2000,2001],[76,124,141,142,1914,1915,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,1930,1931,1933,1934,1935,1936,1937,1938,1944,1945],[76,124,141,142,1709,1924,1944,2000,2001],[76,124,141,142,1709,1719,1932,2000,2001],[76,124,141,142,1709,1711,1716,1718,1763,1943,1950,1953,1954,1955,1958,1960,1961],[76,124,141,142,1709,1718,1719,1763,1822,1943,1944,1947,1948,1949,1960,1961],[76,124,141,142,1940,1941,1942,1943,1946,1950,1955,1958,1959,1960,1962,1963,1964],[76,124,141,142,1709,1718,1943,1946],[76,124,141,142,1709,1943,1946],[76,124,141,142,1709,1718,1943,1960],[76,124,141,142,1709,1716,1718,1719,1766,1943,1944,1950,1960,1961],[76,124,141,142,1947,1948,1949,1956,1957,1961],[76,124,141,142,1709,1714,1718,1766,1767,1943,1944,1948,1950,1960,1961],[76,124,141,142,1709,1716,1950,1955,1956,1961],[76,124,141,142,1709,1710,1716,1717,1718,1719,1724,1766,1943,1946,1950,1955,1960,1961],[76,124,141,142,1714,1715,1716,1717,1718,1719,1724,1943,1946,1956,1960],[76,124,141,142,1709,1716,1718,1719,1766,1943,1944,1950,1960,1961,2001],[76,124,141,142,1709,1943],[76,124,141,142,1709,1710,1711,1718,1719,1763,1950,1959,1961],[76,124,141,142,1716,1717,1718,1724,1957],[76,124,141,142,1709,1714,1939,1940,1941,1942,1944,2000],[76,124,141,142,1716,1718,1940,1941,1942,1943,1965,2000,2001],[76,124,141,142,1709,1711,1712,1719,1763,1950,1952,1959],[76,124,141,142,1952,1953],[76,124,141,142,1709,1710,1712,1718,1719,1763,1950,1951,1960,1961],[76,124,141,142,1718,2001],[76,124,141,142,1720,1721],[76,124,141,142,1723,1725],[76,124,141,142,1718,1724,2001],[76,124,141,142,1718,1722,1726],[76,124,141,142,1709,1713,1714,1716,1717,1719,2001],[76,124,141,142,1971,1992,1997],[76,124,141,142,1709,1718,1992],[76,124,141,142,1967,1987,1988,1989,1990,1995],[76,124,141,142,1709,1719,1994,2000,2001],[76,124,141,142,1709,1718,1719,1992,1993,2000,2001],[76,124,141,142,1709,1718,1719,1992,1994,2000,2001],[76,124,141,142,1967,1987,1988,1989,1990,1994,1995],[76,124,141,142,1709,1719,1986,1992,1994,2000,2001],[76,124,141,142,1709,1994,2000,2001],[76,124,141,142,1709,1719,1992,1994,2000,2001],[76,124,141,142,1709,1711,1716,1718,1719,1763,1971,1972,1973,1974,1977,1982,1983,1992,1997],[76,124,141,142,1709,1718,1719,1763,1822,1977,1982,1992,1996,1997],[76,124,141,142,1709,1992,1996],[76,124,141,142,1966,1968,1969,1970,1974,1975,1977,1982,1983,1985,1986,1992,1993,1996,1998],[76,124,141,142,1709,1718,1992,1996],[76,124,141,142,1709,1718,1977,1985,1992],[76,124,141,142,1709,1716,1717,1718,1719,1766,1767,1977,1983,1992,1994,1997],[76,124,141,142,1978,1979,1980,1981,1984,1997],[76,124,141,142,1709,1716,1717,1718,1719,1724,1766,1767,1968,1977,1979,1983,1984,1992,1994,1997],[76,124,141,142,1709,1716,1974,1981,1983,1997],[76,124,141,142,1709,1718,1719,1763,1766,1767,1977,1983,1992],[76,124,141,142,1709,1718,1764,1766,1767,1983],[76,124,141,142,1709,1710,1716,1717,1718,1719,1724,1766,1767,1971,1974,1977,1983,1992,1996,1997],[76,124,141,142,1714,1715,1716,1717,1718,1719,1724,1971,1977,1981,1985,1992,1996],[76,124,141,142,1709,1716,1717,1718,1719,1766,1767,1971,1977,1983,1992,1994,1997,2001],[76,124,141,142,1709,1710,1711,1718,1763,1764,1766,1975,1976,1983,1997],[76,124,141,142,1716,1717,1718,1724,1984],[76,124,141,142,1709,1714,1966,1968,1969,1970,1991,1993,1994,2000],[76,124,141,142,1709,1992,1994],[76,124,141,142,1716,1718,1966,1968,1969,1970,1971,1985,1992,1993,1999],[76,124,141,142,1709,1717,1718,1724,1971,1984,1994,2000],[76,124,141,142,1709,1715,1718,1719,2001],[76,124,141,142,1711,1712,1714,1718,2001],[76,124,141,142,676,677,678],[76,124,141,142,676],[76,124,141,142,672,673],[76,124,141,142,673,674,675,679],[76,124,141,142,572,573,579,580],[76,124,141,142,581,646,647],[76,124,141,142,572,579,581],[76,124,141,142,573,581],[76,124,141,142,572,574,575,576,579,581,584,585],[76,124,141,142,575,586,600,601],[76,124,141,142,572,579,584,585,586],[76,124,141,142,572,574,579,581,583,584,585],[76,124,141,142,572,573,584,585,586],[76,124,141,142,571,587,592,599,602,603,645,648,671],[76,124,141,142,572],[76,124,141,142,573,577,578],[76,124,141,142,573,577,578,579,580,582,593,594,595,596,597,598],[76,124,141,142,573,578,579],[76,124,141,142,573],[76,124,141,142,572,573,578,579,581,594],[76,124,141,142,579],[76,124,141,142,573,579,580],[76,124,141,142,577,579],[76,124,141,142,586,600],[76,124,141,142,572,574,575,576,579,584],[76,124,141,142,572,579,582,585],[76,124,141,142,575,583,584,585,588,589,590,591],[76,124,141,142,585],[76,124,141,142,572,574,579,581,583,585],[76,124,141,142,581,584],[76,124,141,142,581],[76,124,141,142,572,579,585],[76,124,141,142,573,579,584,595],[76,124,141,142,584,649],[76,124,141,142,581,585],[76,124,141,142,579,584],[76,124,141,142,584],[76,124,141,142,572,582],[76,124,141,142,572,579],[76,124,141,142,579,584,585],[76,124,141,142,604,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670],[76,124,141,142,584,585],[76,124,141,142,573,579,583,584,585],[76,124,141,142,574,579],[76,124,141,142,572,579,583,584,585,597],[76,124,141,142,572,574,579,585],[76,124,141,142,572,574,579],[76,124,141,142,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644],[76,124,141,142,597,605],[76,124,141,142,605,607],[76,124,141,142,572,579,581,584,604,605],[76,124,141,142,572,579,581,583,584,585,597,604],[76,124,141,142,510,511],[76,124,141,142,2099,2100,2108],[76,124,141,142,2099,2100,2101,2108,2109],[76,124,141,142,2122],[76,124,141,142,2121,2122,2123,2124,2125],[76,124,141,142,2121,2129],[76,124,141,142,2099,2100,2101,2102,2103,2104,2105,2106,2107,2108,2109,2110,2111,2112,2113,2114,2115,2116,2117,2118,2119,2120,2126,2127,2128],[76,124,141,142,2099,2100,2101,2107,2108],[76,124,141,142,2099,2100],[76,124,141,142,2103,2105,2106,2108],[76,124,141,142,2101,2102,2107,2108],[76,124,141,142,2107,2108],[76,124,141,142,2101,2104,2105,2107,2129],[76,124,141,142,2104,2129],[76,124,141,142,2099,2100,2103,2107,2108,2129],[76,124,141,142,2103,2107,2108],[76,124,141,142,2100,2101,2102,2103,2107,2108,2129],[76,124,141,142,2099,2129],[76,124,141,142,2099,2107,2108,2129],[76,124,141,142,2101,2108,2129],[76,124,141,142,2099,2101,2107,2108],[76,124,141,142,2099,2108],[76,124,141,142,2100,2107,2108],[76,124,141,142,1035],[68,76,124,141,142],[76,124,141,142,422],[76,124,141,142,424,425,426,427],[76,124,141,142,429],[76,124,141,142,183,197,198,199,201,416],[76,124,141,142,183,222,224,226,227,230,416,418],[76,124,141,142,183,187,189,190,191,192,193,405,416,418],[76,124,141,142,416],[76,124,141,142,198,300,386,395,412],[76,124,141,142,183],[76,124,141,142,180,412],[76,124,141,142,234],[76,124,141,142,233,416,418],[76,124,138,141,142,282,300,329,473],[76,124,138,141,142,293,309,395,411],[76,124,138,141,142,347],[76,124,141,142,399],[76,124,141,142,398,399,400],[76,124,141,142,398],[70,76,124,138,141,142,180,183,187,190,194,195,196,198,202,210,211,340,365,396,416,419],[76,124,141,142,183,200,218,222,223,228,229,416,473],[76,124,141,142,200,473],[76,124,141,142,211,218,280,416,473],[76,124,141,142,473],[76,124,141,142,183,200,201,473],[76,124,141,142,225,473],[76,124,141,142,194,397,404],[76,124,141,142,150,242,412],[76,124,141,142,242,412],[62,76,124,141,142,242],[62,76,124,141,142,301],[76,124,141,142,297,345,412,455,456],[76,124,141,142,392,449,450,451,452,454],[76,124,141,142,391],[76,124,141,142,391,392],[76,124,141,142,191,341,342,343],[76,124,141,142,341,344,345],[76,124,141,142,453],[76,124,141,142,341,345],[62,76,124,141,142,184,443],[62,76,124,141,142,167],[62,76,124,141,142,200,270],[62,76,124,141,142,200],[76,124,141,142,268,272],[62,76,124,141,142,269,421],[62,66,76,124,138,141,142,174,175,176,177,178,179,419,465,466],[76,124,138,141,142],[76,124,138,141,142,187,249,341,351,366,386,401,402,416,417,473],[76,124,141,142,210,403],[76,124,141,142,419],[76,124,141,142,182],[62,76,124,141,142,282,296,308,318,320,411],[76,124,141,142,150,282,296,317,318,319,411,472],[76,124,141,142,311,312,313,314,315,316],[76,124,141,142,313],[76,124,141,142,317],[76,124,141,142,240,241,242,244],[62,76,124,141,142,235,236,237,243],[76,124,141,142,240,243],[76,124,141,142,238],[76,124,141,142,239],[62,76,124,141,142,242,269,421],[62,76,124,141,142,242,420,421],[62,76,124,141,142,242,421],[76,124,141,142,366,408],[76,124,141,142,408],[76,124,138,141,142,417,421],[76,124,141,142,305],[76,123,124,141,142,304],[76,124,141,142,212,250,288,290,292,293,294,295,338,341,411,414,417],[76,124,141,142,212,326,341,345],[76,124,141,142,293,411],[62,76,124,141,142,293,302,303,305,306,307,308,309,310,321,322,323,324,325,327,328,411,412,473],[76,124,141,142,287],[76,124,138,141,142,150,212,213,249,264,294,338,339,340,345,366,386,407,416,417,418,419,473],[76,124,141,142,411],[76,123,124,141,142,198,291,294,340,407,409,410,417],[76,124,141,142,293],[76,123,124,141,142,249,254,283,284,285,286,287,288,289,290,292,411,412],[76,124,138,141,142,254,255,283,417,418],[76,124,141,142,198,340,341,366,407,411,417],[76,124,138,141,142,416,418],[76,124,138,141,142,156,414,417,418],[76,124,138,141,142,150,167,180,187,200,212,213,215,250,251,256,261,264,290,294,341,351,353,356,358,361,362,363,364,365,386,406,407,412,414,416,417,418],[76,124,138,141,142,156],[76,124,141,142,183,184,185,187,192,195,200,218,406,414,415,419,421,473],[76,124,138,141,142,156,167,230,232,234,235,236,237,244,473],[76,124,141,142,150,167,180,222,232,260,261,262,263,290,341,356,365,366,372,375,376,386,407,412,414],[76,124,141,142,194,195,210,340,365,407,416],[76,124,138,141,142,167,184,187,290,370,414,416],[76,124,141,142,281],[76,124,138,141,142,373,374,383],[76,124,141,142,414,416],[76,124,141,142,288,291],[76,124,141,142,290,294,406,421],[76,124,138,141,142,150,216,222,263,356,366,372,375,378,414],[76,124,138,141,142,194,210,222,379],[76,124,141,142,183,215,381,406,416],[76,124,138,141,142,167,416],[76,124,138,141,142,200,214,215,216,227,245,380,382,406,416],[70,76,124,141,142,212,294,385,419,421],[76,124,138,141,142,150,167,187,194,202,210,213,250,256,260,261,262,263,264,290,341,353,366,367,369,371,386,406,407,412,413,414,421],[76,124,138,141,142,156,194,372,377,383,414],[76,124,141,142,205,206,207,208,209],[76,124,141,142,251,357],[76,124,141,142,359],[76,124,141,142,357],[76,124,141,142,359,360],[76,124,138,141,142,187,190,191,249,417],[76,124,138,141,142,150,182,184,212,250,264,294,349,350,386,414,418,419,421],[76,124,138,141,142,150,167,186,191,290,350,413,417],[76,124,141,142,283],[76,124,141,142,284],[76,124,141,142,285],[76,124,141,142,412],[76,124,141,142,231,247],[76,124,138,141,142,187,231,250],[76,124,141,142,246,247],[76,124,141,142,248],[76,124,141,142,231,232],[76,124,141,142,231,265],[76,124,141,142,231],[76,124,141,142,251,355,413],[76,124,141,142,354],[76,124,141,142,232,412,413],[76,124,141,142,352,413],[76,124,141,142,232,412],[76,124,141,142,338],[76,124,141,142,187,192,250,279,282,288,290,294,296,299,330,333,337,341,385,406,414,417],[76,124,141,142,273,276,277,278,297,298,345],[62,76,124,141,142,177,179,242,331,332],[62,76,124,141,142,177,179,242,331,332,336],[76,124,141,142,394],[76,124,141,142,198,255,293,294,305,309,341,385,387,388,389,390,392,393,396,406,411,416],[76,124,141,142,345],[76,124,141,142,349],[76,124,138,141,142,250,266,346,348,351,385,414,419,421],[76,124,141,142,273,274,275,276,277,278,297,298,345,420],[70,76,124,138,141,142,150,167,213,231,232,264,290,294,383,384,386,406,407,416,417,419],[76,124,141,142,255,257,260,407],[76,124,138,141,142,251,416],[76,124,141,142,254,293],[76,124,141,142,253],[76,124,141,142,255,256],[76,124,141,142,252,254,416],[76,124,138,141,142,186,255,257,258,259,416,417],[62,76,124,141,142,341,342,344],[76,124,141,142,217],[62,76,124,141,142,184],[62,76,124,141,142,412],[62,70,76,124,141,142,264,294,419,421],[76,124,141,142,184,443,444],[62,76,124,141,142,272],[62,76,124,141,142,150,167,182,229,267,269,271,421],[76,124,141,142,200,412,417],[76,124,141,142,368,412],[76,124,141,142,341],[62,76,124,136,138,141,142,150,182,218,224,272,419,420],[62,76,124,141,142,175,176,177,178,179,419,467],[62,63,64,65,66,76,124,141,142],[76,124,129,141,142],[76,124,141,142,219,220,221],[76,124,141,142,219],[62,66,76,124,138,140,141,142,150,174,175,176,177,178,179,180,182,213,317,378,416,418,421,467],[76,124,141,142,431],[76,124,141,142,433],[76,124,141,142,435],[76,124,141,142,437],[76,124,141,142,439,440,441],[76,124,141,142,445],[67,69,76,124,141,142,423,428,430,432,434,436,438,442,446,448,458,459,461,471,472,473,474],[76,124,141,142,447],[76,124,141,142,457],[76,124,141,142,269],[76,124,141,142,460],[76,123,124,141,142,255,257,258,260,308,412,462,463,464,467,468,469,470],[76,124,141,142,174],[76,124,141,142,1027,1047,1467,1491,1493],[76,124,141,142,1424],[76,124,141,142,1103],[76,124,141,142,1047],[62,76,124,141,142,1103],[76,124,141,142,761,1040,1041,1046,1047,1467],[62,76,124,141,142,761,1040,1041,1046,1047,1467],[76,124,141,142,761,1037,1040,1041,1046,1047,1467],[76,124,141,142,761,1040,1041,1047,1467],[76,124,141,142,1467],[76,124,141,142,761,1040,1047,1467],[76,124,141,142,761,1047,1467],[76,124,141,142,1027,1040,1047],[76,124,141,142,1027,1047,1708,2097],[76,124,141,142,1040,1047],[76,124,141,142,761,1027,1038,1039,1047,1467,1493,1708,2097],[76,124,141,142,1027,1038,1039,1047,1493,1708,2097],[76,124,141,142,1040,1047,1103],[76,124,141,142,1027,1044,1103,1104,1461,1462,1493,1708,2097],[76,124,141,142,1027],[76,124,141,142,1027,1030,1033,1045,1047,1048,1103,1467,1491,1493,1708,2097],[62,76,124,141,142,1027,1040,1041,1042,1047,1048,1049,1057,1058,1059,1103,1104,1105,1106,1107,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1463,1464,1465,1466,1491,1493],[76,124,141,142,1038,1045,1059,1103,1467,1491,1493],[76,124,141,142,1086,1103,1708,2097],[76,124,141,142,1027,1045,1052,1056,1057,1058,1103,1104,1467,1491,1493],[76,124,141,142,1038,1039,1087,1103,1433,1467,1491,1493],[76,124,141,142,1491],[76,124,141,142,1103,1493],[76,124,141,142,1052],[76,124,141,142,1052,1103],[76,124,141,142,1038,1493],[76,124,141,142,1491,1493],[76,124,141,142,1038],[76,124,141,142,1038,1050,1051],[76,124,141,142,1493,1708,2097],[76,124,141,142,1491,1493,1708,2097],[76,124,141,142,1493],[76,124,141,142,1472,1493,1708,2097],[76,124,141,142,1473,1493,1708,2097],[76,124,141,142,1474,1493,1708,2097],[76,124,141,142,1038,1491,1493],[76,124,141,142,1491,1708,2097],[76,124,141,142,761,1493,1708,2097],[76,124,141,142,1047,1103,1104],[76,124,141,142,1027,1053,1103,1104,1467,1491,1493],[76,124,141,142,672,761,1038,1043,1044,1047,1086,1103,1467,1468,1469,1471,1490,1493,1708,2097],[76,124,141,142,1028,1491,1493,1708,2097],[76,124,141,142,1052,1491,1493],[76,124,141,142,761,1478,1491,1493,1708,2097],[76,124,141,142,1044,1491,1493,1708,2097],[76,124,141,142,1482,1491,1493,1708,2097],[76,124,141,142,1044,1491,1493],[76,124,141,142,1043,1491,1493,1708,2097],[76,124,141,142,1043,1044,1486,1491,1493],[76,124,141,142,1471,1491,1493,1708,2097],[76,124,141,142,761,1491,1493,1708,2097],[76,124,141,142,1483,1491,1493,1708,2097],[76,124,141,142,1043,1044,1491,1493,1708,2097],[76,124,141,142,761,1471,1491,1493,1708,2097],[76,124,141,142,1486,1491,1493],[76,124,141,142,1469,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1483,1484,1485,1487,1488,1489,1491,1493,1708,2097],[76,124,141,142,1027,1047,1054,1055,1103,1104,1708,2097],[76,124,141,142,1103,1491],[62,76,124,141,142,475,672,683,761,1027,1029,1030,1031,1044,1045,1049,1052,1059,1060,1085,1086,1087,1098,1102,1104,1467,1491,1493,1708,2097],[76,124,141,142,761,1044],[76,124,141,142,1044],[76,124,141,142,1047,1557,1708,2097],[76,124,141,142,1044,1708,2097],[76,124,141,142,1047,1052],[76,124,141,142,1045,1047,1491,1493,1557],[76,124,141,142,1027,1032],[76,124,141,142,1032],[76,124,141,142,1032,1045],[76,124,141,142,1032,1033,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083],[76,124,141,142,1032,1047],[76,124,141,142,1084],[76,124,141,142,1027,1032,1103,1493],[76,124,141,142,1047,1467,1491,1493],[76,124,141,142,1027,1047,1493,1708,2097],[76,124,141,142,1045,1047,1103,1491],[62,76,124,141,142,761,1030,1037,1039,1040,1042,1044,1045,1046,1049,1103,1467,1491,1493,1708,2097],[76,124,141,142,1045,1047,1491,1493,1708,2097],[76,124,141,142,1045,1491,1493,1708,2097],[76,124,141,142,1045,1047,1482,1491,1493,1708,2097],[76,124,141,142,1045,1047,1084,1491,1493,1708,2097],[76,124,141,142,1086,1493,1708,2097],[76,124,141,142,1027,1045,1053,1103,1104,1493],[76,124,141,142,672,761,1043,1044,1047,1103,1467,1493,1708,2097],[76,124,141,142,1045,1052,1493],[76,124,141,142,1045,1482,1486,1493],[76,124,141,142,1043,1045,1486,1493],[76,124,141,142,1043,1044,1045,1486,1493],[76,124,141,142,1045,1486,1493,1511,1708,2097],[76,124,141,142,1043,1045,1493,1708,2097],[76,124,141,142,1043,1044,1045,1493,1708,2097],[76,124,141,142,1045,1493,1708,2097],[76,124,141,142,761,1045,1493,1708,2097],[76,124,141,142,1043,1045,1493],[76,124,141,142,761,1045,1486,1493,1708,2097],[76,124,141,142,672,680,683,761,1038,1039,1043,1044,1045,1046,1047,1052,1053,1054,1055,1056,1060,1084,1086,1087,1088,1092,1094,1096,1097,1098,1102,1103,1104,1106,1461,1464,1467,1468,1469,1471,1472,1473,1474,1475,1476,1478,1479,1480,1481,1483,1485,1486,1487,1488,1489,1491,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520,1521,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1643,1644,1645,1646,1647,1648,1649,1650,1651,1652,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1703,1704,1705,1707],[76,124,141,142,1493,1518,1708,2097],[76,124,141,142,1518],[76,124,141,142,1039,1047,1493,1708,2097],[76,124,141,142,1103,1491,1708,2097],[76,124,141,142,1045,1088,1092,1103],[76,124,141,142,1088,1092,1093,1096,1097,1493,1708,2097],[76,124,141,142,1092,1098,1708,2097],[76,124,141,142,1088,1708,2097],[76,124,141,142,1047,1088,1090,1091,1098,1708,2097],[76,124,141,142,1088,1090,1708,2097],[76,124,141,142,1092,1094,1096,1708,2097],[76,124,141,142,1088,1092,1493],[76,124,141,142,1093,1098,1493,1708,2097],[76,124,141,142,1095,1097,1493],[76,124,141,142,1088,1089,1092,1493,1708,2097],[76,124,141,142,1088],[76,124,141,142,1089,1092,1097,1493,1708,2097],[76,124,141,142,1027,1103],[76,124,141,142,167,761,1027,1028,1491,1492,1708,2097],[76,124,141,142,1031,1493],[76,124,132,141,142,1642],[76,124,141,142,1031,1103,1470,1491,1493],[76,124,141,142,1103,1493,1708,2097],[76,124,141,142,761,1493],[76,124,141,142,1027,1030,1045,1047,1103,1491],[76,124,141,142,1653],[76,124,141,142,1027,1047,1053],[76,124,141,142,1032,1103],[76,124,141,142,1047,1493],[76,124,141,142,1047,1103],[76,124,141,142,283,1027,1103],[76,124,141,142,1045,1491,1493],[76,124,141,142,683,1101,1103],[76,124,141,142,1103,1708,2097],[76,124,141,142,1047,1467,1493],[76,124,141,142,1039,1467],[76,124,141,142,1047,1103,1491],[76,124,141,142,1045,1047,1103],[76,124,141,142,1045,1493],[76,124,141,142,1699,1702],[76,124,141,142,1697,1698],[76,124,141,142,1700,1701],[76,124,141,142,174,2013,2014,2015],[76,124,141,142,156,174,2013],[76,124,141,142,2011],[76,124,141,142,156,174],[76,124,141,142,156,174,683,1099,1100],[76,124,138,141,142,174],[76,124,135,141,142,172,681,682],[62,76,124,141,142,1395,1396,1397,1401,1403,1405,1406,1407,1409,1410],[76,124,141,142,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1395],[62,76,124,141,142,1396],[62,76,124,141,142,1396,1410,1411,1412,1413,1422,1423],[62,76,124,141,142,1396,1400],[62,76,124,141,142,1396,1402],[62,76,124,141,142,1396,1404],[62,76,124,141,142,1413,1414,1421],[62,76,124,141,142,1398,1399],[62,76,124,141,142,1420],[62,76,124,141,142,1408],[76,124,135,141,142,174],[76,124,141,142,502,503],[76,124,141,142,502],[76,124,141,142,502,503,504,505],[76,124,141,142,500,506],[76,124,141,142,506],[76,124,141,142,500,501],[76,124,141,142,686],[76,124,141,142,693],[76,124,141,142,725,726],[76,124,141,142,684],[76,124,141,142,751],[76,124,141,142,690,730],[76,124,141,142,685],[76,124,141,142,685,724],[76,124,141,142,685,690],[76,124,141,142,685,714,724],[76,124,141,142,685,689,714,724],[76,124,141,142,685,714],[76,124,141,142,690,706],[76,124,141,142,742],[76,124,141,142,689],[76,124,141,142,684,685,686,687,688,689,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,708,709,710,711,712,713,714,715,716,719,720,721,722,723,724,725,726,727,728,729,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760],[76,124,141,142,692,717],[76,124,141,142,705],[76,124,141,142,692,719],[76,124,141,142,692,722],[76,124,141,142,697],[76,124,141,142,690],[76,124,141,142,703],[76,124,141,142,685,705,706,707,709],[76,124,141,142,711],[76,124,141,142,753],[76,124,141,142,718],[76,124,141,142,739],[76,124,141,142,731,732],[76,124,141,142,731,734],[76,124,141,142,689,690],[76,124,141,142,684,689,708],[76,124,141,142,719],[76,124,141,142,703,714],[76,89,93,124,141,142,167],[76,89,124,141,142,156,167],[76,84,124,141,142],[76,86,89,124,141,142,164,167],[76,124,141,142,144,164],[76,84,124,141,142,174],[76,86,89,124,141,142,144,167],[76,81,82,85,88,124,135,141,142,156,167],[76,89,96,124,141,142],[76,81,87,124,141,142],[76,89,110,111,124,141,142],[76,85,89,124,141,142,159,167,174],[76,110,124,141,142,174],[76,83,84,124,141,142,174],[76,89,124,141,142],[76,83,84,85,86,87,88,89,90,91,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,112,113,114,115,116,124,141,142],[76,89,104,124,141,142],[76,89,96,97,124,141,142],[76,87,89,97,98,124,141,142],[76,88,124,141,142],[76,81,84,89,124,141,142],[76,89,93,97,98,124,141,142],[76,93,124,141,142],[76,87,89,92,124,141,142,167],[76,81,86,89,96,124,141,142],[76,124,141,142,156],[76,84,89,110,124,141,142,172,174],[76,124,141,142,1641],[76,124,141,142,167,1605,1608,1611,1612],[76,124,141,142,156,167,1608],[76,124,141,142,167,1608,1612],[76,124,141,142,1602],[76,124,141,142,1606],[76,124,141,142,167,1604,1605,1608],[76,124,141,142,174,1602],[76,124,141,142,144,167,1604,1608],[76,124,135,141,142,156,167,1599,1600,1601,1603,1607],[76,124,141,142,1608,1617,1625],[76,124,141,142,1600,1606],[76,124,141,142,1608,1635,1636],[76,124,141,142,159,167,174,1600,1603,1608],[76,124,141,142,1608],[76,124,141,142,167,1604,1608],[76,124,141,142,1599],[76,124,141,142,1602,1603,1604,1606,1607,1608,1609,1610,1612,1613,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1630,1631,1632,1633,1634,1636,1637,1638,1639,1640],[76,124,132,141,142,1608,1628,1631],[76,124,141,142,1608,1617,1618,1619],[76,124,141,142,1606,1608,1618,1620],[76,124,141,142,1607],[76,124,141,142,1600,1602,1608],[76,124,141,142,1608,1612,1618,1620],[76,124,141,142,1612],[76,124,141,142,167,1606,1608,1611],[76,124,141,142,1600,1604,1608,1617],[76,124,141,142,1608,1628],[76,124,141,142,1620],[76,124,141,142,1600,1604,1608,1612],[76,124,141,142,159,172,174,1602,1608,1635],[76,124,141,142,494],[76,124,141,142,485,486],[76,124,141,142,482,483,485,487,488,493],[76,124,141,142,483,485],[76,124,141,142,493],[76,124,141,142,485],[76,124,141,142,482,483,485,488,489,490,491,492],[76,124,141,142,482,483,484],[76,124,141,142,496],[76,124,141,142,496,497,498],[76,124,141,142,497,498,508,513,514,516,520],[76,124,141,142,498,514,516,520],[76,124,141,142,496,497,498,508,513,514,516,520],[76,124,141,142,509,512,519],[76,124,141,142,512,513,514,515,516,518],[76,124,141,142,495],[76,124,141,142,496,497,498,508,517,527],[76,124,141,142,496,509,512,513],[76,124,141,142,496,497,498,508,509,512,513,514,516,517],[76,124,141,142,495,507,522,524,526],[76,124,141,142,2258],[76,124,141,142,495,498,508,521],[76,124,141,142,498,508,525],[76,124,141,142,495,508,523],[76,124,141,142,529],[76,124,141,142,529,531,533,535],[76,124,141,142,533,535,1708,2097,2278],[76,124,141,142,509,512,534],[76,124,141,142,512,531,532,533],[76,124,141,142,529,530,539,540],[76,124,141,142,509,512,529,531],[76,124,141,142,509,512,529,531,1708,2097],[76,124,141,142,495,507,538],[76,124,141,142,1708,2097,2266],[76,124,141,142,2267],[76,124,141,142,495,529,530,531,533,535,536,537],[76,124,141,142,569],[76,124,141,142,507,527,528,539,541,555,557,566,568],[76,124,141,142,2276],[76,124,141,142,146,167,1708,2097,2098,2257,2259,2268,2270,2273,2275],[76,124,141,142,2260,2261,2262,2263,2264,2265],[76,124,141,142,499,506],[76,124,141,142,570,2309],[62,76,124,141,142,506,570,2291,2307,2310,2311],[76,124,141,142,2291],[76,124,141,142,542],[76,124,141,142,543],[76,124,141,142,542,545,549,551],[76,124,141,142,543,546,549,551],[76,124,141,142,549,551,1708,2097,2281,2282],[76,124,141,142,509,512,550],[76,124,141,142,512,545,546,547,548,549],[76,124,141,142,542,543,544,555,556],[76,124,141,142,509,512,542,545],[76,124,141,142,509,512,543,546],[76,124,141,142,509,512,542,545,1708,2097],[76,124,141,142,509,512,543,546,1708,2097],[76,124,141,142,495,507,554],[76,124,141,142,2271,2272],[76,124,141,142,495,542,543,544,552,553],[76,124,141,142,2269],[76,124,141,142,558],[76,124,141,142,558,559,561,563],[76,124,141,142,561,563,1708,2097,2284],[76,124,141,142,509,512,562],[76,124,141,142,512,559,560,561],[76,124,141,142,558,566,567],[76,124,141,142,509,512,558,559],[76,124,141,142,509,512,558,559,1708,2097],[76,124,141,142,507,565],[76,124,141,142,2274],[76,124,141,142,558,564]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e29f41b158de217f94cb9676bf9cbd0cd9b5a46e1985141ed36e075c52bf6ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"dc0a7f107690ee5cd8afc8dbf05c4df78085471ce16bdd9881642ec738bc81fe","impliedFormat":1},{"version":"acd8fd5090ac73902278889c38336ff3f48af6ba03aa665eb34a75e7ba1dccc4","impliedFormat":1},{"version":"d6258883868fb2680d2ca96bc8b1352cab69874581493e6d52680c5ffecdb6cc","impliedFormat":1},{"version":"1b61d259de5350f8b1e5db06290d31eaebebc6baafd5f79d314b5af9256d7153","impliedFormat":1},{"version":"f258e3960f324a956fc76a3d3d9e964fff2244ff5859dcc6ce5951e5413ca826","impliedFormat":1},{"version":"643f7232d07bf75e15bd8f658f664d6183a0efaca5eb84b48201c7671a266979","impliedFormat":1},{"version":"0f6666b58e9276ac3a38fdc80993d19208442d6027ab885580d93aec76b4ef00","impliedFormat":1},{"version":"05fd364b8ef02fb1e174fbac8b825bdb1e5a36a016997c8e421f5fab0a6da0a0","impliedFormat":1},{"version":"631eff75b0e35d1b1b31081d55209abc43e16b49426546ab5a9b40bdd40b1f60","impliedFormat":1},{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"808069bba06b6768b62fd22429b53362e7af342da4a236ed2d2e1c89fcca3b4a","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"f9501cc13ce624c72b61f12b3963e84fad210fbdf0ffbc4590e08460a3f04eba","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0fa06ada475b910e2106c98c68b10483dc8811d0c14a8a8dd36efb2672485b29","impliedFormat":1},{"version":"33e5e9aba62c3193d10d1d33ae1fa75c46a1171cf76fef750777377d53b0303f","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"6a0cd27e5dc2cfbe039e731cf879d12b0e2dded06d1b1dedad07f7712de0d7f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"13f5c844119c43e51ce777c509267f14d6aaf31eafb2c2b002ca35584cd13b29","impliedFormat":1},{"version":"e60477649d6ad21542bd2dc7e3d9ff6853d0797ba9f689ba2f6653818999c264","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4c829ab315f57c5442c6667b53769975acbf92003a66aef19bce151987675bd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"b2ade7657e2db96d18315694789eff2ddd3d8aea7215b181f8a0b303277cc579","impliedFormat":1},{"version":"9855e02d837744303391e5623a531734443a5f8e6e8755e018c41d63ad797db2","impliedFormat":1},{"version":"4d631b81fa2f07a0e63a9a143d6a82c25c5f051298651a9b69176ba28930756d","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"41670ee38943d9cbb4924e436f56fc19ee94232bc96108562de1a734af20dc2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"c906fb15bd2aabc9ed1e3f44eb6a8661199d6c320b3aa196b826121552cb3695","impliedFormat":1},{"version":"22295e8103f1d6d8ea4b5d6211e43421fe4564e34d0dd8e09e520e452d89e659","impliedFormat":1},{"version":"58647d85d0f722a1ce9de50955df60a7489f0593bf1a7015521efe901c06d770","impliedFormat":1},{"version":"6b4e081d55ac24fc8a4631d5dd77fe249fa25900abd7d046abb87d90e3b45645","impliedFormat":1},{"version":"a10f0e1854f3316d7ee437b79649e5a6ae3ae14ffe6322b02d4987071a95362e","impliedFormat":1},{"version":"e208f73ef6a980104304b0d2ca5f6bf1b85de6009d2c7e404028b875020fa8f2","impliedFormat":1},{"version":"d163b6bc2372b4f07260747cbc6c0a6405ab3fbcea3852305e98ac43ca59f5bc","impliedFormat":1},{"version":"e6fa9ad47c5f71ff733744a029d1dc472c618de53804eae08ffc243b936f87ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6f137d651076822d4fe884287e68fd61785a0d3d1fdb250a5059b691fa897db","impliedFormat":1},{"version":"24826ed94a78d5c64bd857570fdbd96229ad41b5cb654c08d75a9845e3ab7dde","impliedFormat":1},{"version":"8b479a130ccb62e98f11f136d3ac80f2984fdc07616516d29881f3061f2dd472","impliedFormat":1},{"version":"928af3d90454bf656a52a48679f199f64c1435247d6189d1caf4c68f2eaf921f","affectsGlobalScope":true,"impliedFormat":1},{"version":"bceb58df66ab8fb00170df20cd813978c5ab84be1d285710c4eb005d8e9d8efb","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","impliedFormat":1},{"version":"814118df420c4e38fe5ae1b9a3bafb6e9c2aa40838e528cde908381867be6466","impliedFormat":1},{"version":"a3fc63c0d7b031693f665f5494412ba4b551fe644ededccc0ab5922401079c95","impliedFormat":1},{"version":"80523c00b8544a2000ae0143e4a90a00b47f99823eb7926c1e03c494216fc363","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"746911b62b329587939560deb5c036aca48aece03147b021fa680223255d5183","affectsGlobalScope":true,"impliedFormat":1},{"version":"18fd40412d102c5564136f29735e5d1c3b455b8a37f920da79561f1fde068208","impliedFormat":1},{"version":"c8d3e5a18ba35629954e48c4cc8f11dc88224650067a172685c736b27a34a4dc","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"2b55d426ff2b9087485e52ac4bc7cfafe1dc420fc76dad926cd46526567c501a","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"5b7aa3c4c1a5d81b411e8cb302b45507fea9358d3569196b27eb1a27ae3a90ef","affectsGlobalScope":true,"impliedFormat":1},{"version":"5987a903da92c7462e0b35704ce7da94d7fdc4b89a984871c0e2b87a8aae9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea08a0345023ade2b47fbff5a76d0d0ed8bff10bc9d22b83f40858a8e941501c","impliedFormat":1},{"version":"47613031a5a31510831304405af561b0ffaedb734437c595256bb61a90f9311b","impliedFormat":1},{"version":"ae062ce7d9510060c5d7e7952ae379224fb3f8f2dd74e88959878af2057c143b","impliedFormat":1},{"version":"8a1a0d0a4a06a8d278947fcb66bf684f117bf147f89b06e50662d79a53be3e9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"358765d5ea8afd285d4fd1532e78b88273f18cb3f87403a9b16fef61ac9fdcfe","impliedFormat":1},{"version":"9f55299850d4f0921e79b6bf344b47c420ce0f507b9dcf593e532b09ea7eeea1","impliedFormat":1},{"version":"2beff543f6e9a9701df88daeee3cdd70a34b4a1c11cb4c734472195a5cb2af54","impliedFormat":1},{"version":"2e07abf27aa06353d46f4448c0bbac73431f6065eef7113128a5cd804d0c384d","impliedFormat":1},{"version":"be1cc4d94ea60cbe567bc29ed479d42587bf1e6cba490f123d329976b0fe4ee5","impliedFormat":1},{"version":"42bc0e1a903408137c3df2b06dfd7e402cdab5bbfa5fcfb871b22ebfdb30bd0b","impliedFormat":1},{"version":"9894dafe342b976d251aac58e616ac6df8db91fb9d98934ff9dd103e9e82578f","impliedFormat":1},{"version":"413df52d4ea14472c2fa5bee62f7a40abd1eb49be0b9722ee01ee4e52e63beb2","impliedFormat":1},{"version":"db6d2d9daad8a6d83f281af12ce4355a20b9a3e71b82b9f57cddcca0a8964a96","impliedFormat":1},{"version":"829b9e6028b29e6a8b1c01ddb713efe59da04d857089298fa79acbdb3cfcfdef","impliedFormat":1},{"version":"24f8562308dd8ba6013120557fa7b44950b619610b2c6cb8784c79f11e3c4f90","impliedFormat":1},{"version":"5f90b8c733a1bda63e42160b15a2301051e83a6f9d5332a59d16eb12f463270d","impliedFormat":1},{"version":"a86f82d646a739041d6702101afa82dcb935c416dd93cbca7fd754fd0282ce1f","impliedFormat":1},{"version":"ad0d1d75d129b1c80f911be438d6b61bfa8703930a8ff2be2f0e1f8a91841c64","impliedFormat":1},{"version":"ce75b1aebb33d510ff28af960a9221410a3eaf7f18fc5f21f9404075fba77256","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"496bbf339f3838c41f164238543e9fe5f1f10659cb30b68903851618464b98ba","impliedFormat":1},{"version":"5178eb4415a172c287c711dc60a619e110c3fd0b7de01ed0627e51a5336aa09c","impliedFormat":1},{"version":"ca6e5264278b53345bc1ce95f42fb0a8b733a09e3d6479c6ccfca55cdc45038c","impliedFormat":1},{"version":"9e2739b32f741859263fdba0244c194ca8e96da49b430377930b8f721d77c000","impliedFormat":1},{"version":"fb1d8e814a3eeb5101ca13515e0548e112bd1ff3fb358ece535b93e94adf5a3a","impliedFormat":1},{"version":"ffa495b17a5ef1d0399586b590bd281056cee6ce3583e34f39926f8dcc6ecdb5","impliedFormat":1},{"version":"98b18458acb46072947aabeeeab1e410f047e0cacc972943059ca5500b0a5e95","impliedFormat":1},{"version":"361e2b13c6765d7f85bb7600b48fde782b90c7c41105b7dab1f6e7871071ba20","impliedFormat":1},{"version":"c86fe861cf1b4c46a0fb7d74dffe596cf679a2e5e8b1456881313170f092e3fa","impliedFormat":1},{"version":"b6db56e4903e9c32e533b78ac85522de734b3d3a8541bf24d256058d464bf04b","impliedFormat":1},{"version":"24daa0366f837d22c94a5c0bad5bf1fd0f6b29e1fae92dc47c3072c3fdb2fbd5","impliedFormat":1},{"version":"570bb5a00836ffad3e4127f6adf581bfc4535737d8ff763a4d6f4cc877e60d98","impliedFormat":1},{"version":"889c00f3d32091841268f0b994beba4dceaa5df7573be12c2c829d7c5fbc232c","impliedFormat":1},{"version":"65f43099ded6073336e697512d9b80f2d4fec3182b7b2316abf712e84104db00","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"acf5a2ac47b59ca07afa9abbd2b31d001bf7448b041927befae2ea5b1951d9f9","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"d71291eff1e19d8762a908ba947e891af44749f3a2cbc5bd2ec4b72f72ea795f","impliedFormat":1},{"version":"c0480e03db4b816dff2682b347c95f2177699525c54e7e6f6aa8ded890b76be7","impliedFormat":1},{"version":"27ab780875bcbb65e09da7496f2ca36288b0c541abaa75c311450a077d54ec15","impliedFormat":1},{"version":"b620391fe8060cf9bedc176a4d01366e6574d7a71e0ac0ab344a4e76576fcbb8","impliedFormat":1},{"version":"380647d8f3b7f852cca6d154a376dbf8ac620a2f12b936594504a8a852e71d2f","impliedFormat":1},{"version":"208c9af9429dd3c76f5927b971263174aaa4bc7621ddec63f163640cbd3c473c","impliedFormat":1},{"version":"6459054aabb306821a043e02b89d54da508e3a6966601a41e71c166e4ea1474f","impliedFormat":1},{"version":"a23185bc5ef590c287c28a91baf280367b50ae4ea40327366ad01f6f4a8edbc5","impliedFormat":1},{"version":"bb37588926aba35c9283fe8d46ebf4e79ffe976343105f5c6d45f282793352b2","impliedFormat":1},{"version":"002eae065e6960458bda3cf695e578b0d1e2785523476f8a9170b103c709cd4f","impliedFormat":1},{"version":"c83bb0c9c5645a46c68356c2f73fdc9de339ce77f7f45a954f560c7e0b8d5ebb","impliedFormat":1},{"version":"05c97cddbaf99978f83d96de2d8af86aded9332592f08ce4a284d72d0952c391","impliedFormat":1},{"version":"72179f9dd22a86deaad4cc3490eb0fe69ee084d503b686985965654013f1391b","impliedFormat":1},{"version":"2e6114a7dd6feeef85b2c80120fdbfb59a5529c0dcc5bfa8447b6996c97a69f5","impliedFormat":1},{"version":"7b6ff760c8a240b40dab6e4419b989f06a5b782f4710d2967e67c695ef3e93c4","impliedFormat":1},{"version":"c8f004e6036aa1c764ad4ec543cf89a5c1893a9535c80ef3f2b653e370de45e6","impliedFormat":1},{"version":"dd80b1e600d00f5c6a6ba23f455b84a7db121219e68f89f10552c54ba46e4dc9","impliedFormat":1},{"version":"b064c36f35de7387d71c599bfcf28875849a1dbc733e82bd26cae3d1cd060521","impliedFormat":1},{"version":"6a148329edecbda07c21098639ef4254ef7869fb25a69f58e5d6a8b7b69d4236","impliedFormat":1},{"version":"8de9fe97fa9e00ec00666fa77ab6e91b35d25af8ca75dabcb01e14ad3299b150","impliedFormat":1},{"version":"f63ab283a1c8f5c79fabe7ca4ef85f9633339c4f0e822fce6a767f9d59282af2","impliedFormat":1},{"version":"dba114fb6a32b355a9cfc26ca2276834d72fe0e94cd2c3494005547025015369","impliedFormat":1},{"version":"a54c996c8870ef1728a2c1fa9b8eaec0bf4a8001cd2583c02dd5869289465b10","impliedFormat":1},{"version":"3e7efde639c6a6c3edb9847b3f61e308bf7a69685b92f665048c45132f51c218","impliedFormat":1},{"version":"df45ca1176e6ac211eae7ddf51336dc075c5314bc5c253651bae639defd5eec5","impliedFormat":1},{"version":"3754982006a3b32c502cff0867ca83584f7a43b1035989ca73603f400de13c96","impliedFormat":1},{"version":"a30ae9bb8a8fa7b90f24b8a0496702063ae4fe75deb27da731ed4a03b2eb6631","impliedFormat":1},{"version":"f974e4a06953682a2c15d5bd5114c0284d5abf8bc0fe4da25cb9159427b70072","impliedFormat":1},{"version":"50256e9c31318487f3752b7ac12ff365c8949953e04568009c8705db802776fb","impliedFormat":1},{"version":"7d73b24e7bf31dfb8a931ca6c4245f6bb0814dfae17e4b60c9e194a631fe5f7b","impliedFormat":1},{"version":"413586add0cfe7369b64979d4ec2ed56c3f771c0667fbde1bf1f10063ede0b08","impliedFormat":1},{"version":"06472528e998d152375ad3bd8ebcb69ff4694fd8d2effaf60a9d9f25a37a097a","impliedFormat":1},{"version":"50b5bc34ce6b12eccb76214b51aadfa56572aa6cc79c2b9455cdbb3d6c76af1d","impliedFormat":1},{"version":"b7e16ef7f646a50991119b205794ebfd3a4d8f8e0f314981ebbe991639023d0e","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"a401617604fa1f6ce437b81689563dfdc377069e4c58465dbd8d16069aede0a5","impliedFormat":1},{"version":"e9dd71cf12123419c60dab867d44fbee5c358169f99529121eaef277f5c83531","impliedFormat":1},{"version":"5b6a189ba3a0befa1f5d9cb028eb9eec2af2089c32f04ff50e2411f63d70f25d","impliedFormat":1},{"version":"d6e73f8010935b7b4c7487b6fb13ea197cc610f0965b759bec03a561ccf8423a","impliedFormat":1},{"version":"174f3864e398f3f33f9a446a4f403d55a892aa55328cf6686135dfaf9e171657","impliedFormat":1},{"version":"824c76aec8d8c7e65769688cbee102238c0ef421ed6686f41b2a7d8e7e78a931","impliedFormat":1},{"version":"75b868be3463d5a8cfc0d9396f0a3d973b8c297401d00bfb008a42ab16643f13","impliedFormat":1},{"version":"15a234e5031b19c48a69ccc1607522d6e4b50f57d308ecb7fe863d44cd9f9eb3","impliedFormat":1},{"version":"d682336018141807fb602709e2d95a192828fcb8d5ba06dda3833a8ea98f69e3","impliedFormat":1},{"version":"6124e973eab8c52cabf3c07575204efc1784aca6b0a30c79eb85fe240a857efa","impliedFormat":1},{"version":"0d891735a21edc75df51f3eb995e18149e119d1ce22fd40db2b260c5960b914e","impliedFormat":1},{"version":"3b414b99a73171e1c4b7b7714e26b87d6c5cb03d200352da5342ab4088a54c85","impliedFormat":1},{"version":"4fbd3116e00ed3a6410499924b6403cc9367fdca303e34838129b328058ede40","impliedFormat":1},{"version":"b01bd582a6e41457bc56e6f0f9de4cb17f33f5f3843a7cf8210ac9c18472fb0f","impliedFormat":1},{"version":"0a437ae178f999b46b6153d79095b60c42c996bc0458c04955f1c996dc68b971","impliedFormat":1},{"version":"74b2a5e5197bd0f2e0077a1ea7c07455bbea67b87b0869d9786d55104006784f","impliedFormat":1},{"version":"4a7baeb6325920044f66c0f8e5e6f1f52e06e6d87588d837bdf44feb6f35c664","impliedFormat":1},{"version":"6dcf60530c25194a9ee0962230e874ff29d34c59605d8e069a49928759a17e0a","impliedFormat":1},{"version":"7274fbffbd7c9589d8d0ffba68157237afd5cecff1e99881ea3399127e60572f","impliedFormat":1},{"version":"1a42d2ec31a1fe62fdc51591768695ed4a2dc64c01be113e7ff22890bebb5e3f","impliedFormat":1},{"version":"1a82deef4c1d39f6882f28d275cad4c01f907b9b39be9cbc472fcf2cf051e05b","impliedFormat":1},{"version":"c5426dbfc1cf90532f66965a7aa8c1136a78d4d0f96d8180ecbfc11d7722f1a5","impliedFormat":1},{"version":"65a15fc47900787c0bd18b603afb98d33ede930bed1798fc984d5ebb78b26cf9","impliedFormat":1},{"version":"9d202701f6e0744adb6314d03d2eb8fc994798fc83d91b691b75b07626a69801","impliedFormat":1},{"version":"de9d2df7663e64e3a91bf495f315a7577e23ba088f2949d5ce9ec96f44fba37d","impliedFormat":1},{"version":"c7af78a2ea7cb1cd009cfb5bdb48cd0b03dad3b54f6da7aab615c2e9e9d570c5","impliedFormat":1},{"version":"1ee45496b5f8bdee6f7abc233355898e5bf9bd51255db65f5ff7ede617ca0027","impliedFormat":1},{"version":"0c7c947ff881c4274c0800deaa0086971e0bfe51f89a33bd3048eaa3792d4876","affectsGlobalScope":true,"impliedFormat":1},{"version":"db01d18853469bcb5601b9fc9826931cc84cc1a1944b33cad76fd6f1e3d8c544","affectsGlobalScope":true,"impliedFormat":1},{"version":"a8f8e6ab2fa07b45251f403548b78eaf2022f3c2254df3dc186cb2671fe4996d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa6c12a7c0f6b84d512f200690bfc74819e99efae69e4c95c4cd30f6884c526e","impliedFormat":1},{"version":"f1c32f9ce9c497da4dc215c3bc84b722ea02497d35f9134db3bb40a8d918b92b","impliedFormat":1},{"version":"b73c319af2cc3ef8f6421308a250f328836531ea3761823b4cabbd133047aefa","affectsGlobalScope":true,"impliedFormat":1},{"version":"e433b0337b8106909e7953015e8fa3f2d30797cea27141d1c5b135365bb975a6","impliedFormat":1},{"version":"15b36126e0089bfef173ab61329e8286ce74af5e809d8a72edcafd0cc049057f","impliedFormat":1},{"version":"ddff7fc6edbdc5163a09e22bf8df7bef75f75369ebd7ecea95ba55c4386e2441","impliedFormat":1},{"version":"106c6025f1d99fd468fd8bf6e5bda724e11e5905a4076c5d29790b6c3745e50c","impliedFormat":1},{"version":"a57b1802794433adec9ff3fed12aa79d671faed86c49b09e02e1ac41b4f1d33a","impliedFormat":1},{"version":"ad10d4f0517599cdeca7755b930f148804e3e0e5b5a3847adce0f1f71bbccd74","impliedFormat":1},{"version":"1042064ece5bb47d6aba91648fbe0635c17c600ebdf567588b4ca715602f0a9d","impliedFormat":1},{"version":"c49469a5349b3cc1965710b5b0f98ed6c028686aa8450bcb3796728873eb923e","impliedFormat":1},{"version":"4a889f2c763edb4d55cb624257272ac10d04a1cad2ed2948b10ed4a7fda2a428","impliedFormat":1},{"version":"7bb79aa2fead87d9d56294ef71e056487e848d7b550c9a367523ee5416c44cfa","impliedFormat":1},{"version":"72d63643a657c02d3e51cd99a08b47c9b020a565c55f246907050d3c8a5e77fb","impliedFormat":1},{"version":"1d415445ea58f8033ba199703e55ff7483c52ac6742075b803bd3e7bbe9f5d61","impliedFormat":1},{"version":"d6406c629bb3efc31aedb2de809bef471e475c86c7e67f3ef9b676b5d7e0d6b2","impliedFormat":1},{"version":"27ff4196654e6373c9af16b6165120e2dd2169f9ad6abb5c935af5abd8c7938c","impliedFormat":1},{"version":"71d8ba39a9e024d9e4bb922464d18542ed8d2c25ee78efa7890c27213cc6e5d3","impliedFormat":1},{"version":"8c030e515014c10a2b98f9f48408e3ba18023dfd3f56e3312c6c2f3ae1f55a16","impliedFormat":1},{"version":"dafc31e9e8751f437122eb8582b93d477e002839864410ff782504a12f2a550c","impliedFormat":1},{"version":"754498c5208ce3c5134f6eabd49b25cf5e1a042373515718953581636491f3c3","impliedFormat":1},{"version":"9c82171d836c47486074e4ca8e059735bf97b205e70b196535b5efd40cbe1bc5","impliedFormat":1},{"version":"f56bdc6884648806d34bc66d31cdb787c4718d04105ce2cd88535db214631f82","impliedFormat":1},{"version":"633d58a237f4bb25ec7d565e4ffa32cecdcee8660ac12189c4351c52557cee9e","impliedFormat":1},{"version":"2e4f37ffe8862b14d8e24ae8763daaa8340c0df0b859d9a9733def0eee7562d9","impliedFormat":1},{"version":"13283350547389802aa35d9f2188effaeac805499169a06ef5cd77ce2a0bd63f","impliedFormat":1},{"version":"ce791f6ea807560f08065d1af6014581eeb54a05abd73294777a281b6dfd73c2","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"49f95e989b4632c6c2a578cc0078ee19a5831832d79cc59abecf5160ea71abad","impliedFormat":1},{"version":"9666533332f26e8995e4d6fe472bdeec9f15d405693723e6497bf94120c566c8","impliedFormat":1},{"version":"ce0df82a9ae6f914ba08409d4d883983cc08e6d59eb2df02d8e4d68309e7848b","impliedFormat":1},{"version":"796273b2edc72e78a04e86d7c58ae94d370ab93a0ddf40b1aa85a37a1c29ecd7","impliedFormat":1},{"version":"5df15a69187d737d6d8d066e189ae4f97e41f4d53712a46b2710ff9f8563ec9f","impliedFormat":1},{"version":"e17cd049a1448de4944800399daa4a64c5db8657cc9be7ef46be66e2a2cd0e7c","impliedFormat":1},{"version":"43fa6ea8714e18adc312b30450b13562949ba2f205a1972a459180fa54471018","impliedFormat":1},{"version":"6e89c2c177347d90916bad67714d0fb473f7e37fb3ce912f4ed521fe2892cd0d","impliedFormat":1},{"version":"43ba4f2fa8c698f5c304d21a3ef596741e8e85a810b7c1f9b692653791d8d97a","impliedFormat":1},{"version":"4d4927cbee21750904af7acf940c5e3c491b4d5ebc676530211e389dd375607a","impliedFormat":1},{"version":"72105519d0390262cf0abe84cf41c926ade0ff475d35eb21307b2f94de985778","impliedFormat":1},{"version":"8a97e578a9bc40eb4f1b0ca78f476f2e9154ecbbfd5567ee72943bab37fc156a","impliedFormat":1},{"version":"c857e0aae3f5f444abd791ec81206020fbcc1223e187316677e026d1c1d6fe08","impliedFormat":1},{"version":"ccf6dd45b708fb74ba9ed0f2478d4eb9195c9dfef0ff83a6092fa3cf2ff53b4f","impliedFormat":1},{"version":"2d7db1d73456e8c5075387d4240c29a2a900847f9c1bff106a2e490da8fbd457","impliedFormat":1},{"version":"2b15c805f48e4e970f8ec0b1915f22d13ca6212375e8987663e2ef5f0205e832","impliedFormat":1},{"version":"f22d05663d873ee7a600faf78abb67f3f719d32266803440cf11d5db7ac0cab2","impliedFormat":1},{"version":"d93c544ad20197b3976b0716c6d5cd5994e71165985d31dcab6e1f77feb4b8f2","impliedFormat":1},{"version":"35069c2c417bd7443ae7c7cafd1de02f665bf015479fec998985ffbbf500628c","impliedFormat":1},{"version":"a8b1c79a833ee148251e88a2553d02ce1641d71d2921cce28e79678f3d8b96aa","impliedFormat":1},{"version":"126d4f950d2bba0bd45b3a86c76554d4126c16339e257e6d2fabf8b6bf1ce00c","impliedFormat":1},{"version":"7e0b7f91c5ab6e33f511efc640d36e6f933510b11be24f98836a20a2dc914c2d","impliedFormat":1},{"version":"045b752f44bf9bbdcaffd882424ab0e15cb8d11fa94e1448942e338c8ef19fba","impliedFormat":1},{"version":"2894c56cad581928bb37607810af011764a2f511f575d28c9f4af0f2ef02d1ab","impliedFormat":1},{"version":"0a72186f94215d020cb386f7dca81d7495ab6c17066eb07d0f44a5bf33c1b21a","impliedFormat":1},{"version":"2d3cc2211f352f46ea6b7cf2c751c141ffcdf514d6e7ae7ee20b7b6742da313f","impliedFormat":1},{"version":"c75445151ff8b77d9923191efed7203985b1a9e09eccf4b054e7be864e27923d","impliedFormat":1},{"version":"0aedb02516baf3e66b2c1db9fef50666d6ed257edac0f866ea32f1aa05aa474f","impliedFormat":1},{"version":"fa8a8fbf91ee2a4779496225f0312aac6635b0f21aa09cdafa4283fe32d519c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"0e8aef93d79b000deb6ec336b5645c87de167168e184e84521886f9ecc69a4b5","impliedFormat":1},{"version":"56ccb49443bfb72e5952f7012f0de1a8679f9f75fc93a5c1ac0bafb28725fc5f","impliedFormat":1},{"version":"20fa37b636fdcc1746ea0738f733d0aed17890d1cd7cb1b2f37010222c23f13e","impliedFormat":1},{"version":"d90b9f1520366d713a73bd30c5a9eb0040d0fb6076aff370796bc776fd705943","impliedFormat":1},{"version":"bc03c3c352f689e38c0ddd50c39b1e65d59273991bfc8858a9e3c0ebb79c023b","impliedFormat":1},{"version":"19df3488557c2fc9b4d8f0bac0fd20fb59aa19dec67c81f93813951a81a867f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"b25350193e103ae90423c5418ddb0ad1168dc9c393c9295ef34980b990030617","affectsGlobalScope":true,"impliedFormat":1},{"version":"bef86adb77316505c6b471da1d9b8c9e428867c2566270e8894d4d773a1c4dc2","impliedFormat":1},{"version":"de7052bfee2981443498239a90c04ea5cc07065d5b9bb61b12cb6c84313ad4ef","impliedFormat":1},{"version":"a3e7d932dc9c09daa99141a8e4800fc6c58c625af0d4bbb017773dc36da75426","impliedFormat":1},{"version":"43e96a3d5d1411ab40ba2f61d6a3192e58177bcf3b133a80ad2a16591611726d","impliedFormat":1},{"version":"4a2edd238d9104eac35b60d727f1123de5062f452b70ed8e0366cb36387dfdfd","impliedFormat":1},{"version":"ca921bf56756cb6fe957f6af693a35251b134fb932dc13f3dfff0bb7106f80b4","impliedFormat":1},{"version":"fee92c97f1aa59eb7098a0cc34ff4df7e6b11bae71526aca84359a2575f313d8","impliedFormat":1},{"version":"0bd0297484aacea217d0b76e55452862da3c5d9e33b24430e0719d1161657225","impliedFormat":1},{"version":"2ab6d334bcbf2aff3acfc4fd8c73ecd82b981d3c3aa47b3f3b89281772286904","impliedFormat":1},{"version":"d07cbc787a997d83f7bde3877fec5fb5b12ce8c1b7047eb792996ed9726b4dde","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"4805f6161c2c8cefb8d3b8bd96a080c0fe8dbc9315f6ad2e53238f9a79e528a6","impliedFormat":1},{"version":"b83cb14474fa60c5f3ec660146b97d122f0735627f80d82dd03e8caa39b4388c","impliedFormat":1},{"version":"f374cb24e93e7798c4d9e83ff872fa52d2cdb36306392b840a6ddf46cb925cb6","impliedFormat":1},{"version":"49179c6a23701c642bd99abe30d996919748014848b738d8e85181fc159685ff","impliedFormat":1},{"version":"b73cbf0a72c8800cf8f96a9acfe94f3ad32ca71342a8908b8ae484d61113f647","impliedFormat":1},{"version":"bae6dd176832f6423966647382c0d7ba9e63f8c167522f09a982f086cd4e8b23","impliedFormat":1},{"version":"20865ac316b8893c1a0cc383ccfc1801443fbcc2a7255be166cf90d03fac88c9","impliedFormat":1},{"version":"c9958eb32126a3843deedda8c22fb97024aa5d6dd588b90af2d7f2bfac540f23","impliedFormat":1},{"version":"461d0ad8ae5f2ff981778af912ba71b37a8426a33301daa00f21c6ccb27f8156","impliedFormat":1},{"version":"e927c2c13c4eaf0a7f17e6022eee8519eb29ef42c4c13a31e81a611ab8c95577","impliedFormat":1},{"version":"fcafff163ca5e66d3b87126e756e1b6dfa8c526aa9cd2a2b0a9da837d81bbd72","impliedFormat":1},{"version":"70246ad95ad8a22bdfe806cb5d383a26c0c6e58e7207ab9c431f1cb175aca657","impliedFormat":1},{"version":"f00f3aa5d64ff46e600648b55a79dcd1333458f7a10da2ed594d9f0a44b76d0b","impliedFormat":1},{"version":"772d8d5eb158b6c92412c03228bd9902ccb1457d7a705b8129814a5d1a6308fc","impliedFormat":1},{"version":"45490817629431853543adcb91c0673c25af52a456479588b6486daba34f68bb","impliedFormat":1},{"version":"802e797bcab5663b2c9f63f51bdf67eff7c41bc64c0fd65e6da3e7941359e2f7","impliedFormat":1},{"version":"8b4327413e5af38cd8cb97c59f48c3c866015d5d642f28518e3a891c469f240e","impliedFormat":1},{"version":"8514c62ce38e58457d967e9e73f128eedc1378115f712b9eef7127f7c88f82ae","impliedFormat":1},{"version":"f1289e05358c546a5b664fbb35a27738954ec2cc6eb4137350353099d154fc62","impliedFormat":1},{"version":"4b20fcf10a5413680e39f5666464859fc56b1003e7dfe2405ced82371ebd49b6","impliedFormat":1},{"version":"1d17ba45cfbe77a9c7e0df92f7d95f3eefd49ee23d1104d0548b215be56945ad","impliedFormat":1},{"version":"f7d628893c9fa52ba3ab01bcb5e79191636c4331ee5667ecc6373cbccff8ae12","impliedFormat":1},{"version":"1d879125d1ec570bf04bc1f362fdbe0cb538315c7ac4bcfcdf0c1e9670846aa6","impliedFormat":1},{"version":"a1ee88010a64e8647d07dba58ec43e6e05851b9ec7a62e4ca2b9c33be5abb2c8","impliedFormat":1},{"version":"46273e8c29816125d0d0b56ce9a849cc77f60f9a5ba627447501d214466f0ff3","impliedFormat":1},{"version":"d663134457d8d669ae0df34eabd57028bddc04fc444c4bc04bc5215afc91e1f4","impliedFormat":1},{"version":"e91f7b1344577a02f051b9b471f33044fef8334a76dc9e1de003d17595a5219b","impliedFormat":1},{"version":"3af3584f79c57853028ef9421ec172539e1fe01853296dc05a9d615ade4ffaf6","impliedFormat":1},{"version":"f82579d87701d639ff4e3930a9b24f4ee13ca74221a9a3a792feb47f01881a9c","impliedFormat":1},{"version":"d7e5d5245a8ba34a274717d085174b2c9827722778129b0081fefd341cca8f55","impliedFormat":1},{"version":"d9d32f94056181c31f553b32ce41d0ef75004912e27450738d57efcd2409c324","impliedFormat":1},{"version":"752513f35f6cff294ffe02d6027c41373adf7bfa35e593dbfd53d95c203635ee","impliedFormat":1},{"version":"6c800b281b9e89e69165fd11536195488de3ff53004e55905e6c0059a2d8591e","impliedFormat":1},{"version":"7d4254b4c6c67a29d5e7f65e67d72540480ac2cfb041ca484847f5ae70480b62","impliedFormat":1},{"version":"1a7e2ea171726446850ec72f4d1525d547ff7e86724cc9e7eec509725752a758","impliedFormat":1},{"version":"8c901126d73f09ecdea4785e9a187d1ac4e793e07da308009db04a7283ec2f37","impliedFormat":1},{"version":"db97922b767bd2675fdfa71e08b49c38b7d2c847a1cc4a7274cb77be23b026f1","impliedFormat":1},{"version":"aab290b8e4b7c399f2c09b957666fc95335eb4522b2dd9ead1bf0cb64da6d6ee","impliedFormat":1},{"version":"94fe3281392e1015b22f39535878610b4fa6f1388dc8d78746be3bc4e4bb8950","impliedFormat":1},{"version":"2652448ac55a2010a1f71dd141f828b682298d39728f9871e1cdf8696ef443fd","impliedFormat":1},{"version":"06c25ddfc2242bd06c19f66c9eae4c46d937349a267810f89783680a1d7b5259","impliedFormat":1},{"version":"120599fd965257b1f4d0ff794bc696162832d9d8467224f4665f713a3119078b","impliedFormat":1},{"version":"5433f33b0a20300cca35d2f229a7fc20b0e8477c44be2affeb21cb464af60c76","impliedFormat":1},{"version":"db036c56f79186da50af66511d37d9fe77fa6793381927292d17f81f787bb195","impliedFormat":1},{"version":"bd4131091b773973ca5d2326c60b789ab1f5e02d8843b3587effe6e1ea7c9d86","impliedFormat":1},{"version":"c7f6485931085bf010fbaf46880a9b9ec1a285ad9dc8c695a9e936f5a48f34b4","impliedFormat":1},{"version":"14f6b927888a1112d662877a5966b05ac1bf7ed25d6c84386db4c23c95a5363b","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"0427df5c06fafc5fe126d14b9becd24160a288deff40e838bfbd92a35f8d0d00","impliedFormat":1},{"version":"90c54a02432d04e4246c87736e53a6a83084357acfeeba7a489c5422b22f5c7a","impliedFormat":1},{"version":"49c346823ba6d4b12278c12c977fb3a31c06b9ca719015978cb145eb86da1c61","impliedFormat":1},{"version":"bfac6e50eaa7e73bb66b7e052c38fdc8ccfc8dbde2777648642af33cf349f7f1","impliedFormat":1},{"version":"92f7c1a4da7fbfd67a2228d1687d5c2e1faa0ba865a94d3550a3941d7527a45d","impliedFormat":1},{"version":"f53b120213a9289d9a26f5af90c4c686dd71d91487a0aa5451a38366c70dc64b","impliedFormat":1},{"version":"83fe880c090afe485a5c02262c0b7cdd76a299a50c48d9bde02be8e908fb4ae6","impliedFormat":1},{"version":"0a372c2d12a259da78e21b25974d2878502f14d89c6d16b97bd9c5017ab1bc12","impliedFormat":1},{"version":"57d67b72e06059adc5e9454de26bbfe567d412b962a501d263c75c2db430f40e","impliedFormat":1},{"version":"6511e4503cf74c469c60aafd6589e4d14d5eb0a25f9bf043dcbecdf65f261972","impliedFormat":1},{"version":"ec1ca97598eda26b7a5e6c8053623acbd88e43be7c4d29c77ccd57abc4c43999","impliedFormat":1},{"version":"6e2261cd9836b2c25eecb13940d92c024ebed7f8efe23c4b084145cd3a13b8a6","impliedFormat":1},{"version":"a67b87d0281c97dfc1197ef28dfe397fc2c865ccd41f7e32b53f647184cc7307","impliedFormat":1},{"version":"771ffb773f1ddd562492a6b9aaca648192ac3f056f0e1d997678ff97dbb6bf9b","impliedFormat":1},{"version":"232f70c0cf2b432f3a6e56a8dc3417103eb162292a9fd376d51a3a9ea5fbbf6f","impliedFormat":1},{"version":"a47e6d954d22dd9ebb802e7e431b560ed7c581e79fb885e44dc92ed4f60d4c07","impliedFormat":1},{"version":"f019e57d2491c159d47a107fd90219a1734bdd2e25cd8d1db3c8fae5c6b414c4","impliedFormat":1},{"version":"8a0e762ceb20c7e72504feef83d709468a70af4abccb304f32d6b9bac1129b2c","impliedFormat":1},{"version":"d1c9bf292a54312888a77bb19dba5e2503ad803f5393beafd45d78d2f4fe9b48","impliedFormat":1},{"version":"9252d498a77517aab5d8d4b5eb9d71e4b225bbc7123df9713e08181de63180f6","impliedFormat":1},{"version":"cb8d8ef7b9ce8ed3e6f1c814fcbf3f90dab0cb8863079236784fc350746e27c4","impliedFormat":1},{"version":"35e6379c3f7cb27b111ad4c1aa69538fd8e788ab737b8ff7596a1b40e96f4f90","impliedFormat":1},{"version":"1fffe726740f9787f15b532e1dc870af3cd964dbe29e191e76121aa3dd8693f2","impliedFormat":1},{"version":"3be035da7bee86b4c3abf392e0edaa44fc6e45092995eefe36b39118c8a84068","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f828825d077c2fa0ea606649faeb122749273a353daab23924fe674e98ba44c","impliedFormat":1},{"version":"2896c2e673a5d3bd9b4246811f79486a073cbb03950c3d252fba10003c57411a","impliedFormat":1},{"version":"616775f16134fa9d01fc677ad3f76e68c051a056c22ab552c64cc281a9686790","impliedFormat":1},{"version":"65c24a8baa2cca1de069a0ba9fba82a173690f52d7e2d0f1f7542d59d5eb4db0","impliedFormat":1},{"version":"f9fe6af238339a0e5f7563acee3178f51db37f32a2e7c09f85273098cee7ec49","impliedFormat":1},{"version":"407a06ba04eede4074eec470ecba2784cbb3bf4e7de56833b097dd90a2aa0651","impliedFormat":1},{"version":"77e71242e71ebf8528c5802993697878f0533db8f2299b4d36aa015bae08a79c","impliedFormat":1},{"version":"98a787be42bd92f8c2a37d7df5f13e5992da0d967fab794adbb7ee18370f9849","impliedFormat":1},{"version":"5c96bad5f78466785cdad664c056e9e2802d5482ca5f862ed19ba34ffbb7b3a4","impliedFormat":1},{"version":"81d8603ac527e75cfec72bb9391228b58f161c2b33514a9d814c7f3ebd3ef466","impliedFormat":1},{"version":"5f3dc10ae646f375776b4e028d2bed039a93eebbba105694d8b910feebbe8b9c","impliedFormat":1},{"version":"bb0cd7862b72f5eba39909c9889d566e198fcaddf7207c16737d0c2246112678","impliedFormat":1},{"version":"4545c1a1ceca170d5d83452dd7c4994644c35cf676a671412601689d9a62da35","impliedFormat":1},{"version":"320f4091e33548b554d2214ce5fc31c96631b513dffa806e2e3a60766c8c49d9","impliedFormat":1},{"version":"a2d648d333cf67b9aeac5d81a1a379d563a8ffa91ddd61c6179f68de724260ff","impliedFormat":1},{"version":"d90d5f524de38889d1e1dbc2aeef00060d779f8688c02766ddb9ca195e4a713d","impliedFormat":1},{"version":"a3f41ed1b4f2fc3049394b945a68ae4fdefd49fa1739c32f149d32c0545d67f5","impliedFormat":1},{"version":"bad68fd0401eb90fe7da408565c8aee9c7a7021c2577aec92fa1382e8876071a","impliedFormat":1},{"version":"47699512e6d8bebf7be488182427189f999affe3addc1c87c882d36b7f2d0b0e","impliedFormat":1},{"version":"fec01479923e169fb52bd4f668dbeef1d7a7ea6e6d491e15617b46f2cacfa37d","impliedFormat":1},{"version":"8a8fb3097ba52f0ae6530ec6ab34e43e316506eb1d9aa29420a4b1e92a81442d","impliedFormat":1},{"version":"44e09c831fefb6fe59b8e65ad8f68a7ecc0e708d152cfcbe7ba6d6080c31c61e","impliedFormat":1},{"version":"1c0a98de1323051010ce5b958ad47bc1c007f7921973123c999300e2b7b0ecc0","impliedFormat":1},{"version":"4655709c9cb3fd6db2b866cab7c418c40ed9533ce8ea4b66b5f17ec2feea46a9","impliedFormat":1},{"version":"87affad8e2243635d3a191fa72ef896842748d812e973b7510a55c6200b3c2a4","impliedFormat":1},{"version":"ad036a85efcd9e5b4f7dd5c1a7362c8478f9a3b6c3554654ca24a29aa850a9c5","impliedFormat":1},{"version":"fedebeae32c5cdd1a85b4e0504a01996e4a8adf3dfa72876920d3dd6e42978e7","impliedFormat":1},{"version":"3eecb25bb467a948c04874d70452b14ae7edb707660aac17dc053e42f2088b00","impliedFormat":1},{"version":"cdf21eee8007e339b1b9945abf4a7b44930b1d695cc528459e68a3adc39a622e","impliedFormat":1},{"version":"330896c1a2b9693edd617be24fbf9e5895d6e18c7955d6c08f028f272b37314d","impliedFormat":1},{"version":"1d9c0a9a6df4e8f29dc84c25c5aa0bb1da5456ebede7a03e03df08bb8b27bae6","impliedFormat":1},{"version":"84380af21da938a567c65ef95aefb5354f676368ee1a1cbb4cae81604a4c7d17","impliedFormat":1},{"version":"1af3e1f2a5d1332e136f8b0b95c0e6c0a02aaabd5092b36b64f3042a03debf28","impliedFormat":1},{"version":"30d8da250766efa99490fc02801047c2c6d72dd0da1bba6581c7e80d1d8842a4","impliedFormat":1},{"version":"03566202f5553bd2d9de22dfab0c61aa163cabb64f0223c08431fb3fc8f70280","impliedFormat":1},{"version":"5f0292a40df210ab94b9fb44c8b775c51e96777e14e073900e392b295ca1061b","impliedFormat":1},{"version":"bc9ee0192f056b3d5527bcd78dc3f9e527a9ba2bdc0a2c296fbc9027147df4b2","impliedFormat":1},{"version":"8627ad129bcf56e82adff0ab5951627c993937aa99f5949c33240d690088b803","impliedFormat":1},{"version":"1de80059b8078ea5749941c9f863aa970b4735bdbb003be4925c853a8b6b4450","impliedFormat":1},{"version":"1d079c37fa53e3c21ed3fa214a27507bda9991f2a41458705b19ed8c2b61173d","impliedFormat":1},{"version":"5bf5c7a44e779790d1eb54c234b668b15e34affa95e78eada73e5757f61ed76a","impliedFormat":1},{"version":"5835a6e0d7cd2738e56b671af0e561e7c1b4fb77751383672f4b009f4e161d70","impliedFormat":1},{"version":"5c634644d45a1b6bc7b05e71e05e52ec04f3d73d9ac85d5927f647a5f965181a","impliedFormat":1},{"version":"4b7f74b772140395e7af67c4841be1ab867c11b3b82a51b1aeb692822b76c872","impliedFormat":1},{"version":"27be6622e2922a1b412eb057faa854831b95db9db5035c3f6d4b677b902ab3b7","impliedFormat":1},{"version":"a68d4b3182e8d776cdede7ac9630c209a7bfbb59191f99a52479151816ef9f9e","impliedFormat":99},{"version":"39644b343e4e3d748344af8182111e3bbc594930fff0170256567e13bbdbebb0","impliedFormat":99},{"version":"ed7fd5160b47b0de3b1571c5c5578e8e7e3314e33ae0b8ea85a895774ee64749","impliedFormat":99},{"version":"63a7595a5015e65262557f883463f934904959da563b4f788306f699411e9bac","impliedFormat":1},{"version":"ecbaf0da125974be39c0aac869e403f72f033a4e7fd0d8cd821a8349b4159628","impliedFormat":1},{"version":"4ba137d6553965703b6b55fd2000b4e07ba365f8caeb0359162ad7247f9707a6","impliedFormat":1},{"version":"ceec3c81b2d81f5e3b855d9367c1d4c664ab5046dff8fd56552df015b7ccbe8f","affectsGlobalScope":true,"impliedFormat":1},{"version":"8fac4a15690b27612d8474fb2fc7cc00388df52d169791b78d1a3645d60b4c8b","affectsGlobalScope":true,"impliedFormat":1},{"version":"064ac1c2ac4b2867c2ceaa74bbdce0cb6a4c16e7c31a6497097159c18f74aa7c","impliedFormat":1},{"version":"3dc14e1ab45e497e5d5e4295271d54ff689aeae00b4277979fdd10fa563540ae","impliedFormat":1},{"version":"1d63055b690a582006435ddd3aa9c03aac16a696fac77ce2ed808f3e5a06efab","impliedFormat":1},{"version":"b789bf89eb19c777ed1e956dbad0925ca795701552d22e68fd130a032008b9f9","impliedFormat":1},"85ae5aee75f011967cf2d25cbc342f62d69314e9d925f7f4aa3456fc2cffcca6",{"version":"6b2c934c2b6c60c98da8d9427d6838665d4fe8efb2659547663d77a3ef3ac5d9","impliedFormat":99},{"version":"43e0d6f59701298bc7ad00e73386be01dec35a0a955db7585778f7defcda70c9","impliedFormat":99},{"version":"a46fefd2d219c22b10266294269555f5ab0b13237b2a719377b6c6192a62843e","impliedFormat":99},{"version":"82805e8dbdf5f2605a4089c11a495acc7fb2f3d3eebbe510a4c8c0f60f4201c0","impliedFormat":99},{"version":"d3cfde44f8089768ebb08098c96d01ca260b88bccf238d55eee93f1c620ff5a5","impliedFormat":1},{"version":"293eadad9dead44c6fd1db6de552663c33f215c55a1bfa2802a1bceed88ff0ec","impliedFormat":1},{"version":"833e92c058d033cde3f29a6c7603f517001d1ddd8020bc94d2067a3bc69b2a8e","impliedFormat":1},{"version":"08b2fae7b0f553ad9f79faec864b179fc58bc172e295a70943e8585dd85f600c","impliedFormat":1},{"version":"f12edf1672a94c578eca32216839604f1e1c16b40a1896198deabf99c882b340","impliedFormat":1},{"version":"e3498cf5e428e6c6b9e97bd88736f26d6cf147dedbfa5a8ad3ed8e05e059af8a","impliedFormat":1},{"version":"dba3f34531fd9b1b6e072928b6f885aa4d28dd6789cbd0e93563d43f4b62da53","impliedFormat":1},{"version":"f672c876c1a04a223cf2023b3d91e8a52bb1544c576b81bf64a8fec82be9969c","impliedFormat":1},{"version":"e4b03ddcf8563b1c0aee782a185286ed85a255ce8a30df8453aade2188bbc904","impliedFormat":1},{"version":"2329d90062487e1eaca87b5e06abcbbeeecf80a82f65f949fd332cfcf824b87b","impliedFormat":1},{"version":"25b3f581e12ede11e5739f57a86e8668fbc0124f6649506def306cad2c59d262","impliedFormat":1},{"version":"4fdb529707247a1a917a4626bfb6a293d52cd8ee57ccf03830ec91d39d606d6d","impliedFormat":1},{"version":"a9ebb67d6bbead6044b43714b50dcb77b8f7541ffe803046fdec1714c1eba206","impliedFormat":1},{"version":"5780b706cece027f0d4444fbb4e1af62dc51e19da7c3d3719f67b22b033859b9","impliedFormat":1},"31c4c8f1e138d90d2ebddb4e9c21bd0771ed292c321339f44e2b86e7d21bd2d9","9244b126a3ef649d50704b6fa3d3154f6297f30a776e996a268d8e60fd305e3f","07639b5ab89eed3a5ac852cf0256623fc81a45ca134a3a548b15695f6102e5b4",{"version":"e45c2c8e531449a9746c3dc9f55fc2b9648d49757a65f25cfa3b916cd022befa","impliedFormat":99},{"version":"a9347d2796c333f60f4f6ee1749226cf5255fd54f8e73f2ad83a0054293a4f91","impliedFormat":99},{"version":"49070cbd8d8edc96626303df51625ce7481bf9e450ce0ad89e8c936758cc3bb9","impliedFormat":99},{"version":"639663a633d039219df52c863b5f27ed7e04bbf680e679db1e7101c552d3a2c9","impliedFormat":99},{"version":"01545f0274a774e191f06380ddedaec2b2dfbd021ca2e8775f7819959beb2cb4","impliedFormat":99},{"version":"6c557db1095e0588b7d82d9bdd9e4328872d436a94f2025da271d5ef57845309","impliedFormat":99},{"version":"2827790fc4a5c48d032a79a8d547eca0620d7fc7c997b830417f6de5b04c7c3d","impliedFormat":99},{"version":"7c11a1ba7e6c12ac8f50ba8c40b1126a154799343f135c221d0407a5f29ed6f9","impliedFormat":99},"a4bedde75625d64a1d61ca9a2de26ed79b4379ea7ec26df110fc5c2ea46a29a4","52cdd5bf55fdf86e6fc29deaa63e31830b7a3790563f260832071a9c1097fe4d",{"version":"8d6d51a5118d000ed3bfe6e1dd1335bebfff3fef23cd2af2f84a24d30f90cc90","affectsGlobalScope":true,"impliedFormat":1},{"version":"38113a651294e53238089a5a5afe4f753d625f13b6b7c6b0ad764fa79e8f4dce","impliedFormat":99},{"version":"da4b23d25e59962f23a64daa9cb8db1191ead4e34dae3d115f7da4ec1fdd8688","impliedFormat":99},{"version":"9a0acd9fb0af2cc071696353cbe9acbeb9561627318fd53d4270518d84765693","impliedFormat":99},"6f51b37fd8bcd39fb9bc2d5b612dff88ecbba2aef4c6eb5c03948f86e2d8585e","25e706de50e3e81a0f21bc0804f0dd980ffc8ea8fd1ae0964ee68072a086dc66","9bba595ce4a1af389f9b04410b2bd2e9bd031a5bf1bde7474a6de03dce5c72aa","9ded4134fcdf72ca55c163e0cbe61dd0be2d9bbe67b5f6c91226b7d7639c1faa","7f578a746dc04717423c127a9f93cbf654a1190254c8b1ca0df921d493716679","1f219bb380e01bffccacb6f29e91b9d031730ac2556a705b8b611d809fb689fd","4a1019f10c147790ae0858bac75ac9f9d42548f4210cb3f149d1338ecde4c5f1","86ee1c1dd51cd0c344a1fb2d8e7948f544a5f88f5f5dafc8b585fe6ef2a36476","93460a05ad44df4081142e175417e9eab76c874ea1c2b07e60a2d3ef199e48d0","1b1bc0e55e071d14358c0e860b67f1b70a30767fedcfd81cbc792abb2d393f6f","6219ec788c008f963201d6a1872bc94f4a0f40946b7f351f6f70f2d2be15eece","ac9ec78b2df30c3524ff34f18295e72d0ffa3945f3a98cb7c6c52896fdb6c674","5ae86f07814b0d488dddb398d0b7aeb72efe7d402ca825321b61e62ef90d26c6","dcbffe7960a98e609ef929c5e5674b06c3c83bfb923264009a3dc8c45a1434cc","8321dedf0949dcd9a15a1a6c28b510a80826236403d53221bba88040f1f8e449","c944ce44c1a7a04bd21389613c90b92ec0f13b6db4b41a09bf39a2621a7523a7","2227b6ba8fca56f821eb0e2fae340b0ee8891d9ee8da7909d8b74ab19ea08dae","9ea5bf2a1afb4f05ee8fb832915a31de4828fdb93d9d42c6e4c278a56621ed3d","eab7cb3cc62d1783d0489534f3af4663d80dbb89202114f43aaf91a48a814d29","77414ccc46f5ee190d041a536019ea838025b3f158ef64dbe1003c73dd28c12c","197a3a06086e2f69b3a02f997b61544ee30c5b47de294c1295fa5389d9a8bf9e","7161c9c36a314c318e7f00a46a7c2e161f815ba9fb54e91f129848f1fc009ca9","96253b8fa57045d260e26f635f34dac4a95a567503bad6f4ca82b23ca2f3be00","a64ad34ab508d69b96b3c8e171726cb2e0ea1fe9141abc0a796fce144b1324b5","8780b6afd5d44fde11ec7d5d200833f9a7404c68add3e5f34f7e5eaeb353d034","9cdbb52b8d5e19e871e802025edf4ffc53a46785bb5c0cf02e56dad717e2ff1c","fb2f03b98d3f109432b8f6c7a8c72570f016fe9c5f11de30e556a544fa1b053a","1c6ac82bebbe47861677becce845864331b32cab740631c61d851f0c12c06521","6b7cff910a0b3c95fd02fb2ddcda20a91802523a6bfcaea8547dbc25aabc3dbf","6c71a292faed0162844e329a26495f00fcd623e6f970693bcdab159a758bdf2d","17994f670fcef56556952f21e7ae5d4b0f0ae304781b4c71959efdc502583d71","8b49a5a97e30443e78208c5ab29ba7cc9dbcce6ba4344c06ceba4d1018fb01cd","7c12e7d8517b5c3c5998125ccb5a0b9e99e606e90a7d73780af45c9d4e3b92f5","eb19a8984c7c53297d21db0753295f30491c1a5d13c73ade1b8403f7d7c9a649","2a14ae0e1c84f04f1d7821edf20374b6400fa2bd375c37219ecbc32799eafb83","2f2503e863ae88abeb805daa198d9f70885159325259febe3134c21f14c4a1a5","54bce0747ea370ebdb49c36a1cd5922878415cc59218c98876cff25d90538844","c25513d723b60a03ee9bfa689775a20e91b3f07482a92b4fe06a4e1c39c8126b","45c38a00b480041130d76dcd1916667f6531a4505e071f585cc330ce9e28a061","52652346f48645f635817b6ab50e7926e92aacfe5745099b14b52286eba9dae2","9cb5dcaf7eb836ed40c84a14914fe73a01a2ac142309e0905258b3259f3a206f","cfd0c023957e8667bd6f1a73a6422e03d2930fa48b85f3a9a50266a885e7c807","71526d6b7daa2d05b72dfbd54cb89c5c177562f3dbe159a4ef6781133ab2594e","97ad0b27bdd72d3e3db37ff1ec63fb3abeb08ae86281f3d10d93da25bfa09f98","8cad585f555af79b5d43c092fdf31365d76d55f1d7a08abc0edd34d41b24ceac","93ebcd4e3c2c74548697c9440ed634066ae777b977cd1594b727860e892c68ea","58f0d4d04bde00cd15bbf47086905de72c956cd81d0045764d3e256ebcb17994","523578851ab419f403d4003661b3ee8cf543862313e4d003938a5bd0326efd17","ed4c4cfb0ae6fc5cbbe1975427f692a48e837255a7a1544f9346a0a89a1d3e55","971d34ebce928167956e633f42643ad87327a89b2369a4c12aaac01c8f6ffa2c","779a14e002767ff74fa6c5333087f7fdf0da81853057fe4cd2af2ca7abce9136","436fb4562216c56f38ef41b6e83523aa9545d1021ae34b23302eba3cd4b6d3ee","dd7a12dbe1c8a55a1c80caf4a2f92473408f81c44df7e437f84741a8f3168027","ca25564bb478d1bec397058d012b42149a06cca2a6d1817ef4afa25648331969","3ad38d07b3d79b073cdff8405eae0f94d0373d774f68a94012ae9d789e316f99","c890151e60f99b193c4483fe5664bc0639b328cfd07870549be1dab48967165e","057dd8cee693fbe4de2ebdb19adf7538a4bc1067bafa6930f6da2a36a512fd3f","7ba5a272e742df41fc35aa9a9afac381bc4d094c89084f8a1dace23287670d03",{"version":"78647004e18e4c16b8a2e8345fca9267573d1c5a29e11ddfee71858fd077ef6e","impliedFormat":1},{"version":"0804044cd0488cb7212ddbc1d0f8e1a5bd32970335dbfc613052304a1b0318f9","impliedFormat":1},{"version":"b725acb041d2a18fde8f46c48a1408418489c4aa222f559b1ef47bf267cb4be0","impliedFormat":1},{"version":"85084ae98c1d319e38ef99b1216d3372a9afd7a368022c01c3351b339d52cb58","impliedFormat":1},{"version":"898ec2410fae172e0a9416448b0838bed286322a5c0c8959e8e39400cd4c5697","impliedFormat":1},{"version":"692345a43bac37c507fa7065c554258435ab821bbe4fb44b513a70063e932b45","impliedFormat":1},{"version":"7283aaea55499e5a9760db0ef199e3c12a35ff5391733fe1495b2d3add0c58ab","impliedFormat":1},{"version":"c1c8ccb14c76efb31ff84038ec7833a5715ba23e681b158b3c83cc012b8c3cfa","impliedFormat":1},{"version":"abb0a41fa0432cdec9595dbe84bd3efc5b59f04aa85dcd5cec7b453908fc85c3","impliedFormat":1},{"version":"522edc786ed48304671b935cf7d3ed63acc6636ab9888c6e130b97a6aea92b46","impliedFormat":1},{"version":"a9607a8f1ce7582dbeebc0816897925bf9b307cc05235e582b272a48364f8aa0","impliedFormat":1},{"version":"de21641eb8edcbc08dd0db4ee70eea907cd07fe72267340b5571c92647f10a77","impliedFormat":1},{"version":"48af3609dc95fa62c22c8ec047530daf1776504524d284d2c3f9c163725bdbd4","impliedFormat":1},{"version":"6758f7b72fa4d38f4f4b865516d3d031795c947a45cc24f2cfba43c91446d678","impliedFormat":1},{"version":"1fefab6dc739d33b7cb3fd08cd9d35dd279fcd7746965e200500b1a44d32db9e","impliedFormat":1},{"version":"997b94a03707d35abe497e427bc26b403a538838c3a82f2be71d85109b88e32b","impliedFormat":1},{"version":"bdf7abbd7df4f29b3e0728684c790e80590b69d92ed8d3bf8e66d4bd713941fe","impliedFormat":1},{"version":"8decb32fc5d44b403b46c3bb4741188df4fbc3c66d6c65669000c5c9cd506523","impliedFormat":1},{"version":"4beaf337ee755b8c6115ff8a17e22ceab986b588722a52c776b8834af64e0f38","impliedFormat":1},{"version":"c26dd198f2793bbdcc55103823a2767d6223a7fdb92486c18b86deaf63208354","impliedFormat":1},{"version":"93551b302a808f226f0846ad8012354f2d53d6dedc33b540d6ca69836781a574","impliedFormat":1},{"version":"040cb635dff5fc934413fa211d3a982122bf0e46acae9f7a369c61811f277047","impliedFormat":1},{"version":"778b684ebc6b006fcffeab77d25b34bf6e400100e0ec0c76056e165c6399ab05","impliedFormat":1},{"version":"285d50a08440314f7aea3246a5e15acbc38e2867ff07d21ef457ae8cb4e8a31f","impliedFormat":1},{"version":"672701f824ff6b9dab50514c6c4db711fb7ec5e7c2f0f6bc27b2dbe2e445a52a","impliedFormat":1},{"version":"be8f369f8d7e887eab87a3e4e41f1afcf61bf06056801383152aa83bda1f6a72","impliedFormat":1},{"version":"352bfb5f3a9d8a9c2464ad2dc0b2dc56a8212650a541fb550739c286dd341de1","impliedFormat":1},{"version":"ebef680e3597d7b3c8a9fc9e5581eb078461fa1406ded8d9859353dd6286eff2","impliedFormat":1},{"version":"dc923d45c03261241cefb03ea952883784e28fbc1d089af1a5a553a7b0f5e2b5","impliedFormat":1},{"version":"764150c107451d2fd5b6de305cff0a9dcecf799e08e6f14b5a6748724db46d8a","impliedFormat":1},{"version":"b04cf223c338c09285010f5308b980ee6d8bfa203824ed2537516f15e92e8c43","impliedFormat":1},{"version":"4b387f208d1e468193a45a51005b1ed5b666010fc22a15dc1baf4234078b636e","impliedFormat":1},{"version":"70441eda704feffd132be0c1541f2c7f6bbaafce25cb9b54b181e26af3068e79","impliedFormat":1},{"version":"d1addb12403afea87a1603121396261a45190886c486c88e1a5d456be17c2049","impliedFormat":1},{"version":"1e50bda67542964dbb2cfb21809f9976be97b2f79a4b6f8124463d42c95a704c","impliedFormat":1},{"version":"ea4b5d319625203a5a96897b057fddf6017d0f9a902c16060466fe69cc007243","impliedFormat":1},{"version":"a186fde3b1dde9642dda936e23a21cb73428340eb817e62f4442bb0fca6fa351","impliedFormat":1},{"version":"985ac70f005fb77a2bc0ed4f2c80d55919ded6a9b03d00d94aab75205b0778ec","impliedFormat":1},{"version":"ab01d8fcb89fae8eda22075153053fefac69f7d9571a389632099e7a53f1922d","impliedFormat":1},{"version":"bac0ec1f4c61abc7c54ccebb0f739acb0cdbc22b1b19c91854dc142019492961","impliedFormat":1},{"version":"566b0806f9016fa067b7fecf3951fcc295c30127e5141223393bde16ad04aa4a","impliedFormat":1},{"version":"8e801abfeda45b1b93e599750a0a8d25074d30d4cc01e3563e56c0ff70edeb68","impliedFormat":1},{"version":"902997f91b09620835afd88e292eb217fbd55d01706b82b9a014ff408f357559","impliedFormat":1},{"version":"a3727a926e697919fb59407938bd8573964b3bf543413b685996a47df5645863","impliedFormat":1},{"version":"83f36c0792d352f641a213ee547d21ea02084a148355aa26b6ef82c4f61c1280","impliedFormat":1},{"version":"dce7d69c17a438554c11bbf930dec2bee5b62184c0494d74da336daee088ab69","impliedFormat":1},{"version":"1e8f2cda9735002728017933c54ccea7ebee94b9c68a59a4aac1c9a58aa7da7d","impliedFormat":1},{"version":"e327a2b222cf9e5c93d7c1ed6468ece2e7b9d738e5da04897f1a99f49d42cca1","impliedFormat":1},{"version":"65165246b59654ec4e1501dd87927a0ef95d57359709e00e95d1154ad8443bc7","impliedFormat":1},{"version":"f1bacba19e2fa2eb26c499e36b5ab93d6764f2dba44be3816f12d2bc9ac9a35b","impliedFormat":1},{"version":"bce38da5fd851520d0cb4d1e6c3c04968cec2faa674ed321c118e97e59872edc","impliedFormat":1},{"version":"3398f46037f21fb6c33560ceca257259bd6d2ea03737179b61ea9e17cbe07455","impliedFormat":1},{"version":"6e14fc6c27cb2cb203fe1727bb3a923588f0be8c2604673ad9f879182548daca","impliedFormat":1},{"version":"12b9bcf8395d33837f301a8e6d545a24dfff80db9e32f8e8e6cf4b11671bb442","impliedFormat":1},{"version":"04295cc38689e32a4ea194c954ea6604e6afb6f1c102104f74737cb8cf744422","impliedFormat":1},{"version":"7418f434c136734b23f634e711cf44613ca4c74e63a5ae7429acaee46c7024c8","impliedFormat":1},{"version":"27d40290b7caba1c04468f2b53cf7112f247f8acdd7c20589cd7decf9f762ad0","impliedFormat":1},{"version":"2608b8b83639baf3f07316df29202eead703102f1a7e32f74a1b18cf1eee54b5","impliedFormat":1},{"version":"c93657567a39bd589effe89e863aaadbc339675fca6805ae4d97eafbcce0a05d","impliedFormat":1},{"version":"909d5db5b3b19f03dfb4a8f1d00cf41d2f679857c28775faf1f10794cbbe9db9","impliedFormat":1},{"version":"e4504bffce13574bab83ab900b843590d85a0fd38faab7eff83d84ec55de4aff","impliedFormat":1},{"version":"8ab707f3c833fc1e8a51106b8746c8bc0ce125083ea6200ad881625ae35ce11e","impliedFormat":1},{"version":"730ddc2386276ac66312edbcc60853fedbb1608a99cb0b1ff82ebf26911dba1f","impliedFormat":1},{"version":"c1b3fa201aa037110c43c05ea97800eb66fea3f2ecc5f07c6fd47f2b6b5b21d2","impliedFormat":1},{"version":"636b44188dc6eb326fd566085e6c1c6035b71f839d62c343c299a35888c6f0a9","impliedFormat":1},{"version":"3b2105bf9823b53c269cabb38011c5a71360c8daabc618fec03102c9514d230c","impliedFormat":1},{"version":"f96e63eb56e736304c3aef6c745b9fe93db235ddd1fec10b45319c479de1a432","impliedFormat":1},{"version":"acb4f3cee79f38ceba975e7ee3114eb5cd96ccc02742b0a4c7478b4619f87cd6","impliedFormat":1},{"version":"cfc85d17c1493b6217bad9052a8edc332d1fde81a919228edab33c14aa762939","impliedFormat":1},{"version":"eebda441c4486c26de7a8a7343ebbc361d2b0109abff34c2471e45e34a93020a","impliedFormat":1},{"version":"727b4b8eb62dd98fa4e3a0937172c1a0041eb715b9071c3de96dad597deddcab","impliedFormat":1},{"version":"708e2a347a1b9868ccdb48f3e43647c6eccec47b8591b220afcafc9e7eeb3784","impliedFormat":1},{"version":"6bb598e2d45a170f302f113a5b68e518c8d7661ae3b59baf076be9120afa4813","impliedFormat":1},{"version":"c28e058db8fed2c81d324546f53d2a7aaefff380cbe70f924276dbad89acd7d1","impliedFormat":1},{"version":"89d029475445d677c18cf9a8c75751325616d353925681385da49aeef9260ab7","impliedFormat":1},{"version":"826a98cb79deab45ccc4e5a8b90fa64510b2169781a7cbb83c4a0a8867f4cc58","impliedFormat":1},{"version":"618189f94a473b7fdc5cb5ba8b94d146a0d58834cd77cd24d56995f41643ccd5","impliedFormat":1},{"version":"1645dc6f3dd9a3af97eb5a6a4c794f5b1404cab015832eba67e3882a8198ec27","impliedFormat":1},{"version":"b5267af8d0a1e00092cceed845f69f5c44264cb770befc57d48dcf6a098cb731","impliedFormat":1},{"version":"91b0965538a5eaafa8c09cf9f62b46d6125aa1b3c0e0629dce871f5f41413f90","impliedFormat":1},{"version":"2978e33a00b4b5fb98337c5e473ab7337030b2f69d1480eccef0290814af0d51","impliedFormat":1},{"version":"ba71e9777cb5460e3278f0934fd6354041cb25853feca542312807ce1f18e611","impliedFormat":1},{"version":"608dbaf8c8bb64f4024013e73d7107c16dba4664999a8c6e58f3e71545e48f66","impliedFormat":1},{"version":"61937cefd7f4d6fa76013d33d5a3c5f9b0fc382e90da34790764a0d17d6277fb","impliedFormat":1},{"version":"af7db74826f455bfef6a55a188eb6659fd85fdc16f720a89a515c48724ee4c42","impliedFormat":1},{"version":"d6ce98a960f1b99a72de771fb0ba773cb202c656b8483f22d47d01d68f59ea86","impliedFormat":1},{"version":"2a47dc4a362214f31689870f809c7d62024afb4297a37b22cb86f679c4d04088","impliedFormat":1},{"version":"42d907ac511459d7c4828ee4f3f81cc331a08dc98d7b3cb98e3ff5797c095d2e","impliedFormat":1},{"version":"63d010bff70619e0cdf7900e954a7e188d3175461182f887b869c312a77ecfbd","impliedFormat":1},{"version":"1452816d619e636de512ca98546aafb9a48382d570af1473f0432a9178c4b1ff","impliedFormat":1},{"version":"9e3e3932fe16b9288ec8c948048aef4edf1295b09a5412630d63f4a42265370e","impliedFormat":1},{"version":"8bdba132259883bac06056f7bacd29a4dcf07e3f14ce89edb022fe9b78dcf9b3","impliedFormat":1},{"version":"5a5406107d9949d83e1225273bcee1f559bb5588942907d923165d83251a0e37","impliedFormat":1},{"version":"ca0ca4ca5ad4772161ee2a99741d616fea780d777549ba9f05f4a24493ab44e1","impliedFormat":1},{"version":"e7ee7be996db0d7cce41a85e4cae3a5fc86cf26501ad94e0a20f8b6c1c55b2d4","impliedFormat":1},{"version":"72263ae386d6a49392a03bde2f88660625da1eca5df8d95120d8ccf507483d20","impliedFormat":1},{"version":"b498375d015f01585269588b6221008aae6f0c0dc53ead8796ace64bdfcf62ea","impliedFormat":1},{"version":"c37aa3657fa4d1e7d22565ae609b1370c6b92bafb8c92b914403d45f0e610ddc","impliedFormat":1},{"version":"34534c0ead52cc753bdfdd486430ef67f615ace54a4c0e5a3652b4116af84d6d","impliedFormat":1},{"version":"a848339c272ab23e686b5d0b81297e3a7116ba7d27589c66ca1f4ebcd65e7f19","impliedFormat":1},{"version":"566315d39e476ca9e7fd0b1908074cb2a5ff9246cc3ed7da64cde5ad30f7e0b1","impliedFormat":1},{"version":"5f7ed82e82aa5017fe830ac40105321c32e3bf45d3cfcd557601f2ed58ff6ca4","impliedFormat":1},{"version":"f67a80308cecbd6e402e65931b212958cf89c0ef4e67ec8998dccb93bcc4a0f6","impliedFormat":99},{"version":"4c37a2e0d4689addc6307b9bade6214463e621be2cbaa4186e5e84beae3bf04c","impliedFormat":99},{"version":"270fb79c5b57005a01e4082038f13ec71586de194a7bd157a264ce64562d1656","impliedFormat":99},{"version":"146b782ff46f55732980cffd31256b511e1d3afd63cedd818b2712a8325cf473","impliedFormat":99},{"version":"1a3d8da921df61c32cb9db3691339cad87ff9ec7a23686d11a9217a73e0440e5","impliedFormat":99},{"version":"0645209ea239c80ef0eb8aeddaf243e89a0175c56977bbe39f75bb577fde0441","impliedFormat":99},{"version":"7be32b6413399e55a92293595bbd2f727e8457e83ad9c8fecc68cd6d8a1912cd","impliedFormat":99},{"version":"67e01a2e4afd07e424e13d0b779afe83471e18c7895d22f7fc0034e8260498c3","impliedFormat":99},{"version":"4fe80f12b1d5189384a219095c2eabadbb389c2d3703aae7c5376dbaa56061df","impliedFormat":1},{"version":"9eb1d2dceae65d1c82fc6be7e9b6b19cf3ca93c364678611107362b6ad4d2d41","impliedFormat":1},{"version":"8065e20ac0ad0536d4f1c8d4c2303272a4d25c450bea8d25deb25697d19300e5","impliedFormat":1},{"version":"a3f10b207ac34092603a802aa6d932d22372d571d4649c1d48a074b71da95eac","impliedFormat":1},{"version":"f42365baa04389b983f87a8e14c130ea0ab4a913fada35e8e8e8825a450d4840","impliedFormat":1},{"version":"98ad7367a33f8b7cebad1f8b92e56287b28eda1bfd11f8fef8673980b1090a91","impliedFormat":1},{"version":"be43be05fe9cfd2eb3ce785ef8cbc48737843aac7baf8345c0d8857d7703c996","impliedFormat":1},{"version":"2622d23b82f46eecadc419a286395ddfaaee2f5d533b35127235815ed8807b76","impliedFormat":1},{"version":"406820d111d981e35608f3b6525b8b8a818f2ef83083e8b381f3336d7067a593","impliedFormat":1},{"version":"3bc9a5fc50e1b5678284bf0c8f6319e0cc4910e4ecc1bdb3d490850c9a0859b8","impliedFormat":1},{"version":"e480120d79410e40d95f27fd46da84e12e16b8ff57dda7206a97cb165a2c2213","impliedFormat":1},{"version":"54e4b2a4cfdae8bd4fa66c3baa19af1df604959c81f921252dfc2777e6eebd25","impliedFormat":1},{"version":"f00d9f3635a0f2b6427437b01543ecba1dbf4a5db9adb7d045beb90f8497a87e","impliedFormat":1},{"version":"1611551020c708492c66ffcda9e2b593c3ff91ee8875365c057213a8564ee60b","impliedFormat":1},{"version":"d8158d02e93f868ef402ed06e2a33e419585fe069193905c29e80554e87ac15c","impliedFormat":1},{"version":"94eeb315f94439db3bccd50a5427d3fd2e6535807ca57aca28810e63bc9fd1e4","impliedFormat":1},{"version":"8dcf156fc7436c5a104f0ecd75c2f0069061502ce9900607c1667aaca3a6851e","impliedFormat":1},{"version":"afeaa3163ca96eba18a94a8310ea952164ef767d7ae1e3f21b19bad1e204d087","impliedFormat":1},{"version":"9061663f4f28b12ca29ef8940a44ec53d5f9f386e5edee569fdcdfc7e4ca14eb","impliedFormat":1},{"version":"453ea807ecb71949a1ef40b09b2368f3a6a487705f5a2116af925efa2f7e6d92","impliedFormat":1},{"version":"a07ed03a026bf50005a267f7dd20db3797e1662da44ea635d4770420096f02e3","impliedFormat":1},{"version":"a9d62506c38c63df06c007381a4adf5459355ee31a292b86ebea9c836bb7e841","impliedFormat":1},{"version":"758bc9b7e24313108050b10adc80346199b6addcb3912ff96c5445614db63702","impliedFormat":1},{"version":"88c2b2305782a0c969c8c5a4ba189fd2085d765038b6af2f66a878725eeb855e","impliedFormat":1},{"version":"b00498e0f7de6d0b2eaabf6bc6c27d54e224dbde9b8710c37a0c5f9cabff9013","impliedFormat":1},{"version":"26020fd840eba5d9209e6b07df23d7a9ceb7571fde0c3ae9f443c84619de6a41","impliedFormat":1},{"version":"abf974935a0a0649a429cee0e1133049d18ff0cbaf5cc6764626ffae6af7bd83","impliedFormat":1},{"version":"b9dd0d484906d4444d32a4c70451eaed8d54dfd618cc6f9912f0e20a6b54d7e6","impliedFormat":1},{"version":"353eca851a8aace8404c346d91e350c8ed959759f8fb2a33060ab0d850eed9c4","impliedFormat":1},{"version":"83acf2aae8ebbeaeb12566ec0dd22fe40c9a157ffaf826fe2fb541c518d54f69","impliedFormat":1},{"version":"782ede6abab3148ba43fa5c41c3ac045b81299d306ce06bc27c045c99e375aaa","impliedFormat":1},{"version":"93bd377447dcc0ddb93afe519b7ca4f0400eb8d1fd11fa49848f7522789bbc38","impliedFormat":1},{"version":"87f7c14cf79d5c5409e1260dfc1dda3bc9b0d13b81f2ff39b820dde587c569ee","impliedFormat":1},{"version":"993200dc344eac5de024608fe26fbb1cf4764c254229f481ed8aae084f2fe0e4","impliedFormat":1},{"version":"fc23536cabc16a53018f4dbe8be39db84a73cf1c69b85f238b9ae7e09edaa199","impliedFormat":1},{"version":"89163956c437b564e0073e53141646df002e1d57d2e0bc2dbc3b0a4691776c5f","impliedFormat":1},{"version":"4970c3f3f4b6902144173902c3a969517d708ecbd8c50cc6465d4f2c488fad9e","impliedFormat":1},{"version":"9fd0da3a46448bcc367f52f9f57ba10b8eaf06bc9d4f34698298ec2aab991807","impliedFormat":1},{"version":"bdd08c627434274339f7942e251879b5de6bcf628f3f61ccff14dbeca425ef6a","impliedFormat":1},{"version":"c2649fb23b8767464051cf1f92ed0fed53ea7d5cbd6f807a348402e0be37500c","impliedFormat":1},{"version":"0d3646c780151c55b6bcf7c15f66b6769ac554eac2aedf3294edff04a0045cfe","impliedFormat":1},{"version":"bd8ced5d6e15d32bf007b79bb992a07c713c3e803b45c4ad61d240c610cceec9","impliedFormat":1},{"version":"304ec145044d3fd83921ee3bc57f3f9bba7ac84e866aec6bab17820a581f171e","impliedFormat":1},{"version":"e15cc57b8f017cef8e32c06f04b6c724f8681f9442efc2aa4c757464483f32bc","impliedFormat":1},{"version":"bb539d13f42ca588fc5083b94e537ed67fe47449da84d414b14f3d17c7b5c49e","impliedFormat":1},{"version":"592f9ad00e8c3734ecaad7203b05fd72a028aa9fb11e64db927f00d8715476d6","impliedFormat":1},{"version":"0b4046e2e44fbcc8ad9f4e56859ab9874c669249a51217e21d6c2402ff26e615","impliedFormat":1},{"version":"da332d91f1da53266c5eb9af28f0235ab248ad81f68890df1de8b88074b24a4a","impliedFormat":1},{"version":"0764641d314681c58c751f42b47a572115dc842a72072fa868a259a1cc70f6ff","impliedFormat":1},{"version":"3720043192743812e92ee320868617e7f7e55115ea58ad9e5a512c763716a381","impliedFormat":1},{"version":"fa106dbcb508da05acda26c2deb5ecd307fd323f2d491056b980c25d7d9d3d19","impliedFormat":1},{"version":"686c74caa6c90f835616624627be07c4c977c217e400db2d6cab99b3b19681d0","impliedFormat":1},{"version":"33598ffcfddac61cb35af961c6794b6dc03a89fd2e92089113b34dbb42bd2e27","impliedFormat":1},{"version":"1f1852185404db45d03465a19f7c65bb8f2540bfccb6b967cc32779fdf844f72","impliedFormat":1},{"version":"ae51b52a71c70aa77fac061acf81c4da5770ea10a9a1ff5df252eb79d4d93f26","impliedFormat":1},{"version":"55949c519449e0e0c1eb61d34aa42d5297c2e29883b45fd009629e914e856b30","impliedFormat":1},{"version":"0cbc69cf27e58df8b07063583fb2740d9dc664afc058491af2456a2e270b43bb","impliedFormat":1},{"version":"fdcc8e65fff640091ae5db35056ef87a343c373b5b78369ae509be0cda7df5d2","impliedFormat":1},{"version":"2867ebac7aca35b039ea1cc0e0248bf0ced60706877f172a5cb0eddaa599330b","impliedFormat":1},{"version":"ca3c62ca26416a83e1090706d6df86a089a86b76b5bf561298b1fc5afa65b0a3","impliedFormat":1},{"version":"fde60d698983b343d3ace0742f852622230902ebe5917b1a5aabf7db7f34e3d9","impliedFormat":1},{"version":"9e8147e322367517e09022bf0f00886919b922de4fb4f9b856976a3c0c5597f1","impliedFormat":1},{"version":"430aae2003d27d257031cccff62b7c05468ca2201033f01b712959b47d458049","impliedFormat":1},{"version":"fd8b21234303f04f3357ba644ffd76844f02e70a7f07a290142f11ba71ceab92","impliedFormat":1},{"version":"d10535292b8a83db27138475488a427572a558559bf3be5cad89568c66deb5e2","impliedFormat":1},{"version":"54e98342907a1a0170d8d5dc81e4f05c5f6c526421e930aadd3e30c682498a29","impliedFormat":1},{"version":"1539b21903f2f9049f1f637bfd736d593205100dd3b3d2f7cabf23e6c004edbc","impliedFormat":1},{"version":"b04f4d4736305a8fd1910b01ae9c40d0738d952744d1ec904610d1764efa91af","impliedFormat":1},{"version":"1ad05fc69812ce854a3db895e6f9a72877151ff1e5d8af0ec78d5736afaa1fcf","impliedFormat":1},{"version":"0c11d5e2e654790dfa45f9bc2d3b653fe13c4f7a0c8a1d639a5a924b6e09be8c","impliedFormat":1},{"version":"324a44990de071515cb273632ace64d4f32b72f2d9391e003a63ea69aabd3364","impliedFormat":1},{"version":"31333fe58620f76321cc0153a0aa7ae0408e1b7ca3d1c26d2569ec44b6ee3805","impliedFormat":1},{"version":"6fc89c781ebd4d280c684ce1042c9ebbc4a59cf1ecf5983cfa2eefdd3cd449a0","impliedFormat":1},{"version":"593cc5d6276e32b36088a73756514161b750c2957a84ddf5153935eee3f95e3a","impliedFormat":1},{"version":"276b8af5ab99167e0a217186a39ffa44473beecd9a937057bcad2eb3e21c53b4","impliedFormat":1},{"version":"b760d358d0b42de531509e3bff8a9cffb934e3a2ff0d53fa244b3ebfaaef9f91","impliedFormat":1},{"version":"caac24397bd88bf85b02e42ec561181acab9384d9e2429e1ff3d65abe1567407","impliedFormat":1},{"version":"9efa716140d3e52b0dda513aa7b45252af15617d6b9a6b9a5be786a4f60042a8","impliedFormat":1},{"version":"4558f132688cff22a2acc65f44d277546b55435083141779beb11e993dcdbe13","impliedFormat":1},{"version":"2e4cbb24e294d25e6bd050f1a5d6b86422475c049afc65c3cd777b16c7af88b9","impliedFormat":1},{"version":"3e162b63e35c2007cb0eb3db0ba0fdb45e4185e5417440d79d56fc989aaea13e","impliedFormat":1},{"version":"2cef84bf00cbdb452fdc5d8ecfe7b8c0aa3fa788bdc4ad8961e2e636530dbb60","impliedFormat":99},{"version":"24104650185414f379d5cc35c0e2c19f06684a73de5b472bae79e0d855771ecf","impliedFormat":99},{"version":"799003c0ab928582fca04977f47b8d85b43a8de610f4eef0ad2d069fbb9f9399","impliedFormat":99},{"version":"b13dd41c344a23e085f81b2f5cd96792e6b35ae814f32b25e39d9841844ad240","impliedFormat":99},{"version":"17d8b4e6416e48b6e23b73d05fd2fde407e2af8fddbe9da2a98ede14949c3489","impliedFormat":99},{"version":"6d17b2b41f874ab4369b8e04bdbe660163ea5c8239785c850f767370604959e3","impliedFormat":99},{"version":"04b4c044c8fe6af77b6c196a16c41e0f7d76b285d036d79dcaa6d92e24b4982b","impliedFormat":99},{"version":"30bdeead5293c1ddfaea4097d3e9dd5a6b0bc59a1e07ff4714ea1bbe7c5b2318","impliedFormat":99},{"version":"e7df226dcc1b0ce76b32f160556f3d1550124c894aae2d5f73cefaaf28df7779","impliedFormat":99},{"version":"f2b7eef5c46c61e6e72fba9afd7cc612a08c0c48ed44c3c5518559d8508146a2","impliedFormat":99},{"version":"00f0ba57e829398d10168b7db1e16217f87933e61bd8612b53a894bd7d6371da","impliedFormat":99},{"version":"126b20947d9fa74a88bb4e9281462bda05e529f90e22d08ee9f116a224291e84","impliedFormat":99},{"version":"40d9e43acee39702745eb5c641993978ac40f227475eacc99a83ba893ad995db","impliedFormat":99},{"version":"8a66b69b21c8de9cb88b4b6d12f655d5b7636e692a014c5aa1bd81745c8c51d5","impliedFormat":99},{"version":"ebbb846bdd5a78fdacff59ae04cea7a097912aeb1a2b34f8d88f4ebb84643069","impliedFormat":99},{"version":"7321adb29ffd637acb33ee67ea035f1a97d0aa0b14173291cc2fd58e93296e04","impliedFormat":99},{"version":"320816f1a4211188f07a782bdb6c1a44555b3e716ce13018f528ad7387108d5f","impliedFormat":99},{"version":"b2cc8a474b7657f4a03c67baf6bff75e26635fd4b5850675e8cad524a09ddd0c","impliedFormat":99},{"version":"0d081e9dc251063cc69611041c17d25847e8bdbe18164baaa89b7f1f1633c0ab","impliedFormat":99},{"version":"a64c25d8f4ec16339db49867ea2324e77060782993432a875d6e5e8608b0de1e","impliedFormat":99},{"version":"0739310b6b777f3e2baaf908c0fbc622c71160e6310eb93e0d820d86a52e2e23","impliedFormat":99},{"version":"37b32e4eadd8cd3c263e7ac1681c58b2ac54f3f77bb34c5e4326cc78516d55a9","impliedFormat":99},{"version":"9b7a8974e028c4ed6f7f9abb969e3eb224c069fd7f226e26fcc3a5b0e2a1eba8","impliedFormat":99},{"version":"e8100b569926a5592146ed68a0418109d625a045a94ed878a8c5152b1379237c","impliedFormat":99},{"version":"594201c616c318b7f3149a912abd8d6bdf338d765b7bcbde86bca2e66b144606","impliedFormat":99},{"version":"03e380975e047c5c6ded532cf8589e6cc85abb7be3629e1e4b0c9e703f2fd36f","impliedFormat":99},{"version":"fae14b53b7f52a8eb3274c67c11f261a58530969885599efe3df0277b48909e1","impliedFormat":99},{"version":"c41206757c428186f2e0d1fd373915c823504c249336bdc9a9c9bbdf9da95fef","impliedFormat":99},{"version":"e961f853b7b0111c42b763a6aa46fc70d06a697db3d8ed69b38f7ba0ae42a62b","impliedFormat":99},{"version":"3db90f79e36bcb60b3f8de1bc60321026800979c150e5615047d598c787a64b7","impliedFormat":99},{"version":"639b6fb3afbb8f6067c1564af2bd284c3e883f0f1556d59bd5eb87cdbbdd8486","impliedFormat":99},{"version":"49795f5478cb607fd5965aa337135a8e7fd1c58bc40c0b6db726adf186dd403f","impliedFormat":99},{"version":"7d8890e6e2e4e215959e71d5b5bd49482cf7a23be68d48ea446601a4c99bd511","impliedFormat":99},{"version":"d56f72c4bb518de5702b8b6ae3d3c3045c99e0fd48b3d3b54c653693a8378017","impliedFormat":99},{"version":"4c9ac40163e4265b5750510d6d2933fb7b39023eed69f7b7c68b540ad960826e","impliedFormat":99},{"version":"8dfab17cf48e7be6e023c438a9cdf6d15a9b4d2fa976c26e223ba40c53eb8da8","impliedFormat":99},{"version":"38bdf7ccacfd8e418de3a7b1e3cecc29b5625f90abc2fa4ac7843a290f3bf555","impliedFormat":99},{"version":"9819e46a914735211fbc04b8dc6ba65152c62e3a329ca0601a46ba6e05b2c897","impliedFormat":99},{"version":"50f0dc9a42931fb5d65cdd64ba0f7b378aedd36e0cfca988aa4109aad5e714cb","impliedFormat":99},{"version":"894f23066f9fafccc6e2dd006ed5bd85f3b913de90f17cf1fe15a2eb677fd603","impliedFormat":99},{"version":"abdf39173867e6c2d6045f120a316de451bbb6351a6929546b8470ddf2e4b3b9","impliedFormat":99},{"version":"aa2cb4053f948fbd606228195bbe44d78733861b6f7204558bbee603202ee440","impliedFormat":99},{"version":"6911b41bfe9942ac59c2da1bbcbe5c3c1f4e510bf65cae89ed00f434cc588860","impliedFormat":99},{"version":"7b81bc4d4e2c764e85d869a8dd9fe3652b34b45c065482ac94ffaacc642b2507","impliedFormat":99},{"version":"895df4edb46ccdcbce2ec982f5eed292cf7ea3f7168f1efea738ee346feab273","impliedFormat":99},{"version":"8692bb1a4799eda7b2e3288a6646519d4cebb9a0bddf800085fc1bd8076997a0","impliedFormat":99},{"version":"239c9e98547fe99711b01a0293f8a1a776fc10330094aa261f3970aaba957c82","impliedFormat":99},{"version":"34833ec50360a32efdc12780ae624e9a710dd1fd7013b58c540abf856b54285a","impliedFormat":99},{"version":"647538e4007dcc351a8882067310a0835b5bb8559d1cfa5f378e929bceb2e64d","impliedFormat":99},{"version":"992d6b1abcc9b6092e5a574d51d441238566b6461ade5de53cb9718e4f27da46","impliedFormat":99},{"version":"938702305649bf1050bd79f3803cf5cc2904596fc1edd4e3b91033184eae5c54","impliedFormat":99},{"version":"1e931d3c367d4b96fe043e792196d9c2cf74f672ff9c0b894be54e000280a79d","impliedFormat":99},{"version":"05bec322ea9f6eb9efcd6458bb47087e55bd688afdd232b78379eb5d526816ed","impliedFormat":99},{"version":"4c449a874c2d2e5e5bc508e6aa98f3140218e78c585597a21a508a647acd780a","impliedFormat":99},{"version":"dae15e326140a633d7693e92b1af63274f7295ea94fb7c322d5cbe3f5e48be88","impliedFormat":99},{"version":"c2b0a869713bca307e58d81d1d1f4b99ebfc7ec8b8f17e80dde40739aa8a2bc6","impliedFormat":99},{"version":"6e4b4ff6c7c54fa9c6022e88f2f3e675eac3c6923143eb8b9139150f09074049","impliedFormat":99},{"version":"69559172a9a97bbe34a32bff8c24ef1d8c8063feb5f16a6d3407833b7ee504cf","impliedFormat":99},{"version":"86b94a2a3edcb78d9bfcdb3b382547d47cb017e71abe770c9ee8721e9c84857f","impliedFormat":99},{"version":"e3fafafda82853c45c0afc075fea1eaf0df373a06daf6e6c7f382f9f61b2deb3","impliedFormat":99},{"version":"a4ba4b31de9e9140bc49c0addddbfaf96b943a7956a46d45f894822e12bf5560","impliedFormat":99},{"version":"d8a7926fc75f2ed887f17bae732ee31a4064b8a95a406c87e430c58578ee1f67","impliedFormat":99},{"version":"9886ffbb134b0a0059fd82219eba2a75f8af341d98bc6331b6ef8a921e10ec68","impliedFormat":99},{"version":"c2ead057b70d0ae7b87a771461a6222ebdb187ba6f300c974768b0ae5966d10e","impliedFormat":99},{"version":"46687d985aed8485ab2c71085f82fafb11e69e82e8552cf5d3849c00e64a00a5","impliedFormat":99},{"version":"999ca66d4b5e2790b656e0a7ce42267737577fc7a52b891e97644ec418eff7ec","impliedFormat":99},{"version":"ec948ee7e92d0888f92d4a490fdd0afb27fbf6d7aabebe2347a3e8ac82c36db9","impliedFormat":99},{"version":"03ef2386c683707ce741a1c30cb126e8c51a908aa0acc01c3471fafb9baaacd5","impliedFormat":99},{"version":"66a372e03c41d2d5e920df5282dadcec2acae4c629cb51cab850825d2a144cea","impliedFormat":99},{"version":"ddf9b157bd4c06c2e4646c9f034f36267a0fbd028bd4738214709de7ea7c548b","impliedFormat":99},{"version":"3e795aac9be23d4ad9781c00b153e7603be580602e40e5228e2dafe8a8e3aba1","impliedFormat":99},{"version":"98c461ec5953dfb1b5d5bca5fee0833c8a932383b9e651ca6548e55f1e2c71c3","impliedFormat":99},{"version":"5c42107b46cb1d36b6f1dee268df125e930b81f9b47b5fa0b7a5f2a42d556c10","impliedFormat":99},{"version":"7e32f1251d1e986e9dd98b6ff25f62c06445301b94aeebdf1f4296dbd2b8652f","impliedFormat":99},{"version":"2f7e328dda700dcb2b72db0f58c652ae926913de27391bd11505fc5e9aae6c33","impliedFormat":99},{"version":"3de7190e4d37da0c316db53a8a60096dbcd06d1a50677ccf11d182fa26882080","impliedFormat":99},{"version":"a9d6f87e59b32b02c861aade3f4477d7277c30d43939462b93f48644fa548c58","impliedFormat":99},{"version":"2bce8fd2d16a9432110bbe0ba1e663fd02f7d8b8968cd10178ea7bc306c4a5df","impliedFormat":99},{"version":"798bedbf45a8f1e55594e6879cd46023e8767757ecce1d3feaa78d16ad728703","impliedFormat":99},{"version":"62723d5ac66f7ed6885a3931dd5cfa017797e73000d590492988a944832e8bc2","impliedFormat":99},{"version":"03db8e7df7514bf17fc729c87fff56ca99567b9aa50821f544587a666537c233","impliedFormat":99},{"version":"9b1f311ba4409968b68bf20b5d892dbd3c5b1d65c673d5841c7dbde351bc0d0b","impliedFormat":99},{"version":"2d1e8b5431502739fe335ceec0aaded030b0f918e758a5d76f61effa0965b189","impliedFormat":99},{"version":"e725839b8f884dab141b42e9d7ff5659212f6e1d7b4054caa23bc719a4629071","impliedFormat":99},{"version":"4fa38a0b8ae02507f966675d0a7d230ed67c92ab8b5736d99a16c5fbe2b42036","impliedFormat":99},{"version":"50ec1e8c23bad160ddedf8debeebc722becbddda127b8fdce06c23eacd3fe689","impliedFormat":99},{"version":"9a0aea3a113064fd607f41375ade308c035911d3c8af5ae9db89593b5ca9f1f9","impliedFormat":99},{"version":"8d643903b58a0bf739ce4e6a8b0e5fb3fbdfaacbae50581b90803934b27d5b89","impliedFormat":99},{"version":"19de2915ccebc0a1482c2337b34cb178d446def2493bf775c4018a4ea355adb8","impliedFormat":99},{"version":"9be8fc03c8b5392cd17d40fd61063d73f08d0ee3457ecf075dcb3768ae1427bd","impliedFormat":99},{"version":"a2d89a8dc5a993514ca79585039eea083a56822b1d9b9d9d85b14232e4782cbe","impliedFormat":99},{"version":"f526f20cae73f17e8f38905de4c3765287575c9c4d9ecacee41cfda8c887da5b","impliedFormat":99},{"version":"d9ec0978b7023612b9b83a71fee8972e290d02f8ff894e95cdd732cd0213b070","impliedFormat":99},{"version":"7ab10c473a058ec8ac4790b05cae6f3a86c56be9b0c0a897771d428a2a48a9f9","impliedFormat":99},{"version":"451d7a93f8249d2e1453b495b13805e58f47784ef2131061821b0e456a9fd0e1","impliedFormat":99},{"version":"21c56fe515d227ed4943f275a8b242d884046001722a4ba81f342a08dbe74ae2","impliedFormat":99},{"version":"d8311f0c39381aa1825081c921efde36e618c5cf46258c351633342a11601208","impliedFormat":99},{"version":"6b50c3bcc92dc417047740810596fcb2df2502aa3f280c9e7827e87896da168a","impliedFormat":99},{"version":"18a6b318d1e7b31e5749a52be0cf9bbce1b275f63190ef32e2c79db0579328ca","impliedFormat":99},{"version":"6a2d0af2c27b993aa85414f3759898502aa198301bc58b0d410948fe908b07b0","impliedFormat":99},{"version":"2da11b6f5c374300e5e66a6b01c3c78ec21b5d3fec0748a28cc28e00be73e006","impliedFormat":99},{"version":"0729691b39c24d222f0b854776b00530877217bfc30aac1dc7fa2f4b1795c536","impliedFormat":99},{"version":"ca45bb5c98c474d669f0e47615e4a5ae65d90a2e78531fda7862ee43e687a059","impliedFormat":99},{"version":"c1c058b91d5b9a24c95a51aea814b0ad4185f411c38ac1d5eef0bf3cebec17dc","impliedFormat":99},{"version":"3ab0ed4060b8e5b5e594138aab3e7f0262d68ad671d6678bcda51568d4fc4ccc","impliedFormat":99},{"version":"e2bf1faba4ff10a6020c41df276411f641d3fdce5c6bae1db0ec84a0bf042106","impliedFormat":99},{"version":"80b0a8fe14d47a71e23d7c3d4dcee9584d4282ef1d843b70cab1a42a4ea1588c","impliedFormat":99},{"version":"a0f02a73f6e3de48168d14abe33bf5970fdacdb52d7c574e908e75ad571e78f7","impliedFormat":99},{"version":"c728002a759d8ec6bccb10eed56184e86aeff0a762c1555b62b5d0fa9d1f7d64","impliedFormat":99},{"version":"586f94e07a295f3d02f847f9e0e47dbf14c16e04ccc172b011b3f4774a28aaea","impliedFormat":99},{"version":"cfe1a0f4ed2df36a2c65ea6bc235dbb8cf6e6c25feb6629989f1fa51210b32e7","impliedFormat":99},{"version":"8ba69c9bf6de79c177329451ffde48ddab7ec495410b86972ded226552f664df","impliedFormat":99},{"version":"15111cbe020f8802ad1d150524f974a5251f53d2fe10eb55675f9df1e82dbb62","impliedFormat":99},{"version":"782dc153c56a99c9ed07b2f6f497d8ad2747764966876dbfef32f3e27ce11421","impliedFormat":99},{"version":"cc2db30c3d8bb7feb53a9c9ff9b0b859dd5e04c83d678680930b5594b2bf99cb","impliedFormat":99},{"version":"46909b8c85a6fd52e0807d18045da0991e3bdc7373435794a6ba425bc23cc6be","impliedFormat":99},{"version":"e4e511ff63bb6bd69a2a51e472c6044298bca2c27835a34a20827bc3ef9b7d13","impliedFormat":99},{"version":"2c86f279d7db3c024de0f21cd9c8c2c972972f842357016bfbbd86955723b223","impliedFormat":99},{"version":"112c895cff9554cf754f928477c7d58a21191c8089bffbf6905c87fe2dc6054f","impliedFormat":99},{"version":"8cfc293b33082003cacbf7856b8b5e2d6dd3bde46abbd575b0c935dc83af4844","impliedFormat":99},{"version":"d2c5c53f85ce0474b3a876d76c4fc44ff7bb766b14ed1bf495f9abac181d7f5f","impliedFormat":99},{"version":"3c523f27926905fcbe20b8301a0cc2da317f3f9aea2273f8fc8d9ae88b524819","impliedFormat":99},{"version":"9ca0d706f6b039cc52552323aeccb4db72e600b67ddc7a54cebc095fc6f35539","impliedFormat":99},{"version":"a64909a9f75081342ddd061f8c6b49decf0d28051bc78e698d347bdcb9746577","impliedFormat":99},{"version":"7d8d55ae58766d0d52033eae73084c4db6a93c4630a3e17f419dd8a0b2a4dcd8","impliedFormat":99},{"version":"b8b5c8ba972d9ffff313b3c8a3321e7c14523fc58173862187e8d1cb814168ac","impliedFormat":99},{"version":"9c42c0fa76ee36cf9cc7cc34b1389fbb4bd49033ec124b93674ec635fabf7ffe","impliedFormat":99},{"version":"6184c8da9d8107e3e67c0b99dedb5d2dfe5ccf6dfea55c2a71d4037caf8ca196","impliedFormat":99},{"version":"4030ceea7bf41449c1b86478b786e3b7eadd13dfe5a4f8f5fe2eb359260e08b3","impliedFormat":99},{"version":"7bf516ec5dfc60e97a5bde32a6b73d772bd9de24a2e0ec91d83138d39ac83d04","impliedFormat":99},{"version":"e6a6fb3e6525f84edf42ba92e261240d4efead3093aca3d6eb1799d5942ba393","impliedFormat":99},{"version":"45df74648934f97d26800262e9b2af2f77ef7191d4a5c2eb1df0062f55e77891","impliedFormat":99},{"version":"3fe361e4e567f32a53af1f2c67ad62d958e3d264e974b0a8763d174102fe3b29","impliedFormat":99},{"version":"28b520acee4bc6911bfe458d1ad3ebc455fa23678463f59946ad97a327c9ab2b","impliedFormat":99},{"version":"121b39b1a9ad5d23ed1076b0db2fe326025150ef476dccb8bf87778fcc4f6dd7","impliedFormat":99},{"version":"f791f92a060b52aa043dde44eb60307938f18d4c7ac13df1b52c82a1e658953f","impliedFormat":99},{"version":"df09443e7743fd6adc7eb108e760084bacdf5914403b7aac5fbd4dc4e24e0c2c","impliedFormat":99},{"version":"eeb4ff4aa06956083eaa2aad59070361c20254b865d986bc997ee345dbd44cbb","impliedFormat":99},{"version":"ed84d5043444d51e1e5908f664addc4472c227b9da8401f13daa565f23624b6e","impliedFormat":99},{"version":"146bf888b703d8baa825f3f2fb1b7b31bda5dff803e15973d9636cdda33f4af3","impliedFormat":99},{"version":"b4ec8b7a8d23bdf7e1c31e43e5beac3209deb7571d2ccf2a9572865bf242da7c","impliedFormat":99},{"version":"3fba0d61d172091638e56fba651aa1f8a8500aac02147d29bd5a9cc0bc8f9ec2","impliedFormat":99},{"version":"a5a57deb0351b03041e0a1448d3a0cc5558c48e0ed9b79b69c99163cdca64ad8","impliedFormat":99},{"version":"9bcecf0cbc2bfc17e33199864c19549905309a0f9ecc37871146107aac6e05ae","impliedFormat":99},{"version":"d6a211db4b4a821e93c978add57e484f2a003142a6aef9dbfa1fe990c66f337b","impliedFormat":99},{"version":"bd4d10bd44ce3f630dd9ce44f102422cb2814ead5711955aa537a52c8d2cae14","impliedFormat":99},{"version":"08e4c39ab1e52eea1e528ee597170480405716bae92ebe7a7c529f490afff1e0","impliedFormat":99},{"version":"625bb2bc3867557ea7912bd4581288a9fca4f3423b8dffa1d9ed57fafc8610e3","impliedFormat":99},{"version":"d1992164ecc334257e0bef56b1fd7e3e1cea649c70c64ffc39999bb480c0ecdf","impliedFormat":99},{"version":"a53ff2c4037481eb357e33b85e0d78e8236e285b6428b93aa286ceea1db2f5dc","impliedFormat":99},{"version":"4fe608d524954b6857d78857efce623852fcb0c155f010710656f9db86e973a5","impliedFormat":99},{"version":"b53b62a9838d3f57b70cc456093662302abb9962e5555f5def046172a4fe0d4e","impliedFormat":99},{"version":"9866369eb72b6e77be2a92589c9df9be1232a1a66e96736170819e8a1297b61f","impliedFormat":99},{"version":"43abfbdf4e297868d780b8f4cfdd8b781b90ecd9f588b05e845192146a86df34","impliedFormat":99},{"version":"582419791241fb851403ae4a08d0712a63d4c94787524a7419c2bc8e0eb1b031","impliedFormat":99},{"version":"18437eeb932fe48590b15f404090db0ab3b32d58f831d5ffc157f63b04885ee5","impliedFormat":99},{"version":"0c5eaedf622d7a8150f5c2ec1f79ac3d51eea1966b0b3e61bfdea35e8ca213a7","impliedFormat":99},{"version":"fac39fc7a9367c0246de3543a6ee866a0cf2e4c3a8f64641461c9f2dac0d8aae","impliedFormat":99},{"version":"3b9f559d0200134f3c196168630997caedeadc6733523c8b6076a09615d5dec8","impliedFormat":99},{"version":"932af64286d9723da5ef7b77a0c4229829ce8e085e6bcc5f874cb0b83e8310d4","impliedFormat":99},{"version":"adeb9278f11f5561157feee565171c72fd48f5fe34ed06f71abf24e561fcaa1e","impliedFormat":99},{"version":"2269fef79b4900fc6b08c840260622ca33524771ff24fda5b9101ad98ea551f3","impliedFormat":99},{"version":"73d47498a1b73d5392d40fb42a3e7b009ae900c8423f4088c4faa663cc508886","impliedFormat":99},{"version":"7efc34cdc4da0968c3ba687bc780d5cacde561915577d8d1c1e46c7ac931d023","impliedFormat":99},{"version":"3c20a3bb0c50c819419f44aa55acc58476dad4754a16884cef06012d02b0722f","impliedFormat":99},{"version":"4569abf6bc7d51a455503670f3f1c0e9b4f8632a3b030e0794c61bfbba2d13be","impliedFormat":99},{"version":"98b2297b4dc1404078a54b61758d8643e4c1d7830af724f3ed2445d77a7a2d57","impliedFormat":99},{"version":"952ba89d75f1b589e07070fea2d8174332e3028752e76fd46e1c16cc51e6e2af","impliedFormat":99},{"version":"b6c9a2deefb6a57ff68d2a38d33c34407b9939487fc9ee9f32ba3ecf2987a88a","impliedFormat":99},{"version":"f6b371377bab3018dac2bca63e27502ecbd5d06f708ad7e312658d3b5315d948","impliedFormat":99},{"version":"31947dd8f1c8eeb7841e1f139a493a73bd520f90e59a6415375d0d8e6a031f01","impliedFormat":99},{"version":"95cd83b807e10b1af408e62caf5fea98562221e8ddca9d7ccc053d482283ddda","impliedFormat":99},{"version":"19287d6b76288c2814f1633bdd68d2b76748757ffd355e73e41151644e4773d6","impliedFormat":99},{"version":"fc4e6ec7dade5f9d422b153c5d8f6ad074bd9cc4e280415b7dc58fb5c52b5df1","impliedFormat":99},{"version":"3aea973106e1184db82d8880f0ca134388b6cbc420f7309d1c8947b842886349","impliedFormat":99},{"version":"765e278c464923da94dda7c2b281ece92f58981642421ae097862effe2bd30fa","impliedFormat":99},{"version":"de260bed7f7d25593f59e859bd7c7f8c6e6bb87e8686a0fcafa3774cb5ca02d8","impliedFormat":99},{"version":"b5c341ce978f5777fbe05bc86f65e9906a492fa6b327bda3c6aae900c22e76c6","impliedFormat":99},{"version":"686ddbfaf88f06b02c6324005042f85317187866ca0f8f4c9584dd9479653344","impliedFormat":99},{"version":"7f789c0c1db29dd3aab6e159d1ba82894a046bf8df595ac48385931ae6ad83e0","impliedFormat":99},{"version":"8eb3057d4fe9b59b2492921b73a795a2455ebe94ccb3d01027a7866612ead137","impliedFormat":99},{"version":"1e43c5d7aee1c5ec20611e28b5417f5840c75d048de9d7f1800d6808499236f8","impliedFormat":99},{"version":"d42610a5a2bee4b71769968a24878885c9910cd049569daa2d2ee94208b3a7a5","impliedFormat":99},{"version":"f6ed95506a6ed2d40ed5425747529befaa4c35fcbbc1e0d793813f6d725690fa","impliedFormat":99},{"version":"a6fcc1cd6583939506c906dff1276e7ebdc38fbe12d3e108ba38ad231bd18d97","impliedFormat":99},{"version":"ed13354f0d96fb6d5878655b1fead51722b54875e91d5e53ef16de5b71a0e278","impliedFormat":99},{"version":"1193b4872c1fb65769d8b164ca48124c7ebacc33eae03abf52087c2b29e8c46c","impliedFormat":99},{"version":"af682dfabe85688289b420d939020a10eb61f0120e393d53c127f1968b3e9f66","impliedFormat":99},{"version":"0dca04006bf13f72240c6a6a502df9c0b49c41c3cab2be75e81e9b592dcd4ea8","impliedFormat":99},{"version":"79d6ac4a2a229047259116688f9cd62fda25422dee3ad304f77d7e9af53a41ef","impliedFormat":99},{"version":"64534c17173990dc4c3d9388d16675a059aac407031cfce8f7fdffa4ee2de988","impliedFormat":99},{"version":"ba46d160a192639f3ca9e5b640b870b1263f24ac77b6895ab42960937b42dcbb","impliedFormat":99},{"version":"5e5ddd6fc5b590190dde881974ab969455e7fad61012e32423415ae3d085b037","impliedFormat":99},{"version":"1c16fd00c42b60b96fe0fa62113a953af58ddf0d93b0a49cb4919cf5644616f0","impliedFormat":99},{"version":"eb240c0e6b412c57f7d9a9f1c6cd933642a929837c807b179a818f6e8d3a4e44","impliedFormat":99},{"version":"4a7bde5a1155107fc7d9483b8830099f1a6072b6afda5b78d91eb5d6549b3956","impliedFormat":99},{"version":"3c1baaffa9a24cc7ef9eea6b64742394498e0616b127ca630aca0e11e3298006","impliedFormat":99},{"version":"87ca1c31a326c898fa3feb99ec10750d775e1c84dbb7c4b37252bcf3742c7b21","impliedFormat":99},{"version":"d7bd26af1f5457f037225602035c2d7e876b80d02663ab4ca644099ad3a55888","impliedFormat":99},{"version":"2ad0a6b93e84a56b64f92f36a07de7ebcb910822f9a72ad22df5f5d642aff6f3","impliedFormat":99},{"version":"523d1775135260f53f672264937ee0f3dc42a92a39de8bee6c48c7ea60b50b5a","impliedFormat":99},{"version":"e441b9eebbc1284e5d995d99b53ed520b76a87cab512286651c4612d86cd408e","impliedFormat":99},{"version":"76f853ee21425c339a79d28e0859d74f2e53dee2e4919edafff6883dd7b7a80f","impliedFormat":99},{"version":"00cf042cd6ba1915648c8d6d2aa00e63bbbc300ea54d28ed087185f0f662e080","impliedFormat":99},{"version":"f57e6707d035ab89a03797d34faef37deefd3dd90aa17d90de2f33dce46a2c56","impliedFormat":99},{"version":"cc8b559b2cf9380ca72922c64576a43f000275c72042b2af2415ce0fb88d7077","impliedFormat":99},{"version":"1a337ca294c428ba8f2eb01e887b28d080ee4a4307ae87e02e468b1d26af4a74","impliedFormat":99},{"version":"5a15362fc2e72765a908c0d4dd89e3ab3b763e8bc8c23f19234a709ecfd202fe","impliedFormat":99},{"version":"2dffdfe62ac8af0943853234519616db6fd8958fc7ff631149fd8364e663f361","impliedFormat":99},{"version":"5dbdb2b2229b5547d8177c34705272da5a10b8d0033c49efbc9f6efba5e617f2","impliedFormat":99},{"version":"6fc0498cd8823d139004baff830343c9a0d210c687b2402c1384fb40f0aa461c","impliedFormat":99},{"version":"8492306a4864a1dc6fc7e0cc0de0ae9279cbd37f3aae3e9dc1065afcdc83dddc","impliedFormat":99},{"version":"c011b378127497d6337a93f020a05f726db2c30d55dc56d20e6a5090f05919a6","impliedFormat":99},{"version":"f4556979e95a274687ae206bbab2bb9a71c3ad923b92df241d9ab88c184b3f40","impliedFormat":99},{"version":"50e82bb6e238db008b5beba16d733b77e8b2a933c9152d1019cf8096845171a4","impliedFormat":99},{"version":"d6011f8b8bbf5163ef1e73588e64a53e8bf1f13533c375ec53e631aad95f1375","impliedFormat":99},{"version":"693cd7936ac7acfa026d4bcb5801fce71cec49835ba45c67af1ef90dbfd30af7","impliedFormat":99},{"version":"195e2cf684ecddfc1f6420564535d7c469f9611ce7a380d6e191811f84556cd2","impliedFormat":99},{"version":"1dc6b6e7b2a7f2962f31c77f4713f3a5a132bbe14c00db75d557568fe82e4311","impliedFormat":99},{"version":"add93b1180e9aaac2dae4ef3b16f7655893e2ecbe62bd9e48366c305f0063d89","impliedFormat":99},{"version":"594bd896fe37c970aafb7a376ebeec4c0d636b62a5f611e2e27d30fb839ad8a5","impliedFormat":99},{"version":"b1c6a6faf60542ba4b4271db045d7faea56e143b326ef507d2797815250f3afc","impliedFormat":99},{"version":"8c8b165beb794260f462679329b131419e9f5f35212de11c4d53e6d4d9cbedf6","impliedFormat":99},{"version":"ee5a4cf57d49fcf977249ab73c690a59995997c4672bb73fcaaf2eed65dbd1b2","impliedFormat":99},{"version":"f9f36051f138ab1c40b76b230c2a12b3ce6e1271179f4508da06a959f8bee4c1","impliedFormat":99},{"version":"9dc2011a3573d271a45c12656326530c0930f92539accbec3531d65131a14a14","impliedFormat":99},{"version":"091521ce3ede6747f784ae6f68ad2ea86bbda76b59d2bf678bcad2f9d141f629","impliedFormat":99},{"version":"202c2be951f53bafe943fb2c8d1245e35ed0e4dfed89f48c9a948e4d186dd6d4","impliedFormat":99},{"version":"c618aead1d799dbf4f5b28df5a6b9ce13d72722000a0ec3fe90a8115b1ea9226","impliedFormat":99},{"version":"9b0bf59708549c3e77fddd36530b95b55419414f88bbe5893f7bc8b534617973","impliedFormat":99},{"version":"7e216f67c4886f1bde564fb4eebdd6b185f262fe85ad1d6128cad9b229b10354","impliedFormat":99},{"version":"cd51e60b96b4d43698df74a665aa7a16604488193de86aa60ec0c44d9f114951","impliedFormat":99},{"version":"b63341fb6c7ba6f2aeabd9fc46b43e6cc2d2b9eec06534cfd583d9709f310ec2","impliedFormat":99},{"version":"be2af50c81b15bcfe54ad60f53eb1c72dae681c72d0a9dce1967825e1b5830a3","impliedFormat":99},{"version":"be5366845dfb9726f05005331b9b9645f237f1ddc594c0def851208e8b7d297b","impliedFormat":99},{"version":"5ddd536aaeadd4bf0f020492b3788ed209a7050ce27abec4e01c7563ff65da81","impliedFormat":99},{"version":"e243b24da119c1ef0d79af2a45217e50682b139cb48e7607efd66cc01bd9dcda","impliedFormat":99},{"version":"5b1398c8257fd180d0bf62e999fe0a89751c641e87089a83b24392efda720476","impliedFormat":99},{"version":"1588b1359f8507a16dbef67cd2759965fc2e8d305e5b3eb71be5aa9506277dff","impliedFormat":99},{"version":"4c99f2524eee1ec81356e2b4f67047a4b7efaf145f1c4eb530cd358c36784423","impliedFormat":99},{"version":"b30c6b9f6f30c35d6ef84daed1c3781e367f4360171b90598c02468b0db2fc3d","impliedFormat":99},{"version":"79c0d32274ccfd45fae74ac61d17a2be27aea74c70806d22c43fc625b7e9f12a","impliedFormat":99},{"version":"1b7e3958f668063c9d24ac75279f3e610755b0f49b1c02bb3b1c232deb958f54","impliedFormat":99},{"version":"779d4022c3d0a4df070f94858a33d9ebf54af3664754536c4ce9fd37c6f4a8db","impliedFormat":99},{"version":"e662f063d46aa8c088edffdf1d96cb13d9a2cbf06bc38dc6fc62b4d125fb7b49","impliedFormat":99},{"version":"d1d612df1e41c90d9678b07740d13d4f8e6acec2f17390d4ff4be5c889a6d37d","impliedFormat":99},{"version":"c95933fe140918892d569186f17b70ef6b1162f851a0f13f6a89e8f4d599c5a1","impliedFormat":99},{"version":"1d8d30677f87c13c2786980a80750ac1e281bdb65aa013ea193766fe9f0edd74","impliedFormat":99},{"version":"4661673cbc984b8a6ee5e14875a71ed529b64e7f8e347e12c0db4cecc25ad67d","impliedFormat":99},{"version":"7f980a414274f0f23658baa9a16e21d828535f9eac538e2eab2bb965325841db","impliedFormat":99},{"version":"20fb747a339d3c1d4a032a31881d0c65695f8167575e01f222df98791a65da9b","impliedFormat":99},{"version":"dd4e7ebd3f205a11becf1157422f98db675a626243d2fbd123b8b93efe5fb505","impliedFormat":99},{"version":"43ec6b74c8d31e88bb6947bb256ad78e5c6c435cbbbad991c3ff39315b1a3dba","impliedFormat":99},{"version":"b27242dd3af2a5548d0c7231db7da63d6373636d6c4e72d9b616adaa2acef7e1","impliedFormat":99},{"version":"e0ee7ba0571b83c53a3d6ec761cf391e7128d8f8f590f8832c28661b73c21b68","impliedFormat":99},{"version":"072bfd97fc61c894ef260723f43a416d49ebd8b703696f647c8322671c598873","impliedFormat":99},{"version":"e70875232f5d5528f1650dd6f5c94a5bed344ecf04bdbb998f7f78a3c1317d02","impliedFormat":99},{"version":"8e495129cb6cd8008de6f4ff8ce34fe1302a9e0dcff8d13714bd5593be3f7898","impliedFormat":99},{"version":"192db023799edb1b012458cee150ae0dd33675a7359d1d878ccd2522a736a343","impliedFormat":99},{"version":"9091b1d4b73ba7b9ee0ac0e62879e50fa76303473b8407ccf80a9ede2f16cba9","impliedFormat":99},{"version":"1dc28867627f66bdf42018dbf2775079ae9c0d546fc35944639f0c150e279743","impliedFormat":99},{"version":"c8856d84b990d98d34ca5ed5789a89ade507a248e08395100f2aa8f067c29fa2","impliedFormat":99},{"version":"6620537f707f42add26c5f47056cf82eaa587f12faaa364bf078fcbc0200ef6f","impliedFormat":99},{"version":"74e8b44b0f188dbe70f147b5fb899d3c8418b2f211ba2ba383798062961cb720","impliedFormat":99},{"version":"dcbed4422ffc65273eacc59c602cf3e59ce052ad9810cf73e9bc5fbad3381f94","impliedFormat":99},{"version":"7b7a2a15cc92749b88fe8f255f7631e3c65de932c0f3d1e96d87b1a992ed6471","impliedFormat":99},{"version":"6f69c10b1f3f0ac3157f88719a16edd13d718b2c2aa44d59a9483e04b05e113d","impliedFormat":1},{"version":"868f16a33ccfa800b82bd0975bc9fe7a4a3aa0d747873e2f7e5886c32665ad6d","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"e749bbd37dadf82c9833278780527c717226e1e2c9bc7b2576c8ec1c40ec5647","impliedFormat":1},{"version":"06814968f2b43b988057a3c8b131e7b3be765e74ff0f1153d23045ad1d7f0886","impliedFormat":99},{"version":"2e5741105f94b1743b387d2d6c4d4f0429d560291aaf7217e2dbc8d540c0a321","impliedFormat":99},{"version":"2e5c41e56098ae93bc42a15473acb1a176f28b2ba95c38f3c67820434acd85b6","impliedFormat":1},{"version":"b99c4ff8d11110b9699edc4e5c3bb304360a70ca47e4f9851fc42ad0b663ba83","affectsGlobalScope":true,"impliedFormat":1},{"version":"ba340fc8e5b0f08d90c6ef8552b8ce7bb5dc8e18d47b57f90dee105bc77d0d9e","affectsGlobalScope":true,"impliedFormat":1},{"version":"0f263eeea7877199808b1bc220df95b25a72695ec214eb96d740d4b06c7cc868","impliedFormat":1},{"version":"a31f62f1cfa12a838e798814f56cd5e53d6b1cd91acd6a2f62a81ded0c02590b","impliedFormat":99},{"version":"e9e22144b696e9efaecd8be1a363253e62a3a22a5f369fdc5b4dbdf70c33775b","impliedFormat":99},{"version":"2f7d8f9babcf77d58bc93664428ec8c29365c40514625e536dcf91180a0564bf","impliedFormat":99},{"version":"20b27cd029eb327457370983012ec5e5df46685fbddef5817eec0e201581573e","impliedFormat":99},{"version":"6c9cf9719786dca332b6f2b5a6393c2631a18c630e7bb90dc1cf65a03f919c73","impliedFormat":99},{"version":"5ed723815432a740881a4c529cdda221d7f1b381937750cf6c60403657be37c7","impliedFormat":99},{"version":"020419d11b839bdd41c61619920a1bc9fde7a782fdbd2df6924d6ba6422b6256","impliedFormat":99},{"version":"27220a7135f3d3652928e734309de6f748e61c6e07b4fa2c6e27b907a132e39a","impliedFormat":99},{"version":"dc96877c215cabb1311644d14c8e9e6fd08eebdddaf6a90221187cf9d7c02337","impliedFormat":99},{"version":"c9a7afc660b2b029fa3a9268c78bbf47226fd232a3c7b0d00c726ef9e2e69817","impliedFormat":99},{"version":"3858041552bc3e1f28a6c14f2f0d7fd86c041b71830f2fbdc724f8ef03bf0587","impliedFormat":99},{"version":"0d420df443c76c8314d3012a3907ecee1ba07900053825d1177432c4ab8e0d76","impliedFormat":99},{"version":"7c3e1a21e812eea99aa86d26d80d6a35560bbb1b362f89c2b8a66680750a1898","impliedFormat":99},{"version":"e0b1a941d9fda4ad0283d8c1240cf89e6bd13182453be8eaebf61f27c99d274f","impliedFormat":99},{"version":"5a84ebd4f47e1e673211884affaed21053107435ddbcb2c8e6ce1a039ca9fb3f","impliedFormat":99},{"version":"fc7fc70cae59b4c5a5cd3a84ffa7fd312b068f71b5a38a8779e35c754abb7912","impliedFormat":99},{"version":"39698e3bd5691d0d1f8b69785178f5340c738c8bb8675d29acd0f0fe1f1f9046","impliedFormat":99},{"version":"60f113cf1674b19522e11d2ef2a02eb517ca84af06ce4aff4e76fd55e4345571","impliedFormat":99},{"version":"1617515d7ce57089a49b59eaf84d019e5591a6dfef16b5cdb7a9a38f4bca32bc","impliedFormat":99},{"version":"575424818bdf7ecfd8cd9a303a55650e8999730a14756ca20484fb5b9c071645","impliedFormat":99},{"version":"9b87a81ba35d2010ecb3644fc5b31df0c276c6354b28701d7a5809cfeadcdba6","impliedFormat":99},{"version":"8be0cd7dc19d53fe5a4ac3a6ad1b9553d5f4e3931eefffbfb57cb1fe7bcf631d","impliedFormat":99},{"version":"4d7d2d7f20baa8eabba748d6742d7d372aa62b65e82a2603f27d73f318f6e0e9","impliedFormat":99},{"version":"4185c0eb52309769527913a8842e8f423a78ae04d8a69f7791849bd0d5f8460d","impliedFormat":99},{"version":"a4cc16e27586c939f86745fdcc3bb818aa724889a8ffb6d00468778e40ff44de","impliedFormat":99},{"version":"6514508737ddcd89c7a5d876cba5c4eeb289d778bf57d4cb3d41ba36fcfd2c02","impliedFormat":99},{"version":"093f90d5e17557c807b6e76256ccd67060f9143e8f7ce994ac76788a1e87aa92","impliedFormat":99},{"version":"7c0d706f4529bf287e4a560cc5cadbc5fa11291f450541feb194744f0453dd24","impliedFormat":99},{"version":"2d089998f9a228be5baab523d75b1912b31c7280f00d8a88898cb028646b5cd1","impliedFormat":99},{"version":"2be319181c49fb501663ed3d09e50ec6f5f877d584117cbca558f9a51b2978c7","impliedFormat":99},{"version":"392eca4da34bd630c360736b9537ec3c3d77006687f415f66a54d03843169eec","impliedFormat":99},{"version":"cd7fab58f8902c8dcc52b8ed360caaa6b0b8ac107eac91641eb91533512d9cce","impliedFormat":99},{"version":"1b14258578fbacb5905cc302ec81ebb0bd8c786e33bee2108ed381d122da1039","impliedFormat":99},{"version":"fe21d99a203a9f2a170c52875cadbd40fafa6c7e8d3bacf19df19d82cfe60860","impliedFormat":99},{"version":"c40b5f40ad781342ba9e8992ab1df9642f6391313d779a167326d4e45b766dcc","impliedFormat":99},{"version":"f1aec9f26eae8fa039636ba26b19eabe54e442e770848b186562ac88665ef791","impliedFormat":99},{"version":"2f8051cfa22e5a15ae9be6dfe4d5184b32275e92265b04a11c035ca39f0be470","impliedFormat":99},{"version":"4ff469e42e0007139d4c18ac6f31a20955c42c824bd2e290938e17bc816c9427","impliedFormat":99},{"version":"2960a783ca4b5aadf5070ebb1c66cda79b5dfccb4397a070a438bc233b3580a1","impliedFormat":99},{"version":"7c7c116666be0bbc96aca681b9bb4d9afb8c417e6dc3e278ce2c38ad2e36a8e4","impliedFormat":99},{"version":"7afc6c01b90425a4d51508f4ed34be5ffa41f48cf47e396a5ac97f4fa276310f","impliedFormat":99},{"version":"0ea87fbb717c95c9659a0908d3db9d7e09729db35ec0be4fc87f6403d73ee601","impliedFormat":99},{"version":"9ecec578fc9353ec166dabe88b0444483b6c6370016b044651380ec6d45fb2aa","impliedFormat":99},{"version":"f58d04b4d4930fc8dc9045d1e70cd2a04bf512a7493b5af18733846568b7e8cf","impliedFormat":99},{"version":"fda4de01fb822dbb05d76f200a5810f75941c138608281c95c181276172eef33","impliedFormat":99},{"version":"bf7a5d6ebd9f63d59b099f653c3bf3af4f66b46da453ed7db9025c3d73e91471","impliedFormat":99},{"version":"5fd1af014582e6e8e4a43259c934026a4c8c0cad9f69b28df6b69b21785cdb08","impliedFormat":99},{"version":"e43dc8ecc36f0452b708dfcac8c615eb848015d5e91ce2f02109638094b6c99d","impliedFormat":99},{"version":"43d6f4441d9337dfc1c59cc8214a1f82cdd5e2736b175c3aba5146bbf29d2b47","impliedFormat":99},{"version":"3fd6b145df6b932f9a189947cf2a4655ca6cf10a5052a4968ac62698829d210c","impliedFormat":99},{"version":"d4df8c284d02f2e3ac24bb2aaee71289b80d3cb5950d61c8af9b0c3121b8f1ba","impliedFormat":99},{"version":"dcb2a7e17276b7e0eba5f614c89f77b4dbe98092e3d7fdfbd97fddd61d5b9f8c","impliedFormat":99},{"version":"4ddac49230b4420200ba667ad664a33e6ba21cac2b222878fea691bd4c46c94d","impliedFormat":99},{"version":"49de2e31605e50caeeb6d67feb6861d4e7e29b35888375aa1dd81cc90de8cfd5","impliedFormat":99},{"version":"1e3491a13442f711c0e2f17cd8d215967ba11c20b16e8e50b96adfa99ebf1f6a","impliedFormat":99},{"version":"6b3e952229f72a6ca6005e56cb9022710a952a58bd28f521c924db2044b7365e","impliedFormat":99},{"version":"0c1430e7f7b198501bd5ff9be1116ee2ec45aba065c0626821fbcbd684026668","impliedFormat":99},{"version":"a0cd53e94116dc57a8a1c3f281bf954033c4c0eb5f0968654efce5b6586fc75d","impliedFormat":99},{"version":"3312ede115245e7864779a1f3a540948fe26d526708964e0f4585d2a756a3aa9","impliedFormat":99},{"version":"93110ec6a5c245ae8ec96a9d66da36a75b799ed1f5af03751c104c0cf0842d9b","impliedFormat":99},{"version":"3800d26d7e0602d6735ea7f8d7c3e3db1dcf14be6bf89616d3372a7c2df21c6d","impliedFormat":99},{"version":"89bf59c1d834a4b01c7d9b5b4cfa64ffed09e59580d27bbadf1acdd69706c200","impliedFormat":1},{"version":"c8adda9f45d2f7ec9fb28c59859db32da6c2835f1fec96433e2729e5805fa46f","impliedFormat":99},{"version":"f5a1b2ccbcb26cea8b577af7882ff2a9294f4df6a45de84592edb5d076e748fe","impliedFormat":1},{"version":"6ac54ff75639970f9936ce0937b54d9813268c59961b681c272ea2c1a679308e","impliedFormat":99},{"version":"4bd7723f59fd5372c8e0f57d458dc155a3bb034c2a601aed37a341018c13bb6b","impliedFormat":99},{"version":"278807e5fbad9a322630a75afb7382edb4a532900eff1ac8c7b05e574051fc21","impliedFormat":99},{"version":"8db3b730cdd1993dde9f7c0e79c4236091c88a12d2f9fba37a2a216fe8193f65","impliedFormat":99},{"version":"d16b9b51d8abfb8b9e404bcebc942c949f91c8b43ded93d000b0d48729f59583","impliedFormat":99},{"version":"30d3d245e92f425010cab4732dcfca5d97585cfd2cb57a5e9c3abdd902bc98f5","impliedFormat":99},{"version":"88b2eb23d36692162f2bf1e50577ebcde26de017260473e03ed9a0e61e2726a4","impliedFormat":99},{"version":"23ffbd8c0e20a697d2ea5a0cf7513fb6e42c955a7648f021da12541728f62182","impliedFormat":99},{"version":"c127ebf14d1b59d1604865008fb072865c5ca52277621f566092fe1f42ce0954","impliedFormat":99},{"version":"def638da26d84825a312113a20649d3086861de7c06a18ea13121278702976fd","impliedFormat":99},{"version":"fbaf86f8ba11298dea2727ce0da84b4ab6ae6c265e1919d44aff7d9b2bbc578a","impliedFormat":99},{"version":"c1010caaeaca8e420c6e040c2e822dbe18702459c93a7d2d5de38597d477b8cd","impliedFormat":99},{"version":"e1f0d8392efd9d71f2644eb97d3f33d90827e30ea8051d93b6f92bb11dff520a","impliedFormat":99},{"version":"085211167559ca307d4053bb8d2298d5ad83cbc3d2ae9bb4c8435a4cabf59369","impliedFormat":99},{"version":"12a2b25c7c9c05c8994adf193e65749926acfcc076381f7166c2f709a97bdf0a","impliedFormat":99},{"version":"0f93a3fdd517c1e45218cd0027c1d6b82237e379dc6b66d693aab1fe74c82e81","impliedFormat":99},{"version":"3b568b63f0e8b3873629a4d7a918dce4266ad41461004ab979f8dcdfd13532bb","impliedFormat":99},{"version":"8a2619c8e24305f6b9700b35af178394b995dcb28690a57a71cca87ee7e709ae","impliedFormat":99},{"version":"f95fd2fc3cc164921a891f5d6c935fa0d014a576223dd098fc64677e696b0025","impliedFormat":99},{"version":"2b7a82692ecc877c5379df9653902e23f2d0d0bc9f210ec3cf9e47be54413c5c","impliedFormat":99},{"version":"e2ad09c011cf9d7ee128875406bef787eeb504659495f42656a0098c15fe646c","impliedFormat":99},{"version":"eb518567ea6b0b2623f9a6d37c364e1b1ac9d8b508d79e558f64ac05c17e2685","impliedFormat":99},{"version":"aa82876d59912d25becff5a79ed7341af04c71bfeb2221cc0417bc34531125e2","impliedFormat":99},{"version":"b084a412374bdd124048c52c4e8a82d64f3adec6c0a9ad5ecbb7317636039b0f","impliedFormat":99},{"version":"11199daa694c3ced3cc2a382a3fa7bd64e95eb40f9bbc3979fc8fb43f5ba38cc","impliedFormat":99},{"version":"2c86f279d7db3c024de0f21cd9c8c2c972972f842357016bfbbd86955723b223","impliedFormat":99},{"version":"f4e8f4151c3490cf7b68c685aabe901cbab19f962aaa2f118a97550e22689a76","impliedFormat":1},{"version":"799003c0ab928582fca04977f47b8d85b43a8de610f4eef0ad2d069fbb9f9399","impliedFormat":1},{"version":"d998eea476c695d8e4ff9d007d5b46d49ca2ffa052f74dc20ca516425abd57b1","impliedFormat":1},{"version":"310fe80ff40a158c2de408efbe9de11e249c53d2de5e33ca32798e6f3fbc8822","impliedFormat":99},{"version":"9c86abbc4fd0248f56abc12aaecd76854517389af405d5ec2eb187fdb00a606f","impliedFormat":99},{"version":"69fab68a769c17a52a24b868aeb644f3ee14abaa5064115f575ddd59231105ce","impliedFormat":99},{"version":"e181eb86b2caf80fe18c72efce6b913bc226e4a69a5456eaf4f859f1c29c6fd6","impliedFormat":99},{"version":"93f7871380478bc6acf02ad9f3dc7da0c21997caebbe782eb93a11b7bd06a46d","impliedFormat":99},{"version":"154f23902d7a3fcdace4c20b654da7355fee4b7f807d1f77d6c9a24a8756013a","impliedFormat":99},{"version":"1589e5ac394b2b2e64264da3e1798d0e103b4f408f5bae1527d9e706f98269c7","impliedFormat":99},{"version":"a0f8ce72cb02247a112ce4a2fa0f122478a8e99c90a5e6b676b41a68b1891ad2","impliedFormat":99},{"version":"6e957ea18b2bf951cf3995d115ad9bfa439e8d891aeb1afc901d793202c0b90d","impliedFormat":99},{"version":"04718c7325e7df4bac9a6d026a0a2bd5a8b54501f274aaf93a03b5d1d0635bd1","impliedFormat":99},{"version":"405205f932d4e0ce688a380fa3150b1c7ff60e7fc89909e11a33eab7af240edb","impliedFormat":99},{"version":"a0bd46d587005aad4819980f6cf2dbcd80ebf584ed1a946202326a27158ba70e","impliedFormat":1},{"version":"07fcbb61a71bd69a92a5bbde69e60654666cf966b5675c2010c3bf9f436f056a","impliedFormat":1},{"version":"88b2eb23d36692162f2bf1e50577ebcde26de017260473e03ed9a0e61e2726a4","impliedFormat":1},{"version":"23ffbd8c0e20a697d2ea5a0cf7513fb6e42c955a7648f021da12541728f62182","impliedFormat":1},{"version":"43fba5fc019a4ce721a6f53ddb97fdc34c55049cfb793bc544d5c864ee5560b9","impliedFormat":1},{"version":"f4e12292c9a7663a13d152195019711c427c552eb0fa02705e0f61370cd5547a","impliedFormat":1},{"version":"c127ebf14d1b59d1604865008fb072865c5ca52277621f566092fe1f42ce0954","impliedFormat":1},{"version":"def638da26d84825a312113a20649d3086861de7c06a18ea13121278702976fd","impliedFormat":1},{"version":"fbaf86f8ba11298dea2727ce0da84b4ab6ae6c265e1919d44aff7d9b2bbc578a","impliedFormat":1},{"version":"c1010caaeaca8e420c6e040c2e822dbe18702459c93a7d2d5de38597d477b8cd","impliedFormat":1},{"version":"e1f0d8392efd9d71f2644eb97d3f33d90827e30ea8051d93b6f92bb11dff520a","impliedFormat":1},{"version":"085211167559ca307d4053bb8d2298d5ad83cbc3d2ae9bb4c8435a4cabf59369","impliedFormat":1},{"version":"55fc49198d8a85a73cdb79e596d9381cfdc9de93c32c77d42e661c1c1e7268ef","impliedFormat":1},{"version":"6a53fb3df8dd32ed1a65502ca30aeae19cfe80990e78ba68162d6cb2a7fed129","impliedFormat":1},{"version":"b5dcc18d7902597a5584a43c1146ca4fe0295ceb5125f724c1348f6a851dd6ed","impliedFormat":1},{"version":"0c6b0f3fbe6eb6a3805170b3766a341118c92ed7b6d1f193b9f35aa82f594846","impliedFormat":1},{"version":"60eaadb36cf157c5cae9c40e84fa367d04f52a150db3920dbe35139780739143","impliedFormat":1},{"version":"4680a32b1098c49dc87881329af1e68af9af94e051e1b9e19fed555a786f6ce6","impliedFormat":1},{"version":"89fcd129ec37f321cddcdb6b258ffe562de4281e90ec3ccbe7c1199ba39359ca","impliedFormat":1},{"version":"4313011f692861c2c1f5205d7f9a473e763adab6444f9853b96937b187fb19f7","impliedFormat":1},{"version":"caa57157e7bdb8d5f1efe56826fb84a6c8f22a1927bba7fa21fd54e2a44ccba2","impliedFormat":1},{"version":"6b74700abfe4a9b88be957fd8e373cfd998efb1a5f6ad122da49a92997e183ad","impliedFormat":1},{"version":"9ef1342f193bd8bae86c64e450c3ac468ef08652110355e1f3cdd45362eb95c4","impliedFormat":1},{"version":"6853c91662c36a2bf4c8371a87177c819007c76a23c293ef3f686ce9157ae4c8","impliedFormat":1},{"version":"9be1c5dabce43380d13fc621100676b03d420b5687b08d1288f479bee68ab7a8","impliedFormat":1},{"version":"8996d218010896712678e6a0337d8ef8b81c1066ab76f637dd8253f0d6ff838d","impliedFormat":1},{"version":"a15603bf387fc45defe28a68f405a6c29105e135c4e8538eeb6d0a1ef5b69a81","impliedFormat":1},{"version":"84e2532e4d42949a2775cdd8bb7b2b97370dd6ddb683d0c199b21bf6978b152d","impliedFormat":1},{"version":"22bf5f19f620db3b8392cfece44bdd587cdbed80ba39c88a53697d427135bf37","impliedFormat":1},{"version":"23ebbd8d484d07e1c1d8783169c20570ed8409966b28f6be6cf8e970d76ef491","impliedFormat":1},{"version":"18b6fa2c778cad6489f2febf76433453f5e2432ec3535f2d45ae7d803b93cc17","impliedFormat":1},{"version":"609d0d7419999cf44529e6ba687e2944b2fc7ad2570d278fd4e6b1683c075149","impliedFormat":1},{"version":"249cf421b8878a3fe948d9c02f6b0bae65491b3bb974c2ffc612341406fa78ff","impliedFormat":1},{"version":"b4aa22522d653428c8148ddbf1dcc1fb3a3471e15eb1964429a67c390d8c7f38","impliedFormat":1},{"version":"30b2cee905b1848b61c7d28082ebfa2675dd5545c0d25d1c093ce21a905cdccc","impliedFormat":1},{"version":"0a2a2eed4137368735205de97c245f2a685af1a7f1bf8d636b918a0ee4ff4326","impliedFormat":1},{"version":"69f342ce86706aa2835a62898e93ea7a1f21b1d89c70845da69371441bb6cd56","impliedFormat":1},{"version":"b5ab4282affcfd860dd1cc3201653f591509a586d110f8e5b1b010508ba79b2c","impliedFormat":1},{"version":"d396233f6cd3edf0d33c2fbfc84ded029c3ea4a05af3c94d09d31a367cced111","impliedFormat":1},{"version":"bc41a726c817624a5136ae893d7aac7c4dc93c771e8d243a670324bccf39b02b","impliedFormat":1},{"version":"710728600e4b3197f834c4dd1956443be787d2e647a72f190bf6519f235aaadd","impliedFormat":1},{"version":"a45097e01ef30ba26640fed365376ab3ccd5faf97d03f20daff3355a7e60286a","impliedFormat":1},{"version":"763cbb7c22199f43fd5c2b1566af5ba96bf7366f125dd31a038a2291cbc89254","impliedFormat":1},{"version":"031933bf279b7563e11100b5e1746397caf3a278596796a87bc0db23cf68dc9e","impliedFormat":1},{"version":"a4a54c1f58fc6e25a82e2c0f651bf680058bd7f72cfb2d43b85ee0ab5fe2e87e","impliedFormat":1},{"version":"9613d789b6f1037f2523a8f70e1b736f1da4566b470593da062be5c9e13dac57","impliedFormat":1},{"version":"0d2a320763a0c9c71493f8f1069971018c8720a6e7e5a8f10c26b6de79aa2f7d","impliedFormat":1},{"version":"817e0df27a237a268dc16e5acffc19f9a74467093af7a0ba164ee927007a4d25","impliedFormat":1},{"version":"43102521b5ca50ff1865188c3c60790feaed94dc9262b25d4adec4dbc76f9035","impliedFormat":1},{"version":"f99947f8d873b960b0115e506ef9c43f4e40c2071b1d20375564538af4a6023b","impliedFormat":1},{"version":"c1e5ad5ca89d18d2a36d25e8ec105623648cf35615825e202c7d8295a49d61ab","impliedFormat":1},{"version":"2b6c9cb81da4e0a2e32a58230e8c0dec49fc5b345efb7f7a3648b98956be4b13","impliedFormat":1},{"version":"99e34af3ede50062dcc826a1c3ce2d45562060dfd0f29f8066381a6ef548bf2a","impliedFormat":1},{"version":"49f5c2a23ea5fc4b2cdb4426f09d1c8b83f8409fa2af13ef38845cc9b9d4bc3d","impliedFormat":1},{"version":"e935227675144b64ecde3489e4a5e242eeb25fdd6b7464b8c21ad1f7a0faa88b","impliedFormat":1},{"version":"b42e6bbe88dc79c2d6dc5605fb9c15184e70f64bdd7b8d4069b802b90ce86df6","impliedFormat":1},{"version":"b9cd712399fdc00fdae07e96c9b39c3cb311e2a8a5425f1bd583f13cab35e44b","impliedFormat":1},{"version":"5a978550ae131b7fef441d67372fd972abab98ea9fdb9fa266e8bdc89edcb8d6","impliedFormat":1},{"version":"4f287919cfc1d26420db9f0457cd5c8780b1ef0a9f949570936abe48d3a43d91","impliedFormat":1},{"version":"496b23b2fd07e614bc01d90dd4388996cb18cd5f3a612d98201e9f683e58ad2e","impliedFormat":1},{"version":"dcfbe42824f37c5fb6dc7b9427ef2500791ec0d30825ecb614f15b8d5bf5a667","impliedFormat":1},{"version":"390124ad2361b46bf01851d25e331cd7eed355d04451d8b2a4aa985c9de4f8ce","impliedFormat":1},{"version":"14d94f17772c3a58eda01b6603490983d845ee2012cd643f7497b4e22566aacb","impliedFormat":1},{"version":"03ef2386c683707ce741a1c30cb126e8c51a908aa0acc01c3471fafb9baaacd5","impliedFormat":1},{"version":"66a372e03c41d2d5e920df5282dadcec2acae4c629cb51cab850825d2a144cea","impliedFormat":1},{"version":"5b48ba9a30a93176a93c87f9e0abf26a9df457eeb808928009439ca578b56f27","impliedFormat":1},{"version":"4707625392316d3c16edbd0716f4ac310e8ff5d346d58f4d01a2b7e0533a23df","impliedFormat":1},{"version":"154d58a4b2d9c552dc864ea39c223d66efd0ed2dd8b55bd13db5225d14322915","impliedFormat":1},{"version":"6a830433fa072931b4ea3eb9aa5fa7d283f470080586a27bfe69837a0f12de9a","impliedFormat":1},{"version":"d25e930e181f4f69b2b128514538f2abb54ef1d48a046ad776ac6f1cda885a72","impliedFormat":1},{"version":"0259b4c21bc93b52ca82c755f97fc90481072bcc44a8010131b2ea7326cf03fe","impliedFormat":1},{"version":"bea43a13a1104a640da0cb049db85c6993f484a6cc03660496b97824719ecc91","impliedFormat":1},{"version":"0224239d61fe66d4900544d912b2e11c2cca24b4707d53fdb94b874a01e29f48","impliedFormat":1},{"version":"2bce8fd2d16a9432110bbe0ba1e663fd02f7d8b8968cd10178ea7bc306c4a5df","impliedFormat":1},{"version":"9c4ad63738346873d685e5c086acbf41199e7022eff5b72bb668931e9ca42404","impliedFormat":1},{"version":"cfb6329bf8ce324e83fe4bbdee537d866a0d5328246f149a0958b75d033de409","impliedFormat":1},{"version":"efc3816f19ea87a7050c84271ea3d3aad9631a517c168013c4f4b6724c287ce0","impliedFormat":1},{"version":"f99f6737336140047e8dd4ade3859f08331aa4b17bc2bd5f156a25c54e0febbc","impliedFormat":1},{"version":"12a2b25c7c9c05c8994adf193e65749926acfcc076381f7166c2f709a97bdf0a","impliedFormat":1},{"version":"0f93a3fdd517c1e45218cd0027c1d6b82237e379dc6b66d693aab1fe74c82e81","impliedFormat":1},{"version":"03c753da0bee80ad0d0f1819b9b42dfe9bf9f436664caf15325aa426246fd891","impliedFormat":1},{"version":"18f5bf1dae429c451f20171427c9e3223fade4346af4dfd817725cbeb247a09d","impliedFormat":1},{"version":"a4eece5fab202e840dd84f7239e511017a8162edb8fc8b54ff2851c5c844125c","impliedFormat":1},{"version":"c4a94af483a63bf947d89f97553a55df5107c605ec8a26f0b9b8bdcc14bd6d89","impliedFormat":1},{"version":"19de2915ccebc0a1482c2337b34cb178d446def2493bf775c4018a4ea355adb8","impliedFormat":1},{"version":"9be8fc03c8b5392cd17d40fd61063d73f08d0ee3457ecf075dcb3768ae1427bd","impliedFormat":1},{"version":"3b568b63f0e8b3873629a4d7a918dce4266ad41461004ab979f8dcdfd13532bb","impliedFormat":1},{"version":"a5e5223c775fe30d606b8aaa521953c925d5ad176a531c2b69437d2461aaabbd","impliedFormat":1},{"version":"8cbf41d2d1ce8ac2066783ae00613c33feef07493796f638e30beaf892e4354a","impliedFormat":1},{"version":"e22ad737718160df198cd428f18da707177d0467934cecdeed4be6e067b0c619","impliedFormat":1},{"version":"15bf5ed8cb7c1a1e1db53fa9b45bc1a1c73c0497735343a8d0c59fdb596a3744","impliedFormat":1},{"version":"791fce84bce8b6948e4f23422d9cbbd7d08c74b3f91cca12dcae83d96079798b","impliedFormat":1},{"version":"8a2619c8e24305f6b9700b35af178394b995dcb28690a57a71cca87ee7e709ae","impliedFormat":1},{"version":"f95fd2fc3cc164921a891f5d6c935fa0d014a576223dd098fc64677e696b0025","impliedFormat":1},{"version":"8c9cecaaa9caba9a8caa47f46dcf24b524b27899b286d8edcc75a81b370d2ba3","impliedFormat":1},{"version":"2b7a82692ecc877c5379df9653902e23f2d0d0bc9f210ec3cf9e47be54413c5c","impliedFormat":1},{"version":"e2ad09c011cf9d7ee128875406bef787eeb504659495f42656a0098c15fe646c","impliedFormat":1},{"version":"eb518567ea6b0b2623f9a6d37c364e1b1ac9d8b508d79e558f64ac05c17e2685","impliedFormat":1},{"version":"630a48fb8f6b07161588e0aee3f9d301c59c97e1532c884118f89368baf4073b","impliedFormat":1},{"version":"14736c608aa46120f8d6d0bc5e0721b46b927bc7eba20e479600571935f27062","impliedFormat":1},{"version":"7574803692d2230db13205a7749b9c3587dccaccdf9e76f003f9e08078bb6d09","impliedFormat":1},{"version":"f3cc1588e666651c51353b1728460bee8acbc6e0f36be8c025eaaf292dca525d","impliedFormat":1},{"version":"0d4ea8a20527dcf3ad6cf1bd188b8ad4e449df174fad09b9e540ed81080af834","impliedFormat":1},{"version":"aa82876d59912d25becff5a79ed7341af04c71bfeb2221cc0417bc34531125e2","impliedFormat":1},{"version":"6f4b0389f439adc84cba35d45428668eabcfbdd351ba17e459d414ca51ab8eb8","impliedFormat":1},{"version":"d5dd33d15fbb07668c264b38065ac542a07a7650af4917727bbc09b58570e862","impliedFormat":1},{"version":"7d90202d0212e9cdc91a20bfddf04a539c89f09fe1d64db3343546fa2eb37e71","impliedFormat":1},{"version":"1a5d073c95a3a4480b17d2fa7fd41862a9df0cb2afaee86834b13649e96bdb45","impliedFormat":1},{"version":"2092495a5b3116c760527a690c4529748f2d8b126cdd5f56b2ce2230b48aba3f","impliedFormat":1},{"version":"620b29d6adbd4061bc0a8fedf145fcc8e8fc9648fb6e0a39726e33babb4e07bc","impliedFormat":1},{"version":"931eda51b5977f7f3fa7a0d9afde01cfd8b0cc1df0bb66dcf8c2cf6e7090384e","impliedFormat":1},{"version":"b084a412374bdd124048c52c4e8a82d64f3adec6c0a9ad5ecbb7317636039b0f","impliedFormat":1},{"version":"11199daa694c3ced3cc2a382a3fa7bd64e95eb40f9bbc3979fc8fb43f5ba38cc","impliedFormat":1},{"version":"2c86f279d7db3c024de0f21cd9c8c2c972972f842357016bfbbd86955723b223","impliedFormat":1},{"version":"dfb53b9d748df3e140b0fddb75f74d21d7623e800bb1f233817a1a2118d4bb24","impliedFormat":1},{"version":"8cfc293b33082003cacbf7856b8b5e2d6dd3bde46abbd575b0c935dc83af4844","impliedFormat":1},{"version":"7730c538d6d35efe95d2c0d246b1371565b13037e893178033360b4c9d2ac863","impliedFormat":1},{"version":"b256694544b0d45495942720852d9597116979d52f2b53c559fda31f635c60df","impliedFormat":1},{"version":"794e8831c68cc471671430ee0998397ea7a62c3b706b30304efdc3eaff77545a","impliedFormat":1},{"version":"9cfc1b227477e31988e3fb18d26b6988618f4a5da9b7da6bc3df7fc12fb2602e","impliedFormat":1},{"version":"264a292b6024567dd901fdabbf3239a8742bea426432cdbda4cf390b224188e1","impliedFormat":1},{"version":"f1556a28bb8e33862dcfa9da7e6f1dca0b149faf433fe6a50153ae76f3362db1","impliedFormat":1},{"version":"1d321aea1c6a77b2a44e02e5c2aeff290e3f1675ead1a86652b6d77f5fea2b32","impliedFormat":1},{"version":"4910efc2ce1f96d6e71a9e7c9437812ffae5764b33ab3831c614663f62294124","impliedFormat":1},{"version":"e3ceab51a36e8b34ab787af1a7cf02b9312b6651bac67c750579b3f05af646c1","impliedFormat":1},{"version":"baf9f145bcee1b765bed6e79fd45e1ff0ca297a81315944de81eb5d6fff2d13d","impliedFormat":1},{"version":"2afd62362b83db93cd20de22489fe4d46c6f51822069802620589a51ccad4b99","impliedFormat":1},{"version":"9f0cd9bd4ab608123b88328c78814738cbdee620f29258b89ef8cd923f07ff9c","impliedFormat":1},{"version":"801186c9e765583c825f28dab63a7ad12db5609e36dc6d9acbdc97d23888a463","impliedFormat":1},{"version":"96c515141c6135ccd6fb655fb9e3500074a9216ba956fb685dc8edc33f689594","impliedFormat":1},{"version":"416af6d65fc76c9ced6795f255cb1096c9d7947bede75b82289732b74d902784","impliedFormat":1},{"version":"a280c68b128ebba35fb044965d67895201c2f83b6b28281bb8b023ade68bf665","impliedFormat":1},{"version":"6fa118f15723b099a41d3beea98ed059bcd1b3eda708acf98c5eff0c7e88832f","impliedFormat":1},{"version":"dcbf582243e20ea50d283f28f4f64e9990b4ed4a608757e996160c63cff6aa99","impliedFormat":1},{"version":"efa432d8fd562529c4e9f859fd936676dd8fef5d3b4bedb06f754e4740056ea9","impliedFormat":1},{"version":"a59b66720b2ccf2e0150fafb49e8da8dabdf4e1be36244a4ccd92f5bd18e1e9e","impliedFormat":1},{"version":"c657fb1ec3b727d6a14a24c71ea20c41cb7d26a503e8e41b726bb919eb964534","impliedFormat":1},{"version":"50d6d3174868f6e974355bf8e8db8c8b3fcf059315282a0c359ecf799d95514a","impliedFormat":1},{"version":"86bf79091014a1424fc55122caa47f08622b721a4d614b97dd620e3037711541","impliedFormat":1},{"version":"7a63313dff3a57f824a926e49a7262f7bd14e0e833cf45fa5af6da25286769c2","impliedFormat":1},{"version":"36dcaeffe1a1aed1cb84d4feba32895bf442795170edccc874fa32232b2354e5","impliedFormat":1},{"version":"686c6962d04d90edafc174aa5940acb9c9db8949c8d425131c01d796cf9a3aef","impliedFormat":1},{"version":"2b1dbc3d5762d6865744b6e7be94b8b9004097698c37e93e06983e42dd8fe93b","impliedFormat":1},{"version":"eb5e8f74826bdf3a6a0644d37a0f48133f8ad0b5298cc2c574102868542ba4eb","impliedFormat":1},{"version":"c6a82a9673ba517cf04dd0803513257d0adf101aed2e3b162a54d840c9a1a3b2","impliedFormat":1},{"version":"fc9f0f415abaa323efcecc4a4e0b6763bfe576e32043546d44f1de6541b6399b","impliedFormat":1},{"version":"2c4d772ac7ac56a44deef82903364eb7c78dd7bc997701123df0ce4639fe39bb","impliedFormat":1},{"version":"9369ef11eed17c1c223fdea9c0fa39e83f3722914ef390b1448db3d71620c93a","impliedFormat":1},{"version":"aa84130dbc9049bba6095f87932138698f53259b642635f6c9e92dd0ddc7512c","impliedFormat":1},{"version":"084ceadd21efabd4b58667dca00d4f644306099151d2ee18cd28a395855b8009","impliedFormat":1},{"version":"b9503e29f06c99b352b7cae052da19e3599fa42899509d32b23a27c9bb5bebf6","impliedFormat":1},{"version":"75188920fe6ccc14070fe9a65c036049f1141d968c627b623d4a897ec3587e15","impliedFormat":1},{"version":"e2e1df7f45013d2b34f8d08e6ae5a9339724b0ea251b5445fcca3e170e640105","impliedFormat":1},{"version":"af06feb5d18a6ea11c088b683bdb571800d1f76b98d848eecdf41e5ec8f317fd","impliedFormat":1},{"version":"0596af52b95e0c8adc2c07f49f109d746b164739c5866fa8bb394dd6329a3725","impliedFormat":1},{"version":"c3365d08fe7a1ccc3b8e8638edc30123007f3241b4604e2585b9f14422ab97d8","impliedFormat":1},{"version":"a7a3d96b04bb0ec8cb7d2669767c4756f97dd70d08548f9e6522dde4de8e8a03","impliedFormat":1},{"version":"745e960e885a4ba04c872225cbb44bd67a7490d169ceaefab7c0dfc444768676","impliedFormat":1},{"version":"0b1ce1768cde3535493a9daf99e3bbb8c7dcc3a7f9d8cd358cb846af71ce5cdf","impliedFormat":1},{"version":"48b9603f6e8a7c94b727277592a089f94261baa64e6c9d18165da0481663a69e","impliedFormat":1},{"version":"3c20a3bb0c50c819419f44aa55acc58476dad4754a16884cef06012d02b0722f","impliedFormat":1},{"version":"4dc64902cb86e677a928293593658fbf53388f9a30d2b934140c70a7267b07ec","impliedFormat":1},{"version":"cb4fd56539a61d163ea9befe6b0292c32aa68a104c1f68f61416f1bc769bcfba","impliedFormat":1},{"version":"0d852bdc2b72b22393a8eebe374ee3efe3e0d44e630037b5e1b6087985388e62","impliedFormat":1},{"version":"b6c9a2deefb6a57ff68d2a38d33c34407b9939487fc9ee9f32ba3ecf2987a88a","impliedFormat":1},{"version":"f6b371377bab3018dac2bca63e27502ecbd5d06f708ad7e312658d3b5315d948","impliedFormat":1},{"version":"faa72893e85cb8ebb1dafde6b427e5204e60bb5f3ee6576bb64c01db1f255bc8","impliedFormat":1},{"version":"95b7ed47b31a6eaddcdd853ee0871f2bb61e39ce36a01d03dfafb83766f6c10c","impliedFormat":1},{"version":"19287d6b76288c2814f1633bdd68d2b76748757ffd355e73e41151644e4773d6","impliedFormat":1},{"version":"fc4e6ec7dade5f9d422b153c5d8f6ad074bd9cc4e280415b7dc58fb5c52b5df1","impliedFormat":1},{"version":"3aea973106e1184db82d8880f0ca134388b6cbc420f7309d1c8947b842886349","impliedFormat":1},{"version":"765e278c464923da94dda7c2b281ece92f58981642421ae097862effe2bd30fa","impliedFormat":1},{"version":"de260bed7f7d25593f59e859bd7c7f8c6e6bb87e8686a0fcafa3774cb5ca02d8","impliedFormat":1},{"version":"d95c4eaad4df9e564859f0c74a177fa0b2e5f8a155939b52580566ab6b311c3f","impliedFormat":1},{"version":"7192a6d17bfa06e83ba14287907b7c671bef9b7111c146f59c6ea753cfc736b9","impliedFormat":1},{"version":"5156d3d392db5d77e1e2f3ea723c0a8bd3ca8acffe3b754b10c84b12f55a6e10","impliedFormat":1},{"version":"a6494e7833ee04386a9f0c686726f7cb05f52f6e069d9293475ccb1e791ee0da","impliedFormat":1},{"version":"d9af0c89a310256851238f509a22aa1071a464d35dc22ea8c2a0bae42dd81bc5","impliedFormat":1},{"version":"291642a66e55e6ca38b029bc6921c7301f5c7b7acf21ae588a5f352e6c1f6d58","impliedFormat":1},{"version":"43cd7c37298b051d1ce0307d94105bcd792c6c7e017282c9d13f1097c27408e8","impliedFormat":1},{"version":"e00d8cce6e2e627654e49c543b582568ad0bf27c1d4ad1018d26aff78d7599df","impliedFormat":1},{"version":"ed13354f0d96fb6d5878655b1fead51722b54875e91d5e53ef16de5b71a0e278","impliedFormat":1},{"version":"fcb934d0fcdee06a8571bd90aa3a63aa288c784b3ebcecfe7ae90d3104d321f4","impliedFormat":1},{"version":"af682dfabe85688289b420d939020a10eb61f0120e393d53c127f1968b3e9f66","impliedFormat":1},{"version":"0dca04006bf13f72240c6a6a502df9c0b49c41c3cab2be75e81e9b592dcd4ea8","impliedFormat":1},{"version":"7dc0b5e3d7be8e1f451f0545448c2eaa02683f230797d24434b36f9820d5a641","impliedFormat":1},{"version":"247af61cdc3f4ec7876b9e993a2ecdd069e10934ff790c9cee5811842bff49eb","impliedFormat":1},{"version":"4be8c2c63d5cd1381081d90021ddfaef106881df4129eddeeaba906f2d0f75d0","impliedFormat":1},{"version":"012f621d6eb28172afb1b2dc23898d8bc74cf35a6d76b63e5581aa8e50fa71b3","impliedFormat":1},{"version":"3a561fa91097e4580c5349ce72e69d247c31c11d29f39e1d0bd3716042ff2c0b","impliedFormat":1},{"version":"bc9981a79dda3badea61d716d368a280c370267e900f43321f828495f4fef23c","impliedFormat":1},{"version":"2ed3b93d55aea416d7be8d49fe25016430caab0fe64c87d641e4c2c551130d17","impliedFormat":1},{"version":"3d66dfc31dd26092c3663d9623b6fc5cec90878606941a19e2b884c4eacd1a24","impliedFormat":1},{"version":"6916c678060af14a8ce8d78a1929d84184e9507fba7ab75142c1bcb646e1c789","impliedFormat":1},{"version":"3eea74afae095028597b3954bde69390f568afc66d457f64fff56e416ea47811","impliedFormat":1},{"version":"549fb2d19deb7d7cae64922918ddddf190109508cc6c7c47033478f7359556d2","impliedFormat":1},{"version":"e7023afc677a74f03f8ccb567532fe9eedd1f5241ee74be7b75ac2336514f6f6","impliedFormat":1},{"version":"ff55505622eac7d104b9ab9570f4cc67166ba47dd8f3badfb85605d55dd6bdc9","impliedFormat":1},{"version":"102fac015b1eebfa13305cb90fd91a4f0bbcabb10f2343556b3483bbb0a04b62","impliedFormat":1},{"version":"18a1f4493f2dbad5fd4f7d9bfba683c98cf5ed5a4fa704fa0d9884e3876e2446","impliedFormat":1},{"version":"f57e6707d035ab89a03797d34faef37deefd3dd90aa17d90de2f33dce46a2c56","impliedFormat":1},{"version":"cc8b559b2cf9380ca72922c64576a43f000275c72042b2af2415ce0fb88d7077","impliedFormat":1},{"version":"1a337ca294c428ba8f2eb01e887b28d080ee4a4307ae87e02e468b1d26af4a74","impliedFormat":1},{"version":"310fe80ff40a158c2de408efbe9de11e249c53d2de5e33ca32798e6f3fbc8822","impliedFormat":1},{"version":"d6ce96c7bb34945c1d444101f44e0f8ba0bba8ab7587a6cc009a9934b538c335","impliedFormat":1},{"version":"1b10a2715917601939a9288d49beccd45b591723256495b229569cd67bbe48a8","impliedFormat":1},{"version":"7498dfdeed2e003ec49cdf726ff6c293002d1d7fdadbc398ce8aafe6d0688de7","impliedFormat":1},{"version":"8492306a4864a1dc6fc7e0cc0de0ae9279cbd37f3aae3e9dc1065afcdc83dddc","impliedFormat":1},{"version":"9c86abbc4fd0248f56abc12aaecd76854517389af405d5ec2eb187fdb00a606f","impliedFormat":1},{"version":"9ffd906f14f8b059d6b95d6640920f530507e596e548f7a595da58ab66e3ce76","impliedFormat":1},{"version":"1884bccc10ce40adca470c2c371c1c938b36824f169c56f7f43d860416ca0a4c","impliedFormat":1},{"version":"986b55b4f920c99d77c1845f2542df6f746cb5adc9ab93eb1545a7e6ef37590d","impliedFormat":1},{"version":"cd00906068b81fbd8a22d021580ac505e272844408174520fafed0ae00627a5d","impliedFormat":1},{"version":"69fab68a769c17a52a24b868aeb644f3ee14abaa5064115f575ddd59231105ce","impliedFormat":1},{"version":"e181eb86b2caf80fe18c72efce6b913bc226e4a69a5456eaf4f859f1c29c6fd6","impliedFormat":1},{"version":"93f7871380478bc6acf02ad9f3dc7da0c21997caebbe782eb93a11b7bd06a46d","impliedFormat":1},{"version":"d00279ab020713264f570d5181c89ca362b7de8abddf96733de86bce0eca082c","impliedFormat":1},{"version":"f7db473f1d5d2a124f14886ac9dbfeccfbb94a98bbe1610a47c30c2933afa279","impliedFormat":1},{"version":"f44cf6c6d608ef925831e550b19841b5d71bd87195bd346604ff05644fb0d29c","impliedFormat":1},{"version":"154f23902d7a3fcdace4c20b654da7355fee4b7f807d1f77d6c9a24a8756013a","impliedFormat":1},{"version":"562f4f3c75a497d3ad7709381f850bb8c7646a9c6e94fdf8e91928e23d155411","impliedFormat":1},{"version":"4583380b676ee59b70a9696b42acfa986cd5f32430f37672e04f31f40b05df74","impliedFormat":1},{"version":"ad0a13f35a0d88803979f8ea9050ad7441e09d21a509abf2f303e18c1267af17","impliedFormat":1},{"version":"ba9781c718ab3d09cbde1216029072698d2da6135f0d2f856ba387d6caceb13e","impliedFormat":1},{"version":"d7c597c14698ba5fc8010076afa426f029b2d8edabb5073270c070cc645ba638","impliedFormat":1},{"version":"bd2afc69cf1d85cd950a99813bc7eff007d8afa496e7c2142a845cd1181d0474","impliedFormat":1},{"version":"558b462b23ea186d094dbff158d652acd58c0988c9fd53af81a8903412aa5901","impliedFormat":1},{"version":"0e984ae642a15973d652fd7b0d2712a284787d0d7a1db99aa49af0121e47f1df","impliedFormat":1},{"version":"0ad53ee208a23eef2a5cb3d85f2a9dc1019fd5e69179c4b0c02dc56c40d611c4","impliedFormat":1},{"version":"7a6898b26947bd356f33f4efef3eb23e61174d85dca19f41a8780d6bb4bfb405","impliedFormat":1},{"version":"9fe30349d26f34e85209fb06340bac34177f7eae3d6bb69dc12cd179d2c13ddf","impliedFormat":1},{"version":"d568c51d2c4360fd407445e39f4d86891dba04083402602bf5f24fd3969cacbb","impliedFormat":1},{"version":"b2483a924349ec835f4d778dd6787447a2f8bfbb651164851bff29d5b3d990a6","impliedFormat":1},{"version":"aae66889332cff4b2f7586c5c8758abc394d8d1c48f9b04b0c257e58f629d285","impliedFormat":1},{"version":"0f86c85130c64d6dbe6a9090bb3df71c4b0987bce4a08afe1ac4ece597655b9c","impliedFormat":1},{"version":"0ce28ad2671baed24517e1c1f4f2a986029137635bce788ee8fb542f002ac5b8","impliedFormat":1},{"version":"cd12e4fe77d24db98d66049360a4269299bcfb9dc3a1b47078ab1b4afac394cb","impliedFormat":1},{"version":"1589e5ac394b2b2e64264da3e1798d0e103b4f408f5bae1527d9e706f98269c7","impliedFormat":1},{"version":"ff8181aa0fde5ec2d737aecc5ebaa9e881379041f13e5ce1745620e17f78dcf9","impliedFormat":1},{"version":"0b2e54504b568c08df1e7db11c105786742866ba51e20486ab9b2286637d268f","impliedFormat":1},{"version":"bc1ffc3a2dca8ee715571739be3ec74d079e60505e1d0d2446e4978f6c75ba5c","impliedFormat":1},{"version":"770a40373470dff27b3f7022937ea2668a0854d7977c9d22073e1c62af537727","impliedFormat":1},{"version":"a0f8ce72cb02247a112ce4a2fa0f122478a8e99c90a5e6b676b41a68b1891ad2","impliedFormat":1},{"version":"6e957ea18b2bf951cf3995d115ad9bfa439e8d891aeb1afc901d793202c0b90d","impliedFormat":1},{"version":"a1c65bd78725f9172b5846c3c58ddf4bcbb43a30ab19e951f0102552fbfd3d5d","impliedFormat":1},{"version":"04718c7325e7df4bac9a6d026a0a2bd5a8b54501f274aaf93a03b5d1d0635bd1","impliedFormat":1},{"version":"405205f932d4e0ce688a380fa3150b1c7ff60e7fc89909e11a33eab7af240edb","impliedFormat":1},{"version":"566fc1a6616a522f8b45082032a33e6d37ff7df3f7d4d63c3cce9017d0345178","impliedFormat":1},{"version":"3b699b08db04559803b85aa0809748e61427b3d831f77834b8206e9f2ed20c93","impliedFormat":1},{"version":"b27242dd3af2a5548d0c7231db7da63d6373636d6c4e72d9b616adaa2acef7e1","impliedFormat":1},{"version":"e0ee7ba0571b83c53a3d6ec761cf391e7128d8f8f590f8832c28661b73c21b68","impliedFormat":1},{"version":"072bfd97fc61c894ef260723f43a416d49ebd8b703696f647c8322671c598873","impliedFormat":1},{"version":"e70875232f5d5528f1650dd6f5c94a5bed344ecf04bdbb998f7f78a3c1317d02","impliedFormat":1},{"version":"8e495129cb6cd8008de6f4ff8ce34fe1302a9e0dcff8d13714bd5593be3f7898","impliedFormat":99},{"version":"36e29bad31d34a8c5ef2a7bffd1d1d4a6ecb56cf7044bba3f3fb53af664cc995","impliedFormat":1},{"version":"0b66db734128f1dc8452ce19ac48a36b302c9d5f1471c9185dc00f7a1be37df4","impliedFormat":1},{"version":"ee11a267440026e7c77125f45576cbc1c10d16b7adb54455cc01b6e3921c2a50","impliedFormat":1},{"version":"c985b87d83e53c26af225df37603fe0ac73038f573ab483b0f6e46b007c5e26d","impliedFormat":1},{"version":"16644569c814ea007149afbc849ba0dc726887e4baa513156787fbeccc96bb5f","impliedFormat":1},{"version":"7f1a813bfc91a99771d5ded13f6f4c55138567f145051ffccd14219ac6495156","impliedFormat":1},{"version":"0693e3c9523391eb333248236f4e4df9a63961d729cda0081302ebf04e4745be","impliedFormat":1},{"version":"8456ecc963bc4816e34b14dba7c5806a674a9305778fedd44bd3fb9f7cd0a278","impliedFormat":1},{"version":"ef79a08ff6dbf02d7aa850d03768dfa7da8d38f1f8f1f70b5554b2eb69e30ef9","impliedFormat":1},{"version":"4b01bf8cb509dd9235289ae0f1dc1d11973eeae5c4e8a6f4f1f7e7a0fbd9981f","impliedFormat":1},{"version":"42333ff4abd55ed8522227f405936132874e3d9a3bb1cd43aa65816352ce51cc","impliedFormat":1},{"version":"360564742c5dc4a3606c7460c857b8602bd3642c463cc97468b40288bf8bbea2","impliedFormat":1},{"version":"69cb2a2d292615c3a90be6ae20cdfbba3e2a934c698c0b08aa042b70f3d1cf81","impliedFormat":1},{"version":"296d4f462ea7a071d145b4d2cbd5171ae1656a2b96e23aa95359c4d3fc1d9956","impliedFormat":1},{"version":"381efc65dd0d9c42d29cba0b662de1cf59e8d90c7e49fe1adcbb5f0e76a26ca0","impliedFormat":1},{"version":"fa1cba739d46abb87fbb0c567976c22412c64a8c319bc44e20f14c04b06fb96f","impliedFormat":1},{"version":"18c93713d0d514633603fe9a8cd44d7fbc90f23a231cd2c9a90aeaa3996837d6","impliedFormat":1},{"version":"48c5cee2757d97d85d2f01d3f29a9268f56eaea28cbbada0e98f948cfcbc7770","impliedFormat":1},{"version":"9d883529d433813184507105831699ae39720823464470da0f9584d0225b36b7","impliedFormat":1},{"version":"2b4276dde46aa2faf0dd86119999c76b81e6488cd6b0d0fcf9fb985769cd11c0","impliedFormat":99},{"version":"38d4cff03e87dc58bfd50ffe5a3fb25e6e6d4136a1282883285baf71d35967c5","impliedFormat":99},{"version":"5ecea63968444d55f7c3cf677cbec9525db9229953b34f06be0386a24b0fffd2","impliedFormat":99},{"version":"6ea9c8bf2ae4d47a0dbc2a1f9ac1e36c639b2ac9225c4d271c2f63a2faf24831","impliedFormat":99},{"version":"a3d603c46b55d51493799241b8a456169d36301cc926ff72c75f5480e7eb25bf","impliedFormat":99},{"version":"90fcbd9deee8433092df459e5d136eb37667255f249d434f950874c96c27a81c","impliedFormat":99},{"version":"4e2d11861154220b941057210b53821022eb078f52a69bad9c44a0f3f4aaedb9","impliedFormat":1},{"version":"0c9175b5bd2e620bf90a40f4cdd308d533e348a9157dd6f2b8c2d5e181ce77bc","impliedFormat":1},{"version":"64a969b47b262c15b44bfcaaaa5a54339297ae5f1469a0c1d7d4620decbc5cfe","impliedFormat":1},{"version":"1bb9f4917e13faf29f47d4ca63641fbb2d304bd9a95e234dd74d8978231d8c8c","impliedFormat":1},{"version":"83ca8a0119f730a4200e6af658a21b838dd22cc79067e521b86b996fd415cbc6","impliedFormat":99},{"version":"f22075cd085a130131c0ebcdd471f2424bbe460ef68d7d5b50bf691b58ba2bac","impliedFormat":99},{"version":"a44f76fff2f69355e47e2895eca18af4c28a6862abc9125fe266a67111753b5a","impliedFormat":99},{"version":"fa65cce77db690964d095c4ef94f386b8a925d4c164ab89babb427f8557d865c","impliedFormat":99},{"version":"3f0136f80003bf8b2841adb7f3f5e27128eebe41dd3cfa6772586048a3e32311","impliedFormat":99},{"version":"a212fad2d57539fb4523624ae54bbe0b25073927aa84d4bca39735dc0e8531a7","impliedFormat":99},{"version":"a288a8cb67c1c923801463083573c9d2042b51c6bca982c41687b134cb101628","impliedFormat":99},{"version":"f35f9295848dda94b0a134d2b456e96b51fb658c29f816520daa289ca42485e8","impliedFormat":99},{"version":"9ba6e9061b3feb1a2d855586d67db82ea048720fa2202aa7e231aa5da4f7c1ac","impliedFormat":99},{"version":"9d3ab4f2ede93d02afe035f45822ecaf2ee0cc4b2c4d690f930f7eb417c2d317","impliedFormat":99},{"version":"9cb1abef450de3c94f0fb8868e08fee13ce0284a1d799ceb0d62d20f7e44d915","impliedFormat":99},{"version":"63bcf5cf036269d1cafe17c5f41314658afa0955d95efcbbdccf3916cac6ce49","impliedFormat":99},{"version":"756213e07866fa181de30d9b031d63ccd616bdf2003fc319612514916406f5ff","impliedFormat":99},{"version":"f39e2ee6ed6a453dbb5aa583bd8508912a7f0a1236dd4a42255dcd8aacc5c6e7","impliedFormat":99},{"version":"d5df36eb8879f0fd592e0fbde3b29318b989c97eb93e4727e9b304d7564adcf7","impliedFormat":99},{"version":"2178c14f77641be7147cbfbcf5d4381a6740b579693971c9829bb485c50b808e","impliedFormat":99},{"version":"188c0a555bb354ebce13d88f9d59341d5beec73aa0cd4688b422f8375019295e","impliedFormat":99},{"version":"45aa152e9a85a5a895e9d81171414cd803b5c3aac5c9a120f527dfe202d18424","impliedFormat":99},{"version":"edab0e84c0ea36b2c682ea68390d2b6571db78de209e58a60b51ca5712289be7","impliedFormat":99},{"version":"ee27415e33df9b86af9f0a0c58b9a4ffdf393ef49462429423ac2bcb5e00db0e","impliedFormat":99},{"version":"d986dfe24545378173b2674fbf41939395abf993432a5b5831a75900b86780d1","impliedFormat":99},{"version":"62914eae016cc07be599c7c594d9aca77aecda9688e285f0e9b28b01eb0c6b5d","impliedFormat":99},{"version":"8acce26b02c92d26c2937f3fab228ad635db5218e16bca90d20a609d7103103d","impliedFormat":99},{"version":"58c966c3de7741c7657080e3a7287e65d4b24e8eb730fba5d20c27ba8c657194","impliedFormat":99},{"version":"3cb574913ea25e7b27d26350a6a86a5c88000d054d6ae67ecc4dc2da3c346ff2","impliedFormat":99},{"version":"db064e58ec48dc1919d5527a4c8d3cdd64d315a7b2117f410a0d8eba023f5e5a","impliedFormat":99},{"version":"1ebf664b312148f43ab66b0697e7705e342b5224b07663b9739a9036f2e8a5df","impliedFormat":99},{"version":"8633998b325554c7bc52b4863fdad0bd22dd69554888ae5551977d6c62fa7234","impliedFormat":99},{"version":"568780fcdac2403b5e4944c680be60f04466f16b6d8830459eaf341e4635aec8","impliedFormat":99},{"version":"43f5e5d9786a6f7ac58b72df14ea7f3dae1935b244e5175fcd34c89fbcb3edbe","impliedFormat":99},{"version":"08d88160e4d9614577b36d09b56607b0ea066963d97e500deadb1c0671c802b1","impliedFormat":99},{"version":"6b6936838074331a1e4ed2a836672b4612bb336ef2e8eef56b5cb1df1f163bc9","impliedFormat":99},{"version":"a40125dc53d6e8fd92b6f521f6a339b8892e1e1ab2ec20c3739f305f0a2b3b7a","impliedFormat":99},{"version":"63c14f1a25cc9af22040f4e50b2ef46c8c5c746acd3629fae2db1d8be17262f0","impliedFormat":99},{"version":"b37f94a72f75b015035682f3fca650a3997b23416379f2430afe8a78c7ff199f","impliedFormat":99},{"version":"d91ac32532d59d549aea318a1dd4346228e69180623c26d78cc77ff96e7e527a","impliedFormat":99},{"version":"634eaea224f99dead236b11bd9a612371551654d84f1f77a2943df2f8a464567","impliedFormat":99},{"version":"a9ec13c0152633b349e7f85bcc1849eee49ea0ba1b6f2d30594a0207041b87ed","impliedFormat":99},{"version":"4a068a0e2cb2e8263521977da21b35ebdee3bf7ae2f0ee3182030f344925ea34","impliedFormat":99},{"version":"aaeedd2494f6963f742f3c732cbc6707532b1125045b70ee9dc15d70aea4e6eb","impliedFormat":99},{"version":"1817b2e383223f38a5cfbb95fdd9d2824eeac637b752f4593d8ded810df686b7","impliedFormat":99},{"version":"636b68c90155a7b3e44852e7c6700b2773d70a88535d827bcef0b2ec0e43d1d6","impliedFormat":99},{"version":"fe25b7a29f635a3faf406792174c87223af5cbb2f2b7916f723e3b1bee1db6b0","impliedFormat":99},{"version":"a6f01bfdefdc0b7f68f3c73cf50d966d8e004559aaa00f9b957e5c15c9fb6daf","impliedFormat":99},{"version":"b4b781ac2fa564ddd469604057941b084c34b9f17cba20c6c5fb64f81fe20eda","impliedFormat":99},{"version":"0960051f0e7beeb8e7e00bc526dd17ceebfc49c918989a88e31b7b348455c55e","impliedFormat":99},{"version":"ceec621e7f442ca6ce7f89886531de82cedac0f207475d7988461678ccdbc46f","impliedFormat":99},{"version":"289133e7b6d773a0dd8a38e31252f8ff19a5a3c11ae0ef354acb36ebab79a08c","impliedFormat":99},{"version":"c11f63e3cf21540be513088ea6dfab1fc474ee011e7686f96e846f3caeb79f53","impliedFormat":99},{"version":"0c228ad3d53c5d7eb6b1f8b306fffff5bc1e4d6c7663790b7813f44a11277555","impliedFormat":99},{"version":"c852ec8f5257701147c8e19d8dbb8b9f89659982559678b3cf4df1b87c6b61db","impliedFormat":99},{"version":"c05bffd82ccef5be3dbaa20cafe4460f141bee5419fbd3f8fd421926546375fe","impliedFormat":99},{"version":"95ba593633b6f71e400f9b0bbce20d55b01baf8da698866af87ea3d204929c7b","impliedFormat":99},{"version":"ee63e12faec9f15ece2215f8ffe3400dc3c58bf3598f23e06eb393443d622bc6","impliedFormat":99},{"version":"3fd396436c5f6447620ec2b10cbb73c0fb6bdbb40255875471ba9099b5cef057","impliedFormat":99},{"version":"d3b484173a40d96e1a1f84607c6d3181ec58f99a2ccb44a9a9483c746ff1d889","impliedFormat":99},{"version":"b2f4c5c351eb14e0491a835a7df6edfbf9add2a9ee0398d27dbc23cc2154fce2","impliedFormat":99},{"version":"3a4104be36d6764f94b49da4c2912436ce8db9b596af87ad8208fd30edf67cc3","impliedFormat":99},{"version":"89e4dee3d22af342783f1be94b90086b76050eac85183ae5f99349ff3be34620","impliedFormat":99},{"version":"72e003b2c2d73b8980f2cc091dd2ed5fdd58ca3901bda2dae148964b1424b68d","impliedFormat":99},{"version":"b62c6e4674b2ec3b4f37c17bd0fa88e5a8b0c3130e0d77b3c739cbc8eb7f7b7b","impliedFormat":99},{"version":"e26a17cdd3eae370141f54212e65d035755ab759da211eab198663b1f5571e78","impliedFormat":99},{"version":"acdcd28f22beeb7564926225c41a2a4f018b61cf7ed2874bc351059b9c82521c","impliedFormat":99},{"version":"b816c66fd566bf325d3f2fbbae36f480afb1d04f960135dc8254e5d0d3d6403e","impliedFormat":99},{"version":"4525de65826e7dc48909a0349696b4b400ad2312c2cf04a656d949600491e793","impliedFormat":99},{"version":"a51ef269c38659810a4400bc61d058d64a023b0ba4d99eae1f96a1a8ba3c0889","impliedFormat":99},{"version":"8b95503320d19cc20b4455b13e8abfd5b6bac1cd3d64d1099d3f943c1f75d16d","impliedFormat":99},{"version":"a9cfc9543943d597dc5f3cc4231bd606c0891b5b7d95d3c0a3c357247ad13efb","impliedFormat":99},{"version":"26bf7ff148c9858001df0e926c4754ed98e14578603a57abd01bc1ff47b74646","impliedFormat":99},{"version":"959d339c34aed58f8951ff5694412a0de7bc524b970c6c1809df8f84526204b2","impliedFormat":99},{"version":"5f072af48d5448c3bf1a42dfbce09ecbe619dfad5e755b46aa9208657ca3ac91","impliedFormat":99},{"version":"ae55114dc5769203d4624c4ec1443dacb65756eb2a4f3501514e0b55d8261e10","impliedFormat":99},{"version":"bb76ffd17b2f2dc89a695943c524fd253b2e62850003296d05451437b036930a","impliedFormat":99},{"version":"359b15bb457cd98409e1bedfafff3a326dd653e57ce332a163ee7531bc503e7b","impliedFormat":99},{"version":"6f4dd5823236e281bd9777d27110c889bae179c950534a65482b3bd8b6450590","impliedFormat":99},{"version":"e201187dd90a20af63deed3787aaf5510f5887ce2b8e56dbed848e687f776ef7","impliedFormat":99},{"version":"485ce8923b4c68f1e973e58e5c99de8c3a5495b7e3fa86bed2b18face29d691c","impliedFormat":99},{"version":"1d0bceb8eff6e81e5d2e082f74fdfb0c870845135433f2e2a5a08fd0ea86cdf7","impliedFormat":99},{"version":"d9affb744ad7c29dc28bbc1b09f6edb7ef98d78554cd5bb8b5e449cfdc75b922","impliedFormat":99},{"version":"f22410a757278fc59e6e6e2b11ff934ddb03273d9c9102271b711e533b1f19e1","impliedFormat":99},{"version":"745ea53849be153ed733f5be27722378c89fe813b43b3b2798db370dd204df63","impliedFormat":99},{"version":"9fcbdf19795129354ce740c9e6f3f87e3646a158b0ff8ae9370d4d6d8427c585","impliedFormat":99},{"version":"ce2b3d20407b51a5d3176d05dfe66824ef5bd810e4dce3d6653073a9b8135c0f","impliedFormat":99},{"version":"33ec1dfc03c64c66974c8e3b1428045efdcbb9c121914467396b2c21d9d4eb4a","impliedFormat":99},{"version":"93a5f2a6b98cb165fe56377ca9d1c786062bf5f60dbc0dbd1b8ffc37bf2058ed","impliedFormat":99},{"version":"ac3d71a464b0c0d7b74e5e54cdfc8b66ca0c4d24e479c541be105a6a5f3437d4","impliedFormat":99},{"version":"8a309783376df92e49ec85d8d67644e9c68529e3ff8981eca03a5d182970a370","impliedFormat":99},{"version":"ebcc8c9286da7ffa1c10f126ff13b9e17b459f52348160a4e6e799c55b16c8cd","impliedFormat":99},{"version":"a35800efccf9b29ad232b07b7f4477b832f737c27b23a0f80d0c15d9fc7a83d1","impliedFormat":99},{"version":"a729483a0cfda4e5cd0da3610856aaa0047885ce965ef7e906eb501c4cc83ab1","impliedFormat":99},{"version":"1a8d13160ce2d91ae12f99391ff8d45e8025f655e8b3ca5493bb97e7a551b8cf","impliedFormat":99},{"version":"ee306cf4448abdc53b27bdd079f944d60b8b97fdf3807ab8f2ef6ac338058e27","impliedFormat":99},{"version":"3f6e344f84f047c66cae945e44e5efc833cf74d70ff9c2fd43ed931f8b4f613b","impliedFormat":99},{"version":"fd74e506283ed9a0fd33380c787833107763698bacd3de89fce55bf386f10530","impliedFormat":99},{"version":"cc629838fedbcb3b019abeae39d7633b23e316b1f4e07e8b3bd6af3dbb3352fd","impliedFormat":99},{"version":"6519c8402b2ca27e658cb4e357a51b5ef921fd17459d0f7ff1a809623e89e65d","impliedFormat":99},{"version":"e64df60cfb87bc304f8955948297bcc08cc56bf4eac3aa8307655edf2e3f4c94","impliedFormat":99},{"version":"6f6c565c4922ea624dd9e4fa147e0f954ed483cfae04c1a79e3dfbbe5a34b301","impliedFormat":99},{"version":"4b26dc473060c217ffdee9d8acbeb42f2b5f47e456abf642bc9bf43c55b631d5","impliedFormat":99},{"version":"b8c22ef6bac62298a1d42beaa496a5c25d41d58aa52c75ab20a180bdf0e40d20","impliedFormat":99},{"version":"3b193ba20407b9c7593e89f3b60471e542f1eb5b3d96086db92303088bc4c7d1","impliedFormat":99},{"version":"b45c8cc49500a28c92220eee45f2a5114d050c7bdb47db2f3ccac84e0820519f","impliedFormat":99},{"version":"ec4fae13ecde25181827193439d8e1b65c5f1046274ff4bc77221440cb289814","impliedFormat":99},{"version":"ff562477c8a16ee5f4bcef5a6fa4f15f81c7d6b266ee70f65f148c58daca4e1f","impliedFormat":99},{"version":"4546f9dab5bb28dbd5e7107837d8e831c7f711d93aef4158e4a7bccb6b6c6434","impliedFormat":99},{"version":"7c5bb0778e9a110cf9d7bc56778092e0c7085ca9310614232b5976d60d155eab","impliedFormat":99},{"version":"ff03706640bcac77e4f58adf06ec0031be0d0cca8a923a1faf20556e44bd050d","impliedFormat":99},{"version":"5254d6dcd66682e15c0391b36cf203b4835bdd06f7645c06cdbf3048a7e9453d","impliedFormat":99},{"version":"3363113ee6288a60931f54adb1f0642cbfd1e5b56e0222658d8f286762a0ebc7","impliedFormat":99},{"version":"f5d111df38da163ed1524d80053818f4a8b7a6ef9f1038b71438cd37155a5636","impliedFormat":99},{"version":"1e8325d4006884b0f386f48ba38b6da98ef76101275c8df9dcadc2791ced930e","impliedFormat":99},{"version":"57fc1c850ea0621398ce9b2eef1478a84d81dce619d9166929677111d19354b4","impliedFormat":99},{"version":"aaee889cd9f6dadecd10cd1b2200862b472c495f50e559b9c8eaae345ad26f9a","impliedFormat":99},{"version":"bc792fe4deb6e29a4ee455abe81ccc82e8f812893df98f372d9939e4a0f531d5","impliedFormat":99},{"version":"7e535aa0b32594cfac46eee313f8cb29e6b4bc45756701bbd0005c2cae78d02b","impliedFormat":99},{"version":"38a0236a27a2010cd8f7dc7549015cd2a7b7ec134b20bdc7a7ad4131c8b25922","impliedFormat":99},{"version":"2c4ed82fb9ac542cb6462700c8efc5d3159f6eafa1df20becfef616747339212","impliedFormat":99},{"version":"cacab561eb0ae2fecb00c1a144017cd07db81369e51084307e211e916bfc3934","impliedFormat":99},{"version":"ea4729dc4e138eddca2938e106676d9b1213978c2a01c883ab777c215319bfb5","impliedFormat":99},{"version":"a4f66519474561c34c96e0725de0f843876ca29c8f3809b228600f3da43c45d3","impliedFormat":99},{"version":"7b08db00400f9d3a46cb8cc38b41c2030374afb2104d26cece2d044d19764921","impliedFormat":99},{"version":"80412d2831bb2f40d8a0262f1206f016fbae8b853d5032a887e96c0693611f3e","impliedFormat":99},{"version":"8d5f1e5e5d70505b92d4fe6115799343827aabbc1d79d78cdaad40f9496196d6","impliedFormat":99},{"version":"ede9149cc681915a2c58c4d6b769eb6a710fa7ee8349375ed1b248489f02fdf1","impliedFormat":99},{"version":"41067082ac23b2056b6798738ad14fcdf44cb61baa544105fc58a8d0087a4b7f","impliedFormat":99},{"version":"cded066f47040ea576d4a8a5a1d23bd36998586eb0fccb9ee2397d0d867fcabc","impliedFormat":99},{"version":"292c62ec0f13939485b1d07267efda774a1f1c28427d9ce0587bee7814a272ab","impliedFormat":99},{"version":"e4cfb3009d72aa786b5aaeda0e30d92f31d9a3068256300a533ea212a597c1db","impliedFormat":99},{"version":"ff06cc0f0c793791fbeaefdcb53f07ce4e8339b6943f70f8f63948059f6fa15b","impliedFormat":99},{"version":"69b1d5ea3808a205019bc47b0589e2281d79723e2ba063e6cdaf53db98e32762","impliedFormat":99},{"version":"5c18fd2063e3009ca9440e29b2b9f772dc50481e6e904bb3d7e1b7c581f44e6c","impliedFormat":99},{"version":"a3516a2ebe7d9db121c789fb16e1b8bf8a00533a460e6caf864c620cd8e2bd5a","impliedFormat":99},{"version":"9f338bcdf0a130fcbf8c6e1b815319a363d41d4fc4268dfeaf9d1a3e46783107","impliedFormat":99},{"version":"0c69100576e37fd513901728ca6c65b5010760ae951d67506438e28ecf1dfa5b","impliedFormat":99},{"version":"4fa4071720ba6a030140ad344a0be0632e45ae2bcdfe42ded1e180536a6e5ba2","impliedFormat":99},{"version":"977955f2b26844057f12b835a3e77880f28eccc4ced877078dcada38ef8104c9","impliedFormat":99},{"version":"db9df25d2b7a5698d615faa1abf5ee735f06d1a3655e09ca1dd8d42350b8bc5b","impliedFormat":99},{"version":"fa7eb1ccc4909ff72c4706df9089f068a64c39850c3c256040ebaec356be458b","impliedFormat":99},{"version":"c2544841c726a93e4f08010807a9d779d8ea49ddc8868beb7f57f4dda3935a19","impliedFormat":99},{"version":"89840555c11535e071c554ed1228c3614be696d349e82d6e3e24dc6e974d29dd","impliedFormat":99},{"version":"6303c8204067ff8a09f72a91cdc30d4050dfef631d303723cbeb90cab254f1e5","impliedFormat":99},{"version":"b7353f7699ad7820260f1a706519e6ec1fc21a02cb7f6486e81d5d764fd804f3","impliedFormat":99},{"version":"2e564d47026dcf106b73ebb6e1881e0579a82fbbb33d042e76fa9ec00e08be5e","impliedFormat":99},{"version":"342b1c58e51174ae888f5a5a9775da7ba93c02bd532381a7be2b8db892e526ea","impliedFormat":99},{"version":"f02bfbd0e9fa87e770c74a5975cad0297e76e14df5ce03ba9c9a8f06dafd0792","impliedFormat":99},{"version":"ebc91af1b516925754acc43500b0a70413e61d056ecfba030e6ff3b36a5f3ede","impliedFormat":99},{"version":"1bac668988ffddd316531ae0a6c0b37a1ed45f111f8d40970f607cec2fe48612","impliedFormat":99},{"version":"c92fb3ddd606dbfb1b0775d34ecabed90bf663ab80db33132104339c020bffc5","impliedFormat":99},{"version":"942c63de4c8e50c87753d1f341352dcfa9d72b706318b28c0e1f121b9aa9ec5d","impliedFormat":99},{"version":"129be44dd4295bc4e5ffd5542597336e57990d9b7a81e39b7234a9a598706cfe","impliedFormat":99},{"version":"3b674726455d2a57b39784de2acd0d6d320e45a851afefdabef606af08df8603","impliedFormat":99},{"version":"1c4a26f6150f60a77396ef2150f4ca1afd0bd83d3f800fe52cd3d06ac0d4f6f1","impliedFormat":99},{"version":"ad6def877dee2d3c3993c41053e2c1af8475bc969b35de4538c97f4662f3de0b","impliedFormat":99},{"version":"1d6211f24b5d168b493dc22a53db1e55dd716b5f4b0aefce397b38cc02a445b5","impliedFormat":99},{"version":"2d3f848df16ecca7d60100360c6349dec0ad9a7f0d0e39eab92f66e3bc8f098b","impliedFormat":99},{"version":"2ef18933b69b23254b0306267212f048f4fa8aefc819fcd88e0fa52552895f5c","impliedFormat":99},{"version":"a44c3aaa3483362da75c408b4cff42d8c1d218d68920d59958917aebe3477e92","impliedFormat":99},{"version":"df6d299edea81d27b89945a5cb15aa1208ae9b09b39aed06129bb24ee6ed0051","impliedFormat":99},{"version":"e5062ae8bbf2b40ff2eb2787926ddb9998bcef55d958da8bfb2cc4b8b5d1c75f","impliedFormat":99},{"version":"d0b61c74289ce1c6b6eb9eb3841296d380ef1de607ce4cbaebc4acae871e40ed","impliedFormat":99},{"version":"bc0aa6e9796b091b57cea1210f81c1f1f0091c7eed4eb04b9543d676685894b7","impliedFormat":99},{"version":"e91fa2ba0cef937bd2e9e25202bffb97bf39e04f6c2d942315d1f6c6a76020f2","impliedFormat":99},{"version":"c8d20e6ff2b7f33cac83372c716d10cfd83f64a740bbd9a8b1089a8807c1c492","impliedFormat":99},{"version":"849ac05886b0e90cb64b699d967641777b211900251365fa619771e3a7361482","impliedFormat":99},{"version":"99abeb91f93b28adf402476fe260087498c6d47e98776c5378a60f8439dd91ee","impliedFormat":99},{"version":"6000f6c1f8f865cf09210a15c95a5f8edb985c253ba8ed58b5af0772c465384b","impliedFormat":99},{"version":"113b410c407fe216ad5085197d483044d29e6ca0c7108f322ff266cb2d8ec4f3","impliedFormat":99},{"version":"fd67e0b30ec2dad92d809951f63b5982b00595ca4cf3f83823429573e40095a0","impliedFormat":99},{"version":"339f6afadcfeadf85d64924ba460411bbcca6aa599ac7eac0ed81b88d5fe5336","impliedFormat":99},{"version":"0696f165aa010e7966568dd1149b180cb9c18eada93850c8bfbdb86f5fd20017","impliedFormat":99},{"version":"f2ce7d4493d33bc2f445e367d692c52511ee0a176b64366d09a416f85e9f200d","impliedFormat":99},{"version":"7af8d19815c33100c69f36ef5fe821ee93dbd946aea977fa61ef0a566f6a604a","impliedFormat":99},{"version":"d3b9e915c202d52b0c38ff2a79703474170ee1c4e48373d275e9de659553bea5","impliedFormat":99},{"version":"556abfc8927d79afaaf0959e30e354b261cc63b9c92f8232e270f03bed7a6187","impliedFormat":99},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"156a859e21ef3244d13afeeba4e49760a6afa035c149dda52f0c45ea8903b338","impliedFormat":1},{"version":"10ec5e82144dfac6f04fa5d1d6c11763b3e4dbbac6d99101427219ab3e2ae887","impliedFormat":1},{"version":"615754924717c0b1e293e083b83503c0a872717ad5aa60ed7f1a699eb1b4ea5c","impliedFormat":1},{"version":"14e9acf826baba0ef4b5665704084896e7bcc06f65a9ab13af7e93d27d6b7069","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"21adf13435b9b748529c8cedf80f884e5130b9684188120a686cd2b26a2059c7","impliedFormat":1},{"version":"eec76bf6b9346f3f95fa402621b889489e96930e72295b0369022f332e9b4a6a","impliedFormat":1},{"version":"0ecd58f413f9bc3b7d4383eae31b0c8fc576985cd7404d6f99f8c643543ade74","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"9c32412007b5662fd34a8eb04292fb5314ec370d7016d1c2fb8aa193c807fe22","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"4d327f7d72ad0918275cea3eee49a6a8dc8114ae1d5b7f3f5d0774de75f7439a","impliedFormat":1},{"version":"6ebe8ebb8659aaa9d1acbf3710d7dae3e923e97610238b9511c25dc39023a166","impliedFormat":1},{"version":"e85d7f8068f6a26710bff0cc8c0fc5e47f71089c3780fbede05857331d2ddec9","impliedFormat":1},{"version":"7befaf0e76b5671be1d47b77fcc65f2b0aad91cc26529df1904f4a7c46d216e9","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"d33ce35e3f9cfcc1d94eca415bdd3bde94d5b153ffdd33e6c4455c029986c630","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"8aee8b6d4f9f62cf3776cda1305fb18763e2aade7e13cea5bbe699112df85214","impliedFormat":1},{"version":"98498b101803bb3dde9f76a56e65c14b75db1cc8bec5f4db72be541570f74fc5","impliedFormat":1},{"version":"4dc59f6e1dbf3d5f66660fceabe6c174d3261b37b696ae1854f0dbaf255fc753","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"436d7b4543b340b0f3eef4310d524242e41369b9652aa9c70428767c4dcac455","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"12950411eeab8563b349cb7959543d92d8d02c289ed893d78499a19becb5a8cc","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"114f493b30f364255290472111b5a4791d5902c308645670cd0401429cbc6930","impliedFormat":1},{"version":"b3fb72492a07a76f7bfa29ecadd029eea081df11512e4dfe6f930a5a9cb1fb75","impliedFormat":1},{"version":"1edd9ccdc3b948db3bb3c5484aadeb0d68e55cfa34a999d9723a80b2ab99d06d","impliedFormat":99},{"version":"984640935b059f2be0b787f57a69bfe4c76a009e339551e30d91a760471075a4","impliedFormat":99},{"version":"fe2f8331dbc13f000247ac1db1558ab40bd4e6454b2840b2fc3463b42441985e","impliedFormat":99},{"version":"951dd0bcaf733fa65e1dcb4aaa2ca671c7ea8d462299765c70173d1e66f994b4","impliedFormat":99},{"version":"733f17063c289ff48359075868c95c5327a0e024ad8898dc3b61dfffa0c52503","impliedFormat":99},{"version":"b46a0ab42c99352442a41e7aa875eb9a5128331fd663c63a07b70a82c74ef19c","impliedFormat":99},{"version":"4f1dcc1dd4a02eb27e32ec3b7d261909b26f86b0f227c3d3123b18f8d619d258","impliedFormat":99},{"version":"faf0c122fb78be6d3225da99da1b8e3f827313f73036b2e32531490948d67ea6","impliedFormat":99},{"version":"d3d1d4dad3c6deb08c0e23e6e20977f81de9cdf6370973333e3f03b7d1b79a20","impliedFormat":99},{"version":"12930cb1ba852946639362633fc6b2af3a05165c7f962fb8ef819f4c7887312d","impliedFormat":99},{"version":"146ba4b99c5feb82663e17a671bf9f53bb39c704cd76345d6c5a801c26372f44","impliedFormat":1},{"version":"13d9a439d2c92b610799100bc4f434142bc557732b14ba1080000e34928c3c76","impliedFormat":99},{"version":"8bf01f2227d670e5c0e2472b7f0aebcdd80fed20d5f3e5b1e6637f466c107e29","impliedFormat":99},{"version":"67a6f25ac963d05fc7482d0262d01c87b35db52837ef012078c3c9335ae13fa8","impliedFormat":99},{"version":"b67550edd008ae2ce5be54579b686bf3d2dd224e71f57630671025d8d41eec52","impliedFormat":99},{"version":"ed94a21dbeaca6f8935aeea03c3f327930ba0df2efd20e10d695c8b7fe434a01","impliedFormat":99},{"version":"c5245e464fdba99fdeed4ab74ec3a1c15440fbf52447260cc889a078d09455f9","impliedFormat":99},{"version":"868762eb332580bcf7bf431eb6220f2d01d1ef865e2dc3c4bf3dd84cd719cc0f","impliedFormat":99},{"version":"7ff7d567b4ba5e84f3ca58f787f532a9e99e5d06bc5f6c291793cffa81abaca4","impliedFormat":99},{"version":"01938d705887bcd95db9bf5e84688f36df79f8d51d83305dfc74d0011e06d90e","impliedFormat":99},{"version":"81dcbd9e98743a166d4ffa15c3e33ec6061f660d0fbfb22ba0500c644d062ca6","impliedFormat":99},{"version":"ffb47e8a12928de9b95df9fa79f4b97ed20da433f237658ed5e777ec7141fd42","impliedFormat":99},{"version":"d92ceb2aad8f84f3c80362706230a8090bbb9e4a4055b227ef82640d7bddd946","impliedFormat":99},{"version":"cd412c34cbc5e418fcece22c80356fd67699d31b2f5426a7690fa9ad86feae97","impliedFormat":99},{"version":"2094f98caffbe54b58453a14ce6db7acac166add0dfa70dcf12546d9156f7818","impliedFormat":99},{"version":"87226120f7b78a78ddfec32b09e29346216ba185e870fd3852fc6d4e509ce7a0","impliedFormat":99},{"version":"03cf443b7b965982549cddae7684cfac860b1f4c0f3c4e3e2ba95bfde30e4eea","impliedFormat":99},{"version":"4eb41ea325cd80a8bdf56c79cb45af166c285513b452c84710130c4da4394e02","impliedFormat":99},{"version":"05ee472e5758f04fb053b0ae36ba66ab02511e7e0e13b11393c2ac50e864726d","impliedFormat":99},{"version":"c2de9445c869aa70e9492b3ce329fdefed8dbbaeb989eeac5f001b8721ee0cd5","impliedFormat":99},{"version":"f4eaec4a1cb0fa8cbfe8b80965da5d55e5cd97b00d20e3b231a8dbb99d208988","impliedFormat":99},{"version":"e989a0466063593b86c5fcb35b524c43eb3c24424eba9b8c70b15077ce11deb7","impliedFormat":99},{"version":"c50eeb9862d51f9853a2b108326ae8eecf0ea3e2bc860c5dea783dbe1d1d119a","impliedFormat":99},{"version":"ab92533c044f8ee27832278d7d6d67ec6263a45dfee9c36cdf87a4cbbce3fb8f","impliedFormat":99},{"version":"e0b07c87c1a9f2aefb0aa63b6e271c5c8d3c67384c61f152d758667172427e4f","impliedFormat":99},{"version":"ee918800aadf43a771fa1b119fa9b683625e5b506f3fd369ca5a0be9ab44153d","impliedFormat":99},{"version":"a1effb9d7868973b135964873f9db4c39bc5718340f65be76b9a5b5dc08afcbf","impliedFormat":99},{"version":"d1ea2ab67db6ca678ffb06158cae8c42c69ef5b17356d0d73d4ff0fedfd57353","impliedFormat":99},{"version":"b5874ea4d4ff7c1f82c09d86e0f66cc2aa976a5399ba014e8c2ebfa12afa0806","impliedFormat":99},{"version":"489c205a3528f8e790dec9b2c236360b25f857c2d4416bcad88e0d7e0b0a1e94","impliedFormat":99},{"version":"dcf7e1f6ae6b3ae810c310363bd6aa38bd80eacf5d958bb16f698e09e945310e","impliedFormat":99},{"version":"dc88c40dd4bd140b17d4d2916cda76fc57eec4a2656bbf104f71b1bb2e06ca44","impliedFormat":99},{"version":"3256aba0efb5dc262160f3cc281a4de18b03402ef49a54909c0bd5003fd52b7c","impliedFormat":99},{"version":"40e5410bb58dfc9ef9b4944a7d64ce79f3684d538dbab7a721892237a6f61e1c","impliedFormat":99},{"version":"d91ed294eff78f7ef07816c514503d6b7ae9de3876d71eb3fbf550c1d173997e","impliedFormat":99},{"version":"5f3b7ec5e68ae224717da6ec98ef94c8e7eead088e3997f1723d07c4b01651af","impliedFormat":99},{"version":"87b3487a5e5f1082b57a300aaca5f7cd79784e01dda8e2b2d8dadc1457d460e1","impliedFormat":99},{"version":"91211d69e33976023d7471ecfd596ef61d303c9689ae7d9e9a9c716db855b474","impliedFormat":99},{"version":"06d41f39164e70f6316a65e0bfbf1c5e254871f73bb41738d1f566544d69adc9","impliedFormat":99},{"version":"97123d5a37d790101dddd782ab6a429a6a11b8ceae548c65e34b1f2b74110056","impliedFormat":99},{"version":"2068ec01d9de09eab73bb3b2d8da67cadfd0213be04eaefaf9d94b26d26299c7","impliedFormat":99},{"version":"91e30683efc46ed947ac79397b85405a884dcbfd3e4bb87a37a2292534e88fe3","impliedFormat":99},{"version":"06153bb1551459f400cf80503cae3063e28f88dd6c47197b60cb1e0752992b44","impliedFormat":99},{"version":"1ad02d0fcba0cf447235f6d1edfb77e2f3576faa2163e3bd1f36c8a98757c1ba","impliedFormat":99},{"version":"15be380a7098838df81e84c1b7c742227932225bffb86e8d0352ea188e211ea7","impliedFormat":99},{"version":"fdc56cc70e1d36d7ae9c3bdddc3dba4298281c2673942a554af7b3208a8c6eba","impliedFormat":99},{"version":"d4ef28f2fa80536cc251a6fedb82acae7af14cf07ab6a6f5b995b61225ce2dcf","impliedFormat":99},{"version":"30159f3e6c8472a4ee4a0f5d3180b41733a7e66993743da476acd46920513603","impliedFormat":99},{"version":"0348a564954ef638d4fd9e530367ee732c4af536b043d8250458c56a9d21433f","impliedFormat":99},{"version":"d4ef28f2fa80536cc251a6fedb82acae7af14cf07ab6a6f5b995b61225ce2dcf","impliedFormat":99},{"version":"633fc6aead993eb3e21e96d92d781a56d2012b34a3f4e68a466e0747a55a4051","impliedFormat":99},{"version":"04652108a353c1814e7f71d1463e8202ba3bd4adcee093b489065b250f73ec33","impliedFormat":99},{"version":"11e21d75da9a8b6c4fc37c17641c6faf61d2d491b827355a7e22bb88325cb994","impliedFormat":99},{"version":"f1a339847338888b27677a13936236270e73d8a7815386e4665a42248f765dee","impliedFormat":99},{"version":"bab780528e40e70b6043f3c748ebf98467f50c8c0b5fab59610c841feafe06bd","impliedFormat":99},{"version":"5594e6f917dd9e2b2987afa15211c5f483c55d466ce778ba25b545ca16d811c9","impliedFormat":99},{"version":"c6fe327c538417b8dd5b9bb32abcd7911534b10da3a4514f3445cdb28cf3abf2","impliedFormat":99},{"version":"32c6e3ef96f2bcbc1db7d7f891459241657633aa663cab6812fb28ade7c90608","impliedFormat":99},{"version":"17da8f27c18a2a07c1a48feb81887cb69dacc0af77c3257217016dacf9202151","impliedFormat":99},{"version":"0065cdb7ac9f5b19921632de63f888ec2cc11ad57f7fc868f44bf0faad2fce3e","impliedFormat":99},{"version":"8c1adc3171d0287f3a26f4891a7d1834c89999573a9b444aa5ff519dcc43a2b7","impliedFormat":99},{"version":"27aee784c447854a4719f11058579e49f08faa70d06d8e30abe00f5e25538de6","impliedFormat":99},{"version":"fbc610f9dde70f0bbea39eefec2e31ca1d99f715e9c71fb118bd2306a832bcb5","impliedFormat":99},{"version":"a829052855dca3affb8e2ef0afa0f013b03fa9b55762348b1fba76d9c2741c99","impliedFormat":99},{"version":"1d61288b34b2dd2029b85bc70fabbb1da90c2a370396d5df5f620e62eb47ddbe","impliedFormat":99},{"version":"5a2cf4cd852a58131b320da62269b2143850920ce27e8fdec41fed5c2c54ec95","impliedFormat":99},{"version":"f193437b3919bbe63c2c1bb1abe20fa3eb717ce34fc719d903077784e11e9fc7","impliedFormat":99},{"version":"6a99940a8a76a1aa20ae6f2afd8e909e47e0b17df939e7cf5a585171480655ff","impliedFormat":99},{"version":"043195af0b52aadd10713870dd60369df0377ed153104b26e6bac1213b19f63e","impliedFormat":99},{"version":"ad17a36132569045ab97c8e5badf8febb556011a8ed7b2776ff823967d6d5aca","impliedFormat":99},{"version":"698d2b22251dbbfc0735e2d6ed350addead9ad031fac48b8bb316e0103d865db","impliedFormat":99},{"version":"7298d28b75c52e89c0b3e5681eac19e14480132cd30baaba5e5ca10211a740ef","impliedFormat":99},{"version":"ff10facf373a13d2864ff4de38c4892d74be27d9c6468dac49c08adabbf9b0eb","impliedFormat":99},{"version":"97b1cf4599cc3bc2e84b997aa1af60d91ca489d96bea0e20aaff0e52a5504b29","impliedFormat":99},{"version":"853dfbcd0999d3edc6be547d83dc0e0d75bf44530365b9583e75519d35984c35","impliedFormat":99},{"version":"9c80bed388d4ed47080423402db9cb1b35a31449045a83a0487f4dfde3d9d747","impliedFormat":99},{"version":"f29bc6a122a4a26c4e23289daae3aa845a18af10da90989cb8b51987e962b7be","impliedFormat":99},{"version":"3a1f39e098971c10633a064bd7a5dbdec464fcf3864300772763c16aa24457f9","impliedFormat":99},{"version":"20e614d6e045d687c3f7d707561b7655ad6177e859afc0c55649b7e346704c77","impliedFormat":99},{"version":"aa0ae1910ba709bc9db460bdc89a6a24d262be1fbea99451bedac8cbbc5fb0cd","impliedFormat":99},{"version":"161d113c2a8b8484de2916480c7ba505c81633d201200d12678f7f91b7a086f0","impliedFormat":99},{"version":"b998a57d4f43e32ac50a1a11f4505e1d7f71c3b87f155c140debe40df10386c8","impliedFormat":99},{"version":"5710e8ed9797ae0042e815eb8f87df2956cb1bf912939c9b98eeb58494a63c13","impliedFormat":99},{"version":"a6bb421dccfec767dbd3e99180b24c07c4a216c0fd549f54a3313f6ce3f9d2c7","impliedFormat":99},{"version":"3b6f1be46f573b1c1f3e6cd949890bfb96b40ff90b6f313e425a379c1c4d5d77","impliedFormat":99},{"version":"28a2c54d0a78d32c29f7279ca04dc6c7860c008579e4e3033938c0ed0201eb9a","impliedFormat":99},{"version":"c2714a402843287624210a47ebea2b1c8dd3ad1438f448633f6831e31eaf37b8","impliedFormat":99},{"version":"b89945ec6707415d739f3e76f2820982d4927dc6b681910b3c433b5ad261b817","impliedFormat":99},{"version":"a72d5822fb2a2c1ef985b30aed889f4c00342c90e12318762fccc550c6a599cf","impliedFormat":99},{"version":"c8616ab60eda93ca87fbb20aada1d6a6cdbcd2cb181a70a2d7728a3cb0613391","impliedFormat":99},{"version":"eeddfd3e0b09890822068de5248d38144f8328e74b5292847eb4e558d8aba8cb","impliedFormat":99},{"version":"d4dc0b6592543314c8549c71e35ad2ec4a57904662d905ff9585836bde1c855a","impliedFormat":99},{"version":"56e1687a174cd10912a35a4676af434bb213aafa5d4371040986c578afe644ab","impliedFormat":99},{"version":"470c280cc484340b97d0942e0c3aa312399eba3849ceb95312d0d7413bac7458","impliedFormat":99},{"version":"ae183f4a6300aad2be92cdbd4dd12d8bcd36eddf8dd1846f998c237235fe0c33","impliedFormat":99},{"version":"4b0eeffddaf51b967e95926a825a6ba1205b81b3a8fecddbe21eaf0e86bdee91","impliedFormat":99},{"version":"bf3ec0d42e33e487c359a989b30e1c9e90fa06de484dc4751e93fb34a9b5cf90","impliedFormat":99},{"version":"7b9656a61d83df1a46c38c2984dbf96dd057bf48f477ddf3f8990311ab98ec23","impliedFormat":99},{"version":"366b85ddb698f3a035e0caa68dc9fef39a85c4368c0810eaf937c3a3c63ac31e","impliedFormat":99},{"version":"d440ee730bc60a5c605903842e398863e7ecdb7a91fc32a9152f14061bf6cc17","impliedFormat":99},{"version":"a12c86c4a691608d19a75320946c80bbce38bb62c091dda32572aee7158edd38","impliedFormat":99},{"version":"3109cb3f8ab0308d2944c26742b6a8a02b4a4ffc23f479a81f0e945d6a6721dd","impliedFormat":99},{"version":"a2289c12a987f2a06f4cf049afde4fdc9455a4af37913445148865938c6eb613","impliedFormat":99},{"version":"55933c1450edcfaf166429425dbbad0a27c0ae8672d5ab5d427e46946a6f2f63","impliedFormat":99},{"version":"6c684fda6998db4112e82367c9e82e27996dc8086a10d58ac9b51d89770d5f9d","impliedFormat":99},{"version":"5c4b4dd983471fcaed17ad3241c98a1f880729f1ca579ddbcdae7e0bf04035df","impliedFormat":99},{"version":"9e430429c7e9e70071a836ac91a1bf6e6651f91d47d9f4baf0a92eefc6130818","impliedFormat":99},{"version":"b3db7f6d7ef72669dc83fa1ff7b90a2ec31d1d8f82778f2a00ef6d101f5247e5","impliedFormat":99},{"version":"354f61bd2a5acaf20462bc4d61048aa25f8fc0dd04dfe3d2f30bdbabbab54e7d","impliedFormat":99},{"version":"d51756340928e549f076c832d7bc2b4180385597b0b4daaa50e422bed53e1a72","impliedFormat":99},{"version":"ac2ea00eb8f73665842e57e729e14c6d3feabe9859dc5e87a1ed451b20b889e4","impliedFormat":99},{"version":"730cb342a128f5a8a036ffbd6dbc1135b623ce2100cefe1e1817bb8845bc7100","impliedFormat":99},{"version":"78e387f16df573a98dd51b3c86d023ddbd5bf68e510711a9fee8340e7ccc3703","impliedFormat":99},{"version":"e2381c64702025b4d57b005e94ed0b994b5592488d76f1e5f67f59d1860ebb70","impliedFormat":99},{"version":"d7dfcb039ff9cff38ccd48d2cc1ba95ca45c316670eddbcf81784e21b7128692","impliedFormat":99},{"version":"acaf0a60eb243938f7742df08bf5d52482fbea033fd27141ee3a6d878bbb0d3d","impliedFormat":99},{"version":"fb89aeecfc8eb28f5677c2c89bced74d13442b7f4ebd01ce2ce92127d1b36d69","impliedFormat":99},{"version":"9e91cb0a5bd7aefa2b94a2872828d6d2321df0ca44412e74d99e8b94e579b7d8","impliedFormat":99},{"version":"a56827adea79fb04ecb27671b6a3529fe74c6937ebb9ca9bdd53b7bd0e8c861b","impliedFormat":99},{"version":"192c1a207b44af476190ae66920636de5d56c33b57206bbc2421adc23f673e2e","impliedFormat":99},{"version":"e5aa35b3740170492e06e60989d35a222cfda2148507c650ea55753f726c9213","impliedFormat":99},{"version":"057aa42f6983120c35373aed62b219ffcbd7b476b2df08709139a9eb8dfeed26","impliedFormat":99},{"version":"95a0c46b4675d4d02de6a7c167738f1176b53b26ebec9ccfe8e5d9acb0dc7aee","impliedFormat":99},{"version":"94ad4d9745811c482ae3bad61e5b206e0904f77e0dacf783199193a3df9f6ce6","impliedFormat":99},{"version":"407dc18ecd25802296fade17be81d0d4f499ae75fe88ed132f94e7efdad269e2","impliedFormat":99},{"version":"77dabe31d44c48782c529d5c9acddc41f799bf9b424b259596131efc77355478","impliedFormat":99},{"version":"f6dfe21d867aa5e13bc53d536b69b66427f571707a01e7c3604dc51ded097313","impliedFormat":99},{"version":"4ecd02d0e4ccf7befb9c28802c6c208060e33291d56fd1868900ca295c399077","impliedFormat":99},{"version":"37ada75be4b3f6b888f538091020d81b2a0ad721dc42734f70f639fa4703a5c8","impliedFormat":99},{"version":"aa73ff0024d5434a3e87ea2824f6faece7aad7b9f6c22bd399268241ca051dc7","impliedFormat":99},{"version":"4c9fb50b0697756bab3e4095f28839cf5b55430a4744d2ebbaf850ec8dca54d8","impliedFormat":99},{"version":"782868b723c055c5612c4a243f72a78a8b3c0c3b707ae04954e36e8ab966df4c","impliedFormat":99},{"version":"3de9d9ad4876972e7599fc0b3bddb0fddb1923be75787480a599045a30f14292","impliedFormat":99},{"version":"0f4b3c05937bbdb9cf954722ddc97cd72624e3b810f6f2cf4be334adb1796ec1","impliedFormat":99},{"version":"9fc243c4c87d8560348501080341e923be2e70bf7b5e09a1b26c585d97ae8535","impliedFormat":99},{"version":"4f97089fe15655ae448c9d005bb9a87cc4e599b155edc9e115738c87aa788464","impliedFormat":99},{"version":"f948d562d0a8085f1bd17b50798d5032529a75c147f40adfeb4fd3e453368643","impliedFormat":99},{"version":"22929f9874783b059156ee3cfa864d6f718e1abf9c139f298a037ae0274186f6","impliedFormat":99},{"version":"c72a7c316459b2e872ca4a9aca36cc05d1354798cee10077c57ff34a34440ac2","impliedFormat":99},{"version":"3e5bbf8893b975875f5325ebf790ab1ab38a4173f295ffea2ed1f108d9b1512c","impliedFormat":99},{"version":"9e4a38448c1d26d4503cf408cc96f81b7440a3f0a95d2741df2459fe29807f67","impliedFormat":99},{"version":"84124d21216da35986f92d4d7d1192ca54620baeca32b267d6d7f08b5db00df9","impliedFormat":99},{"version":"efba354914a2dc1056a55510188b6ced85ead18c5d10cc8a767b534e2db4b11b","impliedFormat":99},{"version":"25f5bf39f0785a2976d0af5ac02f5c18ca759cde62bc48dd1d0d99871d9ad86f","impliedFormat":99},{"version":"e711fa7718a2060058ff98ac6bff494c1615b9d42c4f03aa9c8270bc34927164","impliedFormat":99},{"version":"e324b2143fa6e32fac37ed9021b88815e181b045a9f17dbb555b72d55e47cdc1","impliedFormat":99},{"version":"3e90ea83e3803a3da248229e3027a01428c3b3de0f3029f86c121dc76c5cdcc2","impliedFormat":99},{"version":"9368c3e26559a30ad3431d461f3e1b9060ab1d59413f9576e37e19aaf2458041","impliedFormat":99},{"version":"915e5bb8e0e5e65f1dc5f5f36b53872ffcdcaef53903e1c5db7338ea0d57587a","impliedFormat":99},{"version":"92cf986f065f18496f7fcb4f135bff8692588c5973e6c270d523191ef13525ad","impliedFormat":99},{"version":"652f2bd447e7135918bc14c74b964e5fe48f0ba10ff05e96ed325c45ac2e65fb","impliedFormat":99},{"version":"cc2156d0ec0f00ff121ce1a91e23bd2f35b5ab310129ad9f920ddaf1a18c2a4d","impliedFormat":99},{"version":"7b371e5d6e44e49b5c4ff88312ae00e11ab798cfcdd629dee13edc97f32133d8","impliedFormat":99},{"version":"e9166dab89930e97bb2ce6fc18bcc328de1287b1d6e42c2349a0f136fc1f73e6","impliedFormat":99},{"version":"6dc0813d9091dfaed7d19df0c5a079ee72e0248ce5e412562c5633913900be25","impliedFormat":99},{"version":"e704c601079399b3f2ec4acdfc4c761f5fe42f533feaaab7d2c1c1528248ca3e","impliedFormat":99},{"version":"49104d28daa32b15716179e61d76b343635c40763d75fe11369f681a8346b976","impliedFormat":99},{"version":"04cd3418706b1851d2c1d394644775626529c23e615a829b8abfe26ec0ee3aef","impliedFormat":99},{"version":"21e459e9485fc48f21708d946c102e4aaa4a87b4c9ad178e1c5667e3ff6bbc59","impliedFormat":99},{"version":"97e685ac984fc93dcdae6c24f733a7a466274c103fdcf5d3b028eaa9245f59d6","impliedFormat":99},{"version":"68526ea8f3bbf75a95f63a3629bebe3eb8a8d2f81af790ce40bc6aad352a0c12","impliedFormat":99},{"version":"bcab57f5fe8791f2576249dfcc21a688ecf2a5929348cfe94bf3eb152cff8205","impliedFormat":99},{"version":"b5428f35f4ebf7ea46652b0158181d9c709e40a0182e93034b291a9dc53718d8","impliedFormat":99},{"version":"0afcd28553038bca2db622646c1e7fcf3fb6a1c4d3b919ef205a6014edeeae0f","impliedFormat":99},{"version":"ee016606dd83ceedc6340f36c9873fbc319a864948bc88837e71bd3b99fdb4f6","impliedFormat":99},{"version":"0e09ffe659fdd2e452e1cbe4159a51059ae4b2de7c9a02227553f69b82303234","impliedFormat":99},{"version":"4126cb6e6864f09ca50c23a6986f74e8744e6216f08c0e1fe91ab16260dab248","impliedFormat":99},{"version":"4927dba9193c224e56aa3e71474d17623d78a236d58711d8f517322bd752b320","impliedFormat":99},{"version":"3d3f189177511d1452e7095471e3e7854b8c44d94443485dc21f6599c2161921","impliedFormat":99},{"version":"bb0519ff5ef245bbf829d51ad1f90002de702b536691f25334136864be259ec5","impliedFormat":99},{"version":"a64e28f2333ea0324632cf81fd73dc0f7090525547a76308cb1dfe5dab96596a","impliedFormat":99},{"version":"883f9faa0229f5d114f8c89dadd186d0bdf60bdafe94d67d886e0e3b81a3372e","impliedFormat":99},{"version":"d204b9ae964f73721d593e97c54fc55f7fd67de826ce9e9f14b1e762190f23d1","impliedFormat":99},{"version":"91830d20b424859e5582a141efe9a799dc520b5cce17d61b579fb053c9a6cd85","impliedFormat":99},{"version":"68115cdc58303bad32e2b6d59e821ccaada2c3fb63f964df7bd4b2ebd6735e80","impliedFormat":99},{"version":"ee27e47098f1d0955c8a70a50ab89eb0d033d28c5f2d76e071d8f52a804afe07","impliedFormat":99},{"version":"7957b11f126c6af955dc2e08a1288013260f9ec2776ff8cc69045270643bf43e","impliedFormat":99},{"version":"d010efe139c8bb78497dc7185dddbbcefc84d3059b5d8549c26221257818a961","impliedFormat":99},{"version":"85059ed9b6605d92c753daf3a534855ba944be69ff1a12ab4eca28cefbabd07a","impliedFormat":99},{"version":"687208233ae7a969baa2d0c565c9f24eb4cb1e64d6cfb30f71afec9e929e58c2","impliedFormat":99},{"version":"ea68a96f4e2ba9ca97d557b7080fbdb7f6e6cf781bb6d2e084e54da2ac2bb36c","impliedFormat":99},{"version":"fdae6a221872468d5b6ef3ee06a5ede1b7b3168b6c8346d0bf389fe0490b5269","impliedFormat":99},{"version":"424df1d45a2602f93010cb92967dfe76c3fcadad77d59deb9ca9f7ab76995d40","impliedFormat":99},{"version":"21f96085ed19d415725c5a7d665de964f8283cacef43957de10bdd0333721cc4","impliedFormat":99},{"version":"e8d4da9e0859c6d41c4f1c3f4d0e70446554ba6a6ab91e470f01af6a2dcac9bf","impliedFormat":99},{"version":"2e2421a3eec7afefa5a1344a6852d6fee6304678e2d4ee5380b7805f0ac8b58a","impliedFormat":99},{"version":"a10fd5d76a2aaba572bec4143a35ff58912e81f107aa9e6d97f0cd11e4f12483","impliedFormat":99},{"version":"1215f54401c4af167783d0f88f5bfb2dcb6f0dacf48495607920229a84005538","impliedFormat":99},{"version":"476f8eb2ea60d8ad6b2e9a056fdda655b13fd891b73556b85ef0e2af4f764180","impliedFormat":99},{"version":"2fe93aef0ee58eaa1b22a9b93c8d8279fe94490160703e1aabeff026591f8300","impliedFormat":99},{"version":"bbb02e695c037f84947e56da3485bb0d0da9493ed005fa59e4b3c5bc6d448529","impliedFormat":99},{"version":"ba666b3ab51c8bc916c0cebc11a23f4afec6c504c767fd5f0228358f7d285322","impliedFormat":99},{"version":"c10972922d1887fe48ed1722e04ab963e85e1ac12263a167edef9b804a2af097","impliedFormat":99},{"version":"6efeacbd1759ea57a4c7264eb766c531ae0ab2c00385294be58bc5031ef43ad1","impliedFormat":99},{"version":"1c261f5504d0175be4f1b6b99f101f4c3a129a5a29fc768e65c52d6861ca5784","impliedFormat":99},{"version":"f0e69b5877b378d47cbac219992b851e2bbc0f7e3a3d3579d67496dabd341ec4","impliedFormat":99},{"version":"b5ea27f19a54feca5621f5ba36a51026128ea98e7777e5d47f08b79637527cf5","impliedFormat":99},{"version":"b54890769fa3c34ab3eb7e315b474f52d5237c86c35f17d59eb21541e7078f11","impliedFormat":99},{"version":"c133db4b6c17a96db7fa36607c59151dec1e5364d9444cbe15e8c0ea4943861e","impliedFormat":99},{"version":"3a0514f77606d399838431166a0da6dbd9f3c7914eae5bbfbd603e3b6a552959","impliedFormat":99},{"version":"fa568f8d605595e1cffbfca3e8c8c492cf88ae2c6ed151f6c64acf0f9e8c25d8","impliedFormat":99},{"version":"c76fb65cb2eb09a0ee91f02ff5b43a607b94a12c34d16d005b2c0afc62870766","impliedFormat":99},{"version":"cf7af60a0d4308a150df0ab01985aabb1128638df2c22dd81a2f5b74495a3e45","impliedFormat":99},{"version":"913bbf31f6b3a7388b0c92c39aec4e2b5dba6711bf3b04d065bd80c85b6da007","impliedFormat":99},{"version":"42d8c168ca861f0a5b3c4c1a91ff299f07e07c2dd31532cd586fd1ee7b5e3ae6","impliedFormat":99},{"version":"a29faa7cb35193109ec1777562ca52c72e7382ffe9916b26859b5874ad61ff29","impliedFormat":99},{"version":"15bdf2eeef95500ba9f1602896e288cb425e50462b77a07fa4ca23f1068abb21","impliedFormat":99},{"version":"452db58fd828ab87401f6cecc9a44e75fa40716cc4be80a6f66cf0a43c5a60cc","impliedFormat":99},{"version":"54592d0215a3fd239a6aa773b1e1a448dc598b7be6ce9554629cd006ee63a9d6","impliedFormat":99},{"version":"9ee28966bb038151e21e240234f81c6ba5be6fde90b07a9e57d4d84ae8bc030c","impliedFormat":99},{"version":"2fe1c1b2b8a41c22a4e44b0ac7316323d1627d8c72f3f898fa979e8b60d83753","impliedFormat":99},{"version":"956e43b28b5244b27fdb431a1737a90f68c042e162673769330947a8d727d399","impliedFormat":99},{"version":"92a2034da56c329a965c55fd7cffb31ccb293627c7295a114a2ccd19ab558d28","impliedFormat":99},{"version":"c1b7957cd42a98ab392ef9027565404e5826d290a2b3239a81fbac51970b2e63","impliedFormat":99},{"version":"4861ee34a633706bcbba4ea64216f52c82c0b972f3e790b14cf02202994d87c5","impliedFormat":99},{"version":"7af4e33f8b95528de005282d6cca852c48d293655dd7118ad3ce3d4e2790146f","impliedFormat":99},{"version":"df345b8d5bf736526fb45ae28992d043b2716838a128d73a47b18efffe90ffa7","impliedFormat":99},{"version":"d22c5b9861c5fc08ccd129b5fc3dcdc7536e053c0c1d463f3ab39820f751c923","impliedFormat":99},{"version":"dcc38f415a89780b34d827b45493d6dbadb05447d194feb4498172e508c416ac","impliedFormat":99},{"version":"7e917e3b599572a2dd9cfa58ff1f68fda9e659537c077a2c08380b2f2b14f523","impliedFormat":99},{"version":"20b108e922abd1c1966c3f7eb79e530d9ac2140e5f51bfa90f299ad5a3180cf9","impliedFormat":99},{"version":"2bc82315d4e4ed88dc470778e2351a11bc32d57e5141807e4cdb612727848740","impliedFormat":99},{"version":"e2dd1e90801b6cd63705f8e641e41efd1e65abd5fce082ef66d472ba1e7b531b","impliedFormat":99},{"version":"a3cb22545f99760ba147eec92816f8a96222fbb95d62e00706a4c0637176df28","impliedFormat":99},{"version":"287671a0fe52f3e017a58a7395fd8e00f1d7cd9af974a8c4b2baf35cfda63cfa","impliedFormat":99},{"version":"e2cdad7543a43a2fb6ed9b5928821558a03665d3632c95e3212094358ae5896b","impliedFormat":99},{"version":"326a980e72f7b9426be0805774c04838e95195b467bea2072189cefe708e9be7","impliedFormat":99},{"version":"e3588e9db86c6eaa572c313a23bf10f7f2f8370e62972996ac79b99da065acaa","impliedFormat":99},{"version":"1f4700278d1383d6b53ef1f5aecd88e84d1b7e77578761838ffac8e305655c29","impliedFormat":99},{"version":"6362a4854c52419f71f14d3fee88b3b434d1e89dcd58a970e9a82602c0fd707a","impliedFormat":99},{"version":"fb1cc1e09d57dfeb315875453a228948b904cbe1450aaf8fda396ff58364a740","impliedFormat":99},{"version":"50652ed03ea16011bb20e5fa5251301bb7e88c80a6bf0c2ea7ed469be353923b","impliedFormat":99},{"version":"d388e0c1c9a42d59ce88412d3f6ce111f63ce2ff558e0a3f84510092431dfee0","impliedFormat":99},{"version":"35ea0a1e995aef5ae19b1553548a793c76eb31bdf7fef30bc74656660c3a09c3","impliedFormat":99},{"version":"56f4ae4e34cbff1e4158ccada4feea68a357bae86adb3bedaa65260d0af579df","impliedFormat":99},{"version":"6eebdacf8e85b2cf70ad7a2f43ead1f8acccfd214ab57ff1d989e9e35661015d","impliedFormat":99},{"version":"a4f90a12cbfac13b45d256697ce70a6b4227790ca2bf3898ffd2359c19eab4eb","impliedFormat":99},{"version":"4a6c2ac831cff2d8fa846dfb010ee5f7afce3f1b9bd294298ee54fdc555f1161","impliedFormat":99},{"version":"8395cc6350a8233a4da1c471bdac6b63d5ed0a0605da9f1e0c50818212145b5b","impliedFormat":99},{"version":"b58dda762d6bd8608d50e1a9cc4b4a1663a9d4aa50a9476d592a6ecdc6194af4","impliedFormat":99},{"version":"bc14cb4f3868dab2a0293f54a8fe10aa23c0428f37aece586270e35631dd6b67","impliedFormat":99},{"version":"2d4530d6228c27906cb4351f0b6af52ff761a7fab728622c5f67e946f55f7f00","impliedFormat":99},{"version":"ec359d001e98bf56b0e06b4882bd1421fd088d4d181dff3138f52175c0582a51","impliedFormat":99},{"version":"2ac845b89cae82a74e549c7c1d9f983f993033ba14376ea83cd13b3e38a8537a","impliedFormat":99},{"version":"a8d491b4eb728dab387933a518d9e1f32d5c9d5a5225ff134d847b0c8cc9c8ce","impliedFormat":99},{"version":"668f628ae1f164dcf6ea8f334ea6a629d5d1a8e7a2754245720a8326ff7f1dc0","impliedFormat":99},{"version":"5105c00e1ae2c0a17c4061e552fa9ec8c74ec41f69359b8719cb88523781018e","impliedFormat":99},{"version":"d2c033af6f2ea426de4657177f0e548ee5bed6756c618a8b3b296c424e542388","impliedFormat":99},{"version":"45be28de10e6f91aacb29fbd2955ba65a0fd3d1b5fddefece9c381043e91e68d","impliedFormat":99},{"version":"77dabe31d44c48782c529d5c9acddc41f799bf9b424b259596131efc77355478","impliedFormat":99},{"version":"6801ebe0b7ab3b24832bc352e939302f481496b5d90b3bc128c00823990d7c7d","impliedFormat":99},{"version":"0abb1feddc76a0283c7e8e8910c28b366612a71f8bfdd5ca42271d7ad96e50b2","impliedFormat":99},{"version":"ac56b2f316b70d6a727fdbbcfa8d124bcd1798c293487acb2b27a43b5c886bb0","impliedFormat":99},{"version":"d849376baf73ec0b17ffd29de702a2fdbbe0c0390ec91bebf12b6732bf430d29","impliedFormat":99},{"version":"40dcd290c10cc7b04a55f7ee5c76f77250f48022cea1624eba2c0589753993b4","impliedFormat":99},{"version":"0f9c9f7d13a5cf1c63eb56318b6ae4dfa2accef1122b2e88b5ed1c22a4f24e3b","impliedFormat":99},{"version":"9c4178832d47d29c9af3b1377c6b019f7813828887b80bb96777393f700eb260","impliedFormat":99},{"version":"dddb8672a0a6d0e51958d539beb906669a0f1d3be87425aaa0ae3141a9ad6402","impliedFormat":99},{"version":"6b514d5159d0d189675a1d5a707ba068a6da6bc097afb2828aae0c98d8b32f08","impliedFormat":99},{"version":"39d7dbcfec85393fedc8c7cf62ee93f7e97c67605279492b085723b54ccaca8e","impliedFormat":99},{"version":"81882f1fa8d1e43debb7fa1c71f50aa14b81de8c94a7a75db803bb714a9d4e27","impliedFormat":99},{"version":"c727a1218e119f1549b56dd0057e721d67cfa456c060174bac8a5594d95cdb2d","impliedFormat":99},{"version":"bca335fd821572e3f8f1522f6c3999b0bc1fe3782b4d443c317df57c925543ed","impliedFormat":99},{"version":"73332a05f142e33969f9a9b4fb9c12b08b57f09ada25eb3bb94194ca035dc83d","impliedFormat":99},{"version":"c366621e6a8febe9bbca8c26275a1272d99a45440156ca11c860df7aa9d97e6d","impliedFormat":99},{"version":"d9397a54c21d12091a2c9f1d6e40d23baa327ae0b5989462a7a4c6e88e360781","impliedFormat":99},{"version":"dc0e2f7f4d1f850eb20e226de8e751d29d35254b36aa34412509e74d79348b75","impliedFormat":99},{"version":"af3102f6aec26d237c750decefdc7a37d167226bb1f90af80e1e900ceb197659","impliedFormat":99},{"version":"dea1773a15722931fbfe48c14a2a1e1ad4b06a9d9f315b6323ee112c0522c814","impliedFormat":99},{"version":"b26e3175cf5cee8367964e73647d215d1bf38be594ac5362a096c611c0e2eea8","impliedFormat":99},{"version":"4280093ace6386de2a0d941b04cff77dda252f59a0c08282bd3d41ccc79f1a50","impliedFormat":99},{"version":"fe17427083904947a4125a325d5e2afa3a3d34adaedf6630170886a74803f4a2","impliedFormat":99},{"version":"0246f9f332b3c3171dcdd10edafab6eccb918c04b2509a74e251f82e8d423fb7","impliedFormat":99},{"version":"f6ef33c2ff6bbdf1654609a6ca52e74600d16d933fda1893f969fc922160d4d7","impliedFormat":99},{"version":"1abd22816a0d992fd33b3465bf17a5c8066bf13a8c6ca4fc0cd28884b495762d","impliedFormat":99},{"version":"82032a08169ea01cf01aa5fd3f7a02f1f417697df5e42fc27d811d23450bc28d","impliedFormat":99},{"version":"9c8cbd1871126e98602502444cffb28997e6aa9fbc62d85a844d9fd142e9ae1b","impliedFormat":99},{"version":"b0e20abc4a73df8f97b3f1223cc330e9ba3b2062db1908aa2a97754a792139ac","impliedFormat":99},{"version":"bc1f2428d738ab789339030078adf313100471c37d8d69f6cf512a5715333afc","impliedFormat":99},{"version":"dc500c6a23c9432849c82478bdab762fa7bdf9245298c2279a7063dd05ae9f9a","impliedFormat":99},{"version":"cd1b6a2503fc554dcab602e053565c4696e4262b641b897664d840a61f519229","impliedFormat":99},{"version":"af1580cd202df0e33fc592fe1d75d720c15930a4127a87633542b33811316724","impliedFormat":99},{"version":"538608f9242fbf4260d694f19c95b454f855152ab3b882ac72114f19b08984d2","impliedFormat":99},{"version":"cd0e1083bd8ae52661544329c311836abdda5d5dda89fc5d7ab038956c0394e8","impliedFormat":99},{"version":"9ea6fea875302b2bb3976f7431680affc45a4319499d057ce12be04e4f487bf9","impliedFormat":99},{"version":"66e0c3f9875da7be383d0c78c8b8940b6ebae3c6a0fbfd7e77698b5e8ade3b05","impliedFormat":99},{"version":"da38d326fe6a72491cad23ea22c4c94dfc244363b6a3ec8a03b5ad5f4ee6337b","impliedFormat":99},{"version":"da587bf084b08ea4e36a134ec5fb19ae71a0f32ec3ec2a22158029cb2b671e28","impliedFormat":99},{"version":"517a31c520e08c51cfe6d372bc0f5a6bf7bd6287b670bcaa180a1e05c6d4c4da","impliedFormat":99},{"version":"0263d94b7d33716a01d3e3a348b56c2c59e6d897d89b4210bdbf27311127223c","impliedFormat":99},{"version":"d0120e583750834bf1951c8b9936781a98426fe8d3ad3d951f96e12f43090469","impliedFormat":99},{"version":"a2e6a99c0fb4257e9301d592da0834a2cb321b9b1e0a81498424036109295f8b","impliedFormat":99},{"version":"c6b5ae9f99f1fccadc23d56307a28c8490c48e687678f2cafa006b3b9b8e73e4","impliedFormat":99},{"version":"eae178ee8d7292bcd23be2b773dda60b055bc008a0ddce2acc1bfe30cc36cf04","impliedFormat":99},{"version":"e0b5f197fb47b39a4689ad356b8488e335bbf399b283492c0ffae0cfda88837b","impliedFormat":99},{"version":"adb7aa4b8d8b423d0d7e78b6a8affb88c3a32a98e21cd54fcafd570ad8588d0c","impliedFormat":99},{"version":"643e22362c15304f344868ec0e7c0b4a1bc2b56c8b81d5b9f0ee0a6f3c690fff","impliedFormat":99},{"version":"f89e713e33bfcc7cc1d505a1e76f260b7aae72f8ba83f800ab47b5db2fed8653","impliedFormat":99},{"version":"4e095c719ab15aa641872ab286d8be229562c4b3dc4eec79888bc4e8e0426ed8","impliedFormat":99},{"version":"6022afc443d2fe0af44f2f5912a0bdd7d17e32fd1d49e6c5694cbc2c0fa11a8f","impliedFormat":99},{"version":"6dd3f823ac463041d89c84d7bbf74931a38d874a9716040492ac7a16c7d2f023","impliedFormat":99},{"version":"a5bf6d947ce6a4f1935e692c376058493dbfbd9f69d9b60bbaf43fd5d22c324b","impliedFormat":99},{"version":"4927ef881b202105603e8416d63f317a1f1ea47d321e32826b9b20a44caa55e2","impliedFormat":99},{"version":"914d11655546eba92ac24d73e6efdb350738bcf4a9a161a2b96e904bad4de809","impliedFormat":99},{"version":"f9fdd2efc37eefc321338d39b5bd341b2aa82292b72610cb900f205f6803ff66","impliedFormat":99},{"version":"687208233ae7a969baa2d0c565c9f24eb4cb1e64d6cfb30f71afec9e929e58c2","impliedFormat":99},{"version":"ab043784438ef8945a95124d2325308554c8b53dc92ce801f09702e79234282a","impliedFormat":99},{"version":"3fb3501967b0f0224023736d0ad41419482b88a69122e5cb46a50ae5635adb6a","impliedFormat":99},{"version":"06d66a6723085295f3f0ecd254a674478c4dba80e7b01c23a9693a586682252f","impliedFormat":99},{"version":"cc411cd97607f993efb008c8b8a67207e50fdd927b7e33657e8e332c2326c9f3","impliedFormat":99},{"version":"b144c6cdf6525af185cd417dc85fd680a386f0840d7135932a8b6839fdee4da6","impliedFormat":99},{"version":"e8dfa804c81c6b3e3dc411ea7cea81adf192fe20b7c6db21bf5574255f1c9c0e","impliedFormat":99},{"version":"572ee8f367fe4068ccb83f44028ddb124c93e3b2dcc20d65e27544d77a0b84d3","impliedFormat":99},{"version":"7d604c1d876ef8b7fec441cf799296fd0d8f66844cf2232d82cf36eb2ddff8fe","impliedFormat":99},{"version":"7b86b536d3e8ca578f8fbc7e48500f89510925aeda67ed82d5b5a3213baf5685","impliedFormat":99},{"version":"861596a3b58ade9e9733374bd6b45e5833b8b80fd2eb9fe504368fc8f73ae257","impliedFormat":99},{"version":"a3da7cf20826f3344ad9a8a56da040186a1531cace94e2788a2db795f277df94","impliedFormat":99},{"version":"900a9da363740d29e4df6298e09fad18ae01771d4639b4024aa73841c6a725da","impliedFormat":99},{"version":"442f6a9e83bb7d79ff61877dc5f221eea37f1d8609d8848dfbc6228ebc7a8e90","impliedFormat":99},{"version":"4e979a85e80e332414f45089ff02f396683c0b5919598032a491eb7b981fedfd","impliedFormat":99},{"version":"6d3496cac1c65b8a645ecbb3e45ec678dd4d39ce360eecbcb6806a33e3d9a7ae","impliedFormat":99},{"version":"9909129eb7301f470e49bbf19f62a6e7dcdfe9c39fdc3f5030fd1578565c1d28","impliedFormat":99},{"version":"95cdad1f759b74b014cea71cf1a68567b17e4165ec8139930305ba1e21b10a0c","impliedFormat":99},{"version":"7e4fc245cc369ba9c1a39df427563e008b8bfe5bf73c6c3f5d3a928d926a8708","impliedFormat":99},{"version":"3aa7c4c9a6a658802099fb7f72495b9ba80d8203b2a35c4669ddfcbbe4ff402b","impliedFormat":99},{"version":"d39330cb139d83d5fa5071995bb615ea48aa093018646d4985acd3c04b4e443d","impliedFormat":99},{"version":"663800dc36a836040573a5bb161d044da01e1eaf827ccc71a40721c532125a80","impliedFormat":99},{"version":"f28691d933673efd0f69ac7eae66dea47f44d8aa29ec3f9e8b3210f3337d34df","impliedFormat":99},{"version":"ae89fb16575dc616df3ff907c6338d94cfa731881ecef82155b21ab4134b3826","impliedFormat":99},{"version":"687208233ae7a969baa2d0c565c9f24eb4cb1e64d6cfb30f71afec9e929e58c2","impliedFormat":99},{"version":"f716500cce26a598e550ac0908723b9c452e0929738c55a3c7fe3c348416c3d0","impliedFormat":99},{"version":"6b7c511d20403a5a1e3f5099056bc55973479960ceff56c066ff0dd14174c53c","impliedFormat":99},{"version":"48b83bd0962dac0e99040e91a49f794d341c7271e1744d84e1077e43ecda9e04","impliedFormat":99},{"version":"b8fd98862aa6e7ea8fe0663309f15b15f54add29d610e70d62cbccff39ea5065","impliedFormat":99},{"version":"ffa53626a9de934a9447b4152579a54a61b2ea103dbbf02b0f65519bfef98cdd","impliedFormat":99},{"version":"d171a70a6e5ff6700fa3e2f0569a15b12401ad9bc5f4d650f8b844f7f20ef977","impliedFormat":99},{"version":"b6e9b15869788861fff21ec7f371bda9a2e1a1b15040cc005db4d2e792ece5ca","impliedFormat":99},{"version":"22c844fbe7c52ee4e27da1e33993c3bbb60f378fa27bb8348f32841baecb9086","impliedFormat":99},{"version":"dee6934166088b55fe84eae24de63d2e7aae9bfe918dfe635b252f682ceca95a","impliedFormat":99},{"version":"c39b9c4f5cc37a8ed51bef12075f5d023135e11a9b215739fd0dd87ee8da804a","impliedFormat":99},{"version":"db027bc9edef650cff3cbe542959f0d4ef8532073308c04a5217af25fc4f5860","impliedFormat":99},{"version":"a4e026fe4d88d36f577fbd38a390bd846a698206b6d0ca669a70c226e444af1b","impliedFormat":99},{"version":"b5a0d4f7a2d54acbe0d05f4d9f5c9efaaeddc06c3ee0ca0c66aba037e1dca34b","impliedFormat":99},{"version":"fa910f88f55844718a277ee9519206abce66629de2692676c3e2ad1c9278bdfd","impliedFormat":99},{"version":"a886a5af337cce28fe3e956fd0ed921345933163f5b14f739266ba9400b92484","impliedFormat":99},{"version":"9ae87bd743e93b6384efbfa306bde1fa70b6ff27533983e1e1fe08a4ef7037b8","impliedFormat":99},{"version":"5f7c0a4aad7a3406db65d674a5de9e36e0d08773f638b0f49d70e441de7127c0","impliedFormat":99},{"version":"29062edaa0d16f06627831f95681877b49c576c0a439ccd1a2f2a8173774d6b2","impliedFormat":99},{"version":"49fcfda71ea42a9475b530479a547f93d4e88c2deb0c713845243f5c08af8d76","impliedFormat":99},{"version":"6d640d840f53fb5f1613829a7627096717b9b0d98356fb86bb771b6168299e2e","impliedFormat":99},{"version":"cee41a6af55d502f3863fe3238a75108dea16ac9c7339e96c2974ad3babd6d78","impliedFormat":99},{"version":"6bd4aa523d61e94da44cee0ee0f3b6c8d5f1a91ef0bd9e8a8cf14530b0a1a6df","impliedFormat":99},{"version":"e3ee1b2216275817b78d5ae0a448410089bc1bd2ed05951eb1958b66affbdec0","impliedFormat":99},{"version":"c53548c66ddac62cb003e737c8599c3d75f7fba43e0ac8e109a8956086e7e012","impliedFormat":99},{"version":"cd0e881c6b0bc9a5ec74bcfa372e681a44ff9f5723d8ea3c1f2a7cf9e25bc84f","impliedFormat":99},{"version":"838c13b48725ba6d0630c0ec11fc8a33acff855551300e787cf404b093ca3f34","impliedFormat":99},{"version":"30a66b168efc5508e9fedfff14559b3c680b31bbe853e12310efda6e52dc585a","impliedFormat":99},{"version":"2fac70f99da22181acfda399eed248b47395a8eeb33c9c82d75ca966aee58912","impliedFormat":99},{"version":"35f50e2adbdf8dd774e5296c87740f5d03dc443757bf75aee87e2b3831ae552b","impliedFormat":1},{"version":"d75ca53134de3b91925e889738a1e5cda0715fc1947380424bd61f4e9b8f7a2e","impliedFormat":1},{"version":"17230b34bb564a3a2e36f9d3985372ccab4ad1722df2c43f7c5c2b553f68e5db","impliedFormat":1},{"version":"6e5c9272f6b3783be7bdddaf207cccdb8e033be3d14c5beacc03ae9d27d50929","impliedFormat":1},{"version":"21ac4cf3f8d8c6e1201cb31f600be708c9a37867fc5c73b7ccf80560fae591c8","impliedFormat":1},{"version":"0dfe35191a04e8f9dc7caeb9f52f2ee07402736563d12cbccd15fb5f31ac877f","impliedFormat":1},{"version":"a929f77f7afe6b8ea082fe4fc5f7461cf40ef8ca2a8f3cedb3e8a6d10bea49ba","impliedFormat":1},{"version":"45a7a6658917b9178eaf4288b8a22757dba3bc24676e166f28a3c2a4e858c4e0","impliedFormat":99},{"version":"7c699b5fea191ce032277394b78fa00208f26901efd288636d932c4b35ec4704","impliedFormat":99},{"version":"2fac70f99da22181acfda399eed248b47395a8eeb33c9c82d75ca966aee58912","impliedFormat":99},{"version":"f5f45f28f1799fe0520b6714be5157cc1e53fac060ae68691a6c86f62e9f4501","impliedFormat":99},{"version":"9a201d2fe34b5826c2062f0975612603595f6164a8856c9241862d1ecd06a191","impliedFormat":99},{"version":"55e382f5d8e33f6ce7a274873ba3a7f82eaeaa1e6c81d2ad3fc3a9a72468fd58","impliedFormat":99},{"version":"2fac70f99da22181acfda399eed248b47395a8eeb33c9c82d75ca966aee58912","impliedFormat":99},{"version":"2fac70f99da22181acfda399eed248b47395a8eeb33c9c82d75ca966aee58912","impliedFormat":99},{"version":"aa9e5835d6b7901b493368c6de2405a91fd4d0a9e451d9b31bd9d7872d52ccf9","impliedFormat":99},{"version":"0c8dad6023fa5ba611d8af2eb1ec79de1e359a583a5f84d6fcc97f95f2504ba1","impliedFormat":99},{"version":"ef204b804d92a897d0a561739b09154b37c45742c1712ac2cbcca5a307c077ad","impliedFormat":99},{"version":"966cd6faabf0ffa1ce07edd2fc8b21cbf58a34ffc475e67e727db0cbb73aa8da","impliedFormat":99},{"version":"85bc585d0174c5037bb2ccd86c9a666cda689bdafe8fab6033f385900955345e","impliedFormat":99},{"version":"8481fde24e4475aec613f71e39b4123f880c1f8860fa810a47e2921d159910cc","impliedFormat":99},{"version":"531b9350e8b7c0e89904adc4e262cb9cda836029b28ca304f18a2a2dc660691e","impliedFormat":99},{"version":"3f18284465d50e60405cd31f81ba4480367240edea1060f1309c2b717cf2e57b","impliedFormat":99},{"version":"01f8b2706df18d6f9be625b1a4aeef149b8f00c1c0b74e662345b927d99f651a","impliedFormat":99},{"version":"270cb7bde69342a53bdda03cd84fe856a4c25bb0a973af0b622be09d6112c617","impliedFormat":99},{"version":"45b3de3c266e92253de0c6aab28642f29860f50a0706c52714bfcafa98930eff","impliedFormat":99},{"version":"402e84589ae1525fd52ca4811e03ad74caf9ed2cccd3e10b1548985ed2d78dbf","impliedFormat":99},{"version":"4897bae7c28f78092a4f345995236dead78fc739bc8f9c4575e948b4f9a984b8","impliedFormat":99},{"version":"6070624b38dbc46781cd583f5cc0997a6ae6046a3f44bfbfcce5895907b26ed4","impliedFormat":99},{"version":"92397fd0f9a0277fdda1046ffdcc4338ad820343fa7ef0585bd283c61fcea6a7","impliedFormat":99},{"version":"cd757f923f1c05194bf41f9bbe8ac70445ea3aeb37f78bead4def17c31bf9542","impliedFormat":99},{"version":"3b896877c981fdf24d1f5c3f724ba0a8e457c75625f78ab80965f88e967f4817","impliedFormat":99},{"version":"4f4bd9fddf330a643f2b41d01cd697286756d3590a380695d5e22699f3d54be5","impliedFormat":99},{"version":"aa8822871877daa102442f6d61cdf04ff6dfd551b0a6971a29adc1c83d96f84e","impliedFormat":99},{"version":"82b5169e6cebee4c045a0c701f90df9e75cd6c6a717fccde20955463aac3060d","impliedFormat":99},{"version":"247fcdfe4b85e91fbb05c742cfad30a150c7d9deaa67bdd197fdcf5be360cefe","impliedFormat":99},{"version":"de2a0897621e39d747e1cca9447d3b6d81c9ade1373bdcfc4edb7ac4b4bad773","impliedFormat":99},{"version":"1ff3bbbfbc81f93c90045555c146cdd6d7c9d96de47bd800df168f46b267969f","impliedFormat":99},{"version":"f810d2d769d37cce91bbb44566ca58e80c2ab95616070ff56c0adfe466147652","impliedFormat":99},{"version":"7377c2f18d9c728fdc4bac134e0f9ac07f6ad3f357191f3243b1152d516d1035","impliedFormat":99},{"version":"7231ec9400548c0515b71dcc46008d7c780f3ab7e10e76ef8b6a9456b94452c4","impliedFormat":99},{"version":"c1ecf97a03b9bfd3824771d08eed4e1f8d657f042bf80320323b1b41cab09477","impliedFormat":99},{"version":"a41c88b22a03b48045abd54c9fb144567fa639048914ef453f3feff96509ceaf","impliedFormat":99},{"version":"15c0060ae45c4536320da9cd0b2c4efe5a357f41ec40495f89e29d17af24043b","impliedFormat":99},{"version":"c1490d3da1d7da0ec66a6aa283f743a7f2186b3352d344d0f5eb28a8cb6c6316","impliedFormat":99},{"version":"45bb3dd222e9b5c7ea2eed9b14c7390aa48d4784b5962883c3f6ace3000f300f","impliedFormat":99},{"version":"f6fb4cf4e117ee8d845f361598ac9c19e9ec4df09581702941e238ddecaf2254","impliedFormat":99},{"version":"b75700b0c451d8596f9c29528613d48584c82f190381c6aa8047c19f14272cf1","impliedFormat":99},{"version":"ac0efdb9a86146242f5bb2060dccbdfe743db956e253b290aca5b00bb4f15f22","impliedFormat":99},{"version":"4cbd25cde19d5d52704f84e93f9b648671c41262a12005b695cce3cf904e6dfa","impliedFormat":99},{"version":"bc21653478cf6b46f14040c82ec5d0df8c3a9f0421cb4050dbc36f831b222292","impliedFormat":99},{"version":"d3c7021ac45e25926ecb99ffb6d8016aa0fa9ad0854033d3921439d1707e85f1","impliedFormat":99},{"version":"b471c43e0e164fddeca3b880ab82dff6ff41cc1827575f5942258f52121fa640","impliedFormat":99},{"version":"ceccd6e27502a11f9b59edf79e11efa6debb0edde134820fb1e1f54da5694b5e","impliedFormat":99},{"version":"f62d1db65c973e8b4d87d00d81bb4e379d12e55fb8ed4bc699f6666ce9ff9886","impliedFormat":99},{"version":"2d9e565828f9149609d344c338d03bc579e9d0299f7cef5825b240df01f5246e","impliedFormat":99},{"version":"baa860eca2f436200f15f98537665bc88acbef57bae1f1ac00da521376ad9066","impliedFormat":99},{"version":"7e14cbb2e3dd8a32a7cd9a5f3b8f13a85ca501099181b868b479c8536a9473fb","impliedFormat":99},{"version":"357027211d253c42a19736cf6b7eabe096f7036805e6c89b35ad15bb386854cc","impliedFormat":99},{"version":"3e1b2c2ee5bda3dcb7ab76374700ab816ae6db477623b07b550280786e6470cb","impliedFormat":99},{"version":"5fe5e365cff077f3dc7dc1895f86ac78fb312018e8355958b58527bf4c9feba6","impliedFormat":99},{"version":"90f775adcf7fb6d865593e3a1c4528298fee68146fd0375335e34866b84a09ec","impliedFormat":99},{"version":"544ef9db8c8e612a1c8dee3fef7aaf01cd6aa721137d17db7f7d7b3d2c5cbfb0","impliedFormat":99},{"version":"1190f38b2d825ece9518c158ba966c19d42ce2e4f17aee2a0eced09a94372751","impliedFormat":99},{"version":"0ddcd0644863f122e3d12148f1447f6035f1c6f349d101422ee78a44656ac862","impliedFormat":99},{"version":"4bb933740ef6c9cbeb00ba53073bb171f97a4bc2d4f66ccabbab35afa546e202","impliedFormat":99},{"version":"90aab01d2a7bb75ab416585099e1086792b576761d23a8bce0346de782928b06","impliedFormat":99},{"version":"82f439b5b38c7613567168b691e16b88330fcdd5e87840de61dead0c4cc6a192","impliedFormat":99},{"version":"01a0873b621780693a2723be1b48ac4d500619f5a1f2d33a559752a1c46d1197","impliedFormat":99},{"version":"573227457b7ee7f526119594bb218b9d405b6768eae594e838d38c8dc0cb6568","impliedFormat":99},{"version":"8486ef2c6b50fcc1eedf9b1fdb689391080f9606e2892b2c137a3b86116ee6e9","impliedFormat":99},{"version":"69d60b2977fff07328adb946457a2f0de6f1f6e89722a7c698d96a6a2f83e3d0","impliedFormat":99},{"version":"3fdd16c2821927cfaf6e365f134bf34ba33af597558bc4deaf2f00254273322c","impliedFormat":99},{"version":"61fe4f0252672d7669a3950802212f070bfb606b091c6046ac6143138f6eed60","impliedFormat":99},{"version":"d2abc9997cd77957130d1ea9a4ba4b23b803317f16afb771fed6d3b63cc8d0cd","impliedFormat":99},{"version":"993fca3556263faa04a5d5d7c9b2e7e41cdcd3596a611120313dbe0b37937c6c","impliedFormat":99},{"version":"8f10bb5f1b826ac2532233a705d30ec1892f2fdee7eb915d3e3a4d7acbc0046c","impliedFormat":99},{"version":"f496394b492b0251aa7c9abfed0cc3c1a96b163b3295ee977006551bdbb23be6","impliedFormat":99},{"version":"e735c8e47a6993b48d85c706fcd974bedb67901445662a1825b16df4dd97dac4","impliedFormat":99},{"version":"b3a3fdab86e68136132a794a995adc47ccca4c3214509450c8cf9b786797ab77","impliedFormat":99},{"version":"24b7602376d435a1fb46d817f1f12d70c599eefcdd7ba3adfe34c82daea6565e","impliedFormat":99},{"version":"3a0f8e778b0be125ecc6274c494dbe26d4f92e82d6d0c23df46d5e43419cf95e","impliedFormat":99},{"version":"0e00b25da0663add71e89155a2198fa086a5a2653a80c410c467f6f0efa6cbcc","impliedFormat":99},{"version":"057187022b0d6ba72bb259ce190d1e33fb9d9a9fe57350b55b6d2d722831149e","impliedFormat":99},{"version":"8d677432ae16b8e105c1c616fc1443d0ec52aaea55e19e13f952fc32aa858c87","impliedFormat":99},{"version":"6517c6927d58529f58ffd55ade8d82d8089ffb8f9dce125b3de210ad86d03b86","impliedFormat":99},{"version":"2fb6e6b06b727e554d3f0934af3c6d10e32da9fc20c3df1fe43cb92e06be5c0f","impliedFormat":99},{"version":"d2681901bd36444ff7757d0e2ec3e17a064082f62b0cbfa9e228aace025e9c42","impliedFormat":99},{"version":"65cbdfab18b014a6840b68fe80183b1cf3637d435b497c99ba1a502f8303e391","impliedFormat":1},{"version":"3b133b5cb1fab24798fee6c349c3925d9b2e46429669c3a290f5324d9a210025","impliedFormat":1},{"version":"ef783fa8760c66a585666ee47571f1b5beb6ee39c65feac3c6d11b9419b23a73","impliedFormat":1},{"version":"e66b54d888e7c4aa706f68cb4f423c9a7e4466c116140b3b751f94b9f6cdefd0","impliedFormat":1},{"version":"6a334b9a856fb9942989438d731fdba29babdfbfae340b4f7182f1db740de71f","impliedFormat":1},{"version":"e184c188c53f56fb830a9baac037236bfe181e9e56034686eeabe17af4ce47fe","impliedFormat":1},{"version":"c894ba99b642d34dc85b6f996ba006bb5c75262e8ba01d6989cde022ff91c33e","impliedFormat":1},{"version":"1e71697fb2c00b3cc4abe7b458acf90fffdec4996e9a885ab868d2a88876ac43","impliedFormat":1},{"version":"9a32c6873b8adfe2da4a2fb2e2fbb574227f13810d7596cdbf83b5eb9b9ca0d2","impliedFormat":1},{"version":"1b95f9db514599f21c2330d53b93495513c679fcef1aebf767098d6a9c61833a","impliedFormat":1},{"version":"b0d3f577d89cafb77845b87ca77553e992435b919221f3c8397075bdcb7a32ef","impliedFormat":1},{"version":"af7770fb80c5c4bfd4e9a2b245ae35ca927e618161bdb3cc4b305ee3928187d7","impliedFormat":1},{"version":"2c3ec41b38f7758ee3e53609a4d473205caf25f8b10ca6978587a760842d179f","impliedFormat":1},{"version":"2c2c3d4340a36df89a0f4d8776618705fb4a03f6a20b6136e53c522f4080663e","impliedFormat":1},{"version":"56bbd1661909b6600753fc71ed0243f6e8adcae647ef67fc0b62b60e2675a5b5","impliedFormat":1},{"version":"0f99e68df1ea45629adae539a99c2905fe434028fe6704f167271f4ff4f05264","impliedFormat":1},{"version":"eb4f06e379b9718725fbad551937cfc3ed1d279a4a4c7557f255d58858c7d857","impliedFormat":1},{"version":"85788c0c598c4056da67fe8a59fe45a5500fb99419aad0f674bb6da07f793288","impliedFormat":1},{"version":"3da22475af910d44c68144a18133de616353aeb85218516e3d7324d8d5dde33f","impliedFormat":1},{"version":"3ec462a0e5c193a2fbb9132b3ac1554512475b2889555c2842686fd4fad53540","impliedFormat":1},{"version":"f7fe6ae99cdb6d40c8a49235f43532d6aa6386f62dea97bbbe5b40fff5d9e7bf","impliedFormat":1},{"version":"3f6da7b72f49f175c8697f0b595c61b9c6379ccbd5bb52c188af80e97755d91d","impliedFormat":1},{"version":"c26e3f5d9b91fcf817e6ed3565abc561ae1b8b5510d26b1780f7c36565463ea7","impliedFormat":1},{"version":"ba82909968e9b21ba2756849a8e3960378bba2071e7e534678c97a6d0923141d","impliedFormat":1},{"version":"77b3fc3e5036f6d435fd1a7ceac8301d654cddb9ea50d9c77f9c8b9400711685","impliedFormat":1},{"version":"3b7765c7de1b17a0ec47070ee2000bf0da31cdecef6f61647cd2eb17d33cdef8","impliedFormat":1},{"version":"3da62cc0ecc4ccc373936142c3aef5219493ee7fd013a1426d733a1de178d064","impliedFormat":1},{"version":"3bd67be4d356ced8037d48437abd6fa8c4c2aa2b44b5e6fd98df41127807197a","impliedFormat":1},{"version":"70ef66c42dc83eb786c79d24d292e9f40407b03d6c37112adbced4c5fd353303","impliedFormat":1},{"version":"12a7629d2d48dda27e51c66aa511f28721e78a7d50877d87d656db7256e5f8b4","impliedFormat":1},{"version":"8d7e6cba8878f619bbe9c913c60f806609ed6527aa2da09ee4daeda99581befa","impliedFormat":1},{"version":"90cc2fca0550efc03063c7fc512eeddca0f91738a68391309a344f99ecdaf9e7","impliedFormat":99},{"version":"598fb14b8dc10fa1db2e6487999b25b75e54e08f7f24fc0394888a49284aa62d","impliedFormat":99},{"version":"a513b399e094c24ac5e4cee5b5c6b38d8dacbd1eefd46fcae71bc46be6b2e120","impliedFormat":99},{"version":"7310ba815b1298a1524c4e2edd3224cdca56bd4db7adee668d95b85f3a2cedf9","impliedFormat":99},{"version":"91b36942c9f7fb5e8b3ff2a6cfc950ef5dc3a12d3eddee5cc4f2f493a4e618d8","impliedFormat":99},{"version":"826b3e7d42891cc1a2bca7d688ae4967e3ccfd061adcb0becb2f8586adb7227f","impliedFormat":99},{"version":"39af3a83e76fe852e363c316d7025cc6227a230c019332463550a521c5af4ecd","impliedFormat":99},{"version":"73af554a9d886e748c44fc9a189cffa3e7a01b5d349139422b15f560fe0399bc","impliedFormat":1},{"version":"40c7cc279bebbbb93fe4d92194dc882e7bedd78a5a8863c032e257af3beeaf0d","impliedFormat":99},{"version":"e9f8eac5df99bd55620267edbc1e3052df609aff1eec199121ed40924d6f4c77","impliedFormat":1},{"version":"e20cb5ecbb81fef3b43a3819a964d7493606fd72460918f6cc19859e9e9f1fbc","impliedFormat":99},{"version":"82f9e99f5d09b9b40fb1e0338051f614f2fba2f0eb6ffb493e9cbe0cdd775858","impliedFormat":1},{"version":"268011eaa3e078d8e8f3cf68270bfaea3d847c02b3a787a557199d242ba6d859","impliedFormat":1},{"version":"454ad66df309d5c0bd00933afcb2c494e1e920bb9d71dc2f5c6eeae71e17d63b","impliedFormat":1},{"version":"ffda5bfa664984a6b5fb52c5305b3305b0b4226e507defb219986d2851dbf271","impliedFormat":1},{"version":"e4f54b323cbf50a0c7dd16d2e00fbb65fe703507bd1b6c92834760f3818c73ee","impliedFormat":1},{"version":"e943f29aad5d086910fa813644df591992329f1ae3216ddad2cbbeba8b498ce8","impliedFormat":1},{"version":"f77731933f64e0282d2f817631c33ce4968308f0105a9d00c02b3da0d4e1bec9","impliedFormat":1},{"version":"4961298a242a5b62c67d7ab4f9b6e8cc5a00e13f15db729d41b0d52bf657fd0f","impliedFormat":1},{"version":"dba5195f554b93eb70c5d095707ce8a8fbbaf8ef529e43164e29839dc2b52cf2","impliedFormat":1},{"version":"27dba65ef76f5a18dacf979f7318823f6477b3001ad0d5c768e97195dbe1a9cf","impliedFormat":1},{"version":"b5d9f34b4093ac500ae683bc619adc06ee2fa7894dd6c48bc6c6d547e3e17c8f","impliedFormat":1},{"version":"abc82190d7bae3005c472d8d05bbcd985ede5656fc0207aa68fa4e7da9a9ec65","impliedFormat":1},{"version":"949b926885b92ea08bba54d67dfcfba17c70ef891a9782f47be2a60eb90beafc","impliedFormat":1},{"version":"6af5270cfa74794027a2bce6f4206f93c92ea44134ebe8565a25a29207b8b448","impliedFormat":1},{"version":"f8d5ed9aeabcb45105f2123ad38d4a2f92f0d2aae404126354c2eb3b58c220b6","impliedFormat":1},{"version":"5e12507f43f37d079ad3832b65d5db02ed6dbe97efaa91c49d2e4012c743b058","impliedFormat":1},{"version":"71db4f6d5abbc45e7eb3efbc2895920efea43b1ae608d5a5ba3bc729034938f6","impliedFormat":1},{"version":"db7ca7e8f700305416677ef26504c9771e18cfe7d4e44dc0db56793911de0479","impliedFormat":1},{"version":"21f8a2249185447d1704a8bd027ce6e3b347f23fc94469cda8d904e51380dd0a","impliedFormat":1},{"version":"031fc5bb9689da434671316d76b4c4edb048d3d1ba65f517b7f72a27b276cddf","impliedFormat":1},{"version":"a5e7563b2030f9c076daa5347416ef3679b58441d6c8ec41dbf25dea39140591","impliedFormat":1},{"version":"116e06ad30ce51f3ddda64ca96da17c9c91763d32391f156fbe257d7d7314ad2","impliedFormat":1},{"version":"0f8a804a7f912f83768aadb08e60153be70037e11c63c34e8fec0352d7f6b128","impliedFormat":1},{"version":"d04253b154d2a9ea9f68c979c8613b08d6496d0cf9e6513b73d334e817aab32d","impliedFormat":1},{"version":"7231e125b797ca135cafc311bd151e347b59860aedd79944084cf8d01ac96a1a","impliedFormat":1},{"version":"f4e6a219c97362672f211d82773c8b3642fa266967830b99b1b0a1fe1f264ff0","impliedFormat":1},{"version":"33436b63f7c6073de5a917147a773a77e8fd58364d25c5faedb74478241c6269","impliedFormat":1},{"version":"1c6442e524d59ab72c6e5be929eecb0184efb6201e122c93aac2c96092c665dc","impliedFormat":1},{"version":"ef64c5812115a256a091275f64b96478dc1be0ba0d8c6ad15a2b48bace79f2e4","impliedFormat":1},{"version":"8a466f153abbf98b54f3f11114805d958ebc1d10cfde25489cbf4eee3ab73d24","impliedFormat":99},{"version":"2cb377393bc1fec5c94bf6a66b9589428552ef8f43555c4d56ed9dbb39d3b6ab","impliedFormat":99},{"version":"a1d02fc6158be3e0747db28fce83d868675f0d534b5e709e49ceb402b5fa1546","impliedFormat":99},{"version":"5488d985eda0089f9af84428ba3b87b0fa324fc606b53ed92a330d75544c1fa0","impliedFormat":99},{"version":"9503abb5f4cec90d15508bea5b9b346ee318b61cd216197abdfba7c23a1b7f98","impliedFormat":1},{"version":"b6f079ae4e4700f39f0c3a298bd5b392759538f78b7bed691b5395a84af7240c","impliedFormat":1},{"version":"06b9d7d5f165d6d8943165b6c35ac4f58168a22e7e84e3d998c7d3f2e309aa1d","impliedFormat":1},{"version":"06fec4cdde20d9ceb1ce713c1c2800581de2cd20df5ec10aca8dbf80c4b13f02","impliedFormat":1},{"version":"b8c81a0bde3f27c47431b3345ad687ae2a3b88fdfaa15bce56746778153004c9","impliedFormat":1},{"version":"bb315cb4e4267dde7d4a2c11d9e743a4d8d2ed210c23d807086e0809dd8b3431","impliedFormat":1},{"version":"fca6802d418b89ed3ae99dec5c0d42ae80c09702ce6bbe14aa9af053af58c109","impliedFormat":99},{"version":"b0e5e70d6cbc087dd7f842ed1f0548a25c746783b6bc88a13696ca517f6538fc","impliedFormat":99},{"version":"5691211f2d3d4b15831333bae27895431f2fa61a49284bf1ddf3cb13229ab0e7","impliedFormat":99},{"version":"76057b4c42aa46cf0d241022f7b4a34b9c4b42e1d3039584938342d701325f54","impliedFormat":99},{"version":"9f12d9ebe66646a1a62476a2fdcd54436f80704fee604bcfead5e561c8a06d82","impliedFormat":99},{"version":"0d9ed3d0a1d658e265fca4544f7bd72cb0e4ac04289e567999fccacb8bf23942","impliedFormat":99},{"version":"6ddef35d1c1c53be9d1c969d7be42061c6206ceb4f315f2f73ae574db2b66c9f","impliedFormat":99},{"version":"3b7d93b9e956702e70bd2719b098aed1dc38db124fc8b05be38df72d74aea1ba","impliedFormat":99},{"version":"8c03f1e4bf31dd93f401b624bb7bb9e6049ab4bd729ece7a0a333a43513da05f","impliedFormat":99},{"version":"e7607b9510c9b7682838272d3c291687825703f98cabd9b626aec9c13777638b","impliedFormat":99},{"version":"7313d5c65f476d10d7a4302985485fe5f32fc26cc5db5b3c90f19db153f3b147","impliedFormat":99},{"version":"70263cf1cce52834940415495b990b79e8d0c3d33722a413def2427fbd0e7335","impliedFormat":99},{"version":"250788d9295815dfb48fcc07ca0ecca9cc1362eca3e412ced9440337a6845e02","impliedFormat":99},{"version":"1654da9df0c97cef6f6e73522e774d47648b56f42d7f0a389a0b832029240ca8","impliedFormat":99},{"version":"032708cc4f65648d1e7928d56c599a3d33a7e5343af046b4907ecb5167e9fd28","impliedFormat":99},{"version":"a26c849da4fb379def16137714fe7865292c4f57a0c680957f11d8626b2a5d58","impliedFormat":99},{"version":"eb4589f330b2b662f7102b807385f21a77ed47daf527f2d7413bf1f59f827926","impliedFormat":99},{"version":"005081fe2ac323e05c9250762659ca1fb2655ffe195db42ac401db7656a33434","impliedFormat":99},{"version":"194b40df34d512f018c94ed400c12ced47ec0d0d0024e93193f5f1ddec197209","impliedFormat":99},{"version":"b61a325187e209370a66fdbde0c4ea4e3eea5a0eb62028308a09708ecf22df0c","impliedFormat":99},{"version":"6af4b184c107adadb6eb713b1f94f7cf2fa3d2682dceedf7de5809f61c32a4c0","impliedFormat":99},{"version":"d8e642501089a62b205907e642ec6d170e524433914086bcb55e356d837c195a","impliedFormat":99},{"version":"b96edc0f63de60acc4a02123810c41872a6c36af81395d93a466b0c48e854ead","impliedFormat":99},{"version":"47585511fdb670f049ac9cf6d99ca1415db4b2860c01ac0d5c0285e26ae67137","impliedFormat":99},{"version":"02c582136d29f693b8653f245492efe67c300da6f512186f57119320602d8c42","impliedFormat":99},{"version":"a19c526d364dba0b2d4bf90bc48027899c4a463a970198158fc3ddd9d50d22e6","impliedFormat":99},{"version":"5a34310e8a277f46f226de3f14f85b28045134382d2e7bb0dcf7b1940e867d75","impliedFormat":99},{"version":"e994ac3e5e1fbaf99c9231e5efc2792742bb119fc80d2cc5601a286083519f08","impliedFormat":99},{"version":"9a7f9992781334b2d6842a4c4678c69ad5953d0af869038231ff130b8d362ecc","impliedFormat":99},{"version":"26af0ec63cc0ecf6cf908ca0b3371d747c5b16b31b458664fc84e42829fcfc91","impliedFormat":99},{"version":"6931e8c252c1c7adc2ea4fa1054cd3af9ca16c2e0970803e74ae0cbd6b6eeb04","impliedFormat":99},{"version":"4504f968ae4e1dfabcbb9455e50d4b8b9bd8812fe7944df4936908008be7bd9f","impliedFormat":99},{"version":"495d72307d8883127dff213871cd3fe8bfd456ef2a94170855094133d7e1bc24","impliedFormat":99},{"version":"132e407c15a07359bfaea24b075e83101da95241a0b3f5a2abeb41938e5167b1","impliedFormat":99},{"version":"82a0e39185ae3c8750c776e3512da3b490b42c40d640d7896b747432b1fed080","impliedFormat":99},{"version":"990a5eaa839432e8959bdf25d57e5446fc2a3b6c04a08c3d98218ef4b6f35084","impliedFormat":99},{"version":"16c33a8f8b4068b34ae7b4df4e349e11245859669b18e1cf0a72d3dbc1d39a4c","impliedFormat":99},{"version":"f279cb3696fc7ca366af09364912113fcffa02aea3d11f4e16a91ce621706258","impliedFormat":99},{"version":"06624476f5501305c27aa846a30690abbcaaa04db1a34b11045d7d8c22c2e0bf","impliedFormat":99},{"version":"8a225e7475a2d199dbba92f932df219fce36ae90c2dff3b9a388b49c5cb42abf","impliedFormat":99},{"version":"22c6d2f13b648b3fa5df4a394919e4c6f5ecf6160bd6a8755c7a6f0b2f7abf14","impliedFormat":99},{"version":"1b8f0d8a29503b796431c542c484b0ebafe1223e48fdd74237a42eb371987517","impliedFormat":99},{"version":"fb652a27ee66ae1232d67cc79ace76e1d444f8d37064fe234c7b2e762712d54b","impliedFormat":99},{"version":"bdc90d2feef36b907cdad5d9876023165d3bacff85b4a57df085c316ce252cad","impliedFormat":99},{"version":"1d9dedb0dd8b0eb5b3105d577e65627786185e5f467484b12a419aa97c0f197f","impliedFormat":99},{"version":"27a25e21a230be7cca2d75db5a67e2be375282e7b1699a15f4e33211dd0f0f2c","impliedFormat":99},{"version":"4a5d17a0faf8af0e14987dbebb1e39350fcb087237452dddce936dca8e869d9d","impliedFormat":99},{"version":"87cb24ebc66080f5faa3e609fea0c67f01dbbdb1224c72d0a2338c08c901b0d8","impliedFormat":99},{"version":"8a1dcf16706e4597681fff57326c1f9ac14082accace6332acf5d6dc89a3ec2f","impliedFormat":99},{"version":"be112a9b78578a7eb57cdef2e48f17d1fce438b741cbef3b34c64620ca4f07f6","impliedFormat":99},{"version":"35ccc7e81030498057f8666924ad88b9e0e54a1fb03b4455e47a64642824912d","impliedFormat":99},{"version":"9dd1ada2bd479d0ff7958b09cb20b28537ffb3d9f1c6f3341c4c60c2e0cf1574","impliedFormat":99},{"version":"a8e2c4132e615e8f5343269e9001c1a403726a772dfa5f64fb6201500fee928a","impliedFormat":99},{"version":"220cc181f0647eb24d6fefddde0d6c827b0aff763be1129f3df8cb1fa9fd9a1c","impliedFormat":99},{"version":"5d4afee41b54667c69f7a105fbb8f87905501d6e7634fc25a2377475a8d30a6b","impliedFormat":99},{"version":"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","impliedFormat":1},{"version":"c338bbb9e72e70bba9467696867875e750d68409c7effef79505ca665b9c6dc5","impliedFormat":99},{"version":"3e610c3431f5c3fd1f2b0155516656233e4122e187f643f31054837ea684fe99","impliedFormat":99},{"version":"e0ba304c13972fcffd284205b440bf806aa4e19681c6665408e3ec306125ad07","impliedFormat":99},{"version":"87ec934346c216050d4d2bf59f9cc5dac7484f7f1ee768bda33efef37bab1b82","impliedFormat":99},{"version":"6c2525d9c51d3093e361f4740f5582911f6767a207fcbb7a8f9b16735d5608c7","impliedFormat":99},{"version":"bb4c626cb469e577cbe2e6ba83f6f9b572807c15a44817b508296fdbeb408506","impliedFormat":99},{"version":"96a212be4232ab83443032662adc8e4a106a40cabc95b129c370a70dbfa3b79c","impliedFormat":99},{"version":"fa0b1b7f810b5f5b9331d1d1e43f9b2f313c1ca68a13f1db5094971d5d14ad50","impliedFormat":99},{"version":"fab367e53a92895c438a4a9752dda6ad898841d5da5ffd20cb4d5bc98fdf79b9","impliedFormat":99},{"version":"702e07c623b683daca1be9dc86f68b98bea08594d2fa58152569194374cb7803","impliedFormat":99},{"version":"773fece125c0873100581c4cb60cce66fb7c6c251309ac157af298a1254c41f2","impliedFormat":99},{"version":"4ca6063a2377f4b044de856ce0d77eba0b831311c2d0b03540f74c07925460b5","impliedFormat":99},{"version":"5b0334c5e38d76152dc097b5bd59387dbf9b1eb6e4a2dd3c0283e3a84fc06c84","impliedFormat":99},{"version":"723510cb216fc96c1c07a87a2b9d7884e8b661a05b9a4ae797bd3b8dd56492f7","impliedFormat":99},{"version":"0d3399df5e693f63359193350cfb41c89285d28399a0f630ce0cbc416983803c","impliedFormat":99},{"version":"62b3e968c398fee4b0eed5a13fd541680c5e9c9f019a647411a6b4bfd19dd41c","impliedFormat":99},{"version":"2b27e8692192cabb5d59515ea899376ffe02222e98c6925293acbcb9c2fa0210","impliedFormat":99},{"version":"f4086ac8586359d3ac82e741ee189964c584ac093d21ec56ca76a243999ef235","impliedFormat":99},{"version":"fd69f4ad6d59e73cfb16e701c4a30ba7462f821ae431dbf1422f4dbb46b5ef24","impliedFormat":99},{"version":"9078f5664d7334f5e21ac358bda1e84cd7ae595482e07d8f4784625cb30308a1","impliedFormat":99},{"version":"6f03983429227448d460dd7250746696edd2ef6a19bfd4465c01d27de049d2b1","impliedFormat":99},{"version":"dd21320e5700d960be5c16810fb2fff4122f8778d5cc7c05f943c25b623fc2a2","impliedFormat":99},"e6f29af251cf7c357e414949adec8ee2362dd908af40a9310a0f0613d2a9c2c0","7af23e2704f7bede05b5d81c57db8cebbeefac699c551ead921f5f83946260aa","a0fa15d72caf3a0eb1a57a912370f346538a34eeecd51234c13a0d3b4b915503","2aa6d406f44a668f06b31f8123707af3a10693e93322692120c0027e61e4d24f","4331e6c683b1c6cd14c04d7406e9c36b5e2f885a2783ed8299279a888ef4bbbc","e256a8cd5e2ef7fe911a8eeee649b05d04ff44e242e4399b7fe10de489575930","8a5ebc2bb1003e04d74afea72e996b9182b611cbcbce7e9f5d668471fbf7ce4f","9df29fa4db42e17296245ec0b52d5489cfd838f74f840e8c3fa793c43ffb16c5","95944601f00c02dff61b3d079ed5e9f0fa296cbc078412314925ee17a448eae6","ff5bbe68ecc9f4aba0b81c6bebaff2c57180f08a59703e9b4f7407a7320b591c","c70d5e0bdca57bd7bfb671564f85599d85a7d5b24cb356453bbbd55a636a1d1a","1311303c68f32d543a57451feb32c816c3385744c3714e78761e11a466f263f1","28a8eab93878d4396bdec58d67c3861595c2a2b0627bf39a18de306242d045f8","499d08f7318fb64be08c7aad96c6801369d1a28a0b5eaafbb22251ecb5ee8a6d","7605543e236d3f6e8f293d09dd04b275f94a921c799e9e63f21e8c1d6a376f48","fe3b5a93d143758af205c24d9dec57d7cbe684f4c68df0fad3ac09ec6090d9bb","19698ab47b03b15359573efd6a01c1b8b728286b99a1b8ce88bff91032ec7361","38039bba2152210d03a19f7bafe38b5e0b2ed045ace7c9406eed6dc48b870f43","ae8571ec0bbb3e5bdc3de9a2bff534bd6a4b0ce8d7a075fbf339253d86be240e","43d75ec26ee0a57dcb80d9da94052f1ecec9b0ea132ffa052439e0d492305553","0438ccf385a5bb395fd100d5dc7e12129f3e0ebc59094d64ae14e4e2fb27602d","41760ce0bf277876493a014bf458ab62d673c272274c9c9707f72c9bc86e8acd","987c8e89a8412e7b720b1591998e8b18fb7b9e485091123e57fbb272bfd65979","6f516f99e76f7919d359d1de9c03be783644081c2a3d559ad60d28704bedfc7d","f08bbc7bb798267fcd109c4e081f4a3414515e8c8ed82c6aafe113ce78b3fc53","5a4390b8891ac68e53cdf7622c4abfed7ae396946cc3ac67037a2075a6070b32","fe3bcc50fc7c3d705e1d5335701272dddad17122f7c2ab90ce35f6dfafb5e91f","f0b2f833d9d4e13cc446c3476ae563d9c6bada7c9495a27a72714d5035ca9807","e5cd45f8ceb157c14edcd10819c95b58e8822f369461c945ddaf46ff82985f91",{"version":"8aff6e1463b5d45c90e298ff589c1085c06624d467d4cbac47deb28eedd29f59","signature":"2f9594f12b566eafa5909f1691df697c378b7447755ce9c640f45e2a07f167bd"},{"version":"50b5e0089cc8135750a422a661660de0b0efc8879363507c703e52fcde653d46","impliedFormat":99},{"version":"b7901072b4348af0c9c02ef413add51f3adbbd608a6f3155c40fd26b6a1ccc53","impliedFormat":99},{"version":"f887c9c3d273371c7fbfbb28128ece44ff88240e94226e2411b3800915ef1ec1","impliedFormat":99},{"version":"4a80acea776bb9bc1315176b7cbc8bd6afd7524ddede00936fab97a9c19e050d","impliedFormat":99},{"version":"f2b6d401b1c8387d0a03bcca48467ee689ecc5d03493b8440f57d96218f66da7","impliedFormat":99},{"version":"933d6cfcc7c4ac2a5a4679f96dab41d1f38d0d6973e79288fd570d0ef9f3de58","impliedFormat":99},{"version":"a2c963a0233590a07baa63c0475d18db25b0f51216cee3570268137b51527529","impliedFormat":99},{"version":"913e639f61cd70f5923859ffbd1524259d7b18157c587374548000b11140cbc5","impliedFormat":99},{"version":"8a432ff1c3a5f3083f3fc698ccb614a422514f845ad2158e8a954d3dd9a1c383","impliedFormat":99},{"version":"ed22a90df33f36f6bc07bd3ab818d4131ba3f417edfce5a8a894b5ae6afa7577","impliedFormat":99},{"version":"2b517a75ba4a87e647bec729afdab7a18c3bde4b026e340088e767f41650e0a1","impliedFormat":99},{"version":"7a0e931af86d1c6463652c4c5f52662f20478c8653b0f5f9f8d33d10ec624bd6","impliedFormat":99},{"version":"f5de3c64ddea8eac2fac152dde0a5c2c6f8d2aac51cbbdbb7ed07b5731213640","impliedFormat":99},{"version":"cbe7232374ca5b70b2badf1f5d15415825dbffec1302b302cdada27ed2c9387e","impliedFormat":99},{"version":"de3ca702b2f87248cfad34b8dd71bd9c70e48751b4b1ec707994ca7426e649ce","impliedFormat":99},{"version":"316f1486e15cbf7896425f0a16dfe12d447dd57cfb3244b8b119c77df870858f","impliedFormat":99},{"version":"b399caf59aafaf8d5acfba79aa33a4e70e109024ed714fc39a3bc14d30bbf2f4","impliedFormat":99},{"version":"c9141d1554514109e17d81d06f517d2cdd1cf0c14fbc3a6b0f0a2f781328fa6e","impliedFormat":99},{"version":"e13103be1d58f3cb93dbddecef236354cdd29c5e50b5a69a80b3368c8ffac45f","impliedFormat":99},{"version":"9e4eac4060746feb7efe37854a32fbde8f3fbe5c0b5dc959d6a46084cddbb570","impliedFormat":99},{"version":"44e6caf455aa90cb1daaf1be842a620aeecd5704bd0069111cbde12f2927e0b8","impliedFormat":99},{"version":"c48ec512436db1cee793e3a282056d11adad61014b84ee759101a09a5731f37e","impliedFormat":99},"5bc70d960a627d3d645b08b67e422ec2881e59813cdb136069e775d41bf914d4","59a8502f0879bea2bc0599c40af5e1ab50e0d646cbe9139ebe9a95ca140df3de","dbf6b0024f406a553b7e8a331ea33768f73dc4e1b70c470344dc14e8528ec4f8",{"version":"eba07d9abf94513e9f9bedc753e795d7a10b28dc2482cae13f4d874a88a1bec3","signature":"963991fa5943adde556cea8ebb00bbc508e9de048eb361c5a8b9c59a88707119"},"167818e9a9f8b099e12d08e72d7e1450ad6cde941365c8f64a595a6d47c92cf5",{"version":"51ac745d2bdd695ac94d4be7f0ba471a9bbf47d6a5fe605d947bdea29e8ac960","signature":"c00daa5dfc951635c2f488e0338551b9e8f5226c157f5918acc3655945d72314"},{"version":"d4250ee52ba33628d45d6e3a36b3d3cb1ecf07e83e29f9cbeeb1ad9d29c04130","signature":"ec7cf39dd4492a8d7b83af088c4b8ad6d72efc75db25eb2d0c07e7b2979c92dd"},{"version":"c10dd8a80b709772e3ef3de1333459205733962f0f73d92ca81a5c47f352f95c","signature":"9408f02b3e2faeaa6a178ef95d637ad8e9b07cd7159d33bda7cd6164dbd74b3c"}],"root":[477,2286,2287,[2313,2317]],"options":{"allowJs":true,"declaration":true,"declarationMap":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"experimentalDecorators":true,"jsx":1,"module":99,"noUncheckedIndexedAccess":true,"skipLibCheck":true,"strict":true,"target":9},"referencedMap":[[477,1],[2316,2],[2287,3],[2317,4],[2314,5],[2315,6],[2313,7],[2286,8],[1416,9],[1418,10],[1419,11],[1420,12],[1415,13],[1417,13],[510,13],[511,14],[2146,15],[2147,15],[2148,16],[2149,17],[2150,18],[2155,19],[2151,16],[2152,16],[2153,16],[2160,20],[2154,16],[2156,21],[2145,22],[2157,23],[2144,24],[2158,25],[2159,22],[2176,16],[2177,26],[2179,27],[2174,16],[2175,16],[2178,28],[2139,17],[2137,16],[2169,29],[2141,16],[2142,16],[2161,30],[2165,31],[2164,32],[2166,33],[2167,16],[2162,34],[2163,35],[2168,36],[1034,13],[1037,37],[224,13],[2098,38],[2097,39],[2031,40],[2032,40],[2033,40],[2034,40],[2035,41],[2036,41],[2037,41],[2038,41],[2039,40],[2040,40],[2041,40],[2042,40],[2095,42],[2096,43],[2043,40],[2028,13],[2044,40],[2045,40],[2046,40],[2047,41],[2048,40],[2080,44],[2049,43],[2050,43],[2051,43],[2052,43],[2053,43],[2054,43],[2030,43],[2082,45],[2083,45],[2084,45],[2085,43],[2086,46],[2087,45],[2088,45],[2089,45],[2090,40],[2091,45],[2092,40],[2093,43],[2094,47],[2081,48],[2021,49],[2027,50],[2055,51],[2056,40],[2057,43],[2058,43],[2059,40],[2060,40],[2061,40],[2029,52],[2062,41],[2063,41],[2064,40],[2065,40],[2066,40],[2067,41],[2068,40],[2070,53],[2069,54],[2071,41],[2072,40],[2073,43],[2074,41],[2076,55],[2075,50],[2077,40],[2078,43],[2079,41],[2191,56],[2138,57],[2185,58],[2192,59],[2193,60],[2194,61],[2140,62],[2184,63],[2195,64],[2198,65],[2197,66],[2196,16],[2199,67],[2200,67],[2201,67],[2202,67],[2203,68],[2204,69],[2133,70],[2205,71],[2206,72],[2207,73],[2208,64],[2209,65],[2210,74],[2211,56],[2212,56],[2213,56],[2170,75],[2214,56],[2215,56],[2216,56],[2217,56],[2218,56],[2219,56],[2220,56],[2171,57],[2221,56],[2172,76],[2222,56],[2226,77],[2223,78],[2225,79],[2224,80],[2173,81],[2227,82],[2228,56],[2229,56],[2180,83],[2230,56],[2231,16],[2232,56],[2233,61],[2181,62],[2234,13],[2236,84],[2237,85],[2238,56],[2187,86],[2188,87],[2134,88],[2239,89],[2240,90],[2241,91],[2182,62],[2257,92],[2186,93],[2242,94],[2243,95],[2244,95],[2135,96],[2245,94],[2136,97],[2246,16],[2247,13],[2183,98],[2132,99],[2131,100],[2130,16],[2248,16],[2249,40],[2190,101],[2250,102],[2189,70],[2251,95],[2252,103],[2253,59],[2254,13],[2255,13],[2256,40],[1021,13],[1027,104],[1707,105],[1020,106],[1022,107],[1024,108],[1706,13],[1025,109],[1026,107],[1023,107],[2143,13],[2288,13],[2289,110],[2290,111],[2291,112],[2298,113],[2299,114],[2297,115],[2307,116],[2300,117],[2301,117],[2292,13],[2295,118],[2296,119],[2308,120],[2306,121],[481,122],[2304,123],[2305,124],[2302,125],[478,13],[480,13],[499,122],[2293,126],[479,126],[2294,124],[2309,127],[1029,128],[1030,13],[121,129],[122,129],[123,130],[76,131],[124,132],[125,133],[126,134],[71,13],[74,135],[72,13],[73,13],[127,136],[128,137],[129,138],[130,139],[131,140],[132,141],[133,141],[134,142],[135,143],[136,144],[137,145],[77,13],[75,13],[138,146],[139,147],[140,148],[174,149],[141,150],[142,13],[143,151],[144,152],[145,153],[146,154],[147,155],[148,156],[149,157],[150,158],[151,159],[152,159],[153,160],[154,13],[155,161],[156,162],[158,163],[157,164],[159,165],[160,166],[161,167],[162,168],[163,169],[164,170],[165,171],[166,172],[167,173],[168,174],[169,175],[170,176],[171,177],[78,13],[79,13],[80,13],[118,178],[119,13],[120,13],[172,179],[173,180],[2017,181],[178,182],[334,183],[179,184],[177,185],[336,186],[335,187],[175,188],[332,13],[176,189],[60,13],[62,190],[331,183],[242,183],[2303,191],[1100,13],[1517,13],[2235,13],[61,13],[1028,13],[1226,192],[1205,193],[1302,13],[1206,194],[1142,192],[1143,13],[1108,13],[1144,13],[1109,13],[1145,13],[1146,13],[1147,13],[1110,13],[1148,13],[1111,13],[1149,13],[1112,13],[1150,13],[1113,13],[1151,13],[1114,13],[1152,13],[1115,13],[1153,13],[1154,192],[1155,192],[1156,13],[1157,13],[1158,13],[1159,13],[1160,13],[1161,13],[1162,13],[1163,13],[1164,13],[1166,13],[1165,13],[1167,13],[1168,13],[1169,192],[1170,13],[1171,13],[1172,192],[1173,13],[1174,13],[1175,192],[1176,13],[1177,192],[1178,192],[1179,192],[1180,13],[1181,192],[1182,192],[1183,192],[1184,192],[1185,192],[1187,192],[1188,13],[1189,13],[1186,192],[1190,192],[1191,13],[1192,13],[1193,13],[1194,13],[1195,13],[1196,13],[1197,13],[1198,13],[1199,13],[1200,13],[1201,13],[1202,192],[1203,13],[1204,13],[1207,195],[1208,192],[1209,192],[1210,196],[1211,197],[1212,192],[1213,192],[1214,192],[1215,192],[1218,192],[1216,13],[1217,13],[1129,13],[1219,13],[1116,13],[1220,13],[1117,13],[1221,13],[1222,13],[1223,13],[1224,13],[1225,13],[1227,198],[1118,13],[1228,13],[1229,13],[1230,13],[1232,13],[1231,13],[1233,13],[1119,13],[1234,13],[1120,13],[1235,13],[1236,192],[1121,13],[1237,13],[1122,13],[1238,13],[1123,13],[1239,13],[1240,13],[1241,192],[1242,192],[1244,192],[1243,192],[1124,13],[1245,13],[1246,13],[1247,13],[1248,13],[1395,199],[1249,192],[1250,192],[1251,13],[1252,13],[1125,13],[1253,13],[1126,13],[1254,13],[1127,13],[1255,13],[1256,13],[1257,13],[1258,13],[1259,13],[1260,13],[1261,13],[1262,13],[1263,192],[1264,13],[1265,13],[1266,13],[1267,13],[1268,13],[1269,13],[1270,13],[1271,13],[1272,13],[1273,13],[1274,192],[1275,13],[1276,13],[1277,13],[1278,13],[1279,13],[1280,13],[1281,13],[1282,13],[1283,13],[1284,192],[1285,13],[1286,13],[1287,13],[1288,13],[1289,13],[1290,13],[1291,13],[1292,13],[1293,192],[1294,13],[1295,13],[1296,13],[1297,13],[1298,13],[1299,13],[1300,192],[1301,13],[1303,200],[1128,192],[1304,13],[1305,192],[1306,13],[1307,13],[1308,13],[1309,13],[1310,13],[1311,13],[1312,13],[1313,13],[1314,13],[1315,192],[1316,13],[1317,13],[1318,13],[1319,13],[1320,13],[1321,13],[1322,13],[1327,201],[1325,202],[1326,203],[1324,204],[1323,192],[1328,13],[1329,13],[1330,192],[1331,13],[1332,13],[1333,13],[1334,13],[1335,13],[1336,13],[1337,13],[1338,13],[1339,13],[1340,192],[1341,192],[1342,13],[1343,13],[1344,13],[1131,192],[1345,192],[1346,13],[1347,192],[1348,13],[1349,198],[1132,13],[1350,13],[1351,13],[1352,13],[1353,13],[1354,13],[1133,13],[1355,13],[1134,13],[1356,13],[1135,13],[1357,13],[1358,13],[1359,192],[1360,192],[1136,13],[1361,13],[1362,13],[1363,13],[1364,13],[1365,13],[1366,13],[1367,13],[1368,13],[1369,13],[1370,13],[1371,13],[1372,13],[1373,192],[1374,192],[1375,13],[1376,13],[1377,192],[1378,13],[1137,13],[1379,13],[1380,13],[1381,13],[1382,13],[1383,13],[1138,13],[1384,13],[1139,13],[1385,13],[1386,13],[1140,13],[1387,13],[1141,13],[1388,13],[1389,13],[1390,192],[1130,205],[1391,13],[1392,13],[1393,13],[1394,13],[850,206],[829,207],[926,13],[830,208],[766,206],[767,206],[768,206],[769,206],[770,206],[771,206],[772,206],[773,206],[774,206],[775,206],[776,206],[777,206],[778,206],[779,206],[780,206],[781,206],[782,206],[783,206],[762,13],[784,206],[785,206],[786,13],[787,206],[788,206],[790,206],[789,206],[791,206],[792,206],[793,206],[794,206],[795,206],[796,206],[797,206],[798,206],[799,206],[800,206],[801,206],[802,206],[803,206],[804,206],[805,206],[806,206],[807,206],[808,206],[809,206],[811,206],[812,206],[813,206],[810,206],[814,206],[815,206],[816,206],[817,206],[818,206],[819,206],[820,206],[821,206],[822,206],[823,206],[824,206],[825,206],[826,206],[827,206],[828,206],[831,209],[832,206],[833,206],[834,210],[835,211],[836,206],[837,206],[838,206],[839,206],[842,206],[840,206],[841,206],[764,13],[843,206],[844,206],[845,206],[846,206],[847,206],[848,206],[849,206],[851,212],[852,206],[853,206],[854,206],[856,206],[855,206],[857,206],[858,206],[859,206],[860,206],[861,206],[862,206],[863,206],[864,206],[865,206],[866,206],[868,206],[867,206],[869,206],[870,13],[871,13],[872,13],[1019,213],[873,206],[874,206],[875,206],[876,206],[877,206],[878,206],[879,13],[880,206],[881,13],[882,206],[883,206],[884,206],[885,206],[886,206],[887,206],[888,206],[889,206],[890,206],[891,206],[892,206],[893,206],[894,206],[895,206],[896,206],[897,206],[898,206],[899,206],[900,206],[901,206],[902,206],[903,206],[904,206],[905,206],[906,206],[907,206],[908,206],[909,206],[910,206],[911,206],[912,206],[913,206],[914,13],[915,206],[916,206],[917,206],[918,206],[919,206],[920,206],[921,206],[922,206],[923,206],[924,206],[925,206],[927,214],[763,206],[928,206],[929,206],[930,13],[931,13],[932,13],[933,206],[934,13],[935,13],[936,13],[937,13],[938,13],[939,206],[940,206],[941,206],[942,206],[943,206],[944,206],[945,206],[946,206],[951,215],[949,216],[950,217],[948,218],[947,206],[952,206],[953,206],[954,206],[955,206],[956,206],[957,206],[958,206],[959,206],[960,206],[961,206],[962,13],[963,13],[964,206],[965,206],[966,13],[967,13],[968,13],[969,206],[970,206],[971,206],[972,206],[973,212],[974,206],[975,206],[976,206],[977,206],[978,206],[979,206],[980,206],[981,206],[982,206],[983,206],[984,206],[985,206],[986,206],[987,206],[988,206],[989,206],[990,206],[991,206],[992,206],[993,206],[994,206],[995,206],[996,206],[997,206],[998,206],[999,206],[1000,206],[1001,206],[1002,206],[1003,206],[1004,206],[1005,206],[1006,206],[1007,206],[1008,206],[1009,206],[1010,206],[1011,206],[1012,206],[1013,206],[1014,206],[765,219],[1015,13],[1016,13],[1017,13],[1018,13],[1653,13],[2026,220],[2002,221],[2006,222],[1711,223],[1951,224],[1710,13],[1713,225],[2000,226],[2001,227],[1709,13],[2003,228],[1784,229],[1728,230],[1751,231],[1760,232],[1731,232],[1732,233],[1733,233],[1759,234],[1734,235],[1735,233],[1741,236],[1736,237],[1737,233],[1738,233],[1761,238],[1730,239],[1739,232],[1740,237],[1742,240],[1743,240],[1744,237],[1745,233],[1746,232],[1747,233],[1748,241],[1749,241],[1750,233],[1771,242],[1779,243],[1758,244],[1787,245],[1752,246],[1754,247],[1755,244],[1765,248],[1773,249],[1778,250],[1775,251],[1780,252],[1768,253],[1769,254],[1776,255],[1777,256],[1783,257],[1774,258],[1753,228],[1785,259],[1729,228],[1772,260],[1770,261],[1757,262],[1756,244],[1786,263],[1762,264],[1781,13],[1782,265],[2005,266],[2007,267],[2008,268],[2010,269],[2009,270],[1712,228],[1822,13],[1839,271],[1788,272],[1813,273],[1820,274],[1789,274],[1790,274],[1791,275],[1819,276],[1792,277],[1807,274],[1793,278],[1794,278],[1795,275],[1796,274],[1797,275],[1798,274],[1821,279],[1799,274],[1800,274],[1801,280],[1802,274],[1803,274],[1804,280],[1805,275],[1806,274],[1808,281],[1809,280],[1810,274],[1811,275],[1812,274],[1834,282],[1830,283],[1818,284],[1842,285],[1814,286],[1815,284],[1831,287],[1823,288],[1832,289],[1829,290],[1827,291],[1833,292],[1826,293],[1838,294],[1828,295],[1840,296],[1835,297],[1824,298],[1817,299],[1816,284],[1841,300],[1825,264],[1836,13],[1837,301],[2023,302],[2024,303],[2022,304],[2019,305],[2020,306],[2018,307],[1715,308],[1908,309],[1843,310],[1878,311],[1887,312],[1844,313],[1845,313],[1846,314],[1847,313],[1886,315],[1848,316],[1849,317],[1850,318],[1851,313],[1888,319],[1889,320],[1852,313],[1854,321],[1855,312],[1857,322],[1858,323],[1859,323],[1860,314],[1861,313],[1862,313],[1863,319],[1864,314],[1865,314],[1866,323],[1867,313],[1868,312],[1869,313],[1870,314],[1871,324],[1856,325],[1872,313],[1873,314],[1874,313],[1875,313],[1876,313],[1877,313],[1896,326],[1903,327],[1885,328],[1913,329],[1879,330],[1881,331],[1882,328],[1891,332],[1898,333],[1902,334],[1900,335],[1904,336],[1892,337],[1893,254],[1894,338],[1901,339],[1907,340],[1899,341],[1880,228],[1909,342],[1853,228],[1897,343],[1895,344],[1884,345],[1883,328],[1910,346],[1911,13],[1912,347],[1890,264],[1905,13],[1906,348],[1724,349],[1717,350],[1766,228],[1763,351],[1767,352],[1764,50],[1962,353],[1939,354],[1945,355],[1914,355],[1915,355],[1916,356],[1944,357],[1917,358],[1932,355],[1918,359],[1919,359],[1920,356],[1921,355],[1922,360],[1923,355],[1946,361],[1924,355],[1925,355],[1926,362],[1927,355],[1928,355],[1929,362],[1930,356],[1931,355],[1933,363],[1934,362],[1935,355],[1936,356],[1937,355],[1938,355],[1959,364],[1950,365],[1965,366],[1940,367],[1941,368],[1954,369],[1947,370],[1958,371],[1949,372],[1957,373],[1956,374],[1961,375],[1948,376],[1963,377],[1960,378],[1955,379],[1943,380],[1942,368],[1964,381],[1953,382],[2025,383],[1952,384],[1720,385],[1722,386],[1721,385],[1723,385],[1726,387],[1725,388],[1727,389],[1718,390],[1998,391],[1966,392],[1991,393],[1995,394],[1994,395],[1967,396],[1996,397],[1987,398],[1988,394],[1989,399],[1990,400],[1975,401],[1983,402],[1993,403],[1999,404],[1968,405],[1969,403],[1972,406],[1978,407],[1982,408],[1980,409],[1984,410],[1973,411],[1976,412],[1981,413],[1997,414],[1979,415],[1977,416],[1974,417],[1992,418],[1970,419],[1986,420],[1971,264],[1985,421],[1716,264],[1714,422],[1719,423],[2004,13],[676,13],[679,424],[678,425],[677,425],[675,426],[673,13],[674,426],[680,427],[581,428],[648,429],[647,430],[646,431],[586,432],[602,433],[600,434],[601,435],[587,436],[672,437],[572,13],[574,13],[575,438],[576,13],[579,439],[582,13],[599,440],[577,13],[594,441],[580,442],[595,443],[598,444],[596,444],[593,445],[573,13],[578,13],[597,446],[603,447],[591,13],[585,448],[583,449],[592,450],[589,451],[588,451],[584,452],[590,453],[667,454],[661,455],[654,456],[653,457],[662,458],[663,444],[655,459],[668,460],[649,461],[650,462],[651,463],[671,464],[652,457],[656,460],[657,465],[670,466],[664,467],[665,442],[666,465],[669,444],[658,463],[604,468],[659,469],[660,470],[645,471],[643,472],[644,472],[609,472],[610,472],[611,472],[612,472],[613,472],[614,472],[615,472],[616,472],[635,472],[607,472],[617,472],[618,472],[619,472],[620,472],[621,472],[622,472],[642,472],[623,472],[624,472],[625,472],[640,472],[626,472],[641,472],[627,472],[638,472],[639,472],[628,472],[629,472],[630,472],[636,472],[637,472],[631,472],[632,472],[633,472],[634,472],[608,473],[606,474],[605,475],[571,13],[512,476],[2109,477],[2110,478],[2123,479],[2126,480],[2121,13],[2124,13],[2125,479],[2122,481],[2129,482],[2111,483],[2104,484],[2107,485],[2103,486],[2112,487],[2108,488],[2105,489],[2113,16],[2101,490],[2114,491],[2106,13],[2115,492],[2116,493],[2117,494],[2099,495],[2118,487],[2119,496],[2102,497],[2120,498],[2100,496],[2127,13],[2128,13],[1035,13],[1036,499],[69,500],[423,501],[428,502],[430,503],[200,504],[228,505],[406,506],[223,507],[211,13],[192,13],[198,13],[396,508],[259,509],[199,13],[365,510],[233,511],[234,512],[330,513],[393,514],[348,515],[400,516],[401,517],[399,518],[398,13],[397,519],[230,520],[201,521],[280,13],[281,522],[196,13],[212,523],[202,524],[264,523],[261,523],[185,523],[226,525],[225,13],[405,526],[415,13],[191,13],[306,527],[307,528],[301,183],[451,13],[309,13],[310,529],[302,530],[457,531],[455,532],[450,13],[392,533],[391,13],[449,534],[303,183],[344,535],[342,536],[452,13],[456,13],[454,537],[453,13],[343,538],[444,539],[447,540],[271,541],[270,542],[269,543],[460,183],[268,544],[253,13],[463,13],[466,13],[465,183],[467,545],[181,13],[402,546],[403,547],[404,548],[214,13],[190,549],[180,13],[322,183],[183,550],[321,551],[320,552],[311,13],[312,13],[319,13],[314,13],[317,553],[313,13],[315,554],[318,555],[316,554],[197,13],[188,13],[189,523],[243,556],[244,557],[241,558],[239,559],[240,560],[236,13],[328,529],[350,529],[422,561],[431,562],[435,563],[409,564],[408,13],[256,13],[468,565],[418,566],[304,567],[305,568],[296,569],[286,13],[327,570],[287,571],[329,572],[324,573],[323,13],[325,13],[341,574],[410,575],[411,576],[289,577],[293,578],[284,579],[388,580],[417,581],[263,582],[366,583],[186,584],[416,585],[182,507],[237,13],[245,586],[377,587],[235,13],[376,588],[70,13],[371,589],[213,13],[282,590],[367,13],[187,13],[246,13],[375,591],[195,13],[251,592],[292,593],[407,594],[291,13],[374,13],[238,13],[379,595],[380,596],[193,13],[382,597],[384,598],[383,599],[216,13],[373,584],[386,600],[372,601],[378,602],[204,13],[207,13],[205,13],[209,13],[206,13],[208,13],[210,603],[203,13],[358,604],[357,13],[363,605],[359,606],[362,607],[361,607],[364,605],[360,606],[250,608],[351,609],[414,610],[470,13],[439,611],[441,612],[288,13],[440,613],[412,575],[469,614],[308,575],[194,13],[290,615],[247,616],[248,617],[249,618],[279,619],[387,619],[265,619],[352,620],[266,620],[232,621],[231,13],[356,622],[355,623],[354,624],[353,625],[413,626],[300,627],[338,628],[299,629],[333,630],[337,631],[395,632],[394,633],[390,634],[347,635],[349,636],[346,637],[385,638],[340,13],[427,13],[339,639],[389,13],[252,640],[285,546],[283,641],[254,642],[257,643],[464,13],[255,644],[258,644],[425,13],[424,13],[426,13],[462,13],[260,645],[298,183],[68,13],[345,646],[229,13],[218,647],[294,13],[433,183],[443,648],[278,183],[437,529],[277,649],[420,650],[276,648],[184,13],[445,651],[274,183],[275,183],[267,13],[217,13],[273,652],[272,653],[215,654],[295,158],[262,158],[381,13],[369,655],[368,13],[429,13],[326,656],[297,183],[421,657],[63,183],[66,658],[67,659],[64,183],[65,13],[227,660],[222,661],[221,13],[220,662],[219,13],[419,663],[432,664],[434,665],[436,666],[438,667],[442,668],[476,669],[446,669],[475,670],[448,671],[458,672],[459,673],[461,674],[471,675],[474,549],[473,13],[472,676],[1107,677],[1425,678],[1426,679],[1427,13],[1428,679],[1429,679],[1430,679],[1431,679],[1432,679],[1433,680],[1434,679],[1435,679],[1436,681],[1437,682],[1438,683],[1439,682],[1440,684],[1441,685],[1442,682],[1443,682],[1444,685],[1445,686],[1042,685],[1446,682],[1447,682],[1448,682],[1449,682],[1450,682],[1048,682],[1451,687],[1452,682],[1105,685],[1453,683],[1454,683],[1455,688],[1456,682],[1457,689],[1458,690],[1041,691],[1040,692],[1106,693],[1459,694],[1460,679],[1463,695],[1057,696],[1049,697],[1467,698],[1464,40],[1058,699],[1465,700],[1059,701],[1466,702],[1521,680],[1522,680],[1523,680],[1524,680],[1525,680],[1526,680],[1527,680],[1050,703],[1519,13],[1528,704],[1529,705],[1530,706],[1051,705],[1531,707],[1532,708],[1533,709],[1052,710],[1534,13],[1535,707],[1494,711],[1472,712],[1536,713],[1495,714],[1496,715],[1497,716],[1498,711],[1499,711],[1473,712],[1537,708],[1468,717],[1469,708],[1538,712],[1474,712],[1475,712],[1539,708],[1540,705],[1541,718],[1542,712],[1038,719],[1104,679],[1543,720],[1544,679],[1054,721],[1491,722],[1545,723],[1476,712],[1477,712],[1478,712],[1479,712],[1480,712],[1546,724],[1547,725],[1481,726],[1483,727],[1484,728],[1485,729],[1487,730],[1500,711],[1520,711],[1501,731],[1502,712],[1503,732],[1486,726],[1504,733],[1505,40],[1506,729],[1507,734],[1508,712],[1509,735],[1548,736],[1488,732],[1489,732],[1490,737],[1549,679],[1056,738],[1550,679],[1551,739],[1552,679],[1103,740],[1553,713],[1554,741],[1555,742],[1556,713],[1558,743],[1559,742],[1560,13],[1561,744],[1562,744],[1563,742],[1564,742],[1565,742],[1566,742],[1567,742],[1568,703],[1569,13],[1570,744],[1571,13],[1557,745],[1572,746],[1573,746],[1044,729],[1060,713],[1032,13],[1061,747],[1062,748],[1063,748],[1064,749],[1065,747],[1066,747],[1067,747],[1068,747],[1084,750],[1069,748],[1070,751],[1071,751],[1072,748],[1073,747],[1074,748],[1075,751],[1076,751],[1077,751],[1078,747],[1079,747],[1080,748],[1081,751],[1085,752],[1082,747],[1083,747],[1033,753],[1574,680],[1575,680],[1461,754],[1053,755],[1576,756],[1047,757],[1577,713],[1578,758],[1482,759],[1579,760],[1580,758],[1581,761],[1582,758],[1583,13],[1046,680],[1086,712],[1584,762],[1055,763],[1045,764],[1585,765],[1511,766],[1586,767],[1587,768],[1510,711],[1512,769],[1513,770],[1514,771],[1515,772],[1516,773],[1588,774],[1589,775],[1708,776],[1590,777],[1591,778],[1518,708],[1039,711],[1087,779],[1592,780],[1093,781],[1098,782],[1088,783],[1091,784],[1092,785],[1593,786],[1097,787],[1594,788],[1094,789],[1096,790],[1090,791],[1089,711],[1595,792],[1095,793],[1596,13],[1597,794],[1492,13],[1493,795],[1598,713],[1470,796],[1643,797],[1471,798],[1644,713],[1645,799],[1646,713],[1647,800],[1648,801],[1649,13],[1650,711],[1651,704],[1652,713],[1654,802],[1655,13],[1656,13],[1657,13],[1658,13],[1659,13],[1660,680],[1661,803],[1662,804],[1663,13],[1664,805],[1665,679],[1666,806],[1667,13],[1668,807],[1669,679],[1670,713],[1671,800],[1672,808],[1673,13],[1674,13],[1675,13],[1676,800],[1677,713],[1102,809],[1678,13],[1679,13],[1680,40],[1681,810],[1682,713],[1683,713],[1684,713],[1685,811],[1462,812],[1686,806],[1687,813],[1688,814],[1689,703],[1690,13],[1691,711],[1692,713],[1693,708],[1694,808],[1695,728],[1696,815],[1703,816],[1697,713],[1699,817],[1698,713],[1700,713],[1702,818],[1701,713],[1704,759],[1705,40],[1043,13],[2016,819],[2013,676],[2015,820],[2014,13],[2012,821],[2011,13],[1099,822],[1101,823],[681,824],[683,825],[1411,826],[1423,183],[1412,183],[1410,183],[1396,827],[1398,828],[1424,829],[1397,183],[1401,830],[1403,831],[1402,183],[1405,832],[1404,828],[1422,833],[1413,183],[1414,183],[1406,828],[1400,834],[1399,183],[1421,835],[1407,828],[1409,836],[1408,183],[509,13],[1031,822],[370,822],[682,837],[504,838],[505,839],[506,840],[501,841],[503,13],[500,842],[502,843],[689,13],[708,13],[690,844],[744,13],[694,845],[693,13],[760,13],[727,846],[685,847],[751,13],[707,13],[752,848],[731,849],[728,850],[729,851],[732,852],[725,853],[734,852],[736,854],[737,851],[738,851],[726,855],[696,13],[695,844],[745,13],[742,856],[756,13],[757,13],[758,857],[759,13],[755,13],[746,858],[761,859],[705,13],[717,13],[718,860],[706,13],[724,13],[714,861],[686,13],[716,13],[720,862],[721,13],[723,863],[698,864],[697,13],[699,13],[747,13],[743,865],[700,13],[730,13],[701,13],[702,13],[739,13],[704,866],[710,867],[740,868],[711,13],[753,13],[754,869],[703,13],[684,13],[748,13],[719,870],[741,871],[712,844],[733,872],[735,873],[687,13],[688,13],[691,874],[749,858],[750,13],[713,13],[709,875],[722,876],[692,13],[715,877],[58,13],[59,13],[10,13],[11,13],[13,13],[12,13],[2,13],[14,13],[15,13],[16,13],[17,13],[18,13],[19,13],[20,13],[21,13],[3,13],[22,13],[23,13],[4,13],[24,13],[28,13],[25,13],[26,13],[27,13],[29,13],[30,13],[31,13],[5,13],[32,13],[33,13],[34,13],[35,13],[6,13],[39,13],[36,13],[37,13],[38,13],[40,13],[7,13],[41,13],[46,13],[47,13],[42,13],[43,13],[44,13],[45,13],[8,13],[51,13],[48,13],[49,13],[50,13],[52,13],[9,13],[53,13],[54,13],[55,13],[57,13],[56,13],[1,13],[96,878],[106,879],[95,878],[116,880],[87,881],[86,882],[115,676],[109,883],[114,884],[89,885],[103,886],[88,887],[112,888],[84,889],[83,676],[113,890],[85,891],[90,892],[91,13],[94,892],[81,13],[117,893],[107,894],[98,895],[99,896],[101,897],[97,898],[100,899],[110,676],[92,900],[93,901],[102,902],[82,903],[105,894],[104,892],[108,13],[111,904],[1642,905],[1617,906],[1630,907],[1614,908],[1631,903],[1640,909],[1605,910],[1606,911],[1604,882],[1639,676],[1634,912],[1638,913],[1608,914],[1627,915],[1607,916],[1637,917],[1602,918],[1603,912],[1609,919],[1610,13],[1616,920],[1613,919],[1600,921],[1641,922],[1632,923],[1620,924],[1619,919],[1621,925],[1624,926],[1618,927],[1622,928],[1635,676],[1611,929],[1612,930],[1625,931],[1601,903],[1629,932],[1628,919],[1615,930],[1623,933],[1626,934],[1633,13],[1599,13],[1636,935],[495,936],[487,937],[494,938],[489,13],[490,13],[488,939],[491,940],[482,13],[483,13],[484,936],[486,941],[492,13],[493,942],[485,943],[513,944],[514,945],[521,946],[525,947],[523,948],[517,13],[2280,40],[520,949],[519,950],[516,13],[498,13],[508,13],[497,951],[496,951],[528,952],[515,953],[518,954],[527,955],[2258,40],[2259,956],[522,957],[526,958],[524,959],[531,960],[537,961],[536,961],[2279,962],[535,963],[534,964],[533,13],[529,951],[530,13],[541,965],[532,966],[2278,967],[539,968],[2267,969],[2268,970],[538,971],[540,13],[570,972],[569,973],[2277,974],[2276,975],[2260,13],[2263,40],[2262,40],[2261,40],[2264,13],[2265,13],[2266,976],[507,977],[2310,978],[2312,979],[2311,980],[545,981],[546,982],[552,983],[553,984],[2283,985],[551,986],[550,987],[549,13],[544,13],[542,951],[543,951],[557,988],[547,989],[548,990],[2281,991],[2282,992],[555,993],[2271,969],[2272,40],[2273,994],[554,995],[556,13],[2269,40],[2270,996],[559,997],[564,998],[2285,999],[563,1000],[562,1001],[561,13],[558,951],[568,1002],[560,1003],[2284,1004],[566,1005],[2274,40],[2275,1006],[565,1007],[567,13]],"affectedFilesPendingEmit":[[2316,49],[2287,49],[2317,49],[2314,49],[2315,49],[2313,49],[2286,49]],"version":"5.9.3"} \ No newline at end of file diff --git a/packages/blog/src/infrastructure/repositories/payload-articles.repository.test.ts b/packages/blog/src/infrastructure/repositories/payload-articles.repository.test.ts index 55f5b70..e40141d 100644 --- a/packages/blog/src/infrastructure/repositories/payload-articles.repository.test.ts +++ b/packages/blog/src/infrastructure/repositories/payload-articles.repository.test.ts @@ -35,7 +35,7 @@ describe("PayloadArticlesRepository", () => { collection: "articles", where: { slug: { equals: "hello" } }, limit: 1, - overrideAccess: false, + overrideAccess: true, }); expect(result?.id).toBe("p-123"); expect(result?.slug).toBe("hello"); diff --git a/packages/blog/src/infrastructure/repositories/payload-articles.repository.ts b/packages/blog/src/infrastructure/repositories/payload-articles.repository.ts index 7c7f9a4..715e305 100644 --- a/packages/blog/src/infrastructure/repositories/payload-articles.repository.ts +++ b/packages/blog/src/infrastructure/repositories/payload-articles.repository.ts @@ -50,7 +50,7 @@ export class PayloadArticlesRepository implements IArticlesRepository { const doc = await payload.findByID({ collection: "articles", id, - overrideAccess: false, + overrideAccess: true, }); return mapDoc(doc as PayloadArticleDoc); } catch { @@ -64,7 +64,7 @@ export class PayloadArticlesRepository implements IArticlesRepository { collection: "articles", where: { slug: { equals: slug } }, limit: 1, - overrideAccess: false, + overrideAccess: true, }); const doc = result.docs[0] as PayloadArticleDoc | undefined; return doc ? mapDoc(doc) : undefined; @@ -88,7 +88,7 @@ export class PayloadArticlesRepository implements IArticlesRepository { page: options?.offset ? Math.floor(options.offset / (options.limit ?? 50)) + 1 : 1, - overrideAccess: false, + overrideAccess: true, }); return result.docs.map((d) => mapDoc(d as PayloadArticleDoc)); } @@ -104,7 +104,7 @@ export class PayloadArticlesRepository implements IArticlesRepository { status: input.status, author: input.authorId, } as never, - overrideAccess: false, + overrideAccess: true, }); return mapDoc(created as PayloadArticleDoc); } @@ -125,7 +125,7 @@ export class PayloadArticlesRepository implements IArticlesRepository { ...(input.status !== undefined && { status: input.status }), ...(input.authorId !== undefined && { author: input.authorId }), } as never, - overrideAccess: false, + overrideAccess: true, }); return mapDoc(updated as PayloadArticleDoc); } catch { diff --git a/packages/marketing-pages/src/infrastructure/repositories/payload-pages.repository.ts b/packages/marketing-pages/src/infrastructure/repositories/payload-pages.repository.ts index f06743e..fd77c0e 100644 --- a/packages/marketing-pages/src/infrastructure/repositories/payload-pages.repository.ts +++ b/packages/marketing-pages/src/infrastructure/repositories/payload-pages.repository.ts @@ -68,7 +68,7 @@ export class PayloadPagesRepository implements IPagesRepository { collection: "pages", where: { slug: { equals: slug } }, limit: 1, - overrideAccess: false, + overrideAccess: true, }); const doc = result.docs[0] as PayloadPageDoc | undefined; return doc ? mapDoc(doc) : undefined; @@ -89,7 +89,7 @@ export class PayloadPagesRepository implements IPagesRepository { page: options?.offset ? Math.floor(options.offset / (options.limit ?? 50)) + 1 : 1, - overrideAccess: false, + overrideAccess: true, }); return result.docs.map((d) => mapDoc(d as PayloadPageDoc)); } diff --git a/packages/marketing-pages/src/infrastructure/repositories/payload-site-settings.repository.ts b/packages/marketing-pages/src/infrastructure/repositories/payload-site-settings.repository.ts index f102bc9..f36e634 100644 --- a/packages/marketing-pages/src/infrastructure/repositories/payload-site-settings.repository.ts +++ b/packages/marketing-pages/src/infrastructure/repositories/payload-site-settings.repository.ts @@ -23,7 +23,7 @@ export class PayloadSiteSettingsRepository implements ISiteSettingsRepository { const payload = await getPayload({ config: this.config }); const doc = (await payload.findGlobal({ slug: "site-settings", - overrideAccess: false, + overrideAccess: true, })) as PayloadSiteSettings; return { siteName: doc.siteName ?? "My App", diff --git a/packages/navigation/src/infrastructure/repositories/payload-header.repository.ts b/packages/navigation/src/infrastructure/repositories/payload-header.repository.ts index 06c2968..84683ee 100644 --- a/packages/navigation/src/infrastructure/repositories/payload-header.repository.ts +++ b/packages/navigation/src/infrastructure/repositories/payload-header.repository.ts @@ -27,7 +27,7 @@ export class PayloadHeaderRepository implements IHeaderRepository { const payload = await getPayload({ config: this.config }); const doc = (await payload.findGlobal({ slug: "header", - overrideAccess: false, + overrideAccess: true, })) as PayloadHeaderGlobal; const logoId = From a9e64569eb8c48240b97292ca38d0cdda9507080 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 09:01:47 +0200 Subject: [PATCH 104/129] build(web-tanstack): swap deps + use TanstackTrpcProvider against shared backend --- apps/web-tanstack/package.json | 10 +++++++--- apps/web-tanstack/src/routes/__root.tsx | 6 +++--- pnpm-lock.yaml | 24 ++++++++++++++++++------ 3 files changed, 28 insertions(+), 12 deletions(-) diff --git a/apps/web-tanstack/package.json b/apps/web-tanstack/package.json index b3abd43..589d140 100644 --- a/apps/web-tanstack/package.json +++ b/apps/web-tanstack/package.json @@ -10,9 +10,13 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@repo/api": "workspace:*", - "@repo/api-client": "workspace:*", - "@repo/ui": "workspace:*", + "@repo/blog": "workspace:*", + "@repo/core-api": "workspace:*", + "@repo/core-trpc": "workspace:*", + "@repo/core-ui": "workspace:*", + "@repo/marketing-pages": "workspace:*", + "@repo/navigation": "workspace:*", + "@tanstack/react-query": "^5.66.0", "@tanstack/react-router": "^1.120.0", "react": "^19.0.0", "react-dom": "^19.0.0" diff --git a/apps/web-tanstack/src/routes/__root.tsx b/apps/web-tanstack/src/routes/__root.tsx index dee54ac..7cd91cd 100644 --- a/apps/web-tanstack/src/routes/__root.tsx +++ b/apps/web-tanstack/src/routes/__root.tsx @@ -1,10 +1,10 @@ import { Outlet, createRootRoute } from "@tanstack/react-router"; -import { ApiProvider } from "@repo/api-client"; +import { TanstackTrpcProvider } from "@repo/core-trpc/tanstack"; export const Route = createRootRoute({ component: () => ( - + - +
), }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3de3cba..f14b2bd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -176,15 +176,27 @@ importers: apps/web-tanstack: dependencies: - '@repo/api': + '@repo/blog': specifier: workspace:* - version: link:../../packages/api - '@repo/api-client': + version: link:../../packages/blog + '@repo/core-api': specifier: workspace:* - version: link:../../packages/api-client - '@repo/ui': + version: link:../../packages/core-api + '@repo/core-trpc': specifier: workspace:* - version: link:../../packages/ui + version: link:../../packages/core-trpc + '@repo/core-ui': + specifier: workspace:* + version: link:../../packages/core-ui + '@repo/marketing-pages': + specifier: workspace:* + version: link:../../packages/marketing-pages + '@repo/navigation': + specifier: workspace:* + version: link:../../packages/navigation + '@tanstack/react-query': + specifier: ^5.66.0 + version: 5.96.2(react@19.2.4) '@tanstack/react-router': specifier: ^1.120.0 version: 1.168.10(react-dom@19.2.4(react@19.2.4))(react@19.2.4) From f1da72848229cb57693331dae78e2e3a50c75780 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 09:02:50 +0200 Subject: [PATCH 105/129] feat(web-tanstack): consume marketingPages.siteSettings + navigation.header via tRPC client --- apps/web-tanstack/src/routes/index.tsx | 35 +++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/apps/web-tanstack/src/routes/index.tsx b/apps/web-tanstack/src/routes/index.tsx index 2a07297..04e0a24 100644 --- a/apps/web-tanstack/src/routes/index.tsx +++ b/apps/web-tanstack/src/routes/index.tsx @@ -1,14 +1,43 @@ import { createFileRoute } from "@tanstack/react-router"; +import { useQuery } from "@tanstack/react-query"; +import { useTRPC } from "@repo/core-trpc"; -export const Route = createFileRoute("/")({ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export const Route = createFileRoute("/" as any)({ component: Home, }); function Home() { + const trpc = useTRPC(); + const siteSettings = useQuery(trpc.marketingPages.siteSettings.queryOptions()); + const header = useQuery(trpc.navigation.header.queryOptions()); + + if (siteSettings.isPending || header.isPending) { + return
Loading…
; + } + if (siteSettings.error || header.error) { + return ( +
+ Failed to load: {siteSettings.error?.message ?? header.error?.message} +
+ ); + } + return (
-

Template — TanStack Start

-

Clean Architecture Monorepo Template

+
+

{siteSettings.data?.siteName} — TanStack edition

+ +
+

This page is rendered by TanStack Router and consumes the same feature packages as the Next.js app.

); } From 1f0a6e73bfeaad5c3ab03a966dca6d7df64cc447 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 09:09:41 +0200 Subject: [PATCH 106/129] docs(plan): add Plan 6 (cleanup + enforcement + e2e + docs) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 20 tasks in 5 phases: A) migrate ui→core-ui, repoint apps/cms+storybook, delete 6 legacy packages; B) eslint-plugin-boundaries with three-tag model + composition exceptions; C) Playwright in both apps with smoke specs + root test:e2e task; D) full doc rewrite (overview, dependency flow, guides, root+per-package AGENTS.md, 4 new ADRs, 4 updated/ superseded ADRs, delete 6 stale plans); E) all-green final check. Co-Authored-By: Claude Opus 4.7 (1M context) --- ...-04-plan-6-cleanup-enforcement-e2e-docs.md | 1095 +++++++++++++++++ 1 file changed, 1095 insertions(+) create mode 100644 docs/superpowers/plans/2026-05-04-plan-6-cleanup-enforcement-e2e-docs.md diff --git a/docs/superpowers/plans/2026-05-04-plan-6-cleanup-enforcement-e2e-docs.md b/docs/superpowers/plans/2026-05-04-plan-6-cleanup-enforcement-e2e-docs.md new file mode 100644 index 0000000..3afdbf5 --- /dev/null +++ b/docs/superpowers/plans/2026-05-04-plan-6-cleanup-enforcement-e2e-docs.md @@ -0,0 +1,1095 @@ +# Vertical Refactor — Plan 6: Cleanup + Enforcement + E2E + Docs + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans. + +**Goal:** Land the vertical-refactor branch in a fully clean, enforced, tested, and documented state. Delete the six legacy packages; migrate `apps/storybook` from `@repo/ui` to `@repo/core-ui`; install `eslint-plugin-boundaries` with rules matching the spec's three-tag model; set up Playwright in both apps with smoke specs; rewrite the doc tree (AGENTS.md, ADRs, guides). End state: PR-ready branch where every package, app, lint pass, and test suite tells the same coherent vertical-feature story. + +**Architecture:** Five sequential phases. Each phase ends green so a reviewer can land Plan 6 in chunks if desired. Phase A removes legacy packages (drops their `apps/cms` and `apps/storybook` references first, then deletes). Phase B is `eslint-plugin-boundaries` configuration. Phase C is Playwright. Phase D is full doc rewrite. Phase E is final repo-wide green check. + +**Tech Stack:** `eslint-plugin-boundaries@^4`, `@playwright/test@^1.50`, all existing tooling. + +**Plan position:** Plan 6 of 6 — final. +- Plans 1-5 ✅ Foundation, Blog, Auth+Media, Marketing-pages+Navigation, App+UI integration +- **Plan 6 (this doc):** Cleanup + enforcement + e2e + docs + +**Spec reference:** `docs/superpowers/specs/2026-04-21-vertical-monorepo-refactor-design.md` + +--- + +## Decisions taken in this plan + +- **Delete six legacy packages:** `packages/api`, `packages/api-client`, `packages/cms-client`, `packages/cms-core`, `packages/core`, `packages/ui`. Their callers (apps/cms, apps/storybook) get repointed first. +- **`eslint-plugin-boundaries` v4** chosen — the v5 series has breaking config-file changes; v4 is stable, ESLint-9 compatible, well-documented. Configured in `packages/eslint-config` so all packages inherit. +- **Playwright `chromium` only** in initial setup — Firefox/WebKit deferred. Each app gets its own `playwright.config.ts` and starts its own `webServer` (web-next on 3000, web-tanstack pointed at 3000 since it shares the backend in dev). +- **Storybook stays alive** but switches to `@repo/core-ui`. If `packages/ui/src/atoms/*` had stories in Plan 1's snapshot, they're already in `core-ui` after Plan 1's `core-ui` migration — but Plan 1 actually only scaffolded `core-ui` empty; the real `ui` content was never migrated. **This plan does that migration in Phase A** as a prerequisite for deleting `packages/ui`. +- **Doc rewrite scope:** rewrite root `AGENTS.md` + `CLAUDE.md`, all per-package `AGENTS.md`, `docs/architecture/{overview,dependency-flow}.md`, `docs/guides/{adding-a-feature,testing-strategy}.md`. Add 4 new ADRs and update/supersede 2 existing ones. Delete the six stale 2026-04-06 plan docs (they describe the old architecture). +- **No CLAUDE.md changes outside the worktree** — the user's main repo has its own .git/.claude state; we only touch the in-worktree CLAUDE.md (project-level instructions). + +--- + +## File Structure + +**Delete (Phase A):** +- `packages/api/` (entire directory) +- `packages/api-client/` +- `packages/cms-client/` +- `packages/cms-core/` +- `packages/core/` +- `packages/ui/` +- `docs/superpowers/plans/2026-04-06-plan-{1..6}-*.md` (6 stale plan files) +- All per-package `AGENTS.md` files inside the deleted packages (handled by directory deletion) + +**Modify (Phase A — pre-delete repointing):** +- `packages/core-ui/src/` — populate with content migrated from `packages/ui/src/` (atoms, molecules, lib/utils + stories) +- `packages/core-ui/package.json` — add storybook-related devDeps if any are needed +- `apps/storybook/package.json` — swap `@repo/ui` → `@repo/core-ui` +- `apps/storybook/.storybook/main.ts` (if it exists) — update component path +- `apps/cms/package.json` — drop `@repo/cms-core` dep (no longer used) + +**Create/modify (Phase B):** +- `packages/eslint-config/index.js` (or `index.mjs`) — add `eslint-plugin-boundaries` with rules +- `packages/eslint-config/package.json` — add `eslint-plugin-boundaries` dep +- Each package/app `eslint.config.js|mjs` — verify it inherits properly (most should already) + +**Create (Phase C):** +- `apps/web-next/playwright.config.ts` +- `apps/web-next/e2e/home.spec.ts` +- `apps/web-next/e2e/blog-post.spec.ts` +- `apps/web-next/e2e/marketing-page.spec.ts` +- `apps/web-next/package.json` — add `@playwright/test` devDep + `test:e2e` script +- `apps/web-tanstack/playwright.config.ts` +- `apps/web-tanstack/e2e/home.spec.ts` +- `apps/web-tanstack/package.json` — add `@playwright/test` devDep + `test:e2e` script +- Root `package.json` — add `test:e2e` script that runs Turbo task +- Root `turbo.json` — add `test:e2e` task + +**Create/rewrite (Phase D):** +- `docs/architecture/vertical-feature-spec.md` — copy of source spec +- `docs/architecture/overview.md` — full rewrite +- `docs/architecture/dependency-flow.md` — full rewrite +- `docs/guides/adding-a-feature.md` — full rewrite +- `docs/guides/testing-strategy.md` — full rewrite +- `docs/decisions/adr-002-di-framework.md` — append note about per-feature containers +- `docs/decisions/adr-003-cms-separation.md` — mark v1 superseded; write v2 (or replace inline) +- `docs/decisions/adr-004-dual-mode-client.md` — mark superseded +- `docs/decisions/adr-005-atomic-design.md` — append scope note (applies to core-ui only) +- `docs/decisions/adr-006-vertical-feature-packages.md` — NEW +- `docs/decisions/adr-007-drop-cms-client-wrapper.md` — NEW +- `docs/decisions/adr-008-per-feature-di-containers.md` — NEW +- `docs/decisions/adr-009-integrations-folder-naming.md` — NEW +- Root `AGENTS.md` — full rewrite +- Root `CLAUDE.md` — update Read First + add boundary note +- `apps/cms/AGENTS.md` — rewrite (replace cms-core references with core-cms) +- `apps/web-next/AGENTS.md` — NEW (or rewrite if exists) +- `apps/web-tanstack/AGENTS.md` — NEW +- `apps/storybook/AGENTS.md` — update (replace ui with core-ui) +- `packages//AGENTS.md` — one per remaining package (12 total: 5 core-* + 5 features + 2 tooling) + +**Delete:** +- `docs/superpowers/plans/2026-04-06-plan-{1,2,3,4,5,6}-*.md` (6 stale plans) + +--- + +## Phase A: Cleanup — populate core-ui, repoint apps, delete legacy packages + +### Task 6.1: Migrate `packages/ui/src/` content into `packages/core-ui/src/` + +**Files:** +- Read: `packages/ui/src/**/*` (currently has atoms/, molecules/, templates/, lib/utils.ts and stories) +- Write: copy into `packages/core-ui/src/` matching the same structure +- Modify: `packages/core-ui/package.json` — add any devDeps needed (likely none — `@types/react`, `react`, `clsx`, `tailwind-merge` already present) + +- [ ] **Step 1: List what's in packages/ui/src** + +Run: `find packages/ui/src -type f -name "*.ts" -o -name "*.tsx" | head -30` + +- [ ] **Step 2: Copy entire src tree from ui to core-ui** + +```bash +cp -R packages/ui/src/. packages/core-ui/src/ +``` + +This preserves the existing `packages/core-ui/src/index.ts` (will overwrite if there's a name collision; verify with the diff before committing). After copy, `packages/core-ui/src/` should contain `atoms/`, `molecules/`, `templates/` (if they exist in ui), `lib/utils.ts`, and the index.ts (overwritten with ui's barrel). + +- [ ] **Step 3: Verify the new core-ui index.ts barrel exports something meaningful** + +Run: `cat packages/core-ui/src/index.ts` + +If it's still the empty `export {};`, replace with the equivalent of `packages/ui/src/index.ts` (whatever that exports). The intent: `import { Button } from '@repo/core-ui'` should work from the storybook app. + +- [ ] **Step 4: Verify core-ui typechecks** + +Run: `pnpm typecheck --filter @repo/core-ui` +Expected: PASS. If not, the issue is likely missing devDeps like Storybook types — for components, that's fine (those types only matter in `*.stories.tsx`). If stories cause errors, see Step 5. + +- [ ] **Step 5: If `*.stories.tsx` cause typecheck errors due to missing `@storybook/react`** + +Storybook's React types come from the storybook app's deps, not the ui library's. To exclude stories from core-ui's typecheck, modify `packages/core-ui/tsconfig.json`: + +```json +{ + "extends": "@repo/typescript-config/base.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": ".", + "lib": ["ES2022", "DOM"], + "jsx": "preserve" + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist", "**/*.stories.tsx", "**/*.stories.ts"] +} +``` + +- [ ] **Step 6: Verify core-ui typechecks again** + +Run: `pnpm typecheck --filter @repo/core-ui` +Expected: PASS. + +- [ ] **Step 7: Commit** + +```bash +git add packages/core-ui +git commit -m "feat(core-ui): migrate atoms/molecules/templates from packages/ui" +``` + +--- + +### Task 6.2: Repoint `apps/storybook` from `@repo/ui` to `@repo/core-ui` + +- [ ] **Step 1: Update `apps/storybook/package.json`** + +Change `"@repo/ui": "workspace:*"` to `"@repo/core-ui": "workspace:*"`. + +- [ ] **Step 2: Find and update import references in storybook config + stories** + +```bash +grep -rln "@repo/ui" apps/storybook +``` + +For each file: replace `@repo/ui` with `@repo/core-ui`. Common files: `apps/storybook/.storybook/main.ts` (story path globs), `apps/storybook/preview.ts` if exists. + +- [ ] **Step 3: Install + verify storybook can boot** + +Run: `pnpm install` +Run: `pnpm typecheck --filter @repo/storybook` +Expected: PASS. + +> Optional: try `pnpm dev --filter @repo/storybook` in background; verify port 6006 responds. Skip if storybook setup is fragile and would require additional config beyond the repoint. + +- [ ] **Step 4: Commit** + +```bash +git add apps/storybook pnpm-lock.yaml +git commit -m "build(storybook): migrate from @repo/ui to @repo/core-ui" +``` + +--- + +### Task 6.3: Drop `@repo/cms-core` dep from `apps/cms/package.json` + +- [ ] **Step 1: Edit `apps/cms/package.json`** + +Remove the line `"@repo/cms-core": "workspace:*",` from `dependencies`. Keep `@repo/core-cms` (added in Plan 1). + +- [ ] **Step 2: Install + verify** + +Run: `pnpm install` +Run: `pnpm typecheck --filter @repo/cms` +Expected: PASS. + +- [ ] **Step 3: Commit** + +```bash +git add apps/cms/package.json pnpm-lock.yaml +git commit -m "build(cms): drop legacy @repo/cms-core dep (now uses @repo/core-cms only)" +``` + +--- + +### Task 6.4: Delete the six legacy packages + +- [ ] **Step 1: Verify no remaining references** + +Run: `grep -rln "@repo/api\b\|@repo/api-client\|@repo/cms-client\|@repo/cms-core\|@repo/core\b\|@repo/ui\b" apps/ packages/ 2>/dev/null | grep -v "^node_modules" | grep -v "^.next" | grep -v "^.turbo" | grep -v "^dist"` + +Expected: empty output (no remaining imports). If anything appears, fix it before deleting. + +> Note: the regex `@repo/core\b` matches `@repo/core` but not `@repo/core-shared`. Same for `@repo/ui\b` vs `@repo/core-ui`. The `\b` word boundary is important. + +- [ ] **Step 2: Delete the six packages** + +```bash +rm -rf packages/api packages/api-client packages/cms-client packages/cms-core packages/core packages/ui +``` + +- [ ] **Step 3: Install — pnpm prunes the now-orphaned workspace entries** + +Run: `pnpm install` +Expected: lockfile updates, no errors. Old packages no longer in workspace. + +- [ ] **Step 4: Repo-wide typecheck + tests to confirm nothing broke** + +Run: `pnpm typecheck` +Expected: PASS for all packages we kept (core-shared, core-cms, core-api, core-trpc, core-ui, auth, blog, marketing-pages, media, navigation, eslint-config, typescript-config, web-next, web-tanstack, cms, storybook). NO pre-existing failures should remain — those were in `@repo/api` and `@repo/ui` which we just deleted. + +Run: `pnpm test` +Expected: PASS for the 96 feature tests. + +- [ ] **Step 5: Commit** + +```bash +git add -A +git commit -m "chore: delete legacy packages (api, api-client, cms-client, cms-core, core, ui)" +``` + +--- + +## Phase B: ESLint boundary enforcement + +### Task 6.5: Install + configure `eslint-plugin-boundaries` + +- [ ] **Step 1: Add `eslint-plugin-boundaries` to `packages/eslint-config/package.json` deps** + +Read the current file, then add to `dependencies`: + +```json +"eslint-plugin-boundaries": "^4.2.2" +``` + +(If `dependencies` doesn't exist, add the block.) + +- [ ] **Step 2: Inspect current eslint config** + +Run: `cat packages/eslint-config/index.{js,mjs,ts} 2>/dev/null` + +There may be one or multiple files (e.g., a base flat config + framework variants). Identify the file that's used by all packages (typically named `index.js` or `base.js` and exports a flat config array). + +- [ ] **Step 3: Add `eslint-plugin-boundaries` rules to the base config** + +Append to the base config's exports (assuming it's a flat config array): + +```javascript +import boundaries from "eslint-plugin-boundaries"; + +export default [ + // ... existing config ... + { + plugins: { boundaries }, + settings: { + "boundaries/elements": [ + // Apps — top tier + { type: "app", pattern: "apps/*" }, + // Core foundation packages + { type: "core", pattern: "packages/core-*" }, + // Composition core packages — special: may import feature subpaths + { type: "core-composition", pattern: "packages/core-api" }, + { type: "core-composition", pattern: "packages/core-cms" }, + // Business feature packages + { type: "feature", pattern: "packages/!(core-*|eslint-config|typescript-config)" }, + // Tooling — untagged for boundary purposes + { type: "tooling", pattern: "packages/eslint-config" }, + { type: "tooling", pattern: "packages/typescript-config" }, + ], + }, + rules: { + "boundaries/element-types": [ + 2, + { + default: "disallow", + rules: [ + { from: "app", allow: ["app", "core", "core-composition", "feature", "tooling"] }, + { from: "feature", allow: ["core", "tooling"] }, + { from: "core", allow: ["core", "tooling"] }, + { from: "core-composition", allow: ["core", "feature", "tooling"] }, + { from: "tooling", allow: ["tooling"] }, + ], + }, + ], + "boundaries/no-private": [2, { allowUncles: false }], + "boundaries/external": [ + 2, + { + default: "allow", + rules: [], + }, + ], + }, + }, +]; +``` + +> Notes: +> - `core-composition` is the special tier for `core-api` + `core-cms` — they're allowed to import `feature/*` subpath exports. Plain `core` packages cannot. +> - The disallow-by-default policy means any package combination not explicitly allowed errors. `app → app` is permitted in case apps share helpers. +> - `boundaries/no-private` blocks deep-imports into another package's internal source paths (only public `exports` allowed). + +- [ ] **Step 4: Install + run lint across all packages** + +Run: `pnpm install` then `pnpm lint` + +Expected: PASS. If violations appear, they're real — usually from forgotten cross-feature imports or deep imports. Fix them or report DONE_WITH_CONCERNS with a list. + +> Common false positives: import path patterns the plugin doesn't understand. If genuine violations are zero but the plugin misclassifies, file an entry under `boundaries/element-types` ignore lists or refine the `pattern` regexes. + +- [ ] **Step 5: Commit** + +```bash +git add packages/eslint-config pnpm-lock.yaml +git commit -m "feat(eslint-config): add boundaries plugin enforcing app→feature→core graph" +``` + +--- + +## Phase C: Playwright + +### Task 6.6: Install Playwright in `apps/web-next` + initial config + +- [ ] **Step 1: Add to `apps/web-next/package.json`** + +Add to `devDependencies`: +```json +"@playwright/test": "^1.50.0" +``` + +Add to `scripts`: +```json +"test:e2e": "playwright test", +"test:e2e:install": "playwright install --with-deps chromium" +``` + +- [ ] **Step 2: Install + Playwright browser binaries** + +Run: `pnpm install` +Run: `cd apps/web-next && pnpm playwright install --with-deps chromium` + +(The `--with-deps` may require sudo on Linux to install OS-level browser deps. On macOS it should run without elevation.) + +- [ ] **Step 3: Create `apps/web-next/playwright.config.ts`** + +```typescript +import { defineConfig, devices } from "@playwright/test"; + +export default defineConfig({ + testDir: "./e2e", + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 2 : 0, + workers: process.env.CI ? 1 : undefined, + reporter: "list", + use: { + baseURL: "http://localhost:3000", + trace: "on-first-retry", + }, + projects: [ + { + name: "chromium", + use: { ...devices["Desktop Chrome"] }, + }, + ], + webServer: { + command: "pnpm dev", + url: "http://localhost:3000", + reuseExistingServer: !process.env.CI, + timeout: 60_000, + }, +}); +``` + +- [ ] **Step 4: Create three smoke specs** + +`apps/web-next/e2e/home.spec.ts`: +```typescript +import { test, expect } from "@playwright/test"; + +test("home page renders site name + nav + article list", async ({ page }) => { + await page.goto("/"); + await expect(page.locator("h1").first()).toBeVisible(); + // Site name from siteSettings (mock seed: "My App") + await expect(page.locator("body")).toContainText(/My App/i); + // At least one nav item (mock seed: Home/Blog/About) + await expect(page.locator("nav a").first()).toBeVisible(); +}); +``` + +`apps/web-next/e2e/marketing-page.spec.ts`: +```typescript +import { test, expect } from "@playwright/test"; + +test("/about renders the about marketing page", async ({ page }) => { + await page.goto("/about"); + // Either renders the seeded page (h1 = "About us") or "not yet published" message + // — both are HTTP 200, so the test only checks it doesn't 500. + const status = (await page.context().request.get("/about")).status(); + expect(status).toBe(200); + await expect(page.locator("body")).toBeVisible(); +}); +``` + +`apps/web-next/e2e/blog-post.spec.ts`: +```typescript +import { test, expect } from "@playwright/test"; + +test("/blog/[slug] returns 404 for non-existent slug", async ({ page }) => { + const response = await page.goto("/blog/this-slug-does-not-exist", { + waitUntil: "domcontentloaded", + }); + expect(response?.status()).toBe(404); +}); + +test("/blog/[slug] for a real slug renders the article", async ({ page }) => { + // The mock blog repository is empty by default — so this test currently + // expects 404. When seeded data exists in Payload, replace 404 with 200 + // and check for article.title in the page body. + test.skip( + true, + "Pending: seed a published article in Payload before enabling this test", + ); + await page.goto("/blog/example-slug"); + await expect(page.locator("h1").first()).toBeVisible(); +}); +``` + +- [ ] **Step 5: Run e2e** + +Run: `cd apps/web-next && pnpm test:e2e` +Expected: PASS — 3 tests run, 1 skipped, all green. The webServer config auto-starts `pnpm dev` so you don't need a separate dev server. + +> Note: Postgres must be running. If not: `docker compose up -d postgres` from repo root first. + +- [ ] **Step 6: Commit** + +```bash +git add apps/web-next pnpm-lock.yaml +git commit -m "test(web-next): add Playwright config + smoke specs (home, about, blog 404)" +``` + +--- + +### Task 6.7: Install Playwright in `apps/web-tanstack` + initial config + +> Note: `apps/web-tanstack` doesn't have a real dev server yet (its `dev` script is just `echo 'placeholder'`). For Playwright we need to either (a) skip web-tanstack e2e until TanStack Start runtime is wired, or (b) add a basic Vite dev server. Option (a) keeps Plan 6 focused. The e2e config is added but only one test runs against the shared web-next backend at port 3000 — proving the cross-framework consumption works at the data layer even without a real TanStack runtime. + +- [ ] **Step 1: Add to `apps/web-tanstack/package.json`** + +Add to `devDependencies`: +```json +"@playwright/test": "^1.50.0" +``` + +Add to `scripts`: +```json +"test:e2e": "playwright test" +``` + +- [ ] **Step 2: Install** + +Run: `pnpm install` +(Browsers installed already by web-next task 6.6 step 2 — they're shared system-wide.) + +- [ ] **Step 3: Create `apps/web-tanstack/playwright.config.ts`** + +```typescript +import { defineConfig, devices } from "@playwright/test"; + +export default defineConfig({ + testDir: "./e2e", + fullyParallel: true, + retries: process.env.CI ? 2 : 0, + reporter: "list", + use: { + baseURL: "http://localhost:3000", + trace: "on-first-retry", + }, + projects: [ + { + name: "chromium", + use: { ...devices["Desktop Chrome"] }, + }, + ], + // No webServer: web-tanstack tests run against the shared web-next backend + // (port 3000). When TanStack Start runtime is wired in a future plan, add + // a webServer block here pointing at port 3002. +}); +``` + +- [ ] **Step 4: Create `apps/web-tanstack/e2e/home.spec.ts`** + +```typescript +import { test, expect } from "@playwright/test"; + +test.skip( + "TanStack home renders site name + nav (pending TanStack Start runtime)", + async ({ page }) => { + // Pending: web-tanstack has no dev server yet. When the TanStack Start + // runtime is wired (future plan), update the playwright.config.ts + // webServer to start it on port 3002 and remove this skip. + await page.goto("http://localhost:3002"); + await expect(page.locator("h1").first()).toBeVisible(); + }, +); +``` + +- [ ] **Step 5: Verify config + skipped test pass** + +Run: `cd apps/web-tanstack && pnpm test:e2e` +Expected: 1 test, skipped. Exit 0. + +- [ ] **Step 6: Commit** + +```bash +git add apps/web-tanstack pnpm-lock.yaml +git commit -m "test(web-tanstack): add Playwright scaffold + skipped home spec" +``` + +--- + +### Task 6.8: Root `test:e2e` script + Turbo task + +- [ ] **Step 1: Add `test:e2e` script to root `package.json`** + +```json +"test:e2e": "turbo run test:e2e" +``` + +(Add inside the `scripts` block.) + +- [ ] **Step 2: Add `test:e2e` task to root `turbo.json`** + +```json +"test:e2e": { + "dependsOn": ["^build"], + "cache": false +} +``` + +(Add inside the `tasks` object alongside `test`, `lint`, etc.) + +- [ ] **Step 3: Run from root** + +Run: `pnpm test:e2e` +Expected: web-next runs 3 tests (1 skipped); web-tanstack runs 1 test (skipped). All green. + +- [ ] **Step 4: Commit** + +```bash +git add package.json turbo.json +git commit -m "build: add root test:e2e task aggregating per-app Playwright suites" +``` + +--- + +## Phase D: Docs rewrite + +### Task 6.9: Copy spec into `docs/architecture/vertical-feature-spec.md` + +- [ ] **Step 1: Find the source spec** + +The spec was provided as `monorepo-architecture-spec-detailed-v5.md` from `/Users/danijel/Downloads/`. The user's worktree may not have a copy. The `docs/superpowers/specs/2026-04-21-vertical-monorepo-refactor-design.md` references it. For Plan 6, copy the design spec (not the source) into `docs/architecture/` since it's our authoritative interpretation. + +```bash +cp docs/superpowers/specs/2026-04-21-vertical-monorepo-refactor-design.md docs/architecture/vertical-feature-spec.md +``` + +> Note: If the source spec from Downloads is required verbatim, that's a separate user-supplied step — for now we use our own design spec which already encodes our decisions. + +- [ ] **Step 2: Add a brief preamble to the copied file** + +Edit the top of `docs/architecture/vertical-feature-spec.md`: + +```markdown +# Vertical Feature Architecture Spec + +> **Source of truth.** Copied from `docs/superpowers/specs/2026-04-21-vertical-monorepo-refactor-design.md` for in-tree reference. Edits here should be backported to the design spec. + +``` + +(Insert above the existing `# Vertical Feature Monorepo Refactor — Design Spec` heading; or replace the heading, your choice.) + +- [ ] **Step 3: Commit** + +```bash +git add docs/architecture/vertical-feature-spec.md +git commit -m "docs(architecture): copy refactor design spec into in-tree reference" +``` + +--- + +### Task 6.10: Rewrite `docs/architecture/overview.md` + +Replace the entire file with: + +```markdown +# Architecture Overview + +A vertical-feature monorepo. Business capabilities are top-level packages; non-business foundations are `core-*`. + +## Package map + +``` +packages/ + # Foundation (no business logic) + core-shared/ Generic primitives — Payload field/block helpers, tRPC init/context, lib utilities + core-cms/ Composition only: assembles feature CMS exports into one Payload config + core-api/ Composition only: aggregates feature tRPC routers into one appRouter + core-trpc/ Frontend tRPC client + per-framework providers (Next.js, TanStack) + core-ui/ Design-system primitives (atoms, molecules, generic organisms, templates) + + # Business capabilities + auth/ Users + sign-in/sign-up/sign-out + session/cookie domain + blog/ Articles collection + publishing flow + media/ Media upload collection (skeleton; expand with optimization, CDN, etc.) + marketing-pages/ Pages collection + SiteSettings global + navigation/ Header global + menu items + + # Tooling + eslint-config/ Shared ESLint flat config + boundary rules + typescript-config/ Shared tsconfig + vitest base +``` + +## Data flow + +``` +React component + ↓ useQuery(trpc.blog.articleBySlug.queryOptions(...)) ← ui/query.ts (typed tRPC client) +HTTP /api/trpc + ↓ +tRPC procedure ← integrations/api/router.ts + ↓ .input(zod).query(...) +Controller (Zod safeParse) ← interface-adapters/controllers/ + ↓ +Use case ← application/use-cases/ + ↓ container.get(SYMBOL) +Repository implementation ← infrastructure/repositories/ (@injectable) + ↓ getPayload({ config }) +Payload Local API → Postgres +``` + +## Three enforcement layers + +1. **`package.json` deps** — only declare allowed deps +2. **`exports` map** — each package exposes a small public surface (`.`, `./cms`, `./api`, `./di/bind-production`) +3. **ESLint `eslint-plugin-boundaries`** — three tags (`app`, `feature`, `core`); two composition exceptions (`core-api` may import `@repo//api`; `core-cms` may import `@repo//cms`) + +## Per-feature DI containers + +Each feature owns its own InversifyJS `Container` + symbol table. No shared symbols, no cross-feature DI coupling. Tests rebind per feature without touching others. Apps call `bindProduction*(config)` per feature at boot to swap the default mock implementations for Payload-backed ones. + +## Spec reference + +`docs/architecture/vertical-feature-spec.md` is the canonical design. +``` + +- [ ] **Step 1: Replace the file** + +(Use the Write tool with the content above.) + +- [ ] **Step 2: Commit** + +```bash +git add docs/architecture/overview.md +git commit -m "docs(architecture): rewrite overview for vertical feature architecture" +``` + +--- + +### Task 6.11: Rewrite `docs/architecture/dependency-flow.md` + +Replace with: + +```markdown +# Dependency Flow + +``` + +-------------+ +-----------------+ +-----------+ + | apps/web- | | apps/web- | | apps/cms | + | next | | tanstack | | | + +------+------+ +--------+--------+ +-----+-----+ + | | | + +------------------+--------------+ | | + | | | | | + +----v-----+ +-----v------+ +-----v----v---+ +-------v------+ + | core-api | | core-trpc | | feature | | core-cms | + | | | | | packages | | | + +-----+----+ +-----+------+ +------+-------+ +-------+------+ + | | | | + | | | | + +--+-------+------+---------------+----+ +-------------+ + | | | | + +----v---+ +-v---------+ +-------v---v---+ + | core- | | core-ui | | core-shared | + | shared | | | | | + +--------+ +-----------+ +----------------+ + + Boundary rules (enforced by eslint-plugin-boundaries): + app → app, core, feature, core-composition (any) + feature → core (any), but NOT other features, NOT app + core → core, but NOT feature, NOT app + core-composition → core, feature subpath exports only (`/cms`, `/api`) + core-api → @repo//api + core-cms → @repo//cms +``` + +## Concrete examples + +Allowed: +```ts +// in apps/web-next +import { appRouter } from "@repo/core-api"; +import { NextTrpcProvider } from "@repo/core-trpc/next"; +import { bindProductionBlog } from "@repo/blog/di/bind-production"; + +// in packages/blog +import { slugifyIfMissing } from "@repo/core-shared/payload"; + +// in packages/core-api +import { blogRouter } from "@repo/blog/api"; // composition exception +import { router } from "@repo/core-shared/trpc/init"; // core → core fine + +// in packages/core-cms +import { articles } from "@repo/blog/cms"; // composition exception +``` + +Disallowed: +```ts +// in packages/blog (cross-feature) +import { Article } from "@repo/marketing-pages"; // ❌ feature → feature + +// in packages/blog (deep import past public exports) +import { articles } from "@repo/blog/src/integrations/cms/collections/articles"; // ❌ no-private + +// in packages/core-shared +import { blogRouter } from "@repo/blog/api"; // ❌ core → feature + +// in packages/core-trpc +import { someBlogThing } from "@repo/blog"; // ❌ core → feature (only core-api/core-cms have exception) +``` + +## Three-layer enforcement + +ESLint catches accidental cross-package imports at lint time. The `package.json` `exports` map blocks deep imports at module-resolution time. Workspace `dependencies` declarations make the package graph itself the source of truth — if you didn't declare it, you can't import it. +``` + +- [ ] **Step 1: Replace the file** + +- [ ] **Step 2: Commit** + +```bash +git add docs/architecture/dependency-flow.md +git commit -m "docs(architecture): rewrite dependency-flow for vertical features + boundary rules" +``` + +--- + +### Task 6.12: Rewrite `docs/guides/adding-a-feature.md` + +Replace with a new walkthrough. The guide should cover: +1. Decide if the work is a new feature or extends an existing one +2. Scaffold a minimal feature (smallest viable shape — see addendum v5) +3. Add layers as needed (entities → application → infrastructure → di → integrations/cms → integrations/api → ui) +4. Add `bindProduction*(config)` if it has a payload-backed repo +5. Wire `/cms` into `core-cms`, `/api` into `core-api` +6. Add path aliases to `tsconfig.base.json` +7. Run `pnpm install`, typecheck, test + +A second walkthrough should cover modifying an existing feature (e.g., adding a procedure to blog). + +Use the existing `auth`, `blog`, `marketing-pages`, `navigation` packages as living examples. Keep the guide concise (~300-400 lines) and link to the spec for theoretical depth. + +- [ ] **Step 1: Write the new guide** + +Use the Write tool. Format the guide with clear `###` step headings, code blocks per file, and a "Done criteria" section at the end. + +> The exact prose is at the implementer's discretion (within the structure above) — Plan 6 doesn't ship the verbatim guide text. The implementer should look at the existing `packages/blog/src/` for ground truth on what a feature looks like. + +- [ ] **Step 2: Commit** + +```bash +git add docs/guides/adding-a-feature.md +git commit -m "docs(guides): rewrite adding-a-feature for vertical canonical pattern" +``` + +--- + +### Task 6.13: Rewrite `docs/guides/testing-strategy.md` + +Replace with a guide covering: +1. **Test placement table** (colocated `*.test.ts` next to source; feature-level `tests/*.feature.test.ts`; e2e `apps//e2e/*.spec.ts`) +2. **Per-feature DI in tests** — show the `beforeEach` pattern of unbinding + rebinding the feature's container +3. **Vitest setup** — each package has its own `vitest.config.ts` with `resolve.alias` for `@/` +4. **Playwright setup** — apps have `playwright.config.ts` with `webServer` block; smoke specs initially +5. **Mocking strategy for Payload** — feature-test level uses Mock repos via DI rebind; the `payload` module can be mocked at vitest level for infrastructure tests (see `payload-articles.repository.test.ts`) + +Keep concise (~150-200 lines). + +- [ ] **Step 1: Write** +- [ ] **Step 2: Commit** + +```bash +git add docs/guides/testing-strategy.md +git commit -m "docs(guides): rewrite testing-strategy for vertical features (per-feature DI, colocated tests, Playwright)" +``` + +--- + +### Task 6.14: Update existing ADRs (002, 003, 005), supersede ADR-004 + +For each: + +- [ ] **Step 1: ADR-002 (DI framework)** — append a section: + +```markdown + +## Update (2026-05-04) + +The vertical-feature refactor preserved InversifyJS but moved from a single shared container in `packages/core/src/di/` to **per-feature containers** in each feature package (`packages//src/di/container.ts`). See ADR-008. +``` + +- [ ] **Step 2: ADR-003 (CMS separation)** — mark v1 superseded, add v2 inline: + +```markdown + +## Status: Partially superseded by v2 (2026-05-04) + +v1 advocated `@repo/cms-core` as a single CMS package. v2 splits this into: +- `@repo/core-cms` — composition only (assembles feature CMS schemas) +- Each feature owns its own collections/globals under `packages//src/integrations/cms/` + +Rationale: vertical-feature ownership scales better; CMS schema lives with the business code that needs it. See ADR-006. +``` + +- [ ] **Step 3: ADR-004 (dual-mode client)** — supersede entirely: + +```markdown + +## Status: Superseded by ADR-007 (2026-05-04) + +The dual-mode client wrapper was deleted. Feature payload-backed repositories now call `getPayload({ config })` directly with the assembled config injected via constructor. See ADR-007 for rationale. +``` + +- [ ] **Step 4: ADR-005 (atomic design)** — append scope note: + +```markdown + +## Update (2026-05-04) + +Atomic Design now applies to `@repo/core-ui/` only — generic primitives (atoms, molecules, generic organisms, templates). Feature-specific components (e.g., `ArticleCard`, `HeaderNavMenu`) live in the owning feature's `ui/` folder per the vertical-feature architecture. See ADR-006. +``` + +- [ ] **Step 5: Commit** + +```bash +git add docs/decisions/adr-002 docs/decisions/adr-003 docs/decisions/adr-004 docs/decisions/adr-005 +git commit -m "docs(adr): update 002/003/005 with vertical-refactor notes; supersede 004" +``` + +--- + +### Task 6.15: Add four new ADRs (006-009) + +Create each as a short ADR (~50-100 lines): + +- [ ] **Step 1: `docs/decisions/adr-006-vertical-feature-packages.md`** + +Title: "Vertical feature packages over horizontal layers" +Context: original Clean Architecture used one `packages/core` for all domains +Decision: split by business capability; each feature owns the full vertical slice (entities → ui) +Consequences: features evolve independently; cross-feature coupling explicit at the package-graph level; per-feature DI containers + +- [ ] **Step 2: `docs/decisions/adr-007-drop-cms-client-wrapper.md`** + +Title: "Drop the dual-mode CMS client wrapper" +Context: ADR-004 introduced `@repo/cms-client` with local + HTTP modes; never used in production +Decision: delete the wrapper; payload-backed repositories use `getPayload({ config })` directly with config passed via constructor +Consequences: one fewer abstraction; package graph stays acyclic (feature ↛ core-cms) + +- [ ] **Step 3: `docs/decisions/adr-008-per-feature-di-containers.md`** + +Title: "Per-feature InversifyJS containers" +Context: original architecture had one shared container in `packages/core/src/di/` +Decision: each feature owns its own `Container` + symbol table; tests rebind per-feature without coordination +Consequences: zero cross-feature DI coupling; symbol collisions impossible; cross-feature shared services need explicit per-container binding (rare in practice) + +- [ ] **Step 4: `docs/decisions/adr-009-integrations-folder-naming.md`** + +Title: "Rename spec's `adapters/` to `integrations/`" +Context: source spec used `adapters/cms` + `adapters/api`; conflicts with Clean Architecture's `interface-adapters/` folder we kept +Decision: rename to `integrations/cms` + `integrations/api` to avoid the collision +Consequences: source-spec deviation bounded to one naming choice; semantically equivalent (both describe role-based plug points); leaves `adapters` unambiguously meaning Clean Architecture's interface-adapter layer + +- [ ] **Step 5: Commit** + +```bash +git add docs/decisions/adr-006 docs/decisions/adr-007 docs/decisions/adr-008 docs/decisions/adr-009 +git commit -m "docs(adr): add ADRs 006-009 for vertical refactor (vertical packages, drop wrapper, per-feature DI, integrations naming)" +``` + +--- + +### Task 6.16: Delete stale 2026-04-06 plan files + +- [ ] **Step 1: Delete the six files** + +```bash +rm docs/superpowers/plans/2026-04-06-plan-1-monorepo-foundation.md +rm docs/superpowers/plans/2026-04-06-plan-2-core-package.md +rm docs/superpowers/plans/2026-04-06-plan-3-payload-cms.md +rm docs/superpowers/plans/2026-04-06-plan-4-api-layer-app-shells.md +rm docs/superpowers/plans/2026-04-06-plan-5-ui-system.md +rm docs/superpowers/plans/2026-04-06-plan-6-documentation.md +``` + +- [ ] **Step 2: Optionally delete the stale superseded design spec** + +```bash +rm docs/superpowers/specs/2026-04-06-clean-architecture-monorepo-template-design.md +``` + +(Optional — keeping the old spec is acceptable as historical record. Default to deleting since the new spec supersedes it and the directory is for active specs.) + +- [ ] **Step 3: Commit** + +```bash +git add -A +git commit -m "docs(plans): delete six stale 2026-04-06 plan docs (superseded by 2026-05-04-plan-{1..6})" +``` + +--- + +### Task 6.17: Rewrite root `AGENTS.md` + +Full rewrite. Cover: +1. **What this repo is** — vertical-feature Turborepo + pnpm monorepo template +2. **Package map** — same as overview but in table form +3. **Boundary rules** — three tags, two composition exceptions, three enforcement layers +4. **Adding a feature** — link to `docs/guides/adding-a-feature.md` +5. **Key commands** — pnpm install, dev, typecheck, lint, test, test:e2e +6. **Per-package conventions** — relative imports in src, `@/` in tests, vitest config has resolve.alias, payload repos take SanitizedConfig via constructor + +Aim for ~150 lines. Reference the spec + guides for depth. + +- [ ] **Step 1: Replace `AGENTS.md` at repo root** +- [ ] **Step 2: Commit** + +```bash +git add AGENTS.md +git commit -m "docs(agents): rewrite root AGENTS.md for vertical feature architecture" +``` + +--- + +### Task 6.18: Update root `CLAUDE.md` + +Surgical edit, don't full rewrite — preserve user's existing setup notes and ports table. Update: +- **Read First section** to point at the new `docs/architecture/overview.md`, `docs/architecture/vertical-feature-spec.md`, `docs/guides/adding-a-feature.md` +- **Add a "Key conventions" section** with the bullet points from Plans 2-5 lessons (relative imports in src, no rootDir warning fixed, vitest alias, payload repos via constructor, `bindProduction*` for app boot) +- **MCP Servers section** — Storybook still on :6006 — keep as-is + +- [ ] **Step 1: Edit `CLAUDE.md`** +- [ ] **Step 2: Commit** + +```bash +git add CLAUDE.md +git commit -m "docs(claude): update Read First + add vertical feature conventions" +``` + +--- + +### Task 6.19: Per-package + per-app `AGENTS.md` + +12 packages + 4 apps = 16 AGENTS.md files. Most can be 30-60 lines each. Cover for each package: +- **Purpose** (one paragraph) +- **What it owns** (bulleted) +- **What it must NOT import** (boundary rules) +- **Public exports** (the entries from `package.json` `exports`) +- **Test conventions** (where tests live, how to run them) + +For apps: +- **What it does** + how to run dev +- **What it imports** (top-level deps) +- **Pages/routes** (if applicable) +- **e2e** location + how to run + +Group commits by area to keep history readable: + +- [ ] **Step 1: Write AGENTS.md for all 5 core packages** (core-shared, core-cms, core-api, core-trpc, core-ui). Commit: + +```bash +git add packages/core-*/AGENTS.md +git commit -m "docs(agents): add per-package AGENTS.md for all core-* packages" +``` + +- [ ] **Step 2: Write AGENTS.md for all 5 feature packages** (auth, blog, media, marketing-pages, navigation). Commit: + +```bash +git add packages/{auth,blog,media,marketing-pages,navigation}/AGENTS.md +git commit -m "docs(agents): add per-package AGENTS.md for all feature packages" +``` + +- [ ] **Step 3: Write AGENTS.md for tooling** (eslint-config, typescript-config — short, mostly "shared config"). Commit: + +```bash +git add packages/{eslint-config,typescript-config}/AGENTS.md +git commit -m "docs(agents): add per-package AGENTS.md for eslint-config + typescript-config" +``` + +- [ ] **Step 4: Write/rewrite app AGENTS.md** (cms, web-next, web-tanstack, storybook). Commit: + +```bash +git add apps/*/AGENTS.md +git commit -m "docs(agents): write per-app AGENTS.md for cms, web-next, web-tanstack, storybook" +``` + +> Note: `apps/cms/AGENTS.md` already exists and references the deleted `@repo/cms-core`. The rewrite replaces all `@repo/cms-core` mentions with `@repo/core-cms` and removes the "thin shell" text since core-cms now actually composes feature schemas. + +--- + +## Phase E: Final repo-wide green check + +### Task 6.20: All-green verification + +- [ ] **Step 1: Run all checks in sequence** + +```bash +pnpm install +pnpm typecheck +pnpm lint +pnpm test +pnpm test:e2e +``` + +Each must exit 0. + +- [ ] **Step 2: Verify package counts** + +Run: `ls packages/ | wc -l` +Expected: 12 (5 core + 5 feature + 2 tooling). + +Run: `ls apps/ | wc -l` +Expected: 4 (cms, storybook, web-next, web-tanstack). + +- [ ] **Step 3: Verify no remaining references to deleted packages** + +Run: `grep -rln "@repo/api\b\|@repo/api-client\|@repo/cms-client\|@repo/cms-core\|@repo/core\b\|@repo/ui\b" apps/ packages/ docs/ 2>/dev/null | grep -v node_modules | grep -v ".turbo" | grep -v ".next" | grep -v "dist/"` + +Expected: empty (any matches in `docs/` are likely in superseded ADRs and acceptable — verify each). + +- [ ] **Step 4: No commit needed if everything is green** (any small fixes uncovered should be committed individually with descriptive messages) + +--- + +## Plan 6 Done Criteria + +- [ ] 6 legacy packages deleted (api, api-client, cms-client, cms-core, core, ui); workspace has exactly 12 packages +- [ ] `apps/cms` no longer depends on `@repo/cms-core` +- [ ] `apps/storybook` migrated to `@repo/core-ui` and typechecks +- [ ] `eslint-plugin-boundaries` configured and `pnpm lint` passes with zero violations +- [ ] Playwright installed in both apps; `pnpm test:e2e` from repo root passes (3 specs run + 2 skipped) +- [ ] Root + per-package + per-app AGENTS.md all rewritten for vertical features +- [ ] 4 new ADRs added (006-009); 4 existing ADRs updated/superseded +- [ ] `docs/architecture/{overview,dependency-flow,vertical-feature-spec}.md` rewritten/copied +- [ ] `docs/guides/{adding-a-feature,testing-strategy}.md` rewritten +- [ ] 6 stale 2026-04-06 plan docs deleted +- [ ] `pnpm install && pnpm typecheck && pnpm lint && pnpm test && pnpm test:e2e` all green +- [ ] Branch `refactor/vertical-features` ready to merge + +**After this plan:** the branch is ready for PR + merge. Apps render features in browsers. Tests cover unit/feature/integration/e2e levels. Architecture is enforced by ESLint, package exports, and the workspace dependency graph. Documentation matches reality. From a7d37d8a0f0115c5ea80182d06c6463094f0dfa6 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 09:10:45 +0200 Subject: [PATCH 107/129] feat(core-ui): migrate atoms/molecules/templates from packages/ui --- .../src/atoms/button/button.stories.tsx | 38 +++++++++++++++++ packages/core-ui/src/atoms/button/button.tsx | 41 +++++++++++++++++++ packages/core-ui/src/atoms/button/index.ts | 1 + packages/core-ui/src/atoms/index.ts | 3 ++ packages/core-ui/src/atoms/input/index.ts | 1 + .../core-ui/src/atoms/input/input.stories.tsx | 19 +++++++++ packages/core-ui/src/atoms/input/input.tsx | 21 ++++++++++ packages/core-ui/src/atoms/label/index.ts | 1 + packages/core-ui/src/atoms/label/label.tsx | 20 +++++++++ packages/core-ui/src/index.ts | 6 ++- packages/core-ui/src/lib/utils.ts | 6 +++ .../form-field/form-field.stories.tsx | 31 ++++++++++++++ .../src/molecules/form-field/form-field.tsx | 31 ++++++++++++++ .../core-ui/src/molecules/form-field/index.ts | 1 + packages/core-ui/src/molecules/index.ts | 1 + packages/core-ui/src/organisms/index.ts | 1 + packages/core-ui/src/styles/globals.css | 26 ++++++++++++ packages/core-ui/src/templates/index.ts | 1 + packages/core-ui/tsconfig.json | 2 +- 19 files changed, 249 insertions(+), 2 deletions(-) create mode 100644 packages/core-ui/src/atoms/button/button.stories.tsx create mode 100644 packages/core-ui/src/atoms/button/button.tsx create mode 100644 packages/core-ui/src/atoms/button/index.ts create mode 100644 packages/core-ui/src/atoms/index.ts create mode 100644 packages/core-ui/src/atoms/input/index.ts create mode 100644 packages/core-ui/src/atoms/input/input.stories.tsx create mode 100644 packages/core-ui/src/atoms/input/input.tsx create mode 100644 packages/core-ui/src/atoms/label/index.ts create mode 100644 packages/core-ui/src/atoms/label/label.tsx create mode 100644 packages/core-ui/src/lib/utils.ts create mode 100644 packages/core-ui/src/molecules/form-field/form-field.stories.tsx create mode 100644 packages/core-ui/src/molecules/form-field/form-field.tsx create mode 100644 packages/core-ui/src/molecules/form-field/index.ts create mode 100644 packages/core-ui/src/molecules/index.ts create mode 100644 packages/core-ui/src/organisms/index.ts create mode 100644 packages/core-ui/src/styles/globals.css create mode 100644 packages/core-ui/src/templates/index.ts diff --git a/packages/core-ui/src/atoms/button/button.stories.tsx b/packages/core-ui/src/atoms/button/button.stories.tsx new file mode 100644 index 0000000..094736a --- /dev/null +++ b/packages/core-ui/src/atoms/button/button.stories.tsx @@ -0,0 +1,38 @@ +import type { Meta, StoryObj } from "@storybook/react"; +import { Button } from "./button"; + +const meta = { + title: "Atoms/Button", + component: Button, + tags: ["autodocs"], + argTypes: { + variant: { + control: "select", + options: ["default", "secondary", "destructive", "outline", "ghost"], + }, + size: { control: "select", options: ["sm", "default", "lg"] }, + }, +} satisfies Meta; +export default meta; + +type Story = StoryObj; + +export const Default: Story = { + args: { children: "Button", variant: "default" }, +}; + +export const Secondary: Story = { + args: { children: "Secondary", variant: "secondary" }, +}; + +export const Destructive: Story = { + args: { children: "Destructive", variant: "destructive" }, +}; + +export const Outline: Story = { + args: { children: "Outline", variant: "outline" }, +}; + +export const Ghost: Story = { + args: { children: "Ghost", variant: "ghost" }, +}; diff --git a/packages/core-ui/src/atoms/button/button.tsx b/packages/core-ui/src/atoms/button/button.tsx new file mode 100644 index 0000000..38564ed --- /dev/null +++ b/packages/core-ui/src/atoms/button/button.tsx @@ -0,0 +1,41 @@ +import { forwardRef, type ButtonHTMLAttributes } from "react"; +import { cn } from "../../lib/utils"; + +export interface ButtonProps extends ButtonHTMLAttributes { + variant?: "default" | "secondary" | "destructive" | "outline" | "ghost"; + size?: "sm" | "default" | "lg"; +} + +const variantStyles: Record, string> = { + default: "bg-primary text-primary-foreground hover:bg-primary/90", + secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80", + destructive: + "bg-destructive text-destructive-foreground hover:bg-destructive/90", + outline: + "border border-input bg-background hover:bg-accent hover:text-accent-foreground", + ghost: "hover:bg-accent hover:text-accent-foreground", +}; + +const sizeStyles: Record, string> = { + sm: "h-9 px-3 text-sm", + default: "h-10 px-4 py-2", + lg: "h-11 px-8 text-lg", +}; + +export const Button = forwardRef( + ({ className, variant = "default", size = "default", ...props }, ref) => { + return ( + - - ); -} -``` - -## The `useTRPC()` Pattern - -`useTRPC()` is created by `createTRPCContext()` from `@trpc/tanstack-react-query`. It returns a proxy object that mirrors the router structure: - -``` -useTRPC() - .auth - .signIn.mutationOptions() - .signUp.mutationOptions() - .signOut.mutationOptions() - .content - .listArticles.queryOptions({ ... }) - .createArticle.mutationOptions() -``` - -You pass `.queryOptions()` to `useQuery()` and `.mutationOptions()` to `useMutation()` from `@tanstack/react-query`. This gives you full control over caching, refetching, optimistic updates, and all React Query features. - -## Custom Hook Wrappers Are Optional - -Since `useTRPC()` gives fully typed access to every procedure, you do **not** need to create wrapper hooks like `useArticles()`. Only create a custom hook if you have shared logic (e.g., combining multiple queries, adding retry logic, or transforming results) that would otherwise be duplicated across multiple components. - -## QueryClient Configuration - -The `getQueryClient()` factory in `query-client.ts` handles SSR correctly: -- **Server-side:** Creates a new `QueryClient` per request (avoids cross-request data leaks) -- **Client-side:** Returns a singleton `QueryClient` (reused across renders) -- Default `staleTime` is 30 seconds - -## Dependencies - -| Dependency | Purpose | -|---|---| -| `@repo/api` | `AppRouter` type for end-to-end type safety (type-only import) | -| `@trpc/client` | tRPC client with `httpBatchLink` | -| `@trpc/tanstack-react-query` | `createTRPCContext` for React Query integration | -| `@tanstack/react-query` | `QueryClient`, `QueryClientProvider` | -| `react` | JSX runtime for provider component | - -## Cross-References - -- **Router types come from:** `packages/api/` -- see `packages/api/AGENTS.md` -- **tRPC HTTP endpoint:** `apps/web-next/src/app/api/trpc/[trpc]/route.ts` -- **Provider usage in Next.js:** `apps/web-next/src/app/providers.tsx` -- **Provider usage in TanStack:** `apps/web-tanstack/src/routes/__root.tsx` diff --git a/packages/api-client/package.json b/packages/api-client/package.json deleted file mode 100644 index 698668e..0000000 --- a/packages/api-client/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "@repo/api-client", - "private": true, - "version": "0.0.0", - "type": "module", - "main": "./src/index.ts", - "types": "./src/index.ts", - "scripts": { - "build": "echo 'typechecked by consuming app bundler'", - "lint": "eslint .", - "typecheck": "tsc --noEmit" - }, - "dependencies": { - "@repo/api": "workspace:*", - "@trpc/client": "^11.1.0", - "@trpc/tanstack-react-query": "^11.1.0", - "@tanstack/react-query": "^5.75.0", - "react": "^19.0.0" - }, - "devDependencies": { - "@repo/eslint-config": "workspace:*", - "@repo/typescript-config": "workspace:*", - "@types/react": "^19.0.0" - } -} diff --git a/packages/api-client/src/index.ts b/packages/api-client/src/index.ts deleted file mode 100644 index 92fc846..0000000 --- a/packages/api-client/src/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { ApiProvider } from "./provider"; -export { useTRPC } from "./trpc"; -export { getQueryClient } from "./query-client"; diff --git a/packages/api-client/src/provider.tsx b/packages/api-client/src/provider.tsx deleted file mode 100644 index 6de7a80..0000000 --- a/packages/api-client/src/provider.tsx +++ /dev/null @@ -1,26 +0,0 @@ -"use client"; - -import { QueryClientProvider } from "@tanstack/react-query"; -import { createTRPCClient, httpBatchLink } from "@trpc/client"; -import type { AppRouter } from "@repo/api"; -import { TRPCProvider } from "./trpc"; -import { getQueryClient } from "./query-client"; - -export function ApiProvider({ - children, - trpcUrl, -}: { - children: React.ReactNode; - trpcUrl: string; -}) { - const queryClient = getQueryClient(); - const trpcClient = createTRPCClient({ - links: [httpBatchLink({ url: trpcUrl })], - }); - - return ( - - {children} - - ); -} diff --git a/packages/api-client/src/query-client.ts b/packages/api-client/src/query-client.ts deleted file mode 100644 index 049c7fb..0000000 --- a/packages/api-client/src/query-client.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { QueryClient } from "@tanstack/react-query"; - -let clientQueryClient: QueryClient | undefined; - -export function getQueryClient(): QueryClient { - if (typeof window === "undefined") { - return new QueryClient({ - defaultOptions: { - queries: { staleTime: 30 * 1000 }, - }, - }); - } - if (!clientQueryClient) { - clientQueryClient = new QueryClient({ - defaultOptions: { - queries: { staleTime: 30 * 1000 }, - }, - }); - } - return clientQueryClient; -} diff --git a/packages/api-client/src/trpc.ts b/packages/api-client/src/trpc.ts deleted file mode 100644 index 7f68126..0000000 --- a/packages/api-client/src/trpc.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { createTRPCContext } from "@trpc/tanstack-react-query"; -import type { AppRouter } from "@repo/api"; - -export const { TRPCProvider, useTRPC } = createTRPCContext(); diff --git a/packages/api-client/tsconfig.json b/packages/api-client/tsconfig.json deleted file mode 100644 index 58343b5..0000000 --- a/packages/api-client/tsconfig.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "@repo/typescript-config/react-library.json", - "compilerOptions": { - "baseUrl": ".", - "paths": { - "@/*": ["./src/*"] - } - }, - "include": ["src/**/*.ts", "src/**/*.tsx"], - "exclude": ["node_modules", "dist"] -} diff --git a/packages/api/AGENTS.md b/packages/api/AGENTS.md deleted file mode 100644 index 610b8cf..0000000 --- a/packages/api/AGENTS.md +++ /dev/null @@ -1,144 +0,0 @@ -# @repo/api -- tRPC v11 Router Definitions - -## Purpose - -This package defines all tRPC v11 routers for the monorepo. Each router validates input with Zod and delegates execution to controllers in `@repo/core`. Routers are the **only** entry point for client-side RPC calls. They contain zero business logic. - -## Hard Rules - -- **NEVER** put business logic in routers -- always delegate to a controller from `@repo/core` -- **NEVER** import from `@repo/core/infrastructure` or any `apps/*` package -- Input validation uses Zod schemas inline on each procedure -- Each domain gets its own `{domain}.router.ts` file -- Use `.query()` for reads (GET-like), `.mutation()` for writes (POST/PUT/DELETE-like) -- All procedures call exactly one controller function from `@repo/core` - -## File Structure - -``` -packages/api/ - src/ - trpc.ts # tRPC initialization, exports router + publicProcedure - router/ - index.ts # appRouter composition, exports AppRouter type - auth.router.ts # Auth domain: signIn, signUp, signOut - content.router.ts # Content domain: listArticles, createArticle - index.ts # Package entry: re-exports appRouter + AppRouter type - package.json - AGENTS.md -``` - -## How Procedures Map to Controllers - -| Procedure type | HTTP equivalent | When to use | Example | -|---|---|---|---| -| `.query()` | GET | Fetching/reading data | `content.listArticles` | -| `.mutation()` | POST/PATCH/DELETE | Creating, updating, deleting data | `auth.signIn`, `content.createArticle` | - -Every procedure follows the same pattern: - -```typescript -myProcedure: publicProcedure - .input(z.object({ /* Zod schema */ })) - .query(async ({ input }) => { // or .mutation() - return await myController(input); // delegate to @repo/core controller - }), -``` - -## Existing Routers - -### auth.router.ts - -| Procedure | Type | Input | Controller | -|---|---|---|---| -| `signIn` | mutation | `{ username: string, password: string }` | `signInController` | -| `signUp` | mutation | `{ username: string, password: string, confirmPassword: string }` | `signUpController` | -| `signOut` | mutation | `{ sessionId: string }` | `signOutController` | - -### content.router.ts - -| Procedure | Type | Input | Controller | -|---|---|---|---| -| `listArticles` | query | `{ status?, authorId?, limit?, offset? }` (optional) | `getArticlesController` | -| `createArticle` | mutation | `{ title: string, content: string, authorId: string, slug?: string }` | `createArticleController` | - -## Recipe: Adding a New tRPC Router - -This example adds a `comments` domain router with `listComments` (query) and `createComment` (mutation). - -### Step 1: Create the router file - -Create `src/router/comments.router.ts`: - -```typescript -import { z } from "zod"; -import { router, publicProcedure } from "../trpc"; -import { - getCommentsController, - createCommentController, -} from "@repo/core"; - -export const commentsRouter = router({ - listComments: publicProcedure - .input( - z - .object({ - articleId: z.string(), - limit: z.number().optional(), - offset: z.number().optional(), - }) - ) - .query(async ({ input }) => { - return await getCommentsController(input); - }), - - createComment: publicProcedure - .input( - z.object({ - articleId: z.string(), - authorId: z.string(), - body: z.string().min(1).max(2000), - }) - ) - .mutation(async ({ input }) => { - return await createCommentController(input); - }), -}); -``` - -### Step 2: Register in the appRouter - -Edit `src/router/index.ts`: - -```typescript -import { router } from "../trpc"; -import { authRouter } from "./auth.router"; -import { contentRouter } from "./content.router"; -import { commentsRouter } from "./comments.router"; // <-- add import - -export const appRouter = router({ - auth: authRouter, - content: contentRouter, - comments: commentsRouter, // <-- register here -}); - -export type AppRouter = typeof appRouter; -``` - -### Step 3: Verify - -The `AppRouter` type is automatically inferred. Any app using `@repo/api-client` will immediately see `trpc.comments.listComments.useQuery(...)` and `trpc.comments.createComment.useMutation(...)` with full type safety -- no code generation step needed. - -## Dependencies - -| Dependency | Purpose | -|---|---| -| `@repo/core` | Controllers that contain business logic | -| `@trpc/server` | tRPC v11 server-side primitives | -| `zod` | Runtime input validation schemas | - -## Cross-References - -- **Controllers live in:** `packages/core/src/interface-adapters/controllers/` -- see `packages/core/AGENTS.md` -- **Client consumption:** `packages/api-client/` -- see `packages/api-client/AGENTS.md` -- **HTTP endpoint:** `apps/web-next/src/app/api/trpc/[trpc]/route.ts` uses the fetch adapter to serve `appRouter` diff --git a/packages/api/package.json b/packages/api/package.json deleted file mode 100644 index f080486..0000000 --- a/packages/api/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "@repo/api", - "private": true, - "version": "0.0.0", - "type": "module", - "main": "./src/index.ts", - "types": "./src/index.ts", - "scripts": { - "build": "echo 'typechecked by consuming app bundler'", - "lint": "eslint .", - "typecheck": "tsc --noEmit" - }, - "dependencies": { - "@repo/core": "workspace:*", - "@trpc/server": "^11.1.0", - "zod": "^3.24.0" - }, - "devDependencies": { - "@repo/eslint-config": "workspace:*", - "@repo/typescript-config": "workspace:*", - "@types/node": "^22.0.0" - } -} diff --git a/packages/api/src/index.ts b/packages/api/src/index.ts deleted file mode 100644 index 3488ab4..0000000 --- a/packages/api/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { appRouter, type AppRouter } from "./router/index"; diff --git a/packages/api/src/router/auth.router.ts b/packages/api/src/router/auth.router.ts deleted file mode 100644 index 86835eb..0000000 --- a/packages/api/src/router/auth.router.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { z } from "zod"; -import { router, publicProcedure } from "../trpc"; -import { - signInController, - signUpController, - signOutController, -} from "@repo/core"; - -export const authRouter = router({ - signIn: publicProcedure - .input( - z.object({ - username: z.string().min(3).max(31), - password: z.string().min(6).max(255), - }) - ) - .mutation(async ({ input }) => { - return await signInController(input); - }), - - signUp: publicProcedure - .input( - z.object({ - username: z.string().min(3).max(31), - password: z.string().min(6).max(255), - confirmPassword: z.string().min(6).max(255), - }) - ) - .mutation(async ({ input }) => { - return await signUpController(input); - }), - - signOut: publicProcedure - .input(z.object({ sessionId: z.string() })) - .mutation(async ({ input }) => { - return await signOutController(input.sessionId); - }), -}); diff --git a/packages/api/src/router/content.router.ts b/packages/api/src/router/content.router.ts deleted file mode 100644 index 57c55be..0000000 --- a/packages/api/src/router/content.router.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { z } from "zod"; -import { router, publicProcedure } from "../trpc"; -import { createArticleController, getArticlesController } from "@repo/core"; - -export const contentRouter = router({ - listArticles: publicProcedure - .input( - z - .object({ - status: z.string().optional(), - authorId: z.string().optional(), - limit: z.number().optional(), - offset: z.number().optional(), - }) - .optional() - ) - .query(async ({ input }) => { - return await getArticlesController(input ?? {}); - }), - - createArticle: publicProcedure - .input( - z.object({ - title: z.string().min(1).max(255), - content: z.string(), - authorId: z.string(), - slug: z.string().optional(), - }) - ) - .mutation(async ({ input }) => { - return await createArticleController(input); - }), -}); diff --git a/packages/api/src/router/index.ts b/packages/api/src/router/index.ts deleted file mode 100644 index 847ffa6..0000000 --- a/packages/api/src/router/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { router } from "../trpc"; -import { authRouter } from "./auth.router"; -import { contentRouter } from "./content.router"; - -export const appRouter = router({ - auth: authRouter, - content: contentRouter, -}); - -export type AppRouter = typeof appRouter; diff --git a/packages/api/src/trpc.ts b/packages/api/src/trpc.ts deleted file mode 100644 index be3ed16..0000000 --- a/packages/api/src/trpc.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { initTRPC } from "@trpc/server"; - -const t = initTRPC.create(); - -export const router = t.router; -export const publicProcedure = t.procedure; diff --git a/packages/api/tsconfig.json b/packages/api/tsconfig.json deleted file mode 100644 index 36de03f..0000000 --- a/packages/api/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "@repo/typescript-config/base.json", - "compilerOptions": { - "lib": ["ES2022", "DOM", "DOM.Iterable"], - "baseUrl": ".", - "paths": { - "@/*": ["./src/*"] - } - }, - "include": ["src/**/*.ts"], - "exclude": ["node_modules", "dist"] -} diff --git a/packages/cms-client/AGENTS.md b/packages/cms-client/AGENTS.md deleted file mode 100644 index 4b3cf18..0000000 --- a/packages/cms-client/AGENTS.md +++ /dev/null @@ -1,217 +0,0 @@ -# @repo/cms-client -- Dual-Mode Payload Client - -## Purpose - -Provides a typed, uniform interface for accessing Payload CMS data via either the Local API (direct in-process calls) or the HTTP REST API (network requests). The consuming app chooses the mode at startup and injects the Payload instance -- this package never imports it. - -## **NEVER import from `@repo/cms-core`, `@repo/core`, or any `apps/*` package.** - -This package is completely standalone. The Payload instance is INJECTED at app startup, never imported by this package. - -## File Structure - -``` -packages/cms-client/ - src/ - types.ts # FindOptions, PayloadClientResult, PayloadClient interface - client.ts # createPayloadClient() factory -- returns Local or HTTP client - local-client.ts # LocalPayloadClient class -- wraps Payload Local API - http-client.ts # HTTPPayloadClient class -- wraps Payload REST API via fetch - index.ts # Package entry: re-exports factory, classes, and types - package.json - AGENTS.md -``` - -## Dual-Mode Initialization - -### Local Mode (primary -- used for server-side code with direct DB access) - -Local mode wraps the Payload Local API. It requires a live `Payload` instance, which is obtained via `getPayload()` in the consuming app: - -```typescript -// Example: apps/web-next/src/lib/payload.ts -import { getPayload } from "payload"; -import config from "@repo/cms-core/src/payload.config"; -import { createPayloadClient } from "@repo/cms-client"; - -const payload = await getPayload({ config }); -const client = createPayloadClient({ mode: "local", payload }); - -// Now use client.find(), client.create(), etc. -const articles = await client.find("articles", { - where: { status: { equals: "published" } }, - sort: "-publishedAt", - limit: 10, -}); -``` - -### HTTP Mode (fallback -- used for external services without direct DB access) - -HTTP mode makes REST calls to the Payload API. It only needs the base URL: - -```typescript -import { createPayloadClient } from "@repo/cms-client"; - -const client = createPayloadClient({ - mode: "http", - baseURL: "http://localhost:3001", -}); - -// Same API surface as local mode -const articles = await client.find("articles", { - where: { status: { equals: "published" } }, - limit: 10, -}); -``` - -## Initialization Table - -| App / Context | Mode | How initialized | Why this mode | -|---|---|---|---| -| `apps/cms` (server-side) | Local | `getPayload({ config })` from `@repo/cms-core` | Same process as Payload, direct DB access | -| `apps/web-next` (server components/actions) | Local | `getPayload({ config })` from `@repo/cms-core` | Server-side rendering needs fast DB access | -| `apps/web-tanstack` (server loaders) | Local | `getPayload({ config })` from `@repo/cms-core` | Server-side data loading needs fast DB access | -| Client-side (browser) | N/A | Does not use this package directly | Browser goes through tRPC, server handles CMS access | -| External services / microservices | HTTP | `createPayloadClient({ mode: "http", baseURL })` | No access to Payload instance, only REST API | - -## PayloadClient API Reference - -All methods are available on both Local and HTTP clients via the `PayloadClient` interface. - -### `find(collection, options?): Promise>` - -Paginated query for documents in a collection. - -```typescript -const result = await client.find
("articles", { - where: { status: { equals: "published" } }, - sort: "-publishedAt", - limit: 10, - page: 1, - depth: 2, - locale: "en", -}); -// result.docs, result.totalDocs, result.totalPages, etc. -``` - -### `findByID(collection, id, options?): Promise` - -Fetch a single document by ID. - -```typescript -const article = await client.findByID
("articles", "abc123", { - depth: 2, -}); -``` - -### `create(collection, data, options?): Promise` - -Create a new document. - -```typescript -const newArticle = await client.create
("articles", { - title: "My Article", - content: "...", - author: "user-id-123", - status: "draft", -}, { depth: 1 }); -``` - -### `update(collection, id, data, options?): Promise` - -Update an existing document (partial update). - -```typescript -const updated = await client.update
("articles", "abc123", { - status: "published", - publishedAt: new Date().toISOString(), -}); -``` - -### `delete(collection, id): Promise` - -Delete a document by ID. - -```typescript -const deleted = await client.delete
("articles", "abc123"); -``` - -## FindOptions Interface - -```typescript -interface FindOptions { - where?: Record; // Payload query operators ({ field: { equals: value } }) - sort?: string; // Field name, prefix with "-" for descending - limit?: number; // Max documents per page (default: 10) - page?: number; // Page number (1-based) - depth?: number; // Relationship population depth (default: 1) - locale?: string; // Locale for localized fields -} -``` - -## PayloadClientResult Interface - -```typescript -interface PayloadClientResult { - docs: T[]; // Array of documents for current page - totalDocs: number; // Total matching documents across all pages - limit: number; // Max docs per page (as requested) - totalPages: number; // Total number of pages - page: number; // Current page number (1-based) - pagingCounter: number; // Index of first doc on current page - hasPrevPage: boolean; // Whether a previous page exists - hasNextPage: boolean; // Whether a next page exists - prevPage: number | null; // Previous page number, or null - nextPage: number | null; // Next page number, or null -} -``` - -## App Startup Pattern - -The Payload instance is always created in the consuming app, then injected into the client: - -```typescript -// apps/web-next/src/lib/payload.ts -import { getPayload } from "payload"; -import config from "@repo/cms-core/src/payload.config"; -import { createPayloadClient, type PayloadClient } from "@repo/cms-client"; - -let cachedClient: PayloadClient | null = null; - -export async function getPayloadClient(): Promise { - if (cachedClient) return cachedClient; - - const payload = await getPayload({ config }); - cachedClient = createPayloadClient({ mode: "local", payload }); - return cachedClient; -} -``` - -This pattern ensures: -1. The Payload instance is created once and reused -2. The cms-client package never imports config or Payload itself -3. Each app controls its own initialization - -## Type Generation - -Payload generates TypeScript types from your collection/global definitions: - -```bash -cd apps/cms && pnpm generate:types -# Runs: payload generate:types -# Outputs to: packages/cms-core/src/payload-types.ts (configured in payload.config.ts) -``` - -After adding or modifying collections/globals in `@repo/cms-core`, re-run type generation to keep types in sync. - -## Dependencies - -| Dependency | Purpose | -|---|---| -| `payload` | `Payload` type for the Local API client constructor (type-only at build time) | - -## Cross-References - -- **CMS configuration:** `packages/cms-core/` -- see `packages/cms-core/AGENTS.md` -- **CMS app (where getPayload is called):** `apps/cms/` -- see `apps/cms/AGENTS.md` -- **Core use cases (consumers of this client):** `packages/core/` -- see `packages/core/AGENTS.md` diff --git a/packages/cms-client/package.json b/packages/cms-client/package.json deleted file mode 100644 index 46ca433..0000000 --- a/packages/cms-client/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "@repo/cms-client", - "private": true, - "version": "0.0.0", - "type": "module", - "main": "./src/index.ts", - "types": "./src/index.ts", - "scripts": { - "build": "tsc --noEmit", - "lint": "eslint .", - "typecheck": "tsc --noEmit" - }, - "dependencies": { - "payload": "^3.14.0" - }, - "devDependencies": { - "@repo/eslint-config": "workspace:*", - "@repo/typescript-config": "workspace:*", - "@types/node": "^22.0.0" - } -} diff --git a/packages/cms-client/src/client.ts b/packages/cms-client/src/client.ts deleted file mode 100644 index bb5b5a5..0000000 --- a/packages/cms-client/src/client.ts +++ /dev/null @@ -1,17 +0,0 @@ -import type { Payload } from "payload"; -import type { PayloadClient } from "./types"; -import { LocalPayloadClient } from "./local-client"; -import { HTTPPayloadClient } from "./http-client"; - -type PayloadClientOptions = - | { mode: "local"; payload: Payload } - | { mode: "http"; baseURL: string }; - -export function createPayloadClient( - options: PayloadClientOptions -): PayloadClient { - if (options.mode === "local") { - return new LocalPayloadClient(options.payload); - } - return new HTTPPayloadClient(options.baseURL); -} diff --git a/packages/cms-client/src/http-client.ts b/packages/cms-client/src/http-client.ts deleted file mode 100644 index 3d372ce..0000000 --- a/packages/cms-client/src/http-client.ts +++ /dev/null @@ -1,87 +0,0 @@ -import type { - FindOptions, - PayloadClient, - PayloadClientResult, -} from "./types"; - -export class HTTPPayloadClient implements PayloadClient { - constructor(private baseURL: string) {} - - private async request(path: string, options?: RequestInit): Promise { - const response = await fetch(`${this.baseURL}${path}`, { - headers: { "Content-Type": "application/json" }, - ...options, - }); - if (!response.ok) { - throw new Error( - `Payload API error: ${response.status} ${response.statusText}` - ); - } - return response.json() as Promise; - } - - async find>( - collection: string, - options?: FindOptions - ): Promise> { - const params = new URLSearchParams(); - if (options?.limit) params.set("limit", String(options.limit)); - if (options?.page) params.set("page", String(options.page)); - if (options?.sort) params.set("sort", options.sort); - if (options?.depth) params.set("depth", String(options.depth)); - if (options?.where) params.set("where", JSON.stringify(options.where)); - const query = params.toString(); - return this.request>( - `/api/${collection}${query ? `?${query}` : ""}` - ); - } - - async findByID>( - collection: string, - id: string, - options?: { depth?: number } - ): Promise { - const params = new URLSearchParams(); - if (options?.depth) params.set("depth", String(options.depth)); - const query = params.toString(); - return this.request( - `/api/${collection}/${id}${query ? `?${query}` : ""}` - ); - } - - async create>( - collection: string, - data: Record, - options?: { depth?: number } - ): Promise { - const params = new URLSearchParams(); - if (options?.depth) params.set("depth", String(options.depth)); - const query = params.toString(); - return this.request( - `/api/${collection}${query ? `?${query}` : ""}`, - { method: "POST", body: JSON.stringify(data) } - ); - } - - async update>( - collection: string, - id: string, - data: Record, - options?: { depth?: number } - ): Promise { - const params = new URLSearchParams(); - if (options?.depth) params.set("depth", String(options.depth)); - const query = params.toString(); - return this.request( - `/api/${collection}/${id}${query ? `?${query}` : ""}`, - { method: "PATCH", body: JSON.stringify(data) } - ); - } - - async delete>( - collection: string, - id: string - ): Promise { - return this.request(`/api/${collection}/${id}`, { method: "DELETE" }); - } -} diff --git a/packages/cms-client/src/index.ts b/packages/cms-client/src/index.ts deleted file mode 100644 index 78fbe5f..0000000 --- a/packages/cms-client/src/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -export { createPayloadClient } from "./client"; -export { LocalPayloadClient } from "./local-client"; -export { HTTPPayloadClient } from "./http-client"; -export type { - PayloadClient, - PayloadClientResult, - FindOptions, -} from "./types"; diff --git a/packages/cms-client/src/local-client.ts b/packages/cms-client/src/local-client.ts deleted file mode 100644 index 3b8dcf8..0000000 --- a/packages/cms-client/src/local-client.ts +++ /dev/null @@ -1,78 +0,0 @@ -import type { Payload } from "payload"; -import type { - FindOptions, - PayloadClient, - PayloadClientResult, -} from "./types"; - -export class LocalPayloadClient implements PayloadClient { - constructor(private payload: Payload) {} - - async find>( - collection: string, - options?: FindOptions - ): Promise> { - const result = await this.payload.find({ - collection: collection as any, - where: options?.where as any, - sort: options?.sort, - limit: options?.limit, - page: options?.page, - depth: options?.depth, - locale: options?.locale as any, - }); - return result as unknown as PayloadClientResult; - } - - async findByID>( - collection: string, - id: string, - options?: { depth?: number } - ): Promise { - const result = await this.payload.findByID({ - collection: collection as any, - id, - depth: options?.depth, - }); - return result as unknown as T; - } - - async create>( - collection: string, - data: Record, - options?: { depth?: number } - ): Promise { - const result = await this.payload.create({ - collection: collection as any, - data: data as any, - depth: options?.depth, - }); - return result as unknown as T; - } - - async update>( - collection: string, - id: string, - data: Record, - options?: { depth?: number } - ): Promise { - const result = await this.payload.update({ - collection: collection as any, - id, - data: data as any, - depth: options?.depth, - }); - return result as unknown as T; - } - - async delete>( - collection: string, - id: string - ): Promise { - const result = await this.payload.delete({ - collection: collection as any, - id, - }); - return result as unknown as T; - } -} diff --git a/packages/cms-client/src/types.ts b/packages/cms-client/src/types.ts deleted file mode 100644 index b82b065..0000000 --- a/packages/cms-client/src/types.ts +++ /dev/null @@ -1,52 +0,0 @@ -export interface FindOptions { - where?: Record; - sort?: string; - limit?: number; - page?: number; - depth?: number; - locale?: string; -} - -export interface PayloadClientResult { - docs: T[]; - totalDocs: number; - limit: number; - totalPages: number; - page: number; - pagingCounter: number; - hasPrevPage: boolean; - hasNextPage: boolean; - prevPage: number | null; - nextPage: number | null; -} - -export interface PayloadClient { - find>( - collection: string, - options?: FindOptions - ): Promise>; - - findByID>( - collection: string, - id: string, - options?: { depth?: number } - ): Promise; - - create>( - collection: string, - data: Record, - options?: { depth?: number } - ): Promise; - - update>( - collection: string, - id: string, - data: Record, - options?: { depth?: number } - ): Promise; - - delete>( - collection: string, - id: string - ): Promise; -} diff --git a/packages/cms-client/tsconfig.json b/packages/cms-client/tsconfig.json deleted file mode 100644 index 36de03f..0000000 --- a/packages/cms-client/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "@repo/typescript-config/base.json", - "compilerOptions": { - "lib": ["ES2022", "DOM", "DOM.Iterable"], - "baseUrl": ".", - "paths": { - "@/*": ["./src/*"] - } - }, - "include": ["src/**/*.ts"], - "exclude": ["node_modules", "dist"] -} diff --git a/packages/cms-core/AGENTS.md b/packages/cms-core/AGENTS.md deleted file mode 100644 index d2a3bcf..0000000 --- a/packages/cms-core/AGENTS.md +++ /dev/null @@ -1,323 +0,0 @@ -# @repo/cms-core -- ALL Payload CMS Configuration - -## Purpose - -This package contains **all** Payload CMS configuration: `payload.config.ts`, collections, globals, hooks, and access control. The `apps/cms` application is a thin shell that imports from this package -- it contains no CMS logic of its own. - -## Hard Rules - -- **ALL** collections, globals, hooks, and access patterns live here, **never** in `apps/cms` -- Can import from `@repo/core/application` (for use case delegation in hooks) -- **NEVER** import from `@repo/core/infrastructure` -- **NEVER** import from any `apps/*` package -- Keep hooks thin (5-10 lines max) -- delegate to use cases for business logic - -## File Structure - -``` -packages/cms-core/ - src/ - payload.config.ts # Main Payload config (db, editor, collections, globals) - collections/ - users/ - index.ts # Users CollectionConfig (auth: true) - articles/ - index.ts # Articles CollectionConfig (versions, hooks) - fields.ts # Article field definitions - hooks/ - before-change.ts # Auto-generate slug from title - media/ - index.ts # Media CollectionConfig (upload) - globals/ - site-settings.ts # SiteSettings GlobalConfig - index.ts # Package entry: exports all configs - package.json - AGENTS.md -``` - -## Existing Collections - -### Users (auth collection) - -- **Slug:** `users` -- **Auth:** `true` (provides login, password hashing, session management) -- **Fields:** `displayName` (text), `role` (select: admin/editor/author, default: author) -- **Admin title:** email - -### Articles (content with versioning) - -- **Slug:** `articles` -- **Versions:** `{ drafts: true }` -- enables draft/published workflow -- **Hooks:** `beforeChange: [autoGenerateSlug]` -- generates slug from title if slug is empty -- **Fields:** title (text, required), slug (text, unique, sidebar), content (richText), status (select: draft/published, default: draft), author (relationship to users, required), featuredImage (upload to media), publishedAt (date) -- **Admin title:** title, default columns: title, status, author, updatedAt - -### Media (file uploads) - -- **Slug:** `media` -- **Upload:** Accepts `image/*` and `application/pdf` -- **Fields:** `alt` (text, required) -- **Admin title:** filename - -## Existing Globals - -### SiteSettings - -- **Slug:** `site-settings` -- **Admin group:** Settings -- **Fields:** `siteName` (text, required, default: "My App"), `siteDescription` (textarea) - -## Hook Rules - -| Category | Where it lives | Description | Examples | -|---|---|---|---| -| CMS-operational | Stays in the hook file | Logic tied to CMS data shaping, not business rules | Slug generation, image resizing, setting default values, formatting fields | -| Business logic | Delegated to `@repo/core` use case | Logic that enforces a business rule or triggers side effects | Sending notifications, validating against external data, cross-domain updates | - -### DO - -- Keep hooks to 5-10 lines max -- Import use cases from `@repo/core/application` (application layer only) -- Map Payload hook arguments (`data`, `operation`, `req`) to use case input types -- Return `data` from `beforeChange` / `beforeValidate` hooks - -### DON'T - -- Import from `@repo/core/infrastructure` -- violates Clean Architecture -- Put business validation logic directly in hooks -- Call external services (email, analytics, APIs) directly from hooks -- Duplicate logic that already exists in a use case -- Access `req.payload` for cross-collection operations (delegate to use case instead) - -**Rule of thumb:** If deleting the hook would break a business requirement, the logic must live in a use case in `@repo/core`. - -## Recipe: Adding a New Collection - -This example adds a `Tags` collection. - -### Step 1: Create the collection folder and fields - -Create `src/collections/tags/fields.ts`: - -```typescript -import type { Field } from "payload"; - -export const tagFields: Field[] = [ - { - name: "name", - type: "text", - required: true, - unique: true, - maxLength: 100, - }, - { - name: "slug", - type: "text", - unique: true, - admin: { - position: "sidebar", - description: "Auto-generated from name if left empty", - }, - }, - { - name: "description", - type: "textarea", - }, -]; -``` - -### Step 2: Create the CollectionConfig - -Create `src/collections/tags/index.ts`: - -```typescript -import type { CollectionConfig } from "payload"; -import { tagFields } from "./fields"; -import { autoGenerateSlug } from "./hooks/before-change"; - -export const Tags: CollectionConfig = { - slug: "tags", - admin: { - useAsTitle: "name", - defaultColumns: ["name", "slug", "updatedAt"], - }, - hooks: { - beforeChange: [autoGenerateSlug], - }, - fields: tagFields, -}; -``` - -### Step 3: Add a CMS-operational hook (slug generation) - -Create `src/collections/tags/hooks/before-change.ts`: - -```typescript -import type { CollectionBeforeChangeHook } from "payload"; - -function generateSlug(text: string): string { - return text - .toLowerCase() - .replace(/[^a-z0-9]+/g, "-") - .replace(/^-|-$/g, ""); -} - -export const autoGenerateSlug: CollectionBeforeChangeHook = ({ - data, - operation, -}) => { - if (operation === "create" || operation === "update") { - if (data && data.name && !data.slug) { - data.slug = generateSlug(data.name); - } - } - return data; -}; -``` - -### Step 4: (Optional) Add a business-logic hook delegating to a use case - -Create `src/collections/tags/hooks/after-change.ts`: - -```typescript -import type { CollectionAfterChangeHook } from "payload"; -import { syncTagToSearchIndex } from "@repo/core/application"; - -export const syncTagAfterChange: CollectionAfterChangeHook = async ({ - doc, - operation, -}) => { - // Delegate to use case -- this hook is just a thin bridge - await syncTagToSearchIndex({ - id: doc.id, - name: doc.name, - slug: doc.slug, - operation, - }); - return doc; -}; -``` - -### Step 5: (Optional) Add access control - -Create `src/collections/tags/access/is-admin.ts`: - -```typescript -import type { Access } from "payload"; - -export const isAdmin: Access = ({ req: { user } }) => { - return user?.role === "admin"; -}; -``` - -Then reference it in the CollectionConfig: - -```typescript -export const Tags: CollectionConfig = { - slug: "tags", - access: { - create: isAdmin, - update: isAdmin, - delete: isAdmin, - // read is open by default - }, - // ...rest -}; -``` - -### Step 6: Register in payload.config.ts - -Edit `src/payload.config.ts`: - -```typescript -import { Tags } from "./collections/tags"; - -export default buildConfig({ - collections: [Users, Articles, Media, Tags], // <-- add Tags - // ...rest -}); -``` - -### Step 7: Export from package entry - -Edit `src/index.ts`: - -```typescript -export { Tags } from "./collections/tags"; // <-- add export -``` - -## Recipe: Adding a New Global - -This example adds a `Navigation` global. - -### Step 1: Create the GlobalConfig - -Create `src/globals/navigation.ts`: - -```typescript -import type { GlobalConfig } from "payload"; - -export const Navigation: GlobalConfig = { - slug: "navigation", - admin: { - group: "Settings", - }, - fields: [ - { - name: "mainMenu", - type: "array", - fields: [ - { - name: "label", - type: "text", - required: true, - }, - { - name: "url", - type: "text", - required: true, - }, - ], - }, - ], -}; -``` - -### Step 2: Register in payload.config.ts - -```typescript -import { Navigation } from "./globals/navigation"; - -export default buildConfig({ - globals: [SiteSettings, Navigation], // <-- add Navigation - // ...rest -}); -``` - -### Step 3: Export from package entry - -```typescript -export { Navigation } from "./globals/navigation"; // <-- add export -``` - -## Payload Config Overview - -The `payload.config.ts` uses: -- **Database:** `@payloadcms/db-postgres` (PostgreSQL via `DATABASE_URL` env var) -- **Editor:** `@payloadcms/richtext-lexical` (Lexical rich text editor) -- **Secret:** `PAYLOAD_SECRET` env var (required for production) -- **TypeScript output:** Generates `payload-types.ts` in this package's `src/` directory - -## Dependencies - -| Dependency | Purpose | -|---|---| -| `payload` | Payload CMS core | -| `@payloadcms/db-postgres` | PostgreSQL database adapter | -| `@payloadcms/richtext-lexical` | Lexical rich text editor | - -## Cross-References - -- **CMS app shell:** `apps/cms/` -- see `apps/cms/AGENTS.md` -- **Use cases for hooks:** `packages/core/src/application/use-cases/` -- see `packages/core/AGENTS.md` -- **CMS client for querying:** `packages/cms-client/` -- see `packages/cms-client/AGENTS.md` diff --git a/packages/cms-core/package.json b/packages/cms-core/package.json deleted file mode 100644 index e793430..0000000 --- a/packages/cms-core/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "@repo/cms-core", - "private": true, - "version": "0.0.0", - "type": "module", - "main": "./src/index.ts", - "types": "./src/index.ts", - "scripts": { - "build": "tsc --noEmit", - "lint": "eslint .", - "typecheck": "tsc --noEmit" - }, - "dependencies": { - "payload": "^3.14.0", - "@payloadcms/db-postgres": "^3.14.0", - "@payloadcms/richtext-lexical": "^3.14.0" - }, - "devDependencies": { - "@repo/eslint-config": "workspace:*", - "@repo/typescript-config": "workspace:*", - "@types/node": "^22.0.0" - } -} diff --git a/packages/cms-core/src/collections/articles/fields.ts b/packages/cms-core/src/collections/articles/fields.ts deleted file mode 100644 index 1e84cb5..0000000 --- a/packages/cms-core/src/collections/articles/fields.ts +++ /dev/null @@ -1,60 +0,0 @@ -import type { Field } from "payload"; - -export const articleFields: Field[] = [ - { - name: "title", - type: "text", - required: true, - maxLength: 255, - }, - { - name: "slug", - type: "text", - unique: true, - admin: { - position: "sidebar", - description: "Auto-generated from title if left empty", - }, - }, - { - name: "content", - type: "richText", - }, - { - name: "status", - type: "select", - options: [ - { label: "Draft", value: "draft" }, - { label: "Published", value: "published" }, - ], - defaultValue: "draft", - required: true, - admin: { - position: "sidebar", - }, - }, - { - name: "author", - type: "relationship", - relationTo: "users", - required: true, - admin: { - position: "sidebar", - }, - }, - { - name: "featuredImage", - type: "upload", - relationTo: "media", - }, - { - name: "publishedAt", - type: "date", - admin: { - position: "sidebar", - date: { - pickerAppearance: "dayAndTime", - }, - }, - }, -]; diff --git a/packages/cms-core/src/collections/articles/hooks/before-change.ts b/packages/cms-core/src/collections/articles/hooks/before-change.ts deleted file mode 100644 index f0edb59..0000000 --- a/packages/cms-core/src/collections/articles/hooks/before-change.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { CollectionBeforeChangeHook } from "payload"; - -function generateSlug(title: string): string { - return title - .toLowerCase() - .replace(/[^a-z0-9]+/g, "-") - .replace(/^-|-$/g, ""); -} - -export const autoGenerateSlug: CollectionBeforeChangeHook = ({ - data, - operation, -}) => { - if (operation === "create" || operation === "update") { - if (data && data.title && !data.slug) { - data.slug = generateSlug(data.title); - } - } - return data; -}; diff --git a/packages/cms-core/src/collections/articles/index.ts b/packages/cms-core/src/collections/articles/index.ts deleted file mode 100644 index fd1197e..0000000 --- a/packages/cms-core/src/collections/articles/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { CollectionConfig } from "payload"; - -import { articleFields } from "./fields"; -import { autoGenerateSlug } from "./hooks/before-change"; - -export const Articles: CollectionConfig = { - slug: "articles", - admin: { - useAsTitle: "title", - defaultColumns: ["title", "status", "author", "updatedAt"], - }, - hooks: { - beforeChange: [autoGenerateSlug], - }, - versions: { - drafts: true, - }, - fields: articleFields, -}; diff --git a/packages/cms-core/src/collections/media/index.ts b/packages/cms-core/src/collections/media/index.ts deleted file mode 100644 index 174eaea..0000000 --- a/packages/cms-core/src/collections/media/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { CollectionConfig } from "payload"; - -export const Media: CollectionConfig = { - slug: "media", - upload: { - mimeTypes: ["image/*", "application/pdf"], - }, - admin: { - useAsTitle: "filename", - }, - fields: [ - { - name: "alt", - type: "text", - required: true, - }, - ], -}; diff --git a/packages/cms-core/src/collections/users/index.ts b/packages/cms-core/src/collections/users/index.ts deleted file mode 100644 index ac4a4d1..0000000 --- a/packages/cms-core/src/collections/users/index.ts +++ /dev/null @@ -1,26 +0,0 @@ -import type { CollectionConfig } from "payload"; - -export const Users: CollectionConfig = { - slug: "users", - auth: true, - admin: { - useAsTitle: "email", - }, - fields: [ - { - name: "displayName", - type: "text", - }, - { - name: "role", - type: "select", - options: [ - { label: "Admin", value: "admin" }, - { label: "Editor", value: "editor" }, - { label: "Author", value: "author" }, - ], - defaultValue: "author", - required: true, - }, - ], -}; diff --git a/packages/cms-core/src/globals/site-settings.ts b/packages/cms-core/src/globals/site-settings.ts deleted file mode 100644 index a3fd33f..0000000 --- a/packages/cms-core/src/globals/site-settings.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { GlobalConfig } from "payload"; - -export const SiteSettings: GlobalConfig = { - slug: "site-settings", - admin: { - group: "Settings", - }, - fields: [ - { - name: "siteName", - type: "text", - required: true, - defaultValue: "My App", - }, - { - name: "siteDescription", - type: "textarea", - }, - ], -}; diff --git a/packages/cms-core/src/index.ts b/packages/cms-core/src/index.ts deleted file mode 100644 index 7b2091a..0000000 --- a/packages/cms-core/src/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export { Users } from "./collections/users"; -export { Articles } from "./collections/articles"; -export { Media } from "./collections/media"; -export { SiteSettings } from "./globals/site-settings"; -export { default as config } from "./payload.config"; diff --git a/packages/cms-core/src/payload-types.ts b/packages/cms-core/src/payload-types.ts deleted file mode 100644 index 57a76ae..0000000 --- a/packages/cms-core/src/payload-types.ts +++ /dev/null @@ -1,425 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * This file was automatically generated by Payload. - * DO NOT MODIFY IT BY HAND. Instead, modify your source Payload config, - * and re-run `payload generate:types` to regenerate this file. - */ - -/** - * Supported timezones in IANA format. - * - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "supportedTimezones". - */ -export type SupportedTimezones = - | 'Pacific/Midway' - | 'Pacific/Niue' - | 'Pacific/Honolulu' - | 'Pacific/Rarotonga' - | 'America/Anchorage' - | 'Pacific/Gambier' - | 'America/Los_Angeles' - | 'America/Tijuana' - | 'America/Denver' - | 'America/Phoenix' - | 'America/Chicago' - | 'America/Guatemala' - | 'America/New_York' - | 'America/Bogota' - | 'America/Caracas' - | 'America/Santiago' - | 'America/Buenos_Aires' - | 'America/Sao_Paulo' - | 'Atlantic/South_Georgia' - | 'Atlantic/Azores' - | 'Atlantic/Cape_Verde' - | 'Europe/London' - | 'Europe/Berlin' - | 'Africa/Lagos' - | 'Europe/Athens' - | 'Africa/Cairo' - | 'Europe/Moscow' - | 'Asia/Riyadh' - | 'Asia/Dubai' - | 'Asia/Baku' - | 'Asia/Karachi' - | 'Asia/Tashkent' - | 'Asia/Calcutta' - | 'Asia/Dhaka' - | 'Asia/Almaty' - | 'Asia/Jakarta' - | 'Asia/Bangkok' - | 'Asia/Shanghai' - | 'Asia/Singapore' - | 'Asia/Tokyo' - | 'Asia/Seoul' - | 'Australia/Brisbane' - | 'Australia/Sydney' - | 'Pacific/Guam' - | 'Pacific/Noumea' - | 'Pacific/Auckland' - | 'Pacific/Fiji'; - -export interface Config { - auth: { - users: UserAuthOperations; - }; - blocks: {}; - collections: { - users: User; - articles: Article; - media: Media; - 'payload-kv': PayloadKv; - 'payload-locked-documents': PayloadLockedDocument; - 'payload-preferences': PayloadPreference; - 'payload-migrations': PayloadMigration; - }; - collectionsJoins: {}; - collectionsSelect: { - users: UsersSelect | UsersSelect; - articles: ArticlesSelect | ArticlesSelect; - media: MediaSelect | MediaSelect; - 'payload-kv': PayloadKvSelect | PayloadKvSelect; - 'payload-locked-documents': PayloadLockedDocumentsSelect | PayloadLockedDocumentsSelect; - 'payload-preferences': PayloadPreferencesSelect | PayloadPreferencesSelect; - 'payload-migrations': PayloadMigrationsSelect | PayloadMigrationsSelect; - }; - db: { - defaultIDType: number; - }; - fallbackLocale: null; - globals: { - 'site-settings': SiteSetting; - }; - globalsSelect: { - 'site-settings': SiteSettingsSelect | SiteSettingsSelect; - }; - locale: null; - widgets: { - collections: CollectionsWidget; - }; - user: User; - jobs: { - tasks: unknown; - workflows: unknown; - }; -} -export interface UserAuthOperations { - forgotPassword: { - email: string; - password: string; - }; - login: { - email: string; - password: string; - }; - registerFirstUser: { - email: string; - password: string; - }; - unlock: { - email: string; - password: string; - }; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "users". - */ -export interface User { - id: number; - displayName?: string | null; - role: 'admin' | 'editor' | 'author'; - updatedAt: string; - createdAt: string; - email: string; - resetPasswordToken?: string | null; - resetPasswordExpiration?: string | null; - salt?: string | null; - hash?: string | null; - loginAttempts?: number | null; - lockUntil?: string | null; - sessions?: - | { - id: string; - createdAt?: string | null; - expiresAt: string; - }[] - | null; - password?: string | null; - collection: 'users'; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "articles". - */ -export interface Article { - id: number; - title: string; - /** - * Auto-generated from title if left empty - */ - slug?: string | null; - content?: { - root: { - type: string; - children: { - type: any; - version: number; - [k: string]: unknown; - }[]; - direction: ('ltr' | 'rtl') | null; - format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; - indent: number; - version: number; - }; - [k: string]: unknown; - } | null; - status: 'draft' | 'published'; - author: number | User; - featuredImage?: (number | null) | Media; - publishedAt?: string | null; - updatedAt: string; - createdAt: string; - _status?: ('draft' | 'published') | null; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "media". - */ -export interface Media { - id: number; - alt: string; - updatedAt: string; - createdAt: string; - url?: string | null; - thumbnailURL?: string | null; - filename?: string | null; - mimeType?: string | null; - filesize?: number | null; - width?: number | null; - height?: number | null; - focalX?: number | null; - focalY?: number | null; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "payload-kv". - */ -export interface PayloadKv { - id: number; - key: string; - data: - | { - [k: string]: unknown; - } - | unknown[] - | string - | number - | boolean - | null; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "payload-locked-documents". - */ -export interface PayloadLockedDocument { - id: number; - document?: - | ({ - relationTo: 'users'; - value: number | User; - } | null) - | ({ - relationTo: 'articles'; - value: number | Article; - } | null) - | ({ - relationTo: 'media'; - value: number | Media; - } | null); - globalSlug?: string | null; - user: { - relationTo: 'users'; - value: number | User; - }; - updatedAt: string; - createdAt: string; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "payload-preferences". - */ -export interface PayloadPreference { - id: number; - user: { - relationTo: 'users'; - value: number | User; - }; - key?: string | null; - value?: - | { - [k: string]: unknown; - } - | unknown[] - | string - | number - | boolean - | null; - updatedAt: string; - createdAt: string; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "payload-migrations". - */ -export interface PayloadMigration { - id: number; - name?: string | null; - batch?: number | null; - updatedAt: string; - createdAt: string; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "users_select". - */ -export interface UsersSelect { - displayName?: T; - role?: T; - updatedAt?: T; - createdAt?: T; - email?: T; - resetPasswordToken?: T; - resetPasswordExpiration?: T; - salt?: T; - hash?: T; - loginAttempts?: T; - lockUntil?: T; - sessions?: - | T - | { - id?: T; - createdAt?: T; - expiresAt?: T; - }; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "articles_select". - */ -export interface ArticlesSelect { - title?: T; - slug?: T; - content?: T; - status?: T; - author?: T; - featuredImage?: T; - publishedAt?: T; - updatedAt?: T; - createdAt?: T; - _status?: T; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "media_select". - */ -export interface MediaSelect { - alt?: T; - updatedAt?: T; - createdAt?: T; - url?: T; - thumbnailURL?: T; - filename?: T; - mimeType?: T; - filesize?: T; - width?: T; - height?: T; - focalX?: T; - focalY?: T; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "payload-kv_select". - */ -export interface PayloadKvSelect { - key?: T; - data?: T; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "payload-locked-documents_select". - */ -export interface PayloadLockedDocumentsSelect { - document?: T; - globalSlug?: T; - user?: T; - updatedAt?: T; - createdAt?: T; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "payload-preferences_select". - */ -export interface PayloadPreferencesSelect { - user?: T; - key?: T; - value?: T; - updatedAt?: T; - createdAt?: T; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "payload-migrations_select". - */ -export interface PayloadMigrationsSelect { - name?: T; - batch?: T; - updatedAt?: T; - createdAt?: T; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "site-settings". - */ -export interface SiteSetting { - id: number; - siteName: string; - siteDescription?: string | null; - updatedAt?: string | null; - createdAt?: string | null; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "site-settings_select". - */ -export interface SiteSettingsSelect { - siteName?: T; - siteDescription?: T; - updatedAt?: T; - createdAt?: T; - globalType?: T; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "collections_widget". - */ -export interface CollectionsWidget { - data?: { - [k: string]: unknown; - }; - width: 'full'; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "auth". - */ -export interface Auth { - [k: string]: unknown; -} - - -declare module 'payload' { - export interface GeneratedTypes extends Config {} -} \ No newline at end of file diff --git a/packages/cms-core/src/payload.config.ts b/packages/cms-core/src/payload.config.ts deleted file mode 100644 index c969660..0000000 --- a/packages/cms-core/src/payload.config.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { buildConfig } from "payload"; -import { postgresAdapter } from "@payloadcms/db-postgres"; -import { lexicalEditor } from "@payloadcms/richtext-lexical"; -import path from "node:path"; -import { fileURLToPath } from "node:url"; - -import { Users } from "./collections/users"; -import { Articles } from "./collections/articles"; -import { Media } from "./collections/media"; -import { SiteSettings } from "./globals/site-settings"; - -const filename = fileURLToPath(import.meta.url); -const dirname = path.dirname(filename); - -export default buildConfig({ - editor: lexicalEditor(), - collections: [Users, Articles, Media], - globals: [SiteSettings], - secret: process.env.PAYLOAD_SECRET || "default-secret-change-me", - db: postgresAdapter({ - pool: { - connectionString: - process.env.DATABASE_URL || - "postgresql://postgres:postgres@localhost:5432/template", - }, - }), - typescript: { - outputFile: path.resolve(dirname, "payload-types.ts"), - }, -}); diff --git a/packages/cms-core/tsconfig.json b/packages/cms-core/tsconfig.json deleted file mode 100644 index d88c6e6..0000000 --- a/packages/cms-core/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "@repo/typescript-config/base.json", - "compilerOptions": { - "lib": ["ES2022", "DOM", "DOM.Iterable"], - "jsx": "react-jsx", - "baseUrl": ".", - "paths": { - "@/*": ["./src/*"] - } - }, - "include": ["src/**/*.ts", "src/**/*.tsx"], - "exclude": ["node_modules", "dist"] -} diff --git a/packages/core/AGENTS.md b/packages/core/AGENTS.md deleted file mode 100644 index 7b468b4..0000000 --- a/packages/core/AGENTS.md +++ /dev/null @@ -1,249 +0,0 @@ -# @repo/core -- Clean Architecture Core Package - -This is the central business logic package. All domain entities, use cases, repository/service interfaces, controllers, and the InversifyJS DI container live here. Nothing in this package depends on any web framework (Next.js, TanStack, Payload). It is portable and testable in isolation. - -**Package location:** `packages/core` -**Entry point:** `src/index.ts` -**Test runner:** Vitest (`pnpm vitest run` from this directory) - ---- - -## Layer Diagram - -Dependencies point inward (right to left). Outer layers depend on inner layers, never the reverse. - -``` -+------------------------------------------------------------------+ -| di/ | -| (wires everything together -- imports ALL internal layers) | -+------------------------------------------------------------------+ - | | | | - v v v v -+----------------+ +----------------+ +----------------+ +-----------+ -| interface- | | infrastructure/| | application/ | | entities/ | -| adapters/ | | (implements | | (use cases, | | (models, | -| controllers/ | | interfaces | | repo/service | | errors) | -| (validates | | with concrete | | interfaces) | | | -| input, calls | | code) | | | | INNERMOST | -| use cases) | | | | imports: | | zero deps | -| | | imports: | | entities/ | | | -| imports: | | application/ | | ONLY | | | -| application/ | | entities/ | | | | | -| entities/ | | @repo/ | | | | | -| | | cms-client | | | | | -+----------------+ +----------------+ +----------------+ +-----------+ -``` - ---- - -## Import Rules - -| Layer | Can Import From | NEVER Import From | -|---|---|---| -| `entities/` | Nothing (Zod is the only external dependency) | `application/`, `infrastructure/`, `interface-adapters/`, `di/`, any `@repo/*`, any framework | -| `application/` | `entities/` only | `infrastructure/`, `interface-adapters/`, `di/` (except `getInjection` from `di/container` in use cases) | -| `interface-adapters/` | `application/` (use cases), `entities/` (types, errors) | `infrastructure/`, any `@repo/*` except via DI | -| `infrastructure/` | `application/` (interfaces to implement), `entities/` (types), `@repo/cms-client` | `interface-adapters/`, apps/*, Next.js, TanStack | -| `di/` | All internal layers (it wires them together) | apps/*, any framework package | - -Note: Use cases in `application/` import `getInjection` from `di/container` to resolve dependencies at runtime. This is the one controlled exception to the "application never imports di" rule -- `getInjection` is a lookup function, not a concrete implementation. - ---- - -## DI Resolution Table - -| Symbol Key | Interface | Production Implementation | Mock Implementation | -|---|---|---|---| -| `IUsersRepository` | `IUsersRepository` (getUser, getUserByUsername, createUser) | PayloadUsersRepository (future -- will use `@repo/cms-client`) | `MockUsersRepository` (`infrastructure/repositories/mock-users.repository.ts`) | -| `IArticlesRepository` | `IArticlesRepository` (getArticle, getArticles, createArticle, updateArticle) | PayloadArticlesRepository (future -- will use `@repo/cms-client`) | `MockArticlesRepository` (`infrastructure/repositories/mock-articles.repository.ts`) | -| `IAuthenticationService` | `IAuthenticationService` (generateUserId, hashPassword, verifyPassword, validateSession, createSession, invalidateSession) | BetterAuthService (future) | `MockAuthenticationService` (`infrastructure/services/mock-auth.service.ts`) | -| `ITelemetryService` | `ITelemetryService` (startSpan) | OTelSentryService (future) | `MockTelemetryService` (`infrastructure/services/mock-telemetry.service.ts`) | - -Currently all modules bind mock implementations. When production implementations are added, the modules will conditionally bind based on environment or configuration. - ---- - -## Naming Conventions - -| Type | Pattern | Example | -|---|---|---| -| Entity model | `{name}.ts` | `article.ts`, `user.ts` | -| Entity error | `{domain}.ts` | `auth.ts`, `common.ts` | -| Repository interface | `{name}.repository.interface.ts` | `users.repository.interface.ts` | -| Service interface | `{name}.service.interface.ts` | `auth.service.interface.ts` | -| Use case | `{verb}-{noun}.use-case.ts` | `sign-in.use-case.ts`, `create-article.use-case.ts` | -| Controller | `{noun}.controller.ts` (may export multiple functions) | `articles.controller.ts` | -| Production impl | `{provider}-{name}.repository.ts` | `payload-users.repository.ts` | -| Mock impl | `mock-{name}.repository.ts` or `mock-{name}.service.ts` | `mock-users.repository.ts` | -| DI module | `{domain}.module.ts` | `auth.module.ts`, `content.module.ts` | -| Test file | `{name}.test.ts` matching the source file name | `sign-in.use-case.test.ts` | - ---- - -## How to Add a New Dependency (5-Step Recipe) - -This recipe adds a new repository or service interface to the DI container. For a complete feature, also follow the root `AGENTS.md` end-to-end recipe. - -### Step 1: Define the interface in `application/` - -Create `src/application/repositories/{name}.repository.interface.ts` or `src/application/services/{name}.service.interface.ts`: - -```typescript -import type { MyEntity } from "@/entities/models/my-entity"; - -export interface IMyRepository { - findById(id: string): Promise; - findAll(): Promise; - create(input: MyEntity): Promise; -} -``` - -Export from the appropriate barrel: `src/application/repositories/index.ts` or `src/application/services/index.ts`. - -### Step 2: Add the DI symbol to `di/types.ts` - -```typescript -import type { IMyRepository } from "@/application/repositories/my.repository.interface"; - -export const DI_SYMBOLS = { - // ...existing symbols... - IMyRepository: Symbol.for("IMyRepository"), -}; - -export interface DI_RETURN_TYPES { - // ...existing types... - IMyRepository: IMyRepository; -} -``` - -### Step 3: Create mock implementation in `infrastructure/` - -```typescript -import { injectable } from "inversify"; -import type { IMyRepository } from "@/application/repositories/my.repository.interface"; -import type { MyEntity } from "@/entities/models/my-entity"; - -@injectable() -export class MockMyRepository implements IMyRepository { - private _items: MyEntity[] = []; - - async findById(id: string): Promise { - return this._items.find((item) => item.id === id); - } - - async findAll(): Promise { - return [...this._items]; - } - - async create(input: MyEntity): Promise { - this._items.push(input); - return input; - } -} -``` - -### Step 4: Create or update DI module in `di/modules/` - -```typescript -import { ContainerModule, interfaces } from "inversify"; -import type { IMyRepository } from "@/application/repositories/my.repository.interface"; -import { MockMyRepository } from "@/infrastructure/repositories/mock-my.repository"; -import { DI_SYMBOLS } from "../types"; - -const initializeModule = (bind: interfaces.Bind) => { - bind(DI_SYMBOLS.IMyRepository).to(MockMyRepository); -}; - -export const MyModule = new ContainerModule(initializeModule); -``` - -### Step 5: Load module in `di/container.ts` - -```typescript -import { MyModule } from "./modules/my.module"; - -export const initializeContainer = () => { - // ...existing modules... - ApplicationContainer.load(MyModule); -}; - -export const destroyContainer = () => { - // ...existing modules... - ApplicationContainer.unload(MyModule); -}; -``` - ---- - -## Testing Pattern - -All tests follow this lifecycle pattern: - -```typescript -import "reflect-metadata"; -import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import { destroyContainer, initializeContainer } from "@/di/container"; - -beforeEach(() => { - initializeContainer(); -}); - -afterEach(() => { - destroyContainer(); -}); - -describe("myUseCase", () => { - it("does something", async () => { - const result = await myUseCase(/* ... */); - expect(result).toBeDefined(); - }); -}); -``` - -Critical requirements: -- `import "reflect-metadata"` MUST be the first import in every test file. InversifyJS decorators rely on runtime metadata reflection. -- `initializeContainer()` loads all DI modules (binding mock implementations). -- `destroyContainer()` unloads all modules, ensuring clean state between tests. Without this, Singleton-scoped mocks retain state across tests. - -Test file locations mirror source structure: -- `tests/unit/use-cases/{domain}/{name}.use-case.test.ts` -- `tests/unit/controllers/{domain}/{name}.controller.test.ts` - ---- - -## tsconfig Requirements - -These settings in `tsconfig.json` are MANDATORY. Do not remove them: - -| Setting | Why | -|---|---| -| `experimentalDecorators: true` | InversifyJS uses TypeScript decorators (`@injectable()`, `@inject()`) | -| `emitDecoratorMetadata: true` | InversifyJS reads parameter type metadata at runtime for constructor injection | -| `types: ["reflect-metadata", "node"]` | `reflect-metadata` polyfill must be globally available for decorator metadata | -| Path alias `@/*` -> `./src/*` | All internal imports use `@/` prefix (e.g., `@/entities/models/user`) | - -The base config comes from `@repo/typescript-config/base.json` which already includes `experimentalDecorators` and `emitDecoratorMetadata`. The core `tsconfig.json` extends it and adds the path alias and types. - ---- - -## Running Tests - -```bash -cd packages/core -pnpm vitest run # Run all tests once -pnpm vitest # Run in watch mode -pnpm vitest run --reporter=verbose # Verbose output -``` - ---- - -## Cross-References - -- `src/entities/AGENTS.md` -- Entity models and error classes -- `src/application/AGENTS.md` -- Use cases, repository/service interfaces -- `src/infrastructure/AGENTS.md` -- Concrete implementations with `@injectable()` -- `src/interface-adapters/controllers/AGENTS.md` -- Controller patterns -- `src/di/AGENTS.md` -- DI container configuration and lifecycle -- `src/application/use-cases/auth/AGENTS.md` -- Auth domain business rules -- `src/application/use-cases/content/AGENTS.md` -- Content domain business rules -- Root `AGENTS.md` -- Full end-to-end feature recipe and monorepo map diff --git a/packages/core/package.json b/packages/core/package.json deleted file mode 100644 index b020c0c..0000000 --- a/packages/core/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "@repo/core", - "private": true, - "version": "0.0.0", - "type": "module", - "main": "./src/index.ts", - "types": "./src/index.ts", - "scripts": { - "build": "tsc --noEmit", - "lint": "eslint .", - "test": "vitest run", - "typecheck": "tsc --noEmit" - }, - "dependencies": { - "inversify": "^6.2.0", - "reflect-metadata": "^0.2.2", - "zod": "^3.24.0" - }, - "devDependencies": { - "@repo/eslint-config": "workspace:*", - "@repo/typescript-config": "workspace:*", - "@types/node": "^25.5.2", - "vitest": "^3.1.0" - } -} diff --git a/packages/core/src/application/AGENTS.md b/packages/core/src/application/AGENTS.md deleted file mode 100644 index 832f698..0000000 --- a/packages/core/src/application/AGENTS.md +++ /dev/null @@ -1,340 +0,0 @@ -# Application Layer -- Use Cases + Interfaces - -**Path:** `packages/core/src/application/` -**Role:** Define the business logic (use cases) and the abstract contracts (repository and service interfaces) that the infrastructure layer implements. This is the second-innermost layer of Clean Architecture. - ---- - -## Rules - -1. Imports from `entities/` ONLY (for types, schemas, and error classes). -2. **NEVER** imports from `infrastructure/` -- use cases depend on interfaces, not implementations. -3. **NEVER** imports from `interface-adapters/` -- controllers call use cases, not the reverse. -4. Use cases obtain dependencies via `getInjection()` from `di/container` at runtime. This is the single allowed cross-layer dependency. -5. All repository and service interfaces are pure TypeScript interfaces (no decorators, no classes). -6. All methods on interfaces return Promises (data access is always async). - ---- - -## Existing Repository Interfaces - -| Interface | File | Methods | -|---|---|---| -| `IUsersRepository` | `repositories/users.repository.interface.ts` | `getUser(id)`, `getUserByUsername(username)`, `createUser(input)` | -| `IArticlesRepository` | `repositories/articles.repository.interface.ts` | `getArticle(id)`, `getArticles(options?)`, `createArticle(input)`, `updateArticle(id, input)` | - -## Existing Service Interfaces - -| Interface | File | Methods | -|---|---|---| -| `IAuthenticationService` | `services/auth.service.interface.ts` | `generateUserId()`, `hashPassword(password)`, `verifyPassword(hash, password)`, `validateSession(sessionId)`, `createSession(user)`, `invalidateSession(sessionId)` | -| `ITelemetryService` | `services/telemetry.service.interface.ts` | `startSpan(name, fn)` | - -## Existing Use Cases - -| Use Case | File | Domain | What It Does | -|---|---|---|---| -| `signInUseCase` | `use-cases/auth/sign-in.use-case.ts` | Auth | Looks up user by username, verifies password, creates session | -| `signUpUseCase` | `use-cases/auth/sign-up.use-case.ts` | Auth | Checks username uniqueness, hashes password, creates user + session | -| `signOutUseCase` | `use-cases/auth/sign-out.use-case.ts` | Auth | Invalidates session, returns blank cookie | -| `createArticleUseCase` | `use-cases/content/create-article.use-case.ts` | Content | Generates slug from title, creates draft article | -| `getArticlesUseCase` | `use-cases/content/get-articles.use-case.ts` | Content | Retrieves articles with optional filtering and pagination | - ---- - -## Repository Interface Template - -```typescript -// src/application/repositories/{name}.repository.interface.ts -import type { MyEntity } from "@/entities/models/my-entity"; - -export interface IMyRepository { - /** - * Find a single entity by ID. - * Returns undefined if not found (do NOT throw -- let the use case decide). - */ - findById(id: string): Promise; - - /** - * Find all entities matching optional filters. - */ - findAll(options?: { - status?: string; - limit?: number; - offset?: number; - }): Promise; - - /** - * Create a new entity. Returns the created entity. - */ - create(input: MyEntity): Promise; - - /** - * Update an existing entity. Returns the updated entity or undefined if not found. - */ - update(id: string, input: Partial): Promise; -} -``` - -Key conventions: -- Return `undefined` for "not found" cases, not `null`, and do not throw. -- The use case decides what to do when something is not found (throw `NotFoundError`, return default, etc.). -- Always return the entity after create/update so the caller has the final state. - ---- - -## Service Interface Template - -```typescript -// src/application/services/{name}.service.interface.ts -import type { SomeEntity } from "@/entities/models/some-entity"; - -export interface IMyService { - /** - * Service methods define external capabilities the domain needs - * but does not implement itself (email, auth, telemetry, etc.) - */ - doSomething(input: string): Promise; -} -``` - -The distinction between repositories and services: -- **Repositories** abstract data storage (CRUD operations on entities). -- **Services** abstract external capabilities (authentication, email, telemetry, file storage). - ---- - -## Use Case Template - -```typescript -// src/application/use-cases/{domain}/{verb}-{noun}.use-case.ts -import type { MyEntity } from "@/entities/models/my-entity"; -import { NotFoundError } from "@/entities/errors/common"; -import { getInjection } from "@/di/container"; - -export async function myUseCase(input: { - id: string; - // ... other input fields -}): Promise { - // 1. Get dependencies from DI container - const myRepository = getInjection("IMyRepository"); - - // 2. Execute business logic using entities and interfaces - const existing = await myRepository.findById(input.id); - if (!existing) { - throw new NotFoundError("Entity not found"); - } - - // 3. Return result (entity types from entities/ layer) - return existing; -} -``` - -Critical pattern: `getInjection("IMyRepository")` returns a fully typed instance. The string key must match a key in `DI_SYMBOLS` (see `di/types.ts`). TypeScript will enforce the return type via the `DI_RETURN_TYPES` mapping. - ---- - -## Adding a New Repository Interface (5-Step Recipe) - -### Step 1: Create the interface file - -Create `src/application/repositories/{name}.repository.interface.ts` following the template above. - -### Step 2: Export from the barrel - -Add to `src/application/repositories/index.ts`: - -```typescript -export type { IMyRepository } from "./{name}.repository.interface"; -``` - -### Step 3: Create mock implementation - -In `src/infrastructure/repositories/mock-{name}.repository.ts`: - -```typescript -import { injectable } from "inversify"; -import type { IMyRepository } from "@/application/repositories/{name}.repository.interface"; -import type { MyEntity } from "@/entities/models/my-entity"; - -@injectable() -export class MockMyRepository implements IMyRepository { - private _items: MyEntity[] = []; - - async findById(id: string): Promise { - return this._items.find((item) => item.id === id); - } - - async findAll(): Promise { - return [...this._items]; - } - - async create(input: MyEntity): Promise { - this._items.push(input); - return input; - } - - async update(id: string, input: Partial): Promise { - const index = this._items.findIndex((item) => item.id === id); - if (index === -1) return undefined; - this._items[index] = { ...this._items[index]!, ...input }; - return this._items[index]; - } -} -``` - -### Step 4: Register in DI - -Add symbol to `di/types.ts`, create or update module in `di/modules/`, load in `di/container.ts`. See `di/AGENTS.md` for full details. - -### Step 5: Verify - -Write a use case that calls `getInjection("IMyRepository")` and a test that exercises it with the mock. - ---- - -## Adding a New Service Interface (Recipe) - -Same as repository interface, but files go in `src/application/services/` and `src/infrastructure/services/`. The naming convention is `{name}.service.interface.ts` for the interface and `mock-{name}.service.ts` for the mock. - ---- - -## Adding a New Use Case (TDD Recipe) - -### Step 1: Write the test FIRST - -Create `tests/unit/use-cases/{domain}/{verb}-{noun}.use-case.test.ts`: - -```typescript -import "reflect-metadata"; -import { afterEach, beforeEach, describe, expect, it } from "vitest"; - -import { - destroyContainer, - initializeContainer, -} from "@/di/container"; -import { myNewUseCase } from "@/application/use-cases/{domain}/{verb}-{noun}.use-case"; - -beforeEach(() => { - initializeContainer(); -}); - -afterEach(() => { - destroyContainer(); -}); - -describe("myNewUseCase", () => { - it("succeeds with valid input", async () => { - const result = await myNewUseCase({ /* valid input */ }); - expect(result).toBeDefined(); - // ... assert specific properties - }); - - it("throws correct error for invalid state", async () => { - await expect( - myNewUseCase({ /* input that triggers error */ }) - ).rejects.toBeInstanceOf(SomeError); - }); -}); -``` - -### Step 2: Implement the use case - -Create `src/application/use-cases/{domain}/{verb}-{noun}.use-case.ts` following the template above. Run the test to verify. - -### Step 3: Export from core - -Add to `src/index.ts`: - -```typescript -export { myNewUseCase } from "./application/use-cases/{domain}/{verb}-{noun}.use-case"; -``` - -### Step 4: Create a controller (if needed) - -Controllers go in `interface-adapters/controllers/`. See `interface-adapters/controllers/AGENTS.md`. - ---- - -## Test Template (Full Example) - -```typescript -import "reflect-metadata"; -import { afterEach, beforeEach, describe, expect, it } from "vitest"; - -import { - destroyContainer, - initializeContainer, -} from "@/di/container"; -import { createArticleUseCase } from "@/application/use-cases/content/create-article.use-case"; - -beforeEach(() => { - initializeContainer(); -}); - -afterEach(() => { - destroyContainer(); -}); - -describe("createArticleUseCase", () => { - it("creates an article with generated slug and draft status", async () => { - const result = await createArticleUseCase({ - title: "My First Article", - content: "Hello world", - authorId: "1", - }); - expect(result.title).toBe("My First Article"); - expect(result.slug).toBe("my-first-article"); - expect(result.status).toBe("draft"); - expect(result.authorId).toBe("1"); - expect(result.id).toBeDefined(); - }); - - it("uses provided slug if given", async () => { - const result = await createArticleUseCase({ - title: "Another Article", - content: "Content here", - authorId: "1", - slug: "custom-slug", - }); - expect(result.slug).toBe("custom-slug"); - }); -}); -``` - ---- - -## File Structure - -``` -application/ - AGENTS.md - repositories/ - index.ts <-- barrel: exports all repository interfaces - users.repository.interface.ts - articles.repository.interface.ts - services/ - index.ts <-- barrel: exports all service interfaces - auth.service.interface.ts - telemetry.service.interface.ts - use-cases/ - auth/ - AGENTS.md <-- auth domain rules and recipes - sign-in.use-case.ts - sign-up.use-case.ts - sign-out.use-case.ts - content/ - AGENTS.md <-- content domain rules and recipes - create-article.use-case.ts - get-articles.use-case.ts -``` - ---- - -## Cross-References - -- `entities/AGENTS.md` -- The only layer this layer can import from -- `infrastructure/AGENTS.md` -- Implements the interfaces defined here -- `di/AGENTS.md` -- Where interfaces are bound to implementations -- `use-cases/auth/AGENTS.md` -- Auth domain business rules -- `use-cases/content/AGENTS.md` -- Content domain business rules diff --git a/packages/core/src/application/repositories/articles.repository.interface.ts b/packages/core/src/application/repositories/articles.repository.interface.ts deleted file mode 100644 index e588a3f..0000000 --- a/packages/core/src/application/repositories/articles.repository.interface.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { Article } from "@/entities/models/article"; - -export interface IArticlesRepository { - getArticle(id: string): Promise
; - getArticles(options?: { - status?: string; - authorId?: string; - limit?: number; - offset?: number; - }): Promise; - createArticle(input: Article): Promise
; - updateArticle( - id: string, - input: Partial
- ): Promise
; -} diff --git a/packages/core/src/application/repositories/index.ts b/packages/core/src/application/repositories/index.ts deleted file mode 100644 index 3970ca6..0000000 --- a/packages/core/src/application/repositories/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export type { IUsersRepository } from "./users.repository.interface"; -export type { IArticlesRepository } from "./articles.repository.interface"; diff --git a/packages/core/src/application/repositories/users.repository.interface.ts b/packages/core/src/application/repositories/users.repository.interface.ts deleted file mode 100644 index 16c80e5..0000000 --- a/packages/core/src/application/repositories/users.repository.interface.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { User } from "@/entities/models/user"; - -export interface IUsersRepository { - getUser(id: string): Promise; - getUserByUsername(username: string): Promise; - createUser(input: User): Promise; -} diff --git a/packages/core/src/application/services/auth.service.interface.ts b/packages/core/src/application/services/auth.service.interface.ts deleted file mode 100644 index 5718f3b..0000000 --- a/packages/core/src/application/services/auth.service.interface.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { Cookie } from "@/entities/models/cookie"; -import type { Session } from "@/entities/models/session"; -import type { User } from "@/entities/models/user"; - -export interface IAuthenticationService { - generateUserId(): string; - hashPassword(password: string): Promise; - verifyPassword(hash: string, password: string): Promise; - validateSession( - sessionId: string - ): Promise<{ user: User; session: Session }>; - createSession(user: User): Promise<{ session: Session; cookie: Cookie }>; - invalidateSession(sessionId: string): Promise<{ blankCookie: Cookie }>; -} diff --git a/packages/core/src/application/services/index.ts b/packages/core/src/application/services/index.ts deleted file mode 100644 index 2e8c013..0000000 --- a/packages/core/src/application/services/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export type { IAuthenticationService } from "./auth.service.interface"; -export type { ITelemetryService } from "./telemetry.service.interface"; diff --git a/packages/core/src/application/services/telemetry.service.interface.ts b/packages/core/src/application/services/telemetry.service.interface.ts deleted file mode 100644 index 56e5ec9..0000000 --- a/packages/core/src/application/services/telemetry.service.interface.ts +++ /dev/null @@ -1,3 +0,0 @@ -export interface ITelemetryService { - startSpan(name: string, fn: () => T | Promise): Promise; -} diff --git a/packages/core/src/application/use-cases/auth/AGENTS.md b/packages/core/src/application/use-cases/auth/AGENTS.md deleted file mode 100644 index f2e1a8e..0000000 --- a/packages/core/src/application/use-cases/auth/AGENTS.md +++ /dev/null @@ -1,208 +0,0 @@ -# Auth Domain -- Use Cases - -**Path:** `packages/core/src/application/use-cases/auth/` -**Domain Responsibility:** Authentication and authorization -- sign-in, sign-up, sign-out, session management. This domain owns the user identity lifecycle from account creation through session invalidation. - ---- - -## Complete Business Rules - -1. **Passwords are always hashed.** Plain-text passwords never enter the repository. The `IAuthenticationService.hashPassword()` method handles hashing before storage. -2. **Usernames must be unique.** Sign-up checks for existing username via `IUsersRepository.getUserByUsername()` before creating a new user. -3. **Sign-in requires valid credentials.** The user must exist AND the password must verify against the stored hash. -4. **Sessions are created on successful sign-in or sign-up.** `IAuthenticationService.createSession()` returns both a `Session` object and a `Cookie` for the client. -5. **Sessions expire after 7 days.** This is the current mock implementation default (`Date.now() + 86400000 * 7`). Production implementations may use different expiry logic. -6. **Sign-out invalidates the session.** `IAuthenticationService.invalidateSession()` removes the session and returns a blank cookie (empty value) to clear the client-side cookie. -7. **User IDs are generated by the auth service.** `IAuthenticationService.generateUserId()` produces the ID, not the repository. This allows the auth provider (e.g., Better Auth) to control ID format. - ---- - -## Error Cases - -| Error Class | When Thrown | Use Case | -|---|---|---| -| `AuthenticationError` | User does not exist (sign-in) | `signInUseCase` | -| `AuthenticationError` | Incorrect password (sign-in) | `signInUseCase` | -| `AuthenticationError` | Username already taken (sign-up) | `signUpUseCase` | -| `UnauthenticatedError` | Session ID not found or expired (session validation) | `IAuthenticationService.validateSession()` | -| `InputParseError` | Invalid input fields (handled by controller, not use case) | `signInController`, `signUpController` | - -Note: Use cases throw `AuthenticationError` for credential failures. They intentionally do NOT distinguish between "user not found" and "wrong password" in the error message exposed to callers -- this prevents username enumeration attacks. The sign-in use case throws `"Incorrect username or password"` for wrong passwords and `"User does not exist"` internally, but callers should treat both as authentication failures. - ---- - -## Dependencies - -### IUsersRepository - -Provides user data access. Methods used by auth use cases: - -| Method | Signature | Used By | -|---|---|---| -| `getUser` | `(id: string) => Promise` | `MockAuthenticationService.validateSession()` (indirectly) | -| `getUserByUsername` | `(username: string) => Promise` | `signInUseCase`, `signUpUseCase` | -| `createUser` | `(input: User) => Promise` | `signUpUseCase` | - -### IAuthenticationService - -Provides authentication operations. All methods: - -| Method | Signature | Used By | -|---|---|---| -| `generateUserId` | `() => string` | `signUpUseCase` | -| `hashPassword` | `(password: string) => Promise` | `signUpUseCase` | -| `verifyPassword` | `(hash: string, password: string) => Promise` | `signInUseCase` | -| `validateSession` | `(sessionId: string) => Promise<{ user: User; session: Session }>` | (future use cases needing auth context) | -| `createSession` | `(user: User) => Promise<{ session: Session; cookie: Cookie }>` | `signInUseCase`, `signUpUseCase` | -| `invalidateSession` | `(sessionId: string) => Promise<{ blankCookie: Cookie }>` | `signOutUseCase` | - ---- - -## Existing Use Cases - -### signInUseCase - -**File:** `sign-in.use-case.ts` -**Input:** `{ username: string; password: string }` -**Output:** `{ session: Session; cookie: Cookie }` -**Logic:** -1. Look up user by username via `IUsersRepository.getUserByUsername()`. -2. If not found, throw `AuthenticationError("User does not exist")`. -3. Verify password via `IAuthenticationService.verifyPassword()`. -4. If invalid, throw `AuthenticationError("Incorrect username or password")`. -5. Create session via `IAuthenticationService.createSession()`. -6. Return session and cookie. - -### signUpUseCase - -**File:** `sign-up.use-case.ts` -**Input:** `{ username: string; password: string }` -**Output:** `{ session: Session; cookie: Cookie; user: Pick }` -**Logic:** -1. Check if username exists via `IUsersRepository.getUserByUsername()`. -2. If exists, throw `AuthenticationError("Username taken")`. -3. Hash password via `IAuthenticationService.hashPassword()`. -4. Generate user ID via `IAuthenticationService.generateUserId()`. -5. Create user via `IUsersRepository.createUser()`. -6. Create session via `IAuthenticationService.createSession()`. -7. Return session, cookie, and safe user info (id + username, no passwordHash). - -### signOutUseCase - -**File:** `sign-out.use-case.ts` -**Input:** `sessionId: string` -**Output:** `{ blankCookie: Cookie }` -**Logic:** -1. Invalidate session via `IAuthenticationService.invalidateSession()`. -2. Return blank cookie (empty value clears the client-side session cookie). - ---- - -## Adding a New Auth Use Case (Complete Recipe with Test-First Example) - -Example: adding a `validateSessionUseCase` that checks if a session is valid and returns the authenticated user. - -### Step 1: Write the test FIRST - -Create `tests/unit/use-cases/auth/validate-session.use-case.test.ts`: - -```typescript -import "reflect-metadata"; -import { afterEach, beforeEach, describe, expect, it } from "vitest"; - -import { - destroyContainer, - initializeContainer, -} from "@/di/container"; -import { signUpUseCase } from "@/application/use-cases/auth/sign-up.use-case"; -import { validateSessionUseCase } from "@/application/use-cases/auth/validate-session.use-case"; -import { UnauthenticatedError } from "@/entities/errors/auth"; - -beforeEach(() => { - initializeContainer(); -}); - -afterEach(() => { - destroyContainer(); -}); - -describe("validateSessionUseCase", () => { - it("returns user and session for valid session", async () => { - // First create a user and get a session - const signUpResult = await signUpUseCase({ - username: "testuser", - password: "testpassword", - }); - - const result = await validateSessionUseCase( - signUpResult.session.id - ); - - expect(result.user.username).toBe("testuser"); - expect(result.session.id).toBe(signUpResult.session.id); - }); - - it("throws UnauthenticatedError for invalid session", async () => { - await expect( - validateSessionUseCase("nonexistent-session-id") - ).rejects.toBeInstanceOf(UnauthenticatedError); - }); -}); -``` - -### Step 2: Implement the use case - -Create `src/application/use-cases/auth/validate-session.use-case.ts`: - -```typescript -import type { Session } from "@/entities/models/session"; -import type { User } from "@/entities/models/user"; -import { getInjection } from "@/di/container"; - -export async function validateSessionUseCase( - sessionId: string -): Promise<{ user: User; session: Session }> { - const authService = getInjection("IAuthenticationService"); - return await authService.validateSession(sessionId); -} -``` - -### Step 3: Export from core - -Add to `packages/core/src/index.ts`: - -```typescript -export { validateSessionUseCase } from "./application/use-cases/auth/validate-session.use-case"; -``` - -### Step 4: Run tests - -```bash -cd packages/core && pnpm vitest run -``` - -### Step 5: Create controller and tRPC procedure (if needed) - -Follow the controller recipe in `interface-adapters/controllers/AGENTS.md`. - ---- - -## Security Considerations - -1. **Passwords are always hashed before storage.** The `signUpUseCase` calls `authService.hashPassword()` and stores only the hash. The mock uses a simple `hashed_` prefix; production implementations must use bcrypt, argon2, or similar. -2. **Sessions expire.** The mock sets a 7-day expiry. Production implementations should enforce this with database TTLs or cleanup jobs. -3. **Blank cookie on sign-out.** Setting the cookie value to `""` tells the browser to clear it. The cookie name is defined in `config.ts` as `SESSION_COOKIE = "session"`. -4. **No password in responses.** `signUpUseCase` returns `Pick`, explicitly excluding `passwordHash`. -5. **Error messages should not leak information.** In production, consider using a generic "Invalid credentials" message for both "user not found" and "wrong password" scenarios to prevent username enumeration. - ---- - -## Cross-References - -- `application/AGENTS.md` -- General use case patterns and interfaces -- `entities/errors/auth.ts` -- `AuthenticationError`, `UnauthenticatedError`, `UnauthorizedError` -- `entities/models/user.ts` -- `User` type -- `entities/models/session.ts` -- `Session` type -- `entities/models/cookie.ts` -- `Cookie` type -- `di/AGENTS.md` -- How `IUsersRepository` and `IAuthenticationService` are resolved -- `infrastructure/services/mock-auth.service.ts` -- Mock auth implementation details diff --git a/packages/core/src/application/use-cases/auth/sign-in.use-case.ts b/packages/core/src/application/use-cases/auth/sign-in.use-case.ts deleted file mode 100644 index b9be7c9..0000000 --- a/packages/core/src/application/use-cases/auth/sign-in.use-case.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { AuthenticationError } from "@/entities/errors/auth"; -import type { Cookie } from "@/entities/models/cookie"; -import type { Session } from "@/entities/models/session"; -import { getInjection } from "@/di/container"; - -export async function signInUseCase(input: { - username: string; - password: string; -}): Promise<{ session: Session; cookie: Cookie }> { - const usersRepository = getInjection("IUsersRepository"); - const authService = getInjection("IAuthenticationService"); - - const existingUser = await usersRepository.getUserByUsername(input.username); - if (!existingUser) { - throw new AuthenticationError("User does not exist"); - } - - const validPassword = await authService.verifyPassword( - existingUser.passwordHash, - input.password - ); - if (!validPassword) { - throw new AuthenticationError("Incorrect username or password"); - } - - return await authService.createSession(existingUser); -} diff --git a/packages/core/src/application/use-cases/auth/sign-out.use-case.ts b/packages/core/src/application/use-cases/auth/sign-out.use-case.ts deleted file mode 100644 index b738e7c..0000000 --- a/packages/core/src/application/use-cases/auth/sign-out.use-case.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { Cookie } from "@/entities/models/cookie"; -import { getInjection } from "@/di/container"; - -export async function signOutUseCase( - sessionId: string -): Promise<{ blankCookie: Cookie }> { - const authService = getInjection("IAuthenticationService"); - return await authService.invalidateSession(sessionId); -} diff --git a/packages/core/src/application/use-cases/auth/sign-up.use-case.ts b/packages/core/src/application/use-cases/auth/sign-up.use-case.ts deleted file mode 100644 index 233ff1f..0000000 --- a/packages/core/src/application/use-cases/auth/sign-up.use-case.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { AuthenticationError } from "@/entities/errors/auth"; -import type { Cookie } from "@/entities/models/cookie"; -import type { Session } from "@/entities/models/session"; -import type { User } from "@/entities/models/user"; -import { getInjection } from "@/di/container"; - -export async function signUpUseCase(input: { - username: string; - password: string; -}): Promise<{ - session: Session; - cookie: Cookie; - user: Pick; -}> { - const usersRepository = getInjection("IUsersRepository"); - const authService = getInjection("IAuthenticationService"); - - const existingUser = await usersRepository.getUserByUsername(input.username); - if (existingUser) { - throw new AuthenticationError("Username taken"); - } - - const passwordHash = await authService.hashPassword(input.password); - const userId = authService.generateUserId(); - - const newUser = await usersRepository.createUser({ - id: userId, - username: input.username, - passwordHash, - }); - - const { cookie, session } = await authService.createSession(newUser); - - return { - cookie, - session, - user: { id: newUser.id, username: newUser.username }, - }; -} diff --git a/packages/core/src/application/use-cases/content/AGENTS.md b/packages/core/src/application/use-cases/content/AGENTS.md deleted file mode 100644 index 798dea5..0000000 --- a/packages/core/src/application/use-cases/content/AGENTS.md +++ /dev/null @@ -1,240 +0,0 @@ -# Content Domain -- Use Cases - -**Path:** `packages/core/src/application/use-cases/content/` -**Domain Responsibility:** Article management -- creation, retrieval, filtering, and publishing workflow. This domain owns the content lifecycle from draft creation through publication. - ---- - -## Complete Business Rules - -1. **Articles must have a title and content.** These are required fields validated at the controller level via Zod schemas. -2. **Slugs are auto-generated from the title if not provided.** The `generateSlug()` function in `createArticleUseCase` handles this. -3. **New articles default to "draft" status.** The `status` field is set to `"draft"` on creation. There is no way to create a published article directly. -4. **Articles have an author.** The `authorId` field links to a user. The use case does not verify the author exists (that responsibility belongs to a future authorization layer). -5. **Article IDs are UUIDs.** Generated via `crypto.randomUUID()` at creation time. -6. **Timestamps are set at creation.** Both `createdAt` and `updatedAt` are set to `new Date()` when the article is created. -7. **Filtering is supported.** `getArticlesUseCase` accepts optional `status`, `authorId`, `limit`, and `offset` parameters. -8. **Default pagination is 50 items.** The mock repository defaults `limit` to 50 if not specified. - ---- - -## Error Cases - -| Error Class | When Thrown | Use Case | -|---|---|---| -| `InputParseError` | Missing or invalid input fields (title, content, authorId) | `createArticleController` (controller level) | -| `InputParseError` | Invalid filter parameters | `getArticlesController` (controller level) | -| `NotFoundError` | Article not found by ID (future: update/delete operations) | Future use cases | -| `UnauthorizedError` | User cannot edit/delete another user's article (future) | Future use cases | - -Note: Current use cases do not throw domain errors directly. Validation happens in controllers. Future use cases (update, delete, publish) will introduce `NotFoundError` and `UnauthorizedError`. - ---- - -## Dependencies - -### IArticlesRepository - -Provides article data access. All methods: - -| Method | Signature | Used By | -|---|---|---| -| `getArticle` | `(id: string) => Promise
` | (future use cases) | -| `getArticles` | `(options?: { status?, authorId?, limit?, offset? }) => Promise` | `getArticlesUseCase` | -| `createArticle` | `(input: Article) => Promise
` | `createArticleUseCase` | -| `updateArticle` | `(id: string, input: Partial
) => Promise
` | (future use cases) | - ---- - -## Existing Use Cases - -### createArticleUseCase - -**File:** `create-article.use-case.ts` -**Input:** `{ title: string; content: string; authorId: string; slug?: string }` -**Output:** `Article` -**Logic:** -1. Get `IArticlesRepository` via `getInjection("IArticlesRepository")`. -2. Generate UUID for article ID via `crypto.randomUUID()`. -3. Generate slug from title if not provided (see Slug Generation below). -4. Set `status` to `"draft"`. -5. Set `createdAt` and `updatedAt` to current time. -6. Call `articlesRepository.createArticle()` with the complete article object. -7. Return the created article. - -### getArticlesUseCase - -**File:** `get-articles.use-case.ts` -**Input:** `{ status?: string; authorId?: string; limit?: number; offset?: number }` (all optional) -**Output:** `Article[]` -**Logic:** -1. Get `IArticlesRepository` via `getInjection("IArticlesRepository")`. -2. Pass options directly to `articlesRepository.getArticles()`. -3. Return the result array. - ---- - -## Slug Generation Logic - -The `generateSlug()` function lives inside `create-article.use-case.ts` (private to the module, not exported): - -```typescript -function generateSlug(title: string): string { - return title - .toLowerCase() // "My First Article" -> "my first article" - .replace(/[^a-z0-9]+/g, "-") // "my first article" -> "my-first-article" - .replace(/^-|-$/g, ""); // trim leading/trailing hyphens -} -``` - -Behavior: -- `"My First Article"` -> `"my-first-article"` -- `"Hello, World! #1"` -> `"hello-world-1"` -- `" Leading Spaces "` -> `"leading-spaces"` -- `"UPPER CASE"` -> `"upper-case"` - -The same slug generation logic is duplicated in `packages/cms-core/src/collections/articles/hooks/before-change.ts` for the Payload CMS side. If you change the algorithm, update BOTH locations. - -If a `slug` is explicitly provided in the input, it is used as-is without any transformation. - ---- - -## Adding a New Content Use Case (Recipe) - -Example: adding a `publishArticleUseCase` that changes an article's status from "draft" to "published". - -### Step 1: Write the test FIRST - -Create `tests/unit/use-cases/content/publish-article.use-case.test.ts`: - -```typescript -import "reflect-metadata"; -import { afterEach, beforeEach, describe, expect, it } from "vitest"; - -import { - destroyContainer, - initializeContainer, -} from "@/di/container"; -import { createArticleUseCase } from "@/application/use-cases/content/create-article.use-case"; -import { publishArticleUseCase } from "@/application/use-cases/content/publish-article.use-case"; -import { NotFoundError } from "@/entities/errors/common"; - -beforeEach(() => { - initializeContainer(); -}); - -afterEach(() => { - destroyContainer(); -}); - -describe("publishArticleUseCase", () => { - it("changes article status to published", async () => { - const article = await createArticleUseCase({ - title: "Draft Article", - content: "Content", - authorId: "1", - }); - expect(article.status).toBe("draft"); - - const published = await publishArticleUseCase(article.id); - expect(published.status).toBe("published"); - expect(published.id).toBe(article.id); - }); - - it("throws NotFoundError for non-existent article", async () => { - await expect( - publishArticleUseCase("non-existent-id") - ).rejects.toBeInstanceOf(NotFoundError); - }); -}); -``` - -### Step 2: Implement the use case - -Create `src/application/use-cases/content/publish-article.use-case.ts`: - -```typescript -import type { Article } from "@/entities/models/article"; -import { NotFoundError } from "@/entities/errors/common"; -import { getInjection } from "@/di/container"; - -export async function publishArticleUseCase( - articleId: string -): Promise
{ - const articlesRepository = getInjection("IArticlesRepository"); - - const updated = await articlesRepository.updateArticle(articleId, { - status: "published", - updatedAt: new Date(), - }); - - if (!updated) { - throw new NotFoundError("Article not found"); - } - - return updated; -} -``` - -### Step 3: Export from core - -Add to `packages/core/src/index.ts`: - -```typescript -export { publishArticleUseCase } from "./application/use-cases/content/publish-article.use-case"; -``` - -### Step 4: Create controller - -Create `src/interface-adapters/controllers/content/` (add to `articles.controller.ts` or create a new file): - -```typescript -import { z } from "zod"; -import { InputParseError } from "@/entities/errors/common"; -import { publishArticleUseCase } from "@/application/use-cases/content/publish-article.use-case"; - -const publishInputSchema = z.object({ - articleId: z.string(), -}); - -export async function publishArticleController( - input: Partial> -) { - const { data, error: inputParseError } = publishInputSchema.safeParse(input); - if (inputParseError) { - throw new InputParseError("Invalid data", { cause: inputParseError }); - } - return await publishArticleUseCase(data.articleId); -} -``` - -### Step 5: Add tRPC procedure - -In `packages/api/src/router/content.router.ts`: - -```typescript -import { publishArticleController } from "@repo/core"; - -publishArticle: publicProcedure - .input(z.object({ articleId: z.string() })) - .mutation(async ({ input }) => { - return await publishArticleController(input); - }), -``` - -### Step 6: Run tests - -```bash -cd packages/core && pnpm vitest run -``` - ---- - -## Cross-References - -- `application/AGENTS.md` -- General use case patterns and the `IArticlesRepository` interface -- `entities/models/article.ts` -- `Article` type, `articleSchema`, `articleStatusSchema` -- `entities/errors/common.ts` -- `NotFoundError`, `InputParseError` -- `infrastructure/repositories/mock-articles.repository.ts` -- Mock implementation with in-memory storage -- `di/AGENTS.md` -- How `IArticlesRepository` is resolved (currently via `content.module.ts`) -- `packages/cms-core/src/collections/articles/` -- Payload CMS Articles collection (parallel data model) diff --git a/packages/core/src/application/use-cases/content/create-article.use-case.ts b/packages/core/src/application/use-cases/content/create-article.use-case.ts deleted file mode 100644 index 698a249..0000000 --- a/packages/core/src/application/use-cases/content/create-article.use-case.ts +++ /dev/null @@ -1,32 +0,0 @@ -import type { Article } from "@/entities/models/article"; -import { getInjection } from "@/di/container"; - -function generateSlug(title: string): string { - return title - .toLowerCase() - .replace(/[^a-z0-9]+/g, "-") - .replace(/^-|-$/g, ""); -} - -export async function createArticleUseCase(input: { - title: string; - content: string; - authorId: string; - slug?: string; -}): Promise
{ - const articlesRepository = getInjection("IArticlesRepository"); - - const now = new Date(); - const article: Article = { - id: crypto.randomUUID(), - title: input.title, - slug: input.slug ?? generateSlug(input.title), - content: input.content, - status: "draft", - authorId: input.authorId, - createdAt: now, - updatedAt: now, - }; - - return await articlesRepository.createArticle(article); -} diff --git a/packages/core/src/application/use-cases/content/get-articles.use-case.ts b/packages/core/src/application/use-cases/content/get-articles.use-case.ts deleted file mode 100644 index d9d5d52..0000000 --- a/packages/core/src/application/use-cases/content/get-articles.use-case.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { Article } from "@/entities/models/article"; -import { getInjection } from "@/di/container"; - -export async function getArticlesUseCase(options?: { - status?: string; - authorId?: string; - limit?: number; - offset?: number; -}): Promise { - const articlesRepository = getInjection("IArticlesRepository"); - return await articlesRepository.getArticles(options); -} diff --git a/packages/core/src/config.ts b/packages/core/src/config.ts deleted file mode 100644 index c438fb3..0000000 --- a/packages/core/src/config.ts +++ /dev/null @@ -1 +0,0 @@ -export const SESSION_COOKIE = "session"; diff --git a/packages/core/src/di/AGENTS.md b/packages/core/src/di/AGENTS.md deleted file mode 100644 index a78d312..0000000 --- a/packages/core/src/di/AGENTS.md +++ /dev/null @@ -1,246 +0,0 @@ -# DI -- InversifyJS Dependency Injection Container - -**Path:** `packages/core/src/di/` -**Role:** Wire together all abstract interfaces and their concrete implementations using InversifyJS. The container is the root composition point -- it knows about every layer and resolves dependencies at runtime. All other code accesses dependencies through `getInjection()`, never by importing implementations directly. - ---- - -## Complete Resolution Table - -| Symbol Key | Interface | Production Implementation | Mock Implementation | DI Module | -|---|---|---|---|---| -| `IUsersRepository` | `IUsersRepository` (getUser, getUserByUsername, createUser) | PayloadUsersRepository (future) | `MockUsersRepository` (`infrastructure/repositories/mock-users.repository.ts`) | `auth.module.ts` | -| `IArticlesRepository` | `IArticlesRepository` (getArticle, getArticles, createArticle, updateArticle) | PayloadArticlesRepository (future) | `MockArticlesRepository` (`infrastructure/repositories/mock-articles.repository.ts`) | `content.module.ts` | -| `IAuthenticationService` | `IAuthenticationService` (generateUserId, hashPassword, verifyPassword, validateSession, createSession, invalidateSession) | BetterAuthService (future) | `MockAuthenticationService` (`infrastructure/services/mock-auth.service.ts`) | `auth.module.ts` | -| `ITelemetryService` | `ITelemetryService` (startSpan) | OTelSentryService (future) | `MockTelemetryService` (`infrastructure/services/mock-telemetry.service.ts`) | `auth.module.ts` | - ---- - -## How to Register a New Dependency (Full Recipe) - -### Step 1: Add symbol and return type to `types.ts` - -```typescript -// di/types.ts -import type { IMyRepository } from "@/application/repositories/my.repository.interface"; - -export const DI_SYMBOLS = { - IAuthenticationService: Symbol.for("IAuthenticationService"), - ITelemetryService: Symbol.for("ITelemetryService"), - IUsersRepository: Symbol.for("IUsersRepository"), - IArticlesRepository: Symbol.for("IArticlesRepository"), - IMyRepository: Symbol.for("IMyRepository"), // <-- ADD THIS -}; - -export interface DI_RETURN_TYPES { - IAuthenticationService: IAuthenticationService; - ITelemetryService: ITelemetryService; - IUsersRepository: IUsersRepository; - IArticlesRepository: IArticlesRepository; - IMyRepository: IMyRepository; // <-- ADD THIS -} -``` - -The `DI_SYMBOLS` object maps string keys to unique `Symbol` values (used by InversifyJS for binding). The `DI_RETURN_TYPES` interface provides TypeScript type safety for `getInjection()`. - -### Step 2: Create the DI module file - -Create `di/modules/{domain}.module.ts` (or add to an existing one): - -```typescript -// di/modules/my-domain.module.ts -import { ContainerModule, interfaces } from "inversify"; - -import type { IMyRepository } from "@/application/repositories/my.repository.interface"; -import { MockMyRepository } from "@/infrastructure/repositories/mock-my.repository"; -import { DI_SYMBOLS } from "../types"; - -const initializeModule = (bind: interfaces.Bind) => { - bind(DI_SYMBOLS.IMyRepository).to(MockMyRepository); -}; - -export const MyDomainModule = new ContainerModule(initializeModule); -``` - -For modules with multiple bindings (like `auth.module.ts`): - -```typescript -const initializeModule = (bind: interfaces.Bind) => { - bind(DI_SYMBOLS.IUsersRepository).to(MockUsersRepository); - bind(DI_SYMBOLS.IAuthenticationService).to( - MockAuthenticationService - ); -}; -``` - -### Step 3: Load and unload the module in `container.ts` - -```typescript -// di/container.ts -import { MyDomainModule } from "./modules/my-domain.module"; - -export const initializeContainer = () => { - ApplicationContainer.load(AuthModule); - ApplicationContainer.load(ContentModule); - ApplicationContainer.load(MyDomainModule); // <-- ADD THIS -}; - -export const destroyContainer = () => { - ApplicationContainer.unload(AuthModule); - ApplicationContainer.unload(ContentModule); - ApplicationContainer.unload(MyDomainModule); // <-- ADD THIS -}; -``` - -Both `load` and `unload` must be updated. Forgetting `unload` causes test isolation failures. - ---- - -## Container Lifecycle - -### Production (non-test environments) - -```typescript -if (process.env.NODE_ENV !== "test") { - initializeContainer(); -} -``` - -The container auto-initializes when the module is first imported. All bindings are available immediately. - -### Test environments - -Tests manually control the container lifecycle: - -```typescript -import "reflect-metadata"; -import { afterEach, beforeEach } from "vitest"; -import { destroyContainer, initializeContainer } from "@/di/container"; - -beforeEach(() => { - initializeContainer(); // Load all modules, bind all implementations -}); - -afterEach(() => { - destroyContainer(); // Unload all modules, clear all bindings -}); -``` - -Why manual control in tests: -- Each test gets a fresh container with fresh Singleton instances. -- In-memory mock data does not leak between tests. -- Forgetting `destroyContainer` in `afterEach` causes state pollution: the mock repositories retain data from previous tests, causing flaky tests. - ---- - -## Scoping - -The container defaults to **Singleton** scope: - -```typescript -const ApplicationContainer = new Container({ - defaultScope: "Singleton", -}); -``` - -This means each call to `getInjection("IUsersRepository")` within a container lifecycle returns the same instance. This is correct for: -- Repositories (stateful mocks, connection pools in production) -- Services (auth sessions, telemetry clients) - -When to use **Transient** scope (a new instance per resolution): -- Stateless utility services -- Per-request scoped objects - -To override for a specific binding: - -```typescript -bind(DI_SYMBOLS.IMyService) - .to(MyService) - .inTransientScope(); -``` - ---- - -## `getInjection()` Usage in Use Cases - -```typescript -// In a use case file: -import { getInjection } from "@/di/container"; - -export async function myUseCase(input: { id: string }) { - // The string key is type-safe: it must match a key in DI_SYMBOLS. - // The return type is automatically inferred from DI_RETURN_TYPES. - const usersRepository = getInjection("IUsersRepository"); - // ^-- TypeScript infers: IUsersRepository - - const authService = getInjection("IAuthenticationService"); - // ^-- TypeScript infers: IAuthenticationService - - const user = await usersRepository.getUser(input.id); - // ... -} -``` - -The `getInjection` function signature: - -```typescript -export function getInjection( - symbol: K -): DI_RETURN_TYPES[K] { - return ApplicationContainer.get(DI_SYMBOLS[symbol]); -} -``` - -This provides full type safety: if you pass `"IUsersRepository"`, the return type is `IUsersRepository`. If you pass an invalid key, TypeScript reports a compile error. - ---- - -## DO NOT - -| Do Not | Why | -|---|---| -| Import from `apps/*` or framework packages (Next.js, TanStack) | DI is framework-agnostic. Framework code lives in apps. | -| Use the container outside of `@repo/core` | All external access goes through `getInjection()` or exported use case / controller functions. | -| Call `ApplicationContainer.get()` directly from use cases | Use `getInjection()` instead -- it provides type safety and a consistent API. | -| Forget to unload modules in `destroyContainer()` | Causes test state pollution (mock data leaks between tests). | -| Remove `import "reflect-metadata"` from `container.ts` | InversifyJS uses runtime reflection to read constructor parameter types. Without this import, `@inject()` decorators silently fail. | - ---- - -## tsconfig Requirements - -These settings are required for InversifyJS and MUST NOT be removed: - -| Setting | Where | Why | -|---|---|---| -| `experimentalDecorators: true` | `@repo/typescript-config/base.json` | Enables `@injectable()` and `@inject()` decorator syntax used by InversifyJS | -| `emitDecoratorMetadata: true` | `@repo/typescript-config/base.json` | Emits runtime type metadata that InversifyJS reads to auto-resolve constructor parameter types | -| `types: ["reflect-metadata", "node"]` | `packages/core/tsconfig.json` | Makes `reflect-metadata` type definitions globally available. Required for `emitDecoratorMetadata` to function | -| `import "reflect-metadata"` | Top of `container.ts` and every test file | Polyfills the `Reflect.metadata` API at runtime. Without this, decorator metadata is not stored and `@inject()` silently injects `undefined` | - -If any of these are removed, InversifyJS will throw errors like: -- `"No matching bindings found"` (metadata not emitted) -- `"Missing required @injectable annotation"` (decorators not enabled) -- `"Cannot read properties of undefined"` (reflect-metadata not imported) - ---- - -## File Structure - -``` -di/ - AGENTS.md - types.ts <-- DI_SYMBOLS + DI_RETURN_TYPES - container.ts <-- ApplicationContainer, initializeContainer, destroyContainer, getInjection - modules/ - auth.module.ts <-- Binds IUsersRepository, IAuthenticationService, ITelemetryService - content.module.ts <-- Binds IArticlesRepository -``` - ---- - -## Cross-References - -- `application/AGENTS.md` -- Defines the interfaces that are bound here -- `infrastructure/AGENTS.md` -- Provides the implementations that are bound here -- Root `AGENTS.md` -- Shows how DI fits into the full feature recipe diff --git a/packages/core/src/di/container.ts b/packages/core/src/di/container.ts deleted file mode 100644 index fd0e543..0000000 --- a/packages/core/src/di/container.ts +++ /dev/null @@ -1,32 +0,0 @@ -import "reflect-metadata"; -import { Container } from "inversify"; - -import { AuthModule } from "./modules/auth.module"; -import { ContentModule } from "./modules/content.module"; -import { DI_RETURN_TYPES, DI_SYMBOLS } from "./types"; - -const ApplicationContainer = new Container({ - defaultScope: "Singleton", -}); - -export const initializeContainer = () => { - ApplicationContainer.load(AuthModule); - ApplicationContainer.load(ContentModule); -}; - -export const destroyContainer = () => { - ApplicationContainer.unload(AuthModule); - ApplicationContainer.unload(ContentModule); -}; - -if (process.env.NODE_ENV !== "test") { - initializeContainer(); -} - -export function getInjection( - symbol: K -): DI_RETURN_TYPES[K] { - return ApplicationContainer.get(DI_SYMBOLS[symbol]); -} - -export { ApplicationContainer }; diff --git a/packages/core/src/di/modules/auth.module.ts b/packages/core/src/di/modules/auth.module.ts deleted file mode 100644 index cddce58..0000000 --- a/packages/core/src/di/modules/auth.module.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { ContainerModule, interfaces } from "inversify"; - -import type { IUsersRepository } from "@/application/repositories/users.repository.interface"; -import type { IAuthenticationService } from "@/application/services/auth.service.interface"; -import { MockUsersRepository } from "@/infrastructure/repositories/mock-users.repository"; -import { MockAuthenticationService } from "@/infrastructure/services/mock-auth.service"; -import { DI_SYMBOLS } from "../types"; - -const initializeModule = (bind: interfaces.Bind) => { - bind(DI_SYMBOLS.IUsersRepository).to(MockUsersRepository); - bind(DI_SYMBOLS.IAuthenticationService).to( - MockAuthenticationService - ); -}; - -export const AuthModule = new ContainerModule(initializeModule); diff --git a/packages/core/src/di/modules/content.module.ts b/packages/core/src/di/modules/content.module.ts deleted file mode 100644 index b8d3317..0000000 --- a/packages/core/src/di/modules/content.module.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { ContainerModule, interfaces } from "inversify"; - -import type { IArticlesRepository } from "@/application/repositories/articles.repository.interface"; -import { MockArticlesRepository } from "@/infrastructure/repositories/mock-articles.repository"; -import { DI_SYMBOLS } from "../types"; - -const initializeModule = (bind: interfaces.Bind) => { - bind(DI_SYMBOLS.IArticlesRepository).to( - MockArticlesRepository - ); -}; - -export const ContentModule = new ContainerModule(initializeModule); diff --git a/packages/core/src/di/types.ts b/packages/core/src/di/types.ts deleted file mode 100644 index c9fd476..0000000 --- a/packages/core/src/di/types.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { IAuthenticationService } from "@/application/services/auth.service.interface"; -import type { ITelemetryService } from "@/application/services/telemetry.service.interface"; -import type { IUsersRepository } from "@/application/repositories/users.repository.interface"; -import type { IArticlesRepository } from "@/application/repositories/articles.repository.interface"; - -export const DI_SYMBOLS = { - IAuthenticationService: Symbol.for("IAuthenticationService"), - ITelemetryService: Symbol.for("ITelemetryService"), - IUsersRepository: Symbol.for("IUsersRepository"), - IArticlesRepository: Symbol.for("IArticlesRepository"), -}; - -export interface DI_RETURN_TYPES { - IAuthenticationService: IAuthenticationService; - ITelemetryService: ITelemetryService; - IUsersRepository: IUsersRepository; - IArticlesRepository: IArticlesRepository; -} diff --git a/packages/core/src/entities/AGENTS.md b/packages/core/src/entities/AGENTS.md deleted file mode 100644 index 1f600d8..0000000 --- a/packages/core/src/entities/AGENTS.md +++ /dev/null @@ -1,212 +0,0 @@ -# Entities Layer -- Innermost, Zero Dependencies - -**Path:** `packages/core/src/entities/` -**Role:** Define the pure domain types (models) and domain error classes. This is the innermost layer of Clean Architecture. Nothing here has side effects, I/O, or async behavior. - ---- - -## Rules - -1. **NEVER** import from `application/`, `infrastructure/`, `interface-adapters/`, or `di/`. -2. **NEVER** import external libraries except `zod` (for schema validation in models). -3. Everything is **pure** -- no side effects, no I/O, no `async`, no `fetch`, no database calls. -4. Models are Zod schemas with inferred TypeScript types. -5. Errors are custom `Error` subclasses with domain-specific semantics. -6. Error classes always accept `(message: string, options?: ErrorOptions)` to support error chaining via `cause`. - ---- - -## Existing Models - -| Model | File | Schema | Fields | -|---|---|---|---| -| User | `models/user.ts` | `userSchema` | `id`, `username`, `passwordHash` | -| Article | `models/article.ts` | `articleSchema` | `id`, `title`, `slug`, `content`, `status` ("draft"/"published"), `authorId`, `createdAt`, `updatedAt` | -| Session | `models/session.ts` | `sessionSchema` | `id`, `userId`, `expiresAt` | -| Cookie | `models/cookie.ts` | (plain type, no Zod) | `name`, `value`, `attributes` (secure, path, domain, sameSite, httpOnly, maxAge, expires) | - ---- - -## Existing Errors - -| Error Class | File | When Thrown | -|---|---|---| -| `AuthenticationError` | `errors/auth.ts` | Wrong credentials during sign-in, or username already taken during sign-up | -| `UnauthenticatedError` | `errors/auth.ts` | Invalid or expired session when validating authentication | -| `UnauthorizedError` | `errors/auth.ts` | User lacks permission for the requested operation (future use) | -| `NotFoundError` | `errors/common.ts` | Requested resource does not exist (future use in update/delete operations) | -| `InputParseError` | `errors/common.ts` | Controller Zod validation fails. The `cause` property contains the `ZodError` for detailed field-level messages | - ---- - -## Complete Model Template - -Use this template when creating a new entity model: - -```typescript -// src/entities/models/{name}.ts -import { z } from "zod"; - -// 1. Define the Zod schema with all validation rules -export const {name}Schema = z.object({ - id: z.string(), - // ... add fields with Zod validators - createdAt: z.date(), - updatedAt: z.date(), -}); - -// 2. Infer the TypeScript type from the schema -export type {Name} = z.infer; - -// 3. If you have enum-like fields, define them separately for reuse: -// export const {name}StatusSchema = z.enum(["active", "inactive"]); -// export type {Name}Status = z.infer; -``` - -Real example from `article.ts`: - -```typescript -import { z } from "zod"; - -export const articleStatusSchema = z.enum(["draft", "published"]); - -export const articleSchema = z.object({ - id: z.string(), - title: z.string().min(1).max(255), - slug: z.string().min(1).max(255), - content: z.string(), - status: articleStatusSchema.default("draft"), - authorId: z.string(), - createdAt: z.date(), - updatedAt: z.date(), -}); - -export type Article = z.infer; -export type ArticleStatus = z.infer; -``` - ---- - -## Complete Error Template - -Use this template when creating a new error class: - -```typescript -// src/entities/errors/{domain}.ts -export class {Name}Error extends Error { - constructor(message: string, options?: ErrorOptions) { - super(message, options); - } -} -``` - -Real example from `auth.ts`: - -```typescript -export class AuthenticationError extends Error { - constructor(message: string, options?: ErrorOptions) { - super(message, options); - } -} - -export class UnauthenticatedError extends Error { - constructor(message: string, options?: ErrorOptions) { - super(message, options); - } -} - -export class UnauthorizedError extends Error { - constructor(message: string, options?: ErrorOptions) { - super(message, options); - } -} -``` - -The `options?: ErrorOptions` parameter is important -- it enables error chaining. Controllers pass Zod errors as `cause`: - -```typescript -throw new InputParseError("Invalid data", { cause: zodError }); -``` - ---- - -## Adding a New Model (Step-by-Step) - -### Step 1: Create the model file - -Create `src/entities/models/{name}.ts` following the template above. - -### Step 2: Export from the models barrel - -Edit `src/entities/models/index.ts` and add: - -```typescript -export { {name}Schema, type {Name} } from "./{name}"; -``` - -### Step 3: Verify the export chain - -The chain `models/index.ts` -> `entities/index.ts` -> `core/src/index.ts` uses `export *` at each level, so you only need to update `models/index.ts`. The exports will automatically flow through: - -- `src/entities/index.ts` contains: `export * from "./models/index";` -- `src/index.ts` contains: `export * from "./entities/index";` - -### Step 4: Use in application layer - -The model type is now available in repository interfaces, use cases, and controllers via: - -```typescript -import type { {Name} } from "@/entities/models/{name}"; -``` - ---- - -## Adding a New Error (Step-by-Step) - -### Step 1: Create or edit the error file - -If adding to an existing domain (e.g., auth), edit `src/entities/errors/auth.ts`. -If creating a new domain, create `src/entities/errors/{domain}.ts`. - -### Step 2: Export from the errors barrel - -Edit `src/entities/errors/index.ts`: - -```typescript -export { {Name}Error } from "./{domain}"; -``` - -### Step 3: Verify the export chain - -Same chain as models: `errors/index.ts` -> `entities/index.ts` -> `core/src/index.ts`. You only need to update `errors/index.ts`. - -### Step 4: Use in use cases and controllers - -```typescript -import { {Name}Error } from "@/entities/errors/{domain}"; - -// In a use case: -if (somethingWrong) { - throw new {Name}Error("Descriptive message"); -} -``` - ---- - -## File Structure - -``` -entities/ - AGENTS.md - index.ts <-- re-exports models/* and errors/* - models/ - index.ts <-- barrel: exports all models - user.ts - article.ts - session.ts - cookie.ts - errors/ - index.ts <-- barrel: exports all errors - auth.ts <-- AuthenticationError, UnauthenticatedError, UnauthorizedError - common.ts <-- NotFoundError, InputParseError -``` diff --git a/packages/core/src/entities/errors/auth.ts b/packages/core/src/entities/errors/auth.ts deleted file mode 100644 index 39cbb76..0000000 --- a/packages/core/src/entities/errors/auth.ts +++ /dev/null @@ -1,17 +0,0 @@ -export class AuthenticationError extends Error { - constructor(message: string, options?: ErrorOptions) { - super(message, options); - } -} - -export class UnauthenticatedError extends Error { - constructor(message: string, options?: ErrorOptions) { - super(message, options); - } -} - -export class UnauthorizedError extends Error { - constructor(message: string, options?: ErrorOptions) { - super(message, options); - } -} diff --git a/packages/core/src/entities/errors/common.ts b/packages/core/src/entities/errors/common.ts deleted file mode 100644 index ee3e94d..0000000 --- a/packages/core/src/entities/errors/common.ts +++ /dev/null @@ -1,11 +0,0 @@ -export class NotFoundError extends Error { - constructor(message: string, options?: ErrorOptions) { - super(message, options); - } -} - -export class InputParseError extends Error { - constructor(message: string, options?: ErrorOptions) { - super(message, options); - } -} diff --git a/packages/core/src/entities/errors/index.ts b/packages/core/src/entities/errors/index.ts deleted file mode 100644 index 9a41450..0000000 --- a/packages/core/src/entities/errors/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export { - AuthenticationError, - UnauthenticatedError, - UnauthorizedError, -} from "./auth"; -export { NotFoundError, InputParseError } from "./common"; diff --git a/packages/core/src/entities/index.ts b/packages/core/src/entities/index.ts deleted file mode 100644 index 6c5b32a..0000000 --- a/packages/core/src/entities/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./models/index"; -export * from "./errors/index"; diff --git a/packages/core/src/entities/models/article.ts b/packages/core/src/entities/models/article.ts deleted file mode 100644 index 59e15bd..0000000 --- a/packages/core/src/entities/models/article.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { z } from "zod"; - -export const articleStatusSchema = z.enum(["draft", "published"]); - -export const articleSchema = z.object({ - id: z.string(), - title: z.string().min(1).max(255), - slug: z.string().min(1).max(255), - content: z.string(), - status: articleStatusSchema.default("draft"), - authorId: z.string(), - createdAt: z.date(), - updatedAt: z.date(), -}); - -export type Article = z.infer; -export type ArticleStatus = z.infer; diff --git a/packages/core/src/entities/models/cookie.ts b/packages/core/src/entities/models/cookie.ts deleted file mode 100644 index f3dfa4a..0000000 --- a/packages/core/src/entities/models/cookie.ts +++ /dev/null @@ -1,15 +0,0 @@ -type CookieAttributes = { - secure?: boolean; - path?: string; - domain?: string; - sameSite?: "lax" | "strict" | "none"; - httpOnly?: boolean; - maxAge?: number; - expires?: Date; -}; - -export type Cookie = { - name: string; - value: string; - attributes: CookieAttributes; -}; diff --git a/packages/core/src/entities/models/index.ts b/packages/core/src/entities/models/index.ts deleted file mode 100644 index f1e7217..0000000 --- a/packages/core/src/entities/models/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -export { userSchema, type User } from "./user"; -export { - articleSchema, - articleStatusSchema, - type Article, - type ArticleStatus, -} from "./article"; -export { sessionSchema, type Session } from "./session"; -export type { Cookie } from "./cookie"; diff --git a/packages/core/src/entities/models/session.ts b/packages/core/src/entities/models/session.ts deleted file mode 100644 index cedf8a9..0000000 --- a/packages/core/src/entities/models/session.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { z } from "zod"; - -export const sessionSchema = z.object({ - id: z.string(), - userId: z.string(), - expiresAt: z.date(), -}); - -export type Session = z.infer; diff --git a/packages/core/src/entities/models/user.ts b/packages/core/src/entities/models/user.ts deleted file mode 100644 index 3de2240..0000000 --- a/packages/core/src/entities/models/user.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { z } from "zod"; - -export const userSchema = z.object({ - id: z.string(), - username: z.string().min(3).max(31), - passwordHash: z.string().min(6).max(255), -}); - -export type User = z.infer; diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts deleted file mode 100644 index a2b3477..0000000 --- a/packages/core/src/index.ts +++ /dev/null @@ -1,22 +0,0 @@ -// @repo/core — Clean Architecture core package -export * from "./entities/index"; -export * from "./application/repositories/index"; -export * from "./application/services/index"; -export { signInUseCase } from "./application/use-cases/auth/sign-in.use-case"; -export { signUpUseCase } from "./application/use-cases/auth/sign-up.use-case"; -export { signOutUseCase } from "./application/use-cases/auth/sign-out.use-case"; -export { createArticleUseCase } from "./application/use-cases/content/create-article.use-case"; -export { getArticlesUseCase } from "./application/use-cases/content/get-articles.use-case"; -export { signInController } from "./interface-adapters/controllers/auth/sign-in.controller"; -export { signUpController } from "./interface-adapters/controllers/auth/sign-up.controller"; -export { signOutController } from "./interface-adapters/controllers/auth/sign-out.controller"; -export { - createArticleController, - getArticlesController, -} from "./interface-adapters/controllers/content/articles.controller"; -export { - getInjection, - initializeContainer, - destroyContainer, -} from "./di/container"; -export { DI_SYMBOLS } from "./di/types"; diff --git a/packages/core/src/infrastructure/AGENTS.md b/packages/core/src/infrastructure/AGENTS.md deleted file mode 100644 index 161de6c..0000000 --- a/packages/core/src/infrastructure/AGENTS.md +++ /dev/null @@ -1,261 +0,0 @@ -# Infrastructure Layer -- Concrete Implementations - -**Path:** `packages/core/src/infrastructure/` -**Role:** Provide concrete implementations of the abstract interfaces defined in `application/`. Every repository interface and service interface gets at least one implementation here. All implementations use the `@injectable()` decorator for InversifyJS DI. - ---- - -## Rules - -1. Implements interfaces from `application/` (repository or service interfaces). -2. Imports from `application/` (interfaces) and `entities/` (types, errors). -3. **NEVER** imported by `application/` or `entities/`. The dependency arrow points inward: infrastructure depends on application, not the reverse. -4. **NEVER** imported by `interface-adapters/` (controllers). Controllers use interfaces via DI. -5. Can import external libraries (Payload client, Better Auth, Sentry, etc.). -6. Can import `@repo/cms-client` -- this is the bridge to Payload CMS data. Note: `@repo/cms-client` is standalone with zero monorepo dependencies. -7. Every implementation class MUST have the `@injectable()` decorator. Without it, InversifyJS cannot construct the class. -8. Always provide a **mock implementation** for every real implementation. Tests run with mocks; production runs with real implementations. - ---- - -## Existing Implementations - -| Implementation | File | Implements | Type | -|---|---|---|---| -| `MockUsersRepository` | `repositories/mock-users.repository.ts` | `IUsersRepository` | Mock (in-memory array, pre-seeded with alice + bob) | -| `MockArticlesRepository` | `repositories/mock-articles.repository.ts` | `IArticlesRepository` | Mock (in-memory array, starts empty) | -| `MockAuthenticationService` | `services/mock-auth.service.ts` | `IAuthenticationService` | Mock (hashed_password prefix, in-memory session store) | -| `MockTelemetryService` | `services/mock-telemetry.service.ts` | `ITelemetryService` | Mock (no-op, just calls the wrapped function) | - -The `MockAuthenticationService` is notable because it uses constructor injection: - -```typescript -@injectable() -export class MockAuthenticationService implements IAuthenticationService { - constructor( - @inject(DI_SYMBOLS.IUsersRepository) - private _usersRepository: IUsersRepository - ) {} - // ... -} -``` - -This demonstrates how InversifyJS resolves nested dependencies automatically. When the container creates `MockAuthenticationService`, it first resolves `IUsersRepository` and injects it. - ---- - -## Naming Conventions - -| Type | Pattern | Example | -|---|---|---| -| Production repository | `{provider}-{name}.repository.ts` | `payload-users.repository.ts` | -| Mock repository | `mock-{name}.repository.ts` | `mock-users.repository.ts` | -| Production service | `{provider}-{name}.service.ts` | `better-auth.service.ts`, `otel-telemetry.service.ts` | -| Mock service | `mock-{name}.service.ts` | `mock-auth.service.ts` | - -The `{provider}` prefix identifies the external system: `payload`, `better`, `otel`, `sentry`, etc. - ---- - -## Implementation Template (Repository) - -```typescript -// src/infrastructure/repositories/{provider}-{name}.repository.ts -import { injectable } from "inversify"; - -import type { IMyRepository } from "@/application/repositories/my.repository.interface"; -import type { MyEntity } from "@/entities/models/my-entity"; - -@injectable() -export class ProviderMyRepository implements IMyRepository { - // Constructor can accept injected dependencies if needed: - // constructor( - // @inject(DI_SYMBOLS.ISomeDep) private someDep: ISomeDep - // ) {} - - async findById(id: string): Promise { - // Call external system (database, API, etc.) - throw new Error("Not implemented"); - } - - async findAll(): Promise { - throw new Error("Not implemented"); - } - - async create(input: MyEntity): Promise { - throw new Error("Not implemented"); - } - - async update(id: string, input: Partial): Promise { - throw new Error("Not implemented"); - } -} -``` - ---- - -## Mock Implementation Template - -```typescript -// src/infrastructure/repositories/mock-{name}.repository.ts -import { injectable } from "inversify"; - -import type { IMyRepository } from "@/application/repositories/my.repository.interface"; -import type { MyEntity } from "@/entities/models/my-entity"; - -@injectable() -export class MockMyRepository implements IMyRepository { - private _items: MyEntity[] = []; - - async findById(id: string): Promise { - return this._items.find((item) => item.id === id); - } - - async findAll(): Promise { - return [...this._items]; - } - - async create(input: MyEntity): Promise { - this._items.push(input); - return input; - } - - async update(id: string, input: Partial): Promise { - const index = this._items.findIndex((item) => item.id === id); - if (index === -1) return undefined; - this._items[index] = { ...this._items[index]!, ...input }; - return this._items[index]; - } -} -``` - -Mock pattern notes: -- Use `private _items: MyEntity[] = []` for in-memory storage. -- Spread arrays (`[...this._items]`) to avoid returning mutable references. -- Use `Array.find` for single lookups, `Array.filter` for queries. -- Use `Array.findIndex` + splice/spread for updates. -- Pre-seed data in the array initializer if tests need existing records (see `MockUsersRepository` which pre-seeds alice and bob). - ---- - -## Adding a New Implementation (Recipe) - -### Step 1: Create the implementation file - -Follow the implementation template above. Place it in: -- `repositories/` for data access implementations -- `services/` for external service implementations - -### Step 2: Ensure `@injectable()` is present - -```typescript -import { injectable } from "inversify"; - -@injectable() -export class MyImplementation implements IMyInterface { - // ... -} -``` - -If the class needs another DI dependency injected via constructor, use `@inject()`: - -```typescript -import { inject, injectable } from "inversify"; -import { DI_SYMBOLS } from "@/di/types"; - -@injectable() -export class MyImplementation implements IMyInterface { - constructor( - @inject(DI_SYMBOLS.IOtherDependency) - private _otherDep: IOtherDependency - ) {} -} -``` - -### Step 3: Create or verify the mock implementation - -If this is a production implementation, verify that a corresponding mock already exists. If adding a new interface, create the mock at the same time. - -### Step 4: Register in the DI module - -Update the appropriate module in `di/modules/` to bind the implementation: - -```typescript -// For development/mock: -bind(DI_SYMBOLS.IMyInterface).to(MockMyImplementation); - -// For production (when adding real implementations): -// if (process.env.NODE_ENV === "production") { -// bind(DI_SYMBOLS.IMyInterface).to(RealMyImplementation); -// } else { -// bind(DI_SYMBOLS.IMyInterface).to(MockMyImplementation); -// } -``` - -### Step 5: Test via use cases - -Infrastructure implementations are tested indirectly through use case tests. The DI container wires mock implementations in test mode. Run `pnpm vitest run` to verify. - ---- - -## Note on @repo/cms-client - -The `@repo/cms-client` package is standalone. It provides a `PayloadClient` interface with two modes: - -- **Local mode**: Direct Payload SDK access (for server-side code co-located with Payload) -- **HTTP mode**: REST API calls (for code running separately from Payload) - -Infrastructure implementations can import and use `@repo/cms-client` to bridge Payload CMS data into Clean Architecture: - -```typescript -import { injectable } from "inversify"; -import { createPayloadClient, type PayloadClient } from "@repo/cms-client"; -import type { IArticlesRepository } from "@/application/repositories/articles.repository.interface"; -import type { Article } from "@/entities/models/article"; - -@injectable() -export class PayloadArticlesRepository implements IArticlesRepository { - private client: PayloadClient; - - constructor() { - this.client = createPayloadClient({ - mode: "http", - baseURL: process.env.CMS_URL ?? "http://localhost:3001", - }); - } - - async getArticles(options?: { status?: string }): Promise { - const result = await this.client.find
("articles", { - where: options?.status ? { status: { equals: options.status } } : undefined, - }); - return result.docs; - } - - // ... other methods -} -``` - -This is the intended pattern for production implementations. The infrastructure layer owns the translation between Payload's data format and the core entity types. - ---- - -## File Structure - -``` -infrastructure/ - AGENTS.md - repositories/ - mock-users.repository.ts - mock-articles.repository.ts - services/ - mock-auth.service.ts - mock-telemetry.service.ts -``` - ---- - -## Cross-References - -- `application/AGENTS.md` -- Defines the interfaces that implementations here must satisfy -- `entities/AGENTS.md` -- Types used in implementation method signatures -- `di/AGENTS.md` -- Where implementations are bound to their interface symbols diff --git a/packages/core/src/infrastructure/repositories/mock-articles.repository.ts b/packages/core/src/infrastructure/repositories/mock-articles.repository.ts deleted file mode 100644 index 3dbfff9..0000000 --- a/packages/core/src/infrastructure/repositories/mock-articles.repository.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { injectable } from "inversify"; - -import type { IArticlesRepository } from "@/application/repositories/articles.repository.interface"; -import type { Article } from "@/entities/models/article"; - -@injectable() -export class MockArticlesRepository implements IArticlesRepository { - private _articles: Article[] = []; - - async getArticle(id: string): Promise
{ - return this._articles.find((a) => a.id === id); - } - - async getArticles(options?: { - status?: string; - authorId?: string; - limit?: number; - offset?: number; - }): Promise { - let result = [...this._articles]; - if (options?.status) { - result = result.filter((a) => a.status === options.status); - } - if (options?.authorId) { - result = result.filter((a) => a.authorId === options.authorId); - } - const offset = options?.offset ?? 0; - const limit = options?.limit ?? 50; - return result.slice(offset, offset + limit); - } - - async createArticle(input: Article): Promise
{ - this._articles.push(input); - return input; - } - - async updateArticle( - id: string, - input: Partial
- ): Promise
{ - const index = this._articles.findIndex((a) => a.id === id); - if (index === -1) return undefined; - this._articles[index] = { ...this._articles[index]!, ...input }; - return this._articles[index]; - } -} diff --git a/packages/core/src/infrastructure/repositories/mock-users.repository.ts b/packages/core/src/infrastructure/repositories/mock-users.repository.ts deleted file mode 100644 index c2d8c90..0000000 --- a/packages/core/src/infrastructure/repositories/mock-users.repository.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { injectable } from "inversify"; - -import type { IUsersRepository } from "@/application/repositories/users.repository.interface"; -import type { User } from "@/entities/models/user"; - -@injectable() -export class MockUsersRepository implements IUsersRepository { - private _users: User[] = [ - { id: "1", username: "alice", passwordHash: "hashed_password_alice" }, - { id: "2", username: "bob", passwordHash: "hashed_password_bob" }, - ]; - - async getUser(id: string): Promise { - return this._users.find((u) => u.id === id); - } - - async getUserByUsername(username: string): Promise { - return this._users.find((u) => u.username === username); - } - - async createUser(input: User): Promise { - this._users.push(input); - return input; - } -} diff --git a/packages/core/src/infrastructure/services/mock-auth.service.ts b/packages/core/src/infrastructure/services/mock-auth.service.ts deleted file mode 100644 index 890939e..0000000 --- a/packages/core/src/infrastructure/services/mock-auth.service.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { inject, injectable } from "inversify"; - -import type { IAuthenticationService } from "@/application/services/auth.service.interface"; -import type { IUsersRepository } from "@/application/repositories/users.repository.interface"; -import { UnauthenticatedError } from "@/entities/errors/auth"; -import { sessionSchema, type Session } from "@/entities/models/session"; -import type { Cookie } from "@/entities/models/cookie"; -import type { User } from "@/entities/models/user"; -import { DI_SYMBOLS } from "@/di/types"; -import { SESSION_COOKIE } from "@/config"; - -@injectable() -export class MockAuthenticationService implements IAuthenticationService { - private _sessions: Record = {}; - - constructor( - @inject(DI_SYMBOLS.IUsersRepository) - private _usersRepository: IUsersRepository - ) {} - - generateUserId(): string { - return (Math.random() + 1).toString(36).substring(7); - } - - async hashPassword(password: string): Promise { - return `hashed_${password}`; - } - - async verifyPassword(hash: string, password: string): Promise { - return hash === `hashed_${password}`; - } - - async validateSession( - sessionId: string - ): Promise<{ user: User; session: Session }> { - const result = this._sessions[sessionId]; - if (!result) { - throw new UnauthenticatedError("Unauthenticated"); - } - const user = await this._usersRepository.getUser(result.user.id); - if (!user) { - throw new UnauthenticatedError("Unauthenticated"); - } - return { user, session: result.session }; - } - - async createSession( - user: User - ): Promise<{ session: Session; cookie: Cookie }> { - const session = sessionSchema.parse({ - id: "session_" + user.id, - userId: user.id, - expiresAt: new Date(Date.now() + 86400000 * 7), - }); - const cookie: Cookie = { - name: SESSION_COOKIE, - value: session.id, - attributes: {}, - }; - this._sessions[session.id] = { session, user }; - return { session, cookie }; - } - - async invalidateSession( - sessionId: string - ): Promise<{ blankCookie: Cookie }> { - delete this._sessions[sessionId]; - return { - blankCookie: { name: SESSION_COOKIE, value: "", attributes: {} }, - }; - } -} diff --git a/packages/core/src/infrastructure/services/mock-telemetry.service.ts b/packages/core/src/infrastructure/services/mock-telemetry.service.ts deleted file mode 100644 index ed36589..0000000 --- a/packages/core/src/infrastructure/services/mock-telemetry.service.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { injectable } from "inversify"; - -import type { ITelemetryService } from "@/application/services/telemetry.service.interface"; - -@injectable() -export class MockTelemetryService implements ITelemetryService { - async startSpan(_name: string, fn: () => T | Promise): Promise { - return fn(); - } -} diff --git a/packages/core/src/interface-adapters/controllers/AGENTS.md b/packages/core/src/interface-adapters/controllers/AGENTS.md deleted file mode 100644 index 077cbc8..0000000 --- a/packages/core/src/interface-adapters/controllers/AGENTS.md +++ /dev/null @@ -1,279 +0,0 @@ -# Controllers -- Interface Adapters Layer - -**Path:** `packages/core/src/interface-adapters/controllers/` -**Role:** Controllers are the outermost layer within `@repo/core`. They validate external input using Zod schemas, delegate to use cases for business logic, and return results. Controllers are called by tRPC router procedures in `@repo/api`. - ---- - -## Rules - -1. Controllers validate input with Zod `safeParse` and throw `InputParseError` on failure. -2. Controllers call use cases -- they **NEVER** contain business logic themselves. -3. Controllers import from `application/` (use cases) and `entities/` (types, errors) only. -4. Controllers **NEVER** import from `infrastructure/`. They must not know about concrete data access. -5. Controllers **NEVER** import from `di/` directly. They call use case functions, which internally use `getInjection()`. -6. Each controller function is a plain `async function`, not a class. This keeps them lightweight and easy to call from any transport layer (tRPC, REST, GraphQL). -7. Input parameters use `Partial>` to accept potentially incomplete input, then validate with `safeParse`. - ---- - -## Existing Controllers - -| Controller | File | Functions | Calls | -|---|---|---|---| -| Sign In | `auth/sign-in.controller.ts` | `signInController(input)` | `signInUseCase` | -| Sign Up | `auth/sign-up.controller.ts` | `signUpController(input)` | `signUpUseCase` | -| Sign Out | `auth/sign-out.controller.ts` | `signOutController(sessionId)` | `signOutUseCase` | -| Articles | `content/articles.controller.ts` | `createArticleController(input)`, `getArticlesController(input)` | `createArticleUseCase`, `getArticlesUseCase` | - ---- - -## Complete Controller Template - -```typescript -// src/interface-adapters/controllers/{domain}/{name}.controller.ts -import { z } from "zod"; - -import { InputParseError } from "@/entities/errors/common"; -import type { MyEntity } from "@/entities/models/my-entity"; -import { myUseCase } from "@/application/use-cases/{domain}/my.use-case"; - -// 1. Define input validation schema -const inputSchema = z.object({ - field1: z.string().min(1).max(255), - field2: z.number().positive(), - optionalField: z.string().optional(), -}); - -// 2. Export the controller function -export async function myController( - input: Partial> -): Promise { - // 3. Validate input with safeParse - const { data, error: inputParseError } = inputSchema.safeParse(input); - - // 4. Throw InputParseError if validation fails - if (inputParseError) { - throw new InputParseError("Invalid data", { cause: inputParseError }); - } - - // 5. Delegate to use case and return result - return await myUseCase(data); -} -``` - ---- - -## Error Mapping Pattern - -Controllers handle two categories of errors: - -### 1. Input Validation Errors (thrown by the controller itself) - -When Zod `safeParse` fails, the controller throws `InputParseError` with the `ZodError` as `cause`: - -```typescript -const { data, error: inputParseError } = inputSchema.safeParse(input); -if (inputParseError) { - throw new InputParseError("Invalid data", { cause: inputParseError }); -} -``` - -The tRPC router (or any other caller) can inspect `error.cause` to extract field-level validation messages. - -### 2. Business Logic Errors (thrown by use cases, pass through the controller) - -Use cases throw domain errors (`AuthenticationError`, `NotFoundError`, etc.). Controllers do NOT catch these -- they propagate to the caller. The tRPC error handler maps them to appropriate HTTP status codes. - -### Error Flow - -``` -Controller - | - +--> InputParseError (Zod validation failed) -> 400 Bad Request - | - +--> Use Case - | - +--> AuthenticationError -> 401 Unauthorized - +--> UnauthenticatedError -> 401 Unauthorized - +--> UnauthorizedError -> 403 Forbidden - +--> NotFoundError -> 404 Not Found - +--> (unexpected) -> 500 Internal Server Error -``` - ---- - -## Real Examples - -### Simple validation (sign-in.controller.ts) - -```typescript -import { z } from "zod"; -import { InputParseError } from "@/entities/errors/common"; -import type { Cookie } from "@/entities/models/cookie"; -import { signInUseCase } from "@/application/use-cases/auth/sign-in.use-case"; - -const inputSchema = z.object({ - username: z.string().min(3).max(31), - password: z.string().min(6).max(255), -}); - -export async function signInController( - input: Partial> -): Promise { - const { data, error: inputParseError } = inputSchema.safeParse(input); - - if (inputParseError) { - throw new InputParseError("Invalid data", { cause: inputParseError }); - } - - const { cookie } = await signInUseCase(data); - return cookie; -} -``` - -### Cross-field validation (sign-up.controller.ts) - -```typescript -const inputSchema = z - .object({ - username: z.string().min(3).max(31), - password: z.string().min(6).max(255), - confirmPassword: z.string().min(6).max(255), - }) - .superRefine(({ password, confirmPassword }, ctx) => { - if (confirmPassword !== password) { - ctx.addIssue({ - code: "custom", - message: "The passwords did not match", - path: ["password"], - }); - ctx.addIssue({ - code: "custom", - message: "The passwords did not match", - path: ["confirmPassword"], - }); - } - }); -``` - -### Multiple functions in one file (articles.controller.ts) - -When a domain has related operations, group them in one controller file: - -```typescript -const createInputSchema = z.object({ title: z.string().min(1), /* ... */ }); -const getInputSchema = z.object({ status: z.string().optional(), /* ... */ }); - -export async function createArticleController(input) { /* ... */ } -export async function getArticlesController(input) { /* ... */ } -``` - ---- - -## Adding a New Controller (Recipe) - -### Step 1: Create the controller file - -Create `src/interface-adapters/controllers/{domain}/{name}.controller.ts` following the template. - -### Step 2: Define the Zod input schema - -Define validation rules that match what the tRPC router will pass in. Use `.safeParse()`, not `.parse()`. - -### Step 3: Implement the controller function - -Validate -> delegate to use case -> return result. No business logic. - -### Step 4: Export from core - -Add to `src/index.ts`: - -```typescript -export { myController } from "./interface-adapters/controllers/{domain}/{name}.controller"; -``` - -### Step 5: Create tRPC router procedure - -In `packages/api/src/router/{domain}.router.ts`, import the controller from `@repo/core` and wire it: - -```typescript -import { myController } from "@repo/core"; - -myProcedure: publicProcedure - .input(z.object({ /* same shape as controller schema */ })) - .mutation(async ({ input }) => { - return await myController(input); - }), -``` - -### Step 6: Write tests - -Create `tests/unit/controllers/{domain}/{name}.controller.test.ts`: - -```typescript -import "reflect-metadata"; -import { afterEach, beforeEach, describe, expect, it } from "vitest"; - -import { - destroyContainer, - initializeContainer, -} from "@/di/container"; -import { myController } from "@/interface-adapters/controllers/{domain}/{name}.controller"; -import { InputParseError } from "@/entities/errors/common"; - -beforeEach(() => { - initializeContainer(); -}); - -afterEach(() => { - destroyContainer(); -}); - -describe("myController", () => { - it("succeeds with valid input", async () => { - const result = await myController({ - field1: "valid", - field2: 42, - }); - expect(result).toBeDefined(); - }); - - it("throws InputParseError for invalid input", async () => { - await expect( - myController({ field1: "" }) // missing required fields - ).rejects.toBeInstanceOf(InputParseError); - }); - - it("propagates domain errors from use case", async () => { - await expect( - myController({ /* input that triggers domain error */ }) - ).rejects.toBeInstanceOf(SomeDomainError); - }); -}); -``` - ---- - -## File Structure - -``` -interface-adapters/ - controllers/ - AGENTS.md - auth/ - sign-in.controller.ts - sign-up.controller.ts - sign-out.controller.ts - content/ - articles.controller.ts -``` - ---- - -## Cross-References - -- `application/AGENTS.md` -- Use cases that controllers delegate to -- `entities/AGENTS.md` -- Error classes and entity types used in controllers -- Root `AGENTS.md` -- How controllers fit into the full data flow -- `packages/api/AGENTS.md` -- tRPC routers that call controllers diff --git a/packages/core/src/interface-adapters/controllers/auth/sign-in.controller.ts b/packages/core/src/interface-adapters/controllers/auth/sign-in.controller.ts deleted file mode 100644 index 48a792a..0000000 --- a/packages/core/src/interface-adapters/controllers/auth/sign-in.controller.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { z } from "zod"; - -import { InputParseError } from "@/entities/errors/common"; -import type { Cookie } from "@/entities/models/cookie"; -import { signInUseCase } from "@/application/use-cases/auth/sign-in.use-case"; - -const inputSchema = z.object({ - username: z.string().min(3).max(31), - password: z.string().min(6).max(255), -}); - -export async function signInController( - input: Partial> -): Promise { - const { data, error: inputParseError } = inputSchema.safeParse(input); - - if (inputParseError) { - throw new InputParseError("Invalid data", { cause: inputParseError }); - } - - const { cookie } = await signInUseCase(data); - return cookie; -} diff --git a/packages/core/src/interface-adapters/controllers/auth/sign-out.controller.ts b/packages/core/src/interface-adapters/controllers/auth/sign-out.controller.ts deleted file mode 100644 index bbe18a1..0000000 --- a/packages/core/src/interface-adapters/controllers/auth/sign-out.controller.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { InputParseError } from "@/entities/errors/common"; -import type { Cookie } from "@/entities/models/cookie"; -import { signOutUseCase } from "@/application/use-cases/auth/sign-out.use-case"; - -export async function signOutController( - sessionId: string | undefined -): Promise { - if (!sessionId) { - throw new InputParseError("Must provide a session ID"); - } - - const { blankCookie } = await signOutUseCase(sessionId); - return blankCookie; -} diff --git a/packages/core/src/interface-adapters/controllers/auth/sign-up.controller.ts b/packages/core/src/interface-adapters/controllers/auth/sign-up.controller.ts deleted file mode 100644 index a973239..0000000 --- a/packages/core/src/interface-adapters/controllers/auth/sign-up.controller.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { z } from "zod"; - -import { InputParseError } from "@/entities/errors/common"; -import { signUpUseCase } from "@/application/use-cases/auth/sign-up.use-case"; - -const inputSchema = z - .object({ - username: z.string().min(3).max(31), - password: z.string().min(6).max(255), - confirmPassword: z.string().min(6).max(255), - }) - .superRefine(({ password, confirmPassword }, ctx) => { - if (confirmPassword !== password) { - ctx.addIssue({ - code: "custom", - message: "The passwords did not match", - path: ["password"], - }); - ctx.addIssue({ - code: "custom", - message: "The passwords did not match", - path: ["confirmPassword"], - }); - } - }); - -export async function signUpController( - input: Partial> -): Promise> { - const { data, error: inputParseError } = inputSchema.safeParse(input); - - if (inputParseError) { - throw new InputParseError("Invalid data", { cause: inputParseError }); - } - - return await signUpUseCase(data); -} diff --git a/packages/core/src/interface-adapters/controllers/content/articles.controller.ts b/packages/core/src/interface-adapters/controllers/content/articles.controller.ts deleted file mode 100644 index 982ce28..0000000 --- a/packages/core/src/interface-adapters/controllers/content/articles.controller.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { z } from "zod"; - -import { InputParseError } from "@/entities/errors/common"; -import type { Article } from "@/entities/models/article"; -import { createArticleUseCase } from "@/application/use-cases/content/create-article.use-case"; -import { getArticlesUseCase } from "@/application/use-cases/content/get-articles.use-case"; - -const createInputSchema = z.object({ - title: z.string().min(1).max(255), - content: z.string(), - authorId: z.string(), - slug: z.string().optional(), -}); - -const getInputSchema = z.object({ - status: z.string().optional(), - authorId: z.string().optional(), - limit: z.number().optional(), - offset: z.number().optional(), -}); - -export async function createArticleController( - input: Partial> -): Promise
{ - const { data, error: inputParseError } = createInputSchema.safeParse(input); - - if (inputParseError) { - throw new InputParseError("Invalid data", { cause: inputParseError }); - } - - return await createArticleUseCase(data); -} - -export async function getArticlesController( - input: Partial> -): Promise { - const { data, error: inputParseError } = getInputSchema.safeParse(input); - - if (inputParseError) { - throw new InputParseError("Invalid data", { cause: inputParseError }); - } - - return await getArticlesUseCase(data); -} diff --git a/packages/core/tests/unit/controllers/auth/sign-in.controller.test.ts b/packages/core/tests/unit/controllers/auth/sign-in.controller.test.ts deleted file mode 100644 index 4012138..0000000 --- a/packages/core/tests/unit/controllers/auth/sign-in.controller.test.ts +++ /dev/null @@ -1,41 +0,0 @@ -import "reflect-metadata"; -import { afterEach, beforeEach, describe, expect, it } from "vitest"; - -import { - destroyContainer, - initializeContainer, -} from "@/di/container"; -import { signInController } from "@/interface-adapters/controllers/auth/sign-in.controller"; -import { InputParseError } from "@/entities/errors/common"; -import { AuthenticationError } from "@/entities/errors/auth"; - -beforeEach(() => { - initializeContainer(); -}); - -afterEach(() => { - destroyContainer(); -}); - -describe("signInController", () => { - it("returns cookie for valid input", async () => { - const cookie = await signInController({ - username: "alice", - password: "password_alice", - }); - expect(cookie).toHaveProperty("name"); - expect(cookie).toHaveProperty("value"); - }); - - it("throws InputParseError for invalid input", async () => { - await expect( - signInController({ username: "ab", password: "short" }) - ).rejects.toBeInstanceOf(InputParseError); - }); - - it("throws AuthenticationError for wrong credentials", async () => { - await expect( - signInController({ username: "alice", password: "wrongpassword" }) - ).rejects.toBeInstanceOf(AuthenticationError); - }); -}); diff --git a/packages/core/tests/unit/controllers/auth/sign-out.controller.test.ts b/packages/core/tests/unit/controllers/auth/sign-out.controller.test.ts deleted file mode 100644 index cda91f1..0000000 --- a/packages/core/tests/unit/controllers/auth/sign-out.controller.test.ts +++ /dev/null @@ -1,30 +0,0 @@ -import "reflect-metadata"; -import { afterEach, beforeEach, describe, expect, it } from "vitest"; - -import { - destroyContainer, - initializeContainer, -} from "@/di/container"; -import { signOutController } from "@/interface-adapters/controllers/auth/sign-out.controller"; -import { InputParseError } from "@/entities/errors/common"; - -beforeEach(() => { - initializeContainer(); -}); - -afterEach(() => { - destroyContainer(); -}); - -describe("signOutController", () => { - it("returns blank cookie for valid session", async () => { - const cookie = await signOutController("some-session-id"); - expect(cookie.value).toBe(""); - }); - - it("throws InputParseError when no session ID provided", async () => { - await expect(signOutController(undefined)).rejects.toBeInstanceOf( - InputParseError - ); - }); -}); diff --git a/packages/core/tests/unit/controllers/auth/sign-up.controller.test.ts b/packages/core/tests/unit/controllers/auth/sign-up.controller.test.ts deleted file mode 100644 index 43073dd..0000000 --- a/packages/core/tests/unit/controllers/auth/sign-up.controller.test.ts +++ /dev/null @@ -1,44 +0,0 @@ -import "reflect-metadata"; -import { afterEach, beforeEach, describe, expect, it } from "vitest"; - -import { - destroyContainer, - initializeContainer, -} from "@/di/container"; -import { signUpController } from "@/interface-adapters/controllers/auth/sign-up.controller"; -import { InputParseError } from "@/entities/errors/common"; - -beforeEach(() => { - initializeContainer(); -}); - -afterEach(() => { - destroyContainer(); -}); - -describe("signUpController", () => { - it("returns session, cookie, and user for valid input", async () => { - const result = await signUpController({ - username: "newuser", - password: "securepassword", - confirmPassword: "securepassword", - }); - expect(result).toHaveProperty("session"); - expect(result).toHaveProperty("cookie"); - expect(result).toHaveProperty("user"); - }); - - it("throws InputParseError when passwords don't match", async () => { - await expect( - signUpController({ - username: "newuser", - password: "password1", - confirmPassword: "password2", - }) - ).rejects.toBeInstanceOf(InputParseError); - }); - - it("throws InputParseError for missing fields", async () => { - await expect(signUpController({})).rejects.toBeInstanceOf(InputParseError); - }); -}); diff --git a/packages/core/tests/unit/controllers/content/articles.controller.test.ts b/packages/core/tests/unit/controllers/content/articles.controller.test.ts deleted file mode 100644 index 35f8939..0000000 --- a/packages/core/tests/unit/controllers/content/articles.controller.test.ts +++ /dev/null @@ -1,50 +0,0 @@ -import "reflect-metadata"; -import { afterEach, beforeEach, describe, expect, it } from "vitest"; - -import { - destroyContainer, - initializeContainer, -} from "@/di/container"; -import { - createArticleController, - getArticlesController, -} from "@/interface-adapters/controllers/content/articles.controller"; -import { InputParseError } from "@/entities/errors/common"; - -beforeEach(() => { - initializeContainer(); -}); - -afterEach(() => { - destroyContainer(); -}); - -describe("createArticleController", () => { - it("creates an article with valid input", async () => { - const result = await createArticleController({ - title: "Test Article", - content: "Some content", - authorId: "1", - }); - expect(result.title).toBe("Test Article"); - expect(result.slug).toBe("test-article"); - }); - - it("throws InputParseError for missing title", async () => { - await expect( - createArticleController({ content: "content", authorId: "1" } as any) - ).rejects.toBeInstanceOf(InputParseError); - }); -}); - -describe("getArticlesController", () => { - it("returns articles", async () => { - await createArticleController({ - title: "Article", - content: "Content", - authorId: "1", - }); - const result = await getArticlesController({}); - expect(result).toHaveLength(1); - }); -}); diff --git a/packages/core/tests/unit/use-cases/auth/sign-in.use-case.test.ts b/packages/core/tests/unit/use-cases/auth/sign-in.use-case.test.ts deleted file mode 100644 index 28b74cb..0000000 --- a/packages/core/tests/unit/use-cases/auth/sign-in.use-case.test.ts +++ /dev/null @@ -1,41 +0,0 @@ -import "reflect-metadata"; -import { afterEach, beforeEach, describe, expect, it } from "vitest"; - -import { - destroyContainer, - initializeContainer, -} from "@/di/container"; -import { signInUseCase } from "@/application/use-cases/auth/sign-in.use-case"; -import { AuthenticationError } from "@/entities/errors/auth"; - -beforeEach(() => { - initializeContainer(); -}); - -afterEach(() => { - destroyContainer(); -}); - -describe("signInUseCase", () => { - it("returns session and cookie for valid credentials", async () => { - const result = await signInUseCase({ - username: "alice", - password: "password_alice", - }); - expect(result).toHaveProperty("session"); - expect(result).toHaveProperty("cookie"); - expect(result.session.userId).toBe("1"); - }); - - it("throws AuthenticationError for non-existing user", async () => { - await expect( - signInUseCase({ username: "non-existing", password: "any" }) - ).rejects.toBeInstanceOf(AuthenticationError); - }); - - it("throws AuthenticationError for wrong password", async () => { - await expect( - signInUseCase({ username: "alice", password: "wrong" }) - ).rejects.toBeInstanceOf(AuthenticationError); - }); -}); diff --git a/packages/core/tests/unit/use-cases/auth/sign-out.use-case.test.ts b/packages/core/tests/unit/use-cases/auth/sign-out.use-case.test.ts deleted file mode 100644 index 862e2cf..0000000 --- a/packages/core/tests/unit/use-cases/auth/sign-out.use-case.test.ts +++ /dev/null @@ -1,24 +0,0 @@ -import "reflect-metadata"; -import { afterEach, beforeEach, describe, expect, it } from "vitest"; - -import { - destroyContainer, - initializeContainer, -} from "@/di/container"; -import { signOutUseCase } from "@/application/use-cases/auth/sign-out.use-case"; - -beforeEach(() => { - initializeContainer(); -}); - -afterEach(() => { - destroyContainer(); -}); - -describe("signOutUseCase", () => { - it("returns a blank cookie", async () => { - const result = await signOutUseCase("some-session-id"); - expect(result).toHaveProperty("blankCookie"); - expect(result.blankCookie.value).toBe(""); - }); -}); diff --git a/packages/core/tests/unit/use-cases/auth/sign-up.use-case.test.ts b/packages/core/tests/unit/use-cases/auth/sign-up.use-case.test.ts deleted file mode 100644 index 37640b4..0000000 --- a/packages/core/tests/unit/use-cases/auth/sign-up.use-case.test.ts +++ /dev/null @@ -1,36 +0,0 @@ -import "reflect-metadata"; -import { afterEach, beforeEach, describe, expect, it } from "vitest"; - -import { - destroyContainer, - initializeContainer, -} from "@/di/container"; -import { signUpUseCase } from "@/application/use-cases/auth/sign-up.use-case"; -import { AuthenticationError } from "@/entities/errors/auth"; - -beforeEach(() => { - initializeContainer(); -}); - -afterEach(() => { - destroyContainer(); -}); - -describe("signUpUseCase", () => { - it("creates user and returns session, cookie, and user info", async () => { - const result = await signUpUseCase({ - username: "newuser", - password: "securepassword", - }); - expect(result).toHaveProperty("session"); - expect(result).toHaveProperty("cookie"); - expect(result).toHaveProperty("user"); - expect(result.user.username).toBe("newuser"); - }); - - it("throws AuthenticationError if username is taken", async () => { - await expect( - signUpUseCase({ username: "alice", password: "anypassword" }) - ).rejects.toBeInstanceOf(AuthenticationError); - }); -}); diff --git a/packages/core/tests/unit/use-cases/content/create-article.use-case.test.ts b/packages/core/tests/unit/use-cases/content/create-article.use-case.test.ts deleted file mode 100644 index 37fff51..0000000 --- a/packages/core/tests/unit/use-cases/content/create-article.use-case.test.ts +++ /dev/null @@ -1,41 +0,0 @@ -import "reflect-metadata"; -import { afterEach, beforeEach, describe, expect, it } from "vitest"; - -import { - destroyContainer, - initializeContainer, -} from "@/di/container"; -import { createArticleUseCase } from "@/application/use-cases/content/create-article.use-case"; - -beforeEach(() => { - initializeContainer(); -}); - -afterEach(() => { - destroyContainer(); -}); - -describe("createArticleUseCase", () => { - it("creates an article with generated slug and draft status", async () => { - const result = await createArticleUseCase({ - title: "My First Article", - content: "Hello world", - authorId: "1", - }); - expect(result.title).toBe("My First Article"); - expect(result.slug).toBe("my-first-article"); - expect(result.status).toBe("draft"); - expect(result.authorId).toBe("1"); - expect(result.id).toBeDefined(); - }); - - it("uses provided slug if given", async () => { - const result = await createArticleUseCase({ - title: "Another Article", - content: "Content here", - authorId: "1", - slug: "custom-slug", - }); - expect(result.slug).toBe("custom-slug"); - }); -}); diff --git a/packages/core/tests/unit/use-cases/content/get-articles.use-case.test.ts b/packages/core/tests/unit/use-cases/content/get-articles.use-case.test.ts deleted file mode 100644 index a586299..0000000 --- a/packages/core/tests/unit/use-cases/content/get-articles.use-case.test.ts +++ /dev/null @@ -1,51 +0,0 @@ -import "reflect-metadata"; -import { afterEach, beforeEach, describe, expect, it } from "vitest"; - -import { - destroyContainer, - initializeContainer, -} from "@/di/container"; -import { createArticleUseCase } from "@/application/use-cases/content/create-article.use-case"; -import { getArticlesUseCase } from "@/application/use-cases/content/get-articles.use-case"; - -beforeEach(() => { - initializeContainer(); -}); - -afterEach(() => { - destroyContainer(); -}); - -describe("getArticlesUseCase", () => { - it("returns empty array when no articles exist", async () => { - const result = await getArticlesUseCase(); - expect(result).toEqual([]); - }); - - it("returns created articles", async () => { - await createArticleUseCase({ - title: "Article One", - content: "Content one", - authorId: "1", - }); - await createArticleUseCase({ - title: "Article Two", - content: "Content two", - authorId: "1", - }); - - const result = await getArticlesUseCase(); - expect(result).toHaveLength(2); - }); - - it("filters by status", async () => { - await createArticleUseCase({ - title: "Draft Article", - content: "Draft", - authorId: "1", - }); - - const result = await getArticlesUseCase({ status: "published" }); - expect(result).toHaveLength(0); - }); -}); diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json deleted file mode 100644 index 498e915..0000000 --- a/packages/core/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "@repo/typescript-config/base.json", - "compilerOptions": { - "baseUrl": ".", - "paths": { - "@/*": ["./src/*"] - }, - "types": ["reflect-metadata", "node"] - }, - "include": ["src/**/*.ts"], - "exclude": ["node_modules", "dist"] -} diff --git a/packages/core/tsconfig.test.json b/packages/core/tsconfig.test.json deleted file mode 100644 index d1afefe..0000000 --- a/packages/core/tsconfig.test.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src/**/*.ts", "tests/**/*.ts"] -} diff --git a/packages/core/vitest.config.ts b/packages/core/vitest.config.ts deleted file mode 100644 index b83f875..0000000 --- a/packages/core/vitest.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { defineConfig } from "vitest/config"; -import { fileURLToPath, URL } from "node:url"; - -export default defineConfig({ - test: { - globals: true, - coverage: { - provider: "v8", - reportsDirectory: "./tests/coverage", - }, - }, - resolve: { - alias: { - "@": fileURLToPath(new URL("./src", import.meta.url)), - }, - }, -}); diff --git a/packages/ui/AGENTS.md b/packages/ui/AGENTS.md deleted file mode 100644 index f934039..0000000 --- a/packages/ui/AGENTS.md +++ /dev/null @@ -1,345 +0,0 @@ -# @repo/ui -- Atomic Design Component Library - -## Purpose - -Shared UI component library built with shadcn/ui patterns, Tailwind CSS v4, and organized by Atomic Design levels. All components have co-located Storybook stories. This package is consumed by all frontend apps (`apps/web-next`, `apps/web-tanstack`). - -## Atomic Design Classification Guide - -| Level | Definition | Examples | Import Rules | -|---|---|---|---| -| Atom | Single HTML element, cannot be broken down further | Button, Input, Label, Badge, Separator, Icon | Can import: `lib/`, `styles/`. NEVER import: molecules, organisms, templates | -| Molecule | 2-3 atoms composed together, single responsibility | FormField, SearchBar, Tooltip, Select, Dropdown | Can import: `atoms/`, `lib/`. NEVER import: organisms, templates | -| Organism | Complex self-contained section with multiple molecules/atoms | DataTable, Dialog, Header, Sidebar, Card, Navbar | Can import: `atoms/`, `molecules/`, `lib/`. NEVER import: templates | -| Template | Page-level layout shell, content-agnostic (uses children/slots) | DashboardLayout, AuthLayout, MarketingLayout | Can import: `atoms/`, `molecules/`, `organisms/`, `lib/` | -| Page | Template filled with real data | **LIVES IN `apps/`, NOT IN THIS PACKAGE** | N/A | - -## Import Rules Table - -| Level | Can import from | NEVER import from | -|---|---|---| -| Atoms | `lib/`, `hooks/`, `styles/` | `molecules/`, `organisms/`, `templates/` | -| Molecules | `atoms/`, `lib/`, `hooks/` | `organisms/`, `templates/` | -| Organisms | `atoms/`, `molecules/`, `lib/`, `hooks/` | `templates/` | -| Templates | `atoms/`, `molecules/`, `organisms/`, `lib/`, `hooks/` | (nothing above -- top level) | - -## Component Rules Per Level - -- **Atoms:** No margins or positioning (consumer controls layout). No internal state. No business logic. Accept `className` prop for composition. Use `forwardRef` for DOM elements. -- **Molecules:** Single responsibility. Minimal controlled state (e.g., open/closed). Compose atoms only. Accept `className` for outer container. -- **Organisms:** Can have internal state and sub-components. Can fetch context. Self-contained sections of a page. -- **Templates:** Use `children` or named slots (`sidebar`, `header`, etc.) for content injection. NEVER hard-code content or data. - -## File Structure - -``` -packages/ui/ - src/ - lib/ - utils.ts # cn() utility (clsx + twMerge) - styles/ - globals.css # Tailwind v4 @theme tokens, @import "tailwindcss" - atoms/ - button/ - button.tsx # Button component (5 variants, 3 sizes) - button.stories.tsx # Storybook stories - index.ts # Barrel export - input/ - input.tsx # Input component - input.stories.tsx - index.ts - label/ - label.tsx # Label component - index.ts - index.ts # Barrel: re-exports all atoms - molecules/ - form-field/ - form-field.tsx # FormField = Label + Input + error/description - form-field.stories.tsx - index.ts - index.ts # Barrel: re-exports all molecules - organisms/ - index.ts # Barrel (empty -- no organisms yet) - templates/ - index.ts # Barrel (empty -- no templates yet) - index.ts # Package entry: re-exports cn + all levels - package.json - AGENTS.md -``` - -## Existing Components - -### Button (Atom) - -- **Variants:** `default`, `secondary`, `destructive`, `outline`, `ghost` -- **Sizes:** `sm` (h-9), `default` (h-10), `lg` (h-11) -- **Props:** Extends `ButtonHTMLAttributes` plus `variant` and `size` -- **Uses:** `forwardRef`, `cn()` for class merging - -### Input (Atom) - -- **Props:** Extends `InputHTMLAttributes` -- **Uses:** `forwardRef`, `cn()` for class merging -- Full styling: border, focus ring, disabled state, file input support - -### Label (Atom) - -- **Props:** Extends `LabelHTMLAttributes` -- **Uses:** `forwardRef`, `cn()` for class merging -- Handles `peer-disabled` state - -### FormField (Molecule) - -- **Props:** Extends `InputProps` plus `label` (string), `error?` (string), `description?` (string) -- **Composes:** Label + Input -- Auto-generates `id` from label text if not provided - -## cn() Utility - -The `cn()` function merges Tailwind classes safely using `clsx` + `tailwind-merge`: - -```typescript -import { clsx, type ClassValue } from "clsx"; -import { twMerge } from "tailwind-merge"; - -export function cn(...inputs: ClassValue[]) { - return twMerge(clsx(inputs)); -} -``` - -Usage in components: - -```tsx - - - ))} - - ); -} -``` - -Key patterns: -- The page component (`page.tsx`) is a server component by default -- no `"use client"` needed -- Data-fetching components that use `useTRPC()` must be client components (`"use client"`) -- Import UI components from `@repo/ui`, never recreate them locally - -## Payload Initialization Pattern (Server-Side Local API) - -For server-side access to Payload CMS data (e.g., in server components, API routes, or server actions), create a Payload client initializer: +The provider (in `src/app/providers.tsx`): ```typescript -// src/lib/payload.ts -import { getPayload } from "payload"; -import config from "@repo/cms-core/src/payload.config"; -import { createPayloadClient, type PayloadClient } from "@repo/cms-client"; +"use client"; +import { TrpcProvider } from "@repo/core-trpc/next"; -let cachedClient: PayloadClient | null = null; - -export async function getPayloadClient(): Promise { - if (cachedClient) return cachedClient; - - const payload = await getPayload({ config }); - cachedClient = createPayloadClient({ mode: "local", payload }); - return cachedClient; -} -``` - -Usage in a server component: - -```tsx -// src/app/articles/page.tsx (server component) -import { getPayloadClient } from "@/lib/payload"; - -export default async function ArticlesPage() { - const client = await getPayloadClient(); - const result = await client.find("articles", { - where: { status: { equals: "published" } }, - sort: "-publishedAt", - limit: 20, - }); - - return ( -
-

Articles

-
    - {result.docs.map((article) => ( -
  • {article.title}
  • - ))} -
-
- ); +export function Providers({ children }: React.ReactNode) { + return {children}; } ``` @@ -188,16 +65,43 @@ export default async function ArticlesPage() { | Dependency | Purpose | |---|---| -| `@repo/api` | `appRouter` for the tRPC HTTP endpoint | -| `@repo/api-client` | `ApiProvider` + `useTRPC()` for client-side data fetching | -| `@repo/ui` | Shared UI components (Button, Input, Label, FormField, etc.) | -| `next` | Next.js 15 framework with App Router | -| `react` / `react-dom` | React 19 runtime | +| `@repo/core-api` | `appRouter` for tRPC endpoint | +| `@repo/core-trpc/next` | Next.js tRPC client + provider | +| `@repo/core-ui` | Design system components | +| `@repo/auth`, `@repo/blog`, etc. | Feature packages (indirectly via core-api) | +| `next` | Next.js 15 framework | +| `@trpc/server` | tRPC server (fetch adapter) | + +## Test conventions + +- Unit tests colocated: `src/app/blog/article-list.test.tsx` +- Vitest environment: `jsdom` +- e2e tests in `e2e/` folder: `*.spec.ts` +- Run: `pnpm test --filter @repo/web-next` (units) or `pnpm test:e2e` (Playwright) + +## E2E Test Setup + +Playwright config in `e2e/playwright.config.ts`: + +```typescript +import { defineConfig, devices } from "@playwright/test"; + +export default defineConfig({ + testDir: "./e2e", + webServer: { + command: "pnpm dev", + port: 3000, + reuseExistingServer: !process.env.CI, + }, + use: { ...devices["Desktop Chrome"].use }, +}); +``` + +Run: `pnpm test:e2e` starts the dev server and runs all `.spec.ts` files. ## Cross-References -- **tRPC routers:** `packages/api/` -- see `packages/api/AGENTS.md` -- **tRPC client/hooks:** `packages/api-client/` -- see `packages/api-client/AGENTS.md` -- **UI components:** `packages/ui/` -- see `packages/ui/AGENTS.md` -- **CMS client:** `packages/cms-client/` -- see `packages/cms-client/AGENTS.md` -- **CMS config:** `packages/cms-core/` -- see `packages/cms-core/AGENTS.md` +- **Feature packages:** `packages/{auth,blog,media,marketing-pages,navigation}/` +- **tRPC composition:** `packages/core-api/AGENTS.md` +- **tRPC client + provider:** `packages/core-trpc/AGENTS.md` +- **UI components:** `packages/core-ui/AGENTS.md` diff --git a/apps/web-tanstack/AGENTS.md b/apps/web-tanstack/AGENTS.md index d30f52e..65df905 100644 --- a/apps/web-tanstack/AGENTS.md +++ b/apps/web-tanstack/AGENTS.md @@ -1,8 +1,10 @@ -# apps/web-tanstack -- TanStack Start Reference App +# AGENTS.md — apps/web-tanstack + +TanStack Start reference application using TanStack Router with file-based routing. Demonstrates that feature packages are framework-agnostic by consuming the same features as Next.js (via `@repo/core-api`) using TanStack's architecture instead. ## Purpose -TanStack Start reference application using TanStack Router with file-based routing. Demonstrates how to consume `@repo/api-client` for tRPC data fetching and `@repo/ui` for components. Like `apps/web-next`, this is a thin app -- business logic lives in `@repo/core`, UI components live in `@repo/ui`. +Proof that features are framework-portable. This app consumes the exact same feature packages and tRPC routers as `apps/web-next`, but through TanStack Start's server/client architecture instead of Next.js App Router. ## Port: 3002 @@ -10,149 +12,107 @@ TanStack Start reference application using TanStack Router with file-based routi pnpm dev --filter @repo/web-tanstack # http://localhost:3002 ``` +Requires tRPC endpoint (from `apps/web-next` or another backend): + +```bash +pnpm dev --filter @repo/web-next # Serves tRPC at http://localhost:3000/api/trpc +pnpm dev --filter @repo/web-tanstack # http://localhost:3002 +``` + ## Key Files | File | Purpose | |---|---| -| `src/routes/__root.tsx` | Root layout -- creates the root route, wraps with `` and `` | -| `src/routes/index.tsx` | Home page route (`/`) | +| `src/routes/__root.tsx` | Root layout — wraps all routes with `` from `@repo/core-trpc/tanstack` | +| `src/routes/index.tsx` | Home page (`/`) | +| `src/routes/blog/index.tsx` | Blog listing (`/blog`) | +| `src/routes/blog/$slug.tsx` | Dynamic blog post (`/blog/:slug`) | +| `e2e/` | Playwright end-to-end tests | ## File-Based Routing -TanStack Router uses file-based routing where file paths in `src/routes/` map directly to URL paths: +TanStack Router uses file-based routing where file paths map directly to URL routes: -| File | URL | Description | -|---|---|---| -| `src/routes/__root.tsx` | (all routes) | Root layout, wraps all child routes | -| `src/routes/index.tsx` | `/` | Home page | -| `src/routes/about.tsx` | `/about` | Static page | -| `src/routes/articles/index.tsx` | `/articles` | Article listing | -| `src/routes/articles/$id.tsx` | `/articles/:id` | Single article (dynamic param) | +| File | URL | +|---|---| +| `src/routes/__root.tsx` | Root (all routes) | +| `src/routes/index.tsx` | `/` | +| `src/routes/blog/index.tsx` | `/blog` | +| `src/routes/blog/$slug.tsx` | `/blog/:slug` | -### Naming conventions: -- `__root.tsx` -- special root layout file, always wraps all routes -- `index.tsx` -- index route for its directory (e.g., `/articles/index.tsx` matches `/articles`) -- `$paramName.tsx` -- dynamic route segment (e.g., `$id.tsx` captures `:id`) -- Nested folders create nested URL segments +Naming conventions: +- `__root.tsx` — special root layout +- `index.tsx` — index route for its directory +- `$paramName.tsx` — dynamic segment -## Provider Setup +## tRPC Setup -The `` wraps the entire app in `__root.tsx`: +The root route wraps with ``: -```tsx +```typescript // src/routes/__root.tsx -import { Outlet, createRootRoute } from "@tanstack/react-router"; -import { ApiProvider } from "@repo/api-client"; +import { TrpcProvider } from "@repo/core-trpc/tanstack"; +import { Outlet } from "@tanstack/react-router"; export const Route = createRootRoute({ component: () => ( - + - + ), }); ``` -Note: The `trpcUrl` points to the Next.js app's tRPC endpoint at `http://localhost:3000/api/trpc`. In production, this should be configured via environment variables. +Note: `trpcUrl` must point to a running tRPC endpoint (e.g., from `apps/web-next`). -## Recipe: Adding a New Route with Data Fetching +## Fetching data in routes -This example adds an `/articles` route that lists published articles. - -### Step 1: Create the route file - -Create `src/routes/articles/index.tsx`: - -```tsx +```typescript +// src/routes/blog/$slug.tsx import { createFileRoute } from "@tanstack/react-router"; -import { useTRPC } from "@repo/api-client"; -import { useQuery } from "@tanstack/react-query"; -import { Button } from "@repo/ui"; - -export const Route = createFileRoute("/articles/")({ - component: ArticlesPage, -}); - -function ArticlesPage() { - const trpc = useTRPC(); - const { data, isLoading, error } = useQuery( - trpc.content.listArticles.queryOptions({ status: "published", limit: 20 }) - ); - - if (isLoading) return

Loading articles...

; - if (error) return

Error: {error.message}

; - - return ( -
-

Articles

-
    - {data?.map((article) => ( -
  • -

    {article.title}

    - -
  • - ))} -
-
- ); -} -``` - -### Step 2: Add a dynamic route for individual articles - -Create `src/routes/articles/$id.tsx`: - -```tsx -import { createFileRoute } from "@tanstack/react-router"; -import { useTRPC } from "@repo/api-client"; +import { useTRPC } from "@repo/core-trpc"; import { useQuery } from "@tanstack/react-query"; -export const Route = createFileRoute("/articles/$id")({ - component: ArticlePage, +export const Route = createFileRoute("/blog/$slug")({ + component: BlogPostPage, }); -function ArticlePage() { - const { id } = Route.useParams(); +function BlogPostPage() { + const { slug } = Route.useParams(); const trpc = useTRPC(); - - // Use the article ID from the URL parameter - // (Assuming a getArticle procedure exists on the content router) + const { data, isLoading } = useQuery( - trpc.content.listArticles.queryOptions({ limit: 1 }) + trpc.blog.getBySlug.queryOptions({ slug }) ); if (isLoading) return

Loading...

; - - return ( -
-

Article {id}

-
- ); + return
{data?.title}
; } ``` -Key patterns: -- Every route file exports a `Route` created via `createFileRoute(path)(...)` -- The `component` property defines the React component for that route -- Use `Route.useParams()` to access dynamic parameters (e.g., `$id`) -- Data fetching uses the same `useTRPC()` + `useQuery()` pattern as Next.js -- Import UI components from `@repo/ui`, never recreate them locally - ## Dependencies | Dependency | Purpose | |---|---| -| `@repo/api` | `AppRouter` type (transitive via `@repo/api-client`) | -| `@repo/api-client` | `ApiProvider` + `useTRPC()` for client-side data fetching | -| `@repo/ui` | Shared UI components | -| `@tanstack/react-router` | TanStack Router for file-based routing | +| `@repo/core-api` | AppRouter type (via core-trpc) | +| `@repo/core-trpc/tanstack` | TanStack tRPC client + provider | +| `@repo/core-ui` | Design system components | +| `@tanstack/react-router` | File-based routing | +| `@tanstack/react-query` | Data fetching + caching | | `react` / `react-dom` | React 19 runtime | +## Test conventions + +- e2e tests in `e2e/` folder: `*.spec.ts` +- Playwright config in `e2e/playwright.config.ts` +- Run: `pnpm test:e2e` (both Next.js and TanStack) + +Parallel to `apps/web-next` e2e: validates that features work across frameworks. + ## Cross-References -- **tRPC routers:** `packages/api/` -- see `packages/api/AGENTS.md` -- **tRPC client/hooks:** `packages/api-client/` -- see `packages/api-client/AGENTS.md` -- **UI components:** `packages/ui/` -- see `packages/ui/AGENTS.md` -- **Next.js app (serves the tRPC endpoint):** `apps/web-next/` -- see `apps/web-next/AGENTS.md` +- **Feature packages:** `packages/{auth,blog,media,marketing-pages,navigation}/` +- **tRPC composition:** `packages/core-api/AGENTS.md` +- **tRPC client + provider:** `packages/core-trpc/AGENTS.md` +- **UI components:** `packages/core-ui/AGENTS.md` +- **Next.js app (serves tRPC):** `apps/web-next/AGENTS.md` From 385670125216ff62354ed614e341acf1f1d8edf1 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 10:02:33 +0200 Subject: [PATCH 129/129] fix(lint): exempt next-env.d.ts triple-slash + declare globalEnv vars next-env.d.ts is a generated file using triple-slash references that TypeScript requires. ESLint exemption added in apps/web-next config only. Also declare CI, DATABASE_URL, PAYLOAD_SECRET, NODE_ENV in turbo.json globalEnv so turbo/no-undeclared-env-vars stops warning. Co-Authored-By: Claude Opus 4.7 (1M context) --- apps/web-next/eslint.config.js | 10 +++++++++- turbo.json | 1 + 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/apps/web-next/eslint.config.js b/apps/web-next/eslint.config.js index 35479e2..6b076ed 100644 --- a/apps/web-next/eslint.config.js +++ b/apps/web-next/eslint.config.js @@ -1,3 +1,11 @@ import baseConfig from "@repo/eslint-config/base"; -export default baseConfig; +export default [ + ...baseConfig, + { + files: ["next-env.d.ts"], + rules: { + "@typescript-eslint/triple-slash-reference": "off", + }, + }, +]; diff --git a/turbo.json b/turbo.json index 4acfc80..038e136 100644 --- a/turbo.json +++ b/turbo.json @@ -1,5 +1,6 @@ { "$schema": "https://turborepo.dev/schema.json", + "globalEnv": ["CI", "DATABASE_URL", "PAYLOAD_SECRET", "NODE_ENV"], "tasks": { "build": { "dependsOn": ["^build"],