From 675ee3d185b0c26b11a2f71fd3024cfc04a24865 Mon Sep 17 00:00:00 2001 From: aliamerj Date: Sat, 21 Feb 2026 17:14:30 +0300 Subject: [PATCH 1/4] update dashboard and next js to 16 --- @types/next-auth.d.ts | 26 - actions/apiKeys.ts | 13 +- actions/aws/index.ts | 10 +- actions/connctions/delete/index.ts | 10 +- actions/connctions/new/index.ts | 2 - actions/connctions/set/index.ts | 10 +- actions/connctions/stop/index.ts | 8 +- actions/connctions/sync/index.ts | 11 +- app/(protected)/connections/new/page.tsx | 8 +- app/(protected)/connections/page.tsx | 10 +- app/(protected)/integration/page.tsx | 10 +- app/(protected)/page.tsx | 66 +- app/api/auth/[...all]/route.ts | 3 + app/api/auth/[...nextauth]/route.ts | 4 - app/api/connections/[id]/files/route.ts | 2 +- app/api/connections/[id]/route.ts | 2 +- app/api/connections/dropbox/callback/route.ts | 10 +- .../google-drive/callback/route.ts | 19 +- app/api/retrievals/route.ts | 28 +- app/api/webhooks/paddle/route.ts | 2 +- app/apple-icon.png | Bin 12559 -> 16710 bytes app/authorized/layout.tsx | 9 +- app/favicon.ico | Bin 15086 -> 15086 bytes app/global.css | 213 +- app/icon.png | Bin 6503 -> 8429 bytes app/icon.svg | 11 +- app/layout.tsx | 19 +- app/login/page.tsx | 22 +- app/manifest.json | 4 +- app/opengraph-image.jpg | Bin 77316 -> 52261 bytes app/sitemap.ts | 24 + auth.ts | 70 - components.json | 12 +- components/Auth/AuthForm.tsx | 340 + components/Avatar/UserAvatar.tsx | 8 +- components/LoginForm/login-form.tsx | 97 - components/Logo/logo.tsx | 18 +- components/app-sidebar.tsx | 13 +- components/component-example.tsx | 495 + components/example.tsx | 55 + components/keysList/KeysList.tsx | 14 +- components/nav-user.tsx | 14 +- components/ui/accordion.tsx | 81 + components/ui/alert-dialog.tsx | 184 + components/ui/alert.tsx | 111 +- components/ui/aspect-ratio.tsx | 11 + components/ui/avatar.tsx | 147 +- components/ui/badge.tsx | 35 +- components/ui/breadcrumb.tsx | 175 +- components/ui/button-group.tsx | 83 + components/ui/button.tsx | 69 +- components/ui/calendar.tsx | 222 + components/ui/card.tsx | 150 +- components/ui/carousel.tsx | 242 + components/ui/chart.tsx | 256 +- components/ui/checkbox.tsx | 45 +- components/ui/collapsible.tsx | 30 +- components/ui/combobox.tsx | 294 + components/ui/command.tsx | 189 + components/ui/context-menu.tsx | 257 + components/ui/dialog.tsx | 210 +- components/ui/direction.tsx | 22 + components/ui/drawer.tsx | 177 +- components/ui/dropdown-menu.tsx | 400 +- components/ui/empty.tsx | 104 + components/ui/field.tsx | 227 + components/ui/hover-card.tsx | 44 + components/ui/input-group.tsx | 147 + components/ui/input-otp.tsx | 87 + components/ui/input.tsx | 29 +- components/ui/item.tsx | 195 + components/ui/kbd.tsx | 26 + components/ui/label.tsx | 34 +- components/ui/menubar.tsx | 271 + components/ui/native-select.tsx | 52 + components/ui/navigation-menu.tsx | 161 + components/ui/pagination.tsx | 134 + components/ui/popover.tsx | 89 + components/ui/progress.tsx | 43 +- components/ui/radio-group.tsx | 44 + components/ui/resizable.tsx | 50 + components/ui/scroll-area.tsx | 85 +- components/ui/select.tsx | 291 +- components/ui/separator.tsx | 25 +- components/ui/sheet.tsx | 212 +- components/ui/sidebar.tsx | 934 +- components/ui/skeleton.tsx | 8 +- components/ui/slider.tsx | 59 + components/ui/sonner.tsx | 49 + components/ui/spinner.tsx | 10 + components/ui/switch.tsx | 33 + components/ui/table.tsx | 175 +- components/ui/tabs.tsx | 133 +- components/ui/textarea.tsx | 12 +- components/ui/toast.tsx | 129 - components/ui/toaster.tsx | 35 - components/ui/toggle-group.tsx | 89 + components/ui/toggle.tsx | 46 + components/ui/tooltip.tsx | 69 +- db/index.ts | 9 +- db/schema.ts | 178 + db/schemas/connections.ts | 66 - db/schemas/users.ts | 113 - drizzle.config.ts | 2 +- drizzle/meta/_journal.json | 7 + eslint.config.mjs | 18 + fileProcessors/index.ts | 2 +- hooks/use-mobile.ts | 19 + lib/api_key.ts | 3 +- lib/auth-client.ts | 12 + lib/auth.ts | 57 + lib/utils.ts | 35 - package-lock.json | 19221 ++++++++-------- package.json | 57 +- postcss.config.js | 7 +- public/dcup_dark.svg | 10 +- public/dcup_light.svg | 10 +- public/web-app-manifest-192x192.png | Bin 12780 -> 4094 bytes public/web-app-manifest-512x512.png | Bin 31233 -> 17769 bytes {svc_parser => rag-engine}/.dockerignore | 1 + {svc_parser => rag-engine}/Dockerfile | 0 svc_parser/.gitignore | 2 - svc_parser/app/__init__.py | 0 svc_parser/app/main.py | 75 - svc_parser/pyrightconfig.json | 5 - svc_parser/requirements.txt | 4 - tsconfig.json | 34 +- 127 files changed, 16450 insertions(+), 12710 deletions(-) delete mode 100644 @types/next-auth.d.ts create mode 100644 app/api/auth/[...all]/route.ts delete mode 100644 app/api/auth/[...nextauth]/route.ts create mode 100644 app/sitemap.ts delete mode 100644 auth.ts create mode 100644 components/Auth/AuthForm.tsx delete mode 100644 components/LoginForm/login-form.tsx create mode 100644 components/component-example.tsx create mode 100644 components/example.tsx create mode 100644 components/ui/accordion.tsx create mode 100644 components/ui/alert-dialog.tsx create mode 100644 components/ui/aspect-ratio.tsx create mode 100644 components/ui/button-group.tsx create mode 100644 components/ui/calendar.tsx create mode 100644 components/ui/carousel.tsx create mode 100644 components/ui/combobox.tsx create mode 100644 components/ui/command.tsx create mode 100644 components/ui/context-menu.tsx create mode 100644 components/ui/direction.tsx create mode 100644 components/ui/empty.tsx create mode 100644 components/ui/field.tsx create mode 100644 components/ui/hover-card.tsx create mode 100644 components/ui/input-group.tsx create mode 100644 components/ui/input-otp.tsx create mode 100644 components/ui/item.tsx create mode 100644 components/ui/kbd.tsx create mode 100644 components/ui/menubar.tsx create mode 100644 components/ui/native-select.tsx create mode 100644 components/ui/navigation-menu.tsx create mode 100644 components/ui/pagination.tsx create mode 100644 components/ui/popover.tsx create mode 100644 components/ui/radio-group.tsx create mode 100644 components/ui/resizable.tsx create mode 100644 components/ui/slider.tsx create mode 100644 components/ui/sonner.tsx create mode 100644 components/ui/spinner.tsx create mode 100644 components/ui/switch.tsx delete mode 100644 components/ui/toast.tsx delete mode 100644 components/ui/toaster.tsx create mode 100644 components/ui/toggle-group.tsx create mode 100644 components/ui/toggle.tsx create mode 100644 db/schema.ts delete mode 100644 db/schemas/connections.ts delete mode 100644 db/schemas/users.ts create mode 100644 eslint.config.mjs create mode 100644 hooks/use-mobile.ts create mode 100644 lib/auth-client.ts create mode 100644 lib/auth.ts rename {svc_parser => rag-engine}/.dockerignore (74%) rename {svc_parser => rag-engine}/Dockerfile (100%) delete mode 100644 svc_parser/.gitignore delete mode 100644 svc_parser/app/__init__.py delete mode 100644 svc_parser/app/main.py delete mode 100644 svc_parser/pyrightconfig.json delete mode 100644 svc_parser/requirements.txt diff --git a/@types/next-auth.d.ts b/@types/next-auth.d.ts deleted file mode 100644 index 34c940e..0000000 --- a/@types/next-auth.d.ts +++ /dev/null @@ -1,26 +0,0 @@ -import "next-auth"; - -// next-auth.d.ts -import NextAuth from "next-auth"; - -declare module "next-auth" { - interface Session { - user: { - id?: string - name?: string | null - email?: string | null - image?: string | null - }; - } - interface User { - id?: string - name?: string | null - email?: string | null - image?: string | null - - } - interface JWT { - id?: string; - } - -} diff --git a/actions/apiKeys.ts b/actions/apiKeys.ts index 618b4da..753ed39 100644 --- a/actions/apiKeys.ts +++ b/actions/apiKeys.ts @@ -1,13 +1,13 @@ "use server"; -import { authOptions } from "@/auth"; import { databaseDrizzle } from "@/db"; import { apiKeys } from "@/db/schemas/users"; import { apiKeyGenerator, hashApiKey } from "@/lib/api_key"; import { fromErrorToFormState, toFormState } from "@/lib/zodErrorHandle"; +import { auth } from "@/lib/auth"; import { eq } from "drizzle-orm"; -import { getServerSession } from "next-auth"; import { revalidatePath } from "next/cache"; import { z } from "zod"; +import { headers } from "next/headers"; const apiScheme = z.object({ name: z.string().min(2), @@ -17,7 +17,9 @@ type FormState = { message: string; }; export async function generateApiKey(_: FormState, formData: FormData) { - const session = await getServerSession(authOptions); + const session = await auth.api.getSession({ + headers: await headers(), + }) try { if (!session?.user?.id) throw new Error("forbidden"); @@ -43,7 +45,10 @@ export async function generateApiKey(_: FormState, formData: FormData) { } export async function deleteApiKey(_: FormState, formData: FormData) { - const session = await getServerSession(authOptions); + const session = await auth.api.getSession({ + headers: await headers(), + }) + try { if (!session?.user?.id) throw new Error("forbidden"); // if (!hasAuthority(plan.toString(), new Date(session.user.createdAt!))) throw new Error("Your free plan has expired. Please subscribe to continue using the app.") diff --git a/actions/aws/index.ts b/actions/aws/index.ts index fa0c330..acc42b5 100644 --- a/actions/aws/index.ts +++ b/actions/aws/index.ts @@ -5,11 +5,11 @@ import { revalidatePath } from "next/cache"; import { tryAndCatch } from "@/lib/try-catch"; import { redirect } from 'next/navigation'; import { databaseDrizzle } from "@/db"; -import { connections } from "@/db/schemas/connections"; import { shortId } from "@/lib/utils"; -import { getServerSession } from "next-auth"; -import { authOptions } from "@/auth"; import { z } from 'zod' +import { auth } from "@/lib/auth"; +import { headers } from "next/headers"; +import { connections } from "@/db/schema"; const awsConnectionSchema = z.object({ accessKeyId: z.string().min(16, 'Invalid Access Key ID'), @@ -24,7 +24,9 @@ type FormState = { export async function authorizeAWS(_: FormState, formData: FormData) { try { - const session = await getServerSession(authOptions) + const session = await auth.api.getSession({ + headers: await headers(), + }) if (!session?.user?.id) throw new Error("forbidden"); const validated = awsConnectionSchema.safeParse({ diff --git a/actions/connctions/delete/index.ts b/actions/connctions/delete/index.ts index 8d797ef..8de5370 100644 --- a/actions/connctions/delete/index.ts +++ b/actions/connctions/delete/index.ts @@ -1,14 +1,14 @@ "use server" -import { authOptions } from "@/auth"; import { databaseDrizzle } from "@/db"; -import { connections, processedFiles } from "@/db/schemas/connections"; import { tryAndCatch } from "@/lib/try-catch"; import { fromErrorToFormState, toFormState } from "@/lib/zodErrorHandle"; import { qdrant_collection_name, qdrantClient } from "@/qdrant"; +import { auth } from "@/lib/auth"; import { eq } from "drizzle-orm"; -import { getServerSession } from "next-auth"; import { revalidatePath } from "next/cache"; import { z } from "zod"; +import { headers } from "next/headers"; +import { connections, processedFiles } from "@/db/schema"; const deleteConnectionSchema = z.object({ id: z.string().min(2), @@ -19,7 +19,9 @@ type FormState = { }; export async function deleteConnectionConfig(_: FormState, formData: FormData) { - const session = await getServerSession(authOptions); + const session = await auth.api.getSession({ + headers: await headers(), + }) try { if (!session?.user?.id) throw new Error("forbidden"); const { id } = deleteConnectionSchema.parse({ diff --git a/actions/connctions/new/index.ts b/actions/connctions/new/index.ts index 529ab35..5758c5c 100644 --- a/actions/connctions/new/index.ts +++ b/actions/connctions/new/index.ts @@ -1,11 +1,9 @@ "use server" -import { authOptions } from "@/auth"; import { databaseDrizzle } from "@/db"; import { authDropbox } from "@/fileProcessors/connectors/dropbox"; import { authGoogleDrive } from "@/fileProcessors/connectors/googleDrive"; import { Plans } from "@/lib/Plans"; import { fromErrorToFormState, toFormState } from "@/lib/zodErrorHandle"; -import { getServerSession } from "next-auth"; import { revalidatePath } from "next/cache"; type FormState = { diff --git a/actions/connctions/set/index.ts b/actions/connctions/set/index.ts index 2a46990..e482e8a 100644 --- a/actions/connctions/set/index.ts +++ b/actions/connctions/set/index.ts @@ -1,19 +1,21 @@ "use server" -import { authOptions } from "@/auth"; import { databaseDrizzle } from "@/db"; -import { connections } from "@/db/schemas/connections"; import { setConnectionToProcess } from "@/fileProcessors/connectors"; import { fromErrorToFormState, toFormState } from "@/lib/zodErrorHandle"; import { addToProcessFilesQueue } from "@/workers/queues/jobs/processFiles.job"; -import { getServerSession } from "next-auth"; +import { auth } from "@/lib/auth"; import { revalidatePath } from "next/cache"; +import { headers } from "next/headers"; +import { connections } from "@/db/schema"; type FormState = { message: string; }; export async function setConnectionConfig(_: FormState, formData: FormData) { - const session = await getServerSession(authOptions); + const session = await auth.api.getSession({ + headers: await headers(), + }) try { if (!session?.user?.id) throw new Error("forbidden"); diff --git a/actions/connctions/stop/index.ts b/actions/connctions/stop/index.ts index 331e4c6..aa9a898 100644 --- a/actions/connctions/stop/index.ts +++ b/actions/connctions/stop/index.ts @@ -1,16 +1,18 @@ "use server" -import { authOptions } from "@/auth"; import { databaseDrizzle } from "@/db"; import { fromErrorToFormState, toFormState } from "@/lib/zodErrorHandle"; import { redisConnection } from "@/workers/redis"; -import { getServerSession } from "next-auth"; +import { auth } from "@/lib/auth"; +import { headers } from "next/headers"; type FormState = { message: string; }; export async function stopProcessing(_: FormState, formData: FormData) { - const session = await getServerSession(authOptions); + const session = await auth.api.getSession({ + headers: await headers(), +}) try { if (!session?.user?.id) throw new Error("forbidden"); const connectionId = formData.get("connectionId"); diff --git a/actions/connctions/sync/index.ts b/actions/connctions/sync/index.ts index 53a09e6..5c18171 100644 --- a/actions/connctions/sync/index.ts +++ b/actions/connctions/sync/index.ts @@ -1,13 +1,14 @@ "use server" -import { authOptions } from "@/auth"; import { databaseDrizzle } from "@/db"; -import { connections } from "@/db/schemas/connections"; import { Plans } from "@/lib/Plans"; import { fromErrorToFormState, toFormState } from "@/lib/zodErrorHandle"; import { addToProcessFilesQueue } from "@/workers/queues/jobs/processFiles.job"; import { eq } from "drizzle-orm"; -import { getServerSession } from "next-auth"; import { revalidatePath } from "next/cache"; +import { auth } from "@/lib/auth"; +import { headers } from "next/headers"; +import { connections } from "@/db/schema"; + type FormState = { message: string; @@ -26,7 +27,9 @@ type Conn = { export const syncConnectionConfig = async (_: FormState, formData: FormData) => { - const session = await getServerSession(authOptions) + const session = await auth.api.getSession({ + headers: await headers(), + }) const connectionId = formData.get("connectionId")?.toString(); try { if (!session?.user?.id || !connectionId) throw new Error("forbidden"); diff --git a/app/(protected)/connections/new/page.tsx b/app/(protected)/connections/new/page.tsx index 28dc284..9aa6554 100644 --- a/app/(protected)/connections/new/page.tsx +++ b/app/(protected)/connections/new/page.tsx @@ -1,12 +1,14 @@ import Link from 'next/link' -import { authOptions } from '@/auth' import { Connectors } from '@/components/Connectors/Connectors'; import { Button } from '@/components/ui/button'; -import { getServerSession } from 'next-auth' import { redirect } from 'next/navigation'; +import { auth } from '@/lib/auth'; +import { headers } from 'next/headers'; export default async function page() { - const session = await getServerSession(authOptions) + const session = await auth.api.getSession({ + headers: await headers(), + }) if (!session?.user.id) return redirect("/login") return (
diff --git a/app/(protected)/connections/page.tsx b/app/(protected)/connections/page.tsx index 24390ef..c651c3a 100644 --- a/app/(protected)/connections/page.tsx +++ b/app/(protected)/connections/page.tsx @@ -1,16 +1,16 @@ import Link from "next/link" import dynamic from 'next/dynamic' -import { authOptions } from "@/auth"; import { Button } from "@/components/ui/button"; import { databaseDrizzle } from "@/db"; -import { getServerSession } from "next-auth"; import { redirect } from 'next/navigation'; -import { ConnectionTable } from "@/db/schemas/connections"; import { Table, TableBody, TableHead, TableHeader, TableRow } from "@/components/ui/table"; import { getConnectionToken } from "@/fileProcessors/connectors"; import { FiDatabase } from "react-icons/fi"; import { SetNewConfigDirect } from "@/DataSource/DirectUpload/SetNewConfigDirect/SetNewConfigDirect"; import { tryAndCatch } from "@/lib/try-catch"; +import { ConnectionTable } from "@/db/schema"; +import { auth } from "@/lib/auth"; +import { headers } from "next/headers"; const Connections = dynamic(() => import('@/components/Connections/Connections')) @@ -23,7 +23,9 @@ export interface ConnectionQuery extends ConnectionTable { export type ConnectionToken = Map; export default async function ConnectionsPage() { - const session = await getServerSession(authOptions) + const session = await auth.api.getSession({ + headers: await headers(), + }) if (!session?.user.id) return redirect("/login") const connections: ConnectionQuery[] = await databaseDrizzle.query.connections.findMany({ diff --git a/app/(protected)/integration/page.tsx b/app/(protected)/integration/page.tsx index 5a48689..984a513 100644 --- a/app/(protected)/integration/page.tsx +++ b/app/(protected)/integration/page.tsx @@ -1,15 +1,17 @@ import React from 'react' -import { authOptions } from '@/auth'; import { GenerateKeyForm } from '@/components/GeneratekeyForm/GeneratekeyForm'; import { KeysList } from '@/components/keysList/KeysList'; import { CardHeader, Card, CardTitle, CardDescription, CardContent } from '@/components/ui/card'; -import { getServerSession } from 'next-auth'; import { redirect } from 'next/navigation'; +import { auth } from '@/lib/auth'; +import { headers } from 'next/headers'; export default async function IntegrationPage() { - const session = await getServerSession(authOptions); - if (!session?.user.id) return redirect("/login") + const session = await auth.api.getSession({ + headers: await headers(), + }) + if (!session?.user.id) return redirect("/login") return (
diff --git a/app/(protected)/page.tsx b/app/(protected)/page.tsx index cb1e808..84af7a7 100644 --- a/app/(protected)/page.tsx +++ b/app/(protected)/page.tsx @@ -1,10 +1,7 @@ import PipelineFlow from "@/components/PipelineFlow/PipelineFlow"; import { formatDistanceToNow } from 'date-fns' import { databaseDrizzle } from "@/db"; -import { getServerSession } from "next-auth"; -import { authOptions } from "@/auth"; import { redirect } from 'next/navigation'; -import { ConnectionTable, ProcessedFilesTable } from "@/db/schemas/connections"; import { getServiceIcon } from "@/lib/helepers"; import { FaFilePdf } from "react-icons/fa"; import { TooltipContent, TooltipTrigger, Tooltip } from "@/components/ui/tooltip"; @@ -17,13 +14,19 @@ import { TableRow, } from "@/components/ui/table" import { SubscriptionCard } from "@/components/SubscriptionCard/SubscriptionCard"; +import { auth } from "@/lib/auth"; +import { headers } from "next/headers"; +import { ConnectionTable, ProcessedFilesTable } from "@/db/schema"; interface FileConnectionQuery extends ConnectionTable { files: ProcessedFilesTable[] } export default async function page() { - const session = await getServerSession(authOptions) + const session = await auth.api.getSession({ + headers: await headers(), + }) + if (!session?.user.id) return redirect("/login") const user = await databaseDrizzle.query.users.findFirst({ @@ -47,38 +50,37 @@ export default async function page() { .flatMap(conn => conn.files || []) .reduce((sum, file) => sum + (file.totalPages || 0), 0); - return ( -
-

- RAG Pipeline Dashboard -

- - {/* Visualization Section */} - - - {/* Data Section */} -
- {/* Files Table */} -
-
- -
-
+ return (
+

+ RAG Pipeline Dashboard +

- {/* API Usage */} -
- + {/* Visualization Section */} + + + {/* Data Section */} +
+ {/* Files Table */} +
+
+
+ + {/* API Usage */} +
+ +
+
) } diff --git a/app/api/auth/[...all]/route.ts b/app/api/auth/[...all]/route.ts new file mode 100644 index 0000000..e9ace87 --- /dev/null +++ b/app/api/auth/[...all]/route.ts @@ -0,0 +1,3 @@ +import { auth } from "@/lib/auth"; +import { toNextJsHandler } from "better-auth/next-js"; +export const { POST, GET } = toNextJsHandler(auth); diff --git a/app/api/auth/[...nextauth]/route.ts b/app/api/auth/[...nextauth]/route.ts deleted file mode 100644 index 8796a7a..0000000 --- a/app/api/auth/[...nextauth]/route.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { authOptions } from "@/auth"; -import NextAuth from "next-auth"; -const handler = NextAuth(authOptions); -export { handler as GET, handler as POST }; diff --git a/app/api/connections/[id]/files/route.ts b/app/api/connections/[id]/files/route.ts index 604b9d1..796ddc8 100644 --- a/app/api/connections/[id]/files/route.ts +++ b/app/api/connections/[id]/files/route.ts @@ -1,5 +1,5 @@ import { databaseDrizzle } from "@/db" -import { processedFiles } from "@/db/schemas/connections" +import { processedFiles } from "@/db/schema" import { checkAuth } from "@/lib/api_key" import { tryAndCatch } from "@/lib/try-catch" import { qdrant_collection_name, qdrantClient } from "@/qdrant" diff --git a/app/api/connections/[id]/route.ts b/app/api/connections/[id]/route.ts index a3b5ad3..3ac885b 100644 --- a/app/api/connections/[id]/route.ts +++ b/app/api/connections/[id]/route.ts @@ -4,11 +4,11 @@ import { NextRequest, NextResponse } from "next/server"; import { APIError } from "@/lib/APIError"; import { databaseDrizzle } from "@/db"; import { eq } from "drizzle-orm"; -import { connections } from "@/db/schemas/connections"; import { qdrant_collection_name, qdrantClient } from "@/qdrant"; import { setConnectionToProcess } from "@/fileProcessors/connectors"; import { connectionProcessFiles, directProcessFiles } from "@/fileProcessors"; import { addToProcessFilesQueue } from "@/workers/queues/jobs/processFiles.job"; +import { connections } from "@/db/schema"; type Params = { params: Promise<{ diff --git a/app/api/connections/dropbox/callback/route.ts b/app/api/connections/dropbox/callback/route.ts index c14051f..0f6cdc6 100644 --- a/app/api/connections/dropbox/callback/route.ts +++ b/app/api/connections/dropbox/callback/route.ts @@ -1,11 +1,11 @@ import { NextResponse } from 'next/server'; import { Dropbox, DropboxAuth } from 'dropbox'; -import { getServerSession } from 'next-auth'; -import { authOptions } from '@/auth'; import { tryAndCatch } from '@/lib/try-catch'; import { databaseDrizzle } from '@/db'; -import { connections } from '@/db/schemas/connections'; import { shortId } from '@/lib/utils'; +import { auth } from '@/lib/auth'; +import { headers } from 'next/headers'; +import { connections } from '@/db/schema'; type DropboxResponse = { access_token: string, @@ -20,7 +20,9 @@ type DropboxResponse = { export async function GET(request: Request) { try { - const session = await getServerSession(authOptions); + const session = await auth.api.getSession({ + headers: await headers(), + }) if (!session?.user.id) { return NextResponse.json( { code: 'Unauthorized', message: "Unauthorized Request" }, diff --git a/app/api/connections/google-drive/callback/route.ts b/app/api/connections/google-drive/callback/route.ts index 4390fb0..563ae69 100644 --- a/app/api/connections/google-drive/callback/route.ts +++ b/app/api/connections/google-drive/callback/route.ts @@ -1,12 +1,11 @@ import { NextResponse } from 'next/server'; import { auth, oauth2 } from '@googleapis/oauth2'; import { databaseDrizzle } from '@/db'; -import { connections } from '@/db/schemas/connections'; -import { getServerSession } from 'next-auth'; -import { authOptions } from '@/auth'; import { shortId } from '@/lib/utils'; import { tryAndCatch } from '@/lib/try-catch'; - +import { auth as authReq } from "@/lib/auth"; +import { headers } from "next/headers"; +import { connections } from '@/db/schema'; const oauth2Client = new auth.OAuth2( process.env.NEXT_PUBLIC_GOOGLE_CLIENT_ID, process.env.GOOGLE_CLIENT_SECRET, @@ -15,15 +14,9 @@ const oauth2Client = new auth.OAuth2( export async function GET(request: Request) { try { - const sessRes = await tryAndCatch(getServerSession(authOptions)); - if (sessRes.error) { - return NextResponse.json( - { code: 'Unauthorized', message: sessRes.error.message }, - { status: 500 }, - ); - } - - const session = sessRes.data; + const session = await authReq.api.getSession({ + headers: await headers(), + }) if (!session?.user.id) { return new Response('Unauthorized', { status: 401 }); } diff --git a/app/api/retrievals/route.ts b/app/api/retrievals/route.ts index 2bdca6e..6740005 100644 --- a/app/api/retrievals/route.ts +++ b/app/api/retrievals/route.ts @@ -1,16 +1,15 @@ -import { authOptions } from '@/auth'; import { databaseDrizzle } from '@/db'; -import { apiKeys, users } from '@/db/schemas/users'; import { hashApiKey } from '@/lib/api_key'; import { Plans } from '@/lib/Plans'; import { expandQuery, generateHypotheticalAnswer, vectorizeText } from '@/openAi'; import { qdrant_collection_name, qdrantClient } from '@/qdrant'; import { RetrievalFilter } from '@/validations/retrievalsFilteringSchema' import { and, eq, sql } from 'drizzle-orm'; -import { getServerSession } from 'next-auth'; import { NextRequest, NextResponse } from 'next/server' import { z } from 'zod' - +import { auth } from "@/lib/auth"; +import { headers } from "next/headers"; +import { apiKeys, users } from '@/db/schema'; const UserQuery = z.object({ query: z.string().min(2), @@ -34,9 +33,9 @@ export async function POST(request: NextRequest) { ); } - const auth = request.headers.get("Authorization"); - const bearer = auth?.split("Bearer ")[1] - if (!auth || !bearer) { + const apiKey = request.headers.get("Authorization"); + const bearer = apiKey?.split("Bearer ")[1] + if (!apiKey || !bearer) { return NextResponse.json( { code: "unauthorized", @@ -49,10 +48,12 @@ export async function POST(request: NextRequest) { let userId: string | undefined; if (bearer === "Dcup_Client") { - const session = await getServerSession(authOptions) + const session = await auth.api.getSession({ + headers: await headers(), + }) userId = session?.user.id } else { - const keyHashed = hashApiKey(auth.split("Bearer ")[1]); + const keyHashed = hashApiKey(apiKey.split("Bearer ")[1]); const key = await databaseDrizzle .select({ userId: apiKeys.userId }) .from(apiKeys) @@ -75,6 +76,7 @@ export async function POST(request: NextRequest) { columns: { plan: true, apiCalls: true, + id:true, } }) @@ -88,14 +90,14 @@ export async function POST(request: NextRequest) { const retrievalLimit = Plans[user.plan].retrievals; const updated = await databaseDrizzle .update(users) - .set({ apiCalls: sql`${users.apiCalls} + 1` }) + .set({ apiCalls: sql`${user.apiCalls} + 1` }) .where( and( - eq(users.id, userId), - sql`${users.apiCalls} < ${retrievalLimit}` + eq(user.id, userId), + sql`${user.apiCalls} < ${retrievalLimit}` ) ) - .returning({ apiCalls: users.apiCalls }) + .returning({ apiCalls: user.apiCalls }) .then(rows => rows[0]); if (!updated) { diff --git a/app/api/webhooks/paddle/route.ts b/app/api/webhooks/paddle/route.ts index c381ac5..b22b241 100644 --- a/app/api/webhooks/paddle/route.ts +++ b/app/api/webhooks/paddle/route.ts @@ -1,5 +1,5 @@ import { databaseDrizzle } from '@/db'; -import { users } from '@/db/schemas/users'; +import { users } from '@/db/schema'; import { Plans } from '@/lib/Plans'; import { Paddle, EventName, EventEntity } from '@paddle/paddle-node-sdk' import { eq } from 'drizzle-orm'; diff --git a/app/apple-icon.png b/app/apple-icon.png index d680f875d206e5459a66a591f08803890bd4c19c..f02952fb4e8a6fcb7b273ea568e52a04e0b93d95 100644 GIT binary patch literal 16710 zcmV*bKvchpP)WD;Z2f zC=dWT078zUKmh0*wVc6Z0zd~C$Wass0G*?jGnh;O=l}ybiUI+kbJTJMlL-JFU?4|P zAOLiZTFziH0iXj66Il`mhOjvYH@0h%Z` zbLWK%7gB=;4YJ{E5?PCQLh(&M^y>*$$ho~EWvn^D)U zU4uiRMfCvCDS=<`kW^710CcJ-9Xux`6bJyF05VUWGKKEH?>;(u^e9AHdU({sbp7?$ zC7|b^i&!ZT06JERd9EKnemspHJ(`Zm0S%f5j%#BzTHhP`(#R1bGueA^d#n@)039pE zJlB^lU7GUb$t^&(1L)akmpfN(+OlO!CVLNVkCg%epkt+&as9!A2dR4X>SE-8{>)4W zk(+hHTefV?MDM|^@lYTDbUaiu?g57ec+nJ~@jv|gIBnauJ(Il$x5r9>0MM~g%yWJ3 z-o5Gl_um(v3iaP{f%6SF+(;uw1~POe$s6=ck3XnLks<=@NbQz> z{pig%|D!H5M3r28Z-e^v=%bJ3N7YZH=ls*Y4*;D7D-N%?ZS4M;3&M%|FQnzomzOqf z*pvmM%ifO+0G;CXJHK6f`tipfED$?rHbD)B4HaPRlWWr#Uwo0`5oYhl1%OWB`u+X) z-&DCu6{QX_5bWj9N&->tp}+mMM#Pw)MMr@E(9zK;Ay+;4;0Sth(nNA{uiqsXUrgVA_npsEol-ZVwmWv5I<)UVFTe6~ibt5eAD7mEp2yp5`ws21H-&vh zU#W5>I(+D``bPYi6qvPJ6AUhePB?+qtXY%e=AP^cr8S^Cb?QWO=FCYp4YH*FPXFpe z-+uG005uOo zHf$JO%yM$jvW5a_3+Ux5mQ%a)+fnB(ooV8PiJ77fB1>wWT#Mz_Llz+YyK@X4{>sQ~VT28$j>h zzn|9p{yUp_C(&DP%~BjspZ@u071rM(I;0Cb(-$aEfC?5YC_f{$A@|-(lP6D>goY~R ztkUrcsPUQo7>+cN@11LO-}v115}52*b>rzveFmdQ)22-$4KesWffUGcK>x||EJB#R z{q{S0@7;H3$IcxL21HRGGXRDebK2N^`3ahj8*jW(f>WdMLWBH$=0LIeBi(VYSN?$JNfUkyYJs`01dxyc)X8`>%IZ~2hdjbwLW_E2peXO@eT(gj@ml% zjemIK<4IPWl_`}XZ4Ujf_z#?WE+#zn^xB}<4SJyH#9 z+O(PS@}efI?b)-3>ei{F;tQEY-_Yj<8ZmN2vL5H#Z;O^KSw!1t$2cl18)pI$xsK5h z2K%m^J5xHgR6Hy#0gZ{j{PN3m#~pW2fr15S-P(0=(E=Q`RH>49Eto^+<|vWmM`0tQ zz7kJzv50gXJ;GX*RJLZ#o6+XYn;l`^4QCa|D}X-AfZmnLp{3+mX$xq~zC!s5bm!f7 z(xBT1#YBu@oR;h9r`hEaB7)-cB10z|&;YW^-K@l=o;`chqmPb`Y3!N3xM{PdD#4A- zl-(K|eJDP1+B~0OLm@& z!-o%3rAifT4n6puAvEZY+oK(NLauAlv?vX9eyH*`CPGk_nw42Go3m~ zYe4ttaSgrn(o1$Cmq>(rYt}5fk#owSL1sSdtaE6=g8BSA%gqe#ZCkg6bn)t|uhIJ- zyib4Z+sBK1SpFXP^8g!4j!M2dksd6qh-gY+gyEVdUw#=H>xX+Qa`JJV-|pFGpQFnz zyEM|U6Z(B9hjw=_o_wrQJj7$&6977)w2#=?oOk9>r%O6TyiQ*L%?EVX0F+k;JmlUX zk`>h3U}}bj0${a+NGx5oI!sxrJu8t6?njz}|MAXIp+W^$cV0kGoAx4Ic;N+6k3SI? z3ZOTK *XeOxp@0iY8>@fiAmaUz-=7rM*RrAi4Xv0yu*Ji(vZ`czuG=6B(|I5?ug z+%5U)fN_yq@TmfPURM9%pt_h#Kol!>l4~{+1k0XunnS<-`s;MgIp@SMV-Gjwj!TtT$-MEYr=J$1$*x_y1b_$s`b&ui z{0EtcQr%!;uTrJ50yO)D%z1kbwQk)y?qSFw6MihF&E4)z8Hc)GaV1TdIKloDx^R)9 z!vx^!-~sF=yMsev+-sBY8>`o-LHjvV5gdp_TClBv%4sMoPVfrQRRm~A;5di%>8G|j zHSW2ipYj#TJKWiI(2F0?ctN1H+nEI~ecZ%|^2W426o#9_r=NaG-MV!X(EtsHG;G9B zMd24@($9($`~f!K<3$4(giJnn?uVI*2ULJ&IUUK=EuL#IX!)dTmu{RI;Ymm2U~A~s zty}z=y44F9J}ihkw#V*kGI`2m>dTdD)3qfP&@WGag>y<=o$$GL=+J?FSiD%Y5bwSF zKD9ihg~-iiSY?-+wHt{9G(7b7^Pv&CUGxiAQ2?e6TLi0A=A--UrK)Gv0TxuyG!JN484`}QinKT*`8C%K?}Rs_Ba3y5$fx&zfSm?CaS}v0=gGF z6HR;Jg}BEG4vYkd_=y7-A+uq^7jX65&MH^zo7!`=M1^} z2z(l>s;gS8%q8a~wZbs1qnSP$N>iuQTgrb!U5~8%`nvoD^3jI%?sCM?megQPi=@=$ zYd`ql18Uy9dEE2YB8O(T9*INxy|Vk2H2#V4_A{FC^R{f> zHm7lAf}{cZnP;D&henQ~_3L9dTmQv}yQ0L;nb;9X$a@9zU;Eg=-KCeWkXSQjf+j0zVn%p9T$)vkSVO#Q`j zF~pM!C=Snye*JaV)59@17eRekuU=i*NTB7IH}4~A+_z~= zh#a>bJ{CGB>)M0@dLNsQCrq43kMR}=dDCJ*RJ?d`nmKbOHEPr-s>qX{fBu69*ge#TL z#?;PeXD8PHtT#cpG~d&+XHRy3a;gQiJf$UV*ubKY1!&W}qSVGmR{8IpJhyf0u4OqHa zJN3Ml0X@dC6rR%R6h61Cw}9u2+`_UA=p#qj+is`7w;dP?BOJHsl z7#lv%&p{WbpK%6V-uZI6j2QsLxvXrN2DCYNsI6vlK8gGPeIG|wAG8j1$LNBN7s}R+ z14T3qj`B5Y)(}o`JButshYpSAwuD@xIkXhgS`RAQaug#d@ zn)}csN&S2=@O1noIKerR+MAy2cpek zs9C;zdDL`==^J8{Hhp_JG_v>q&DZz=8V`ZaeCG})iX<99U)S4xaCNEe%y-6m31qin zB7kYc>hA*MQsc&rXvS+ZsqJ}fqozwLFH9Psf8)Gtr?okaEo>YP6h|vjqPQF~TA$jQ z-g)<3R}bC0U%{N>W7`_03STPKm$HySwWkhEqO0asuwWsHCj`euzoNq9!aPtvwQ1AF z)qmMC3}^;dS(c@jFIyJ%=y8auR!svsH;Wu@4qc^c6?UM~fRJC1<8h3NG(4O1j+KDFp}ENZ{oMzb{mZ!@0i-7CQgbjOe&yPtXSb% z&{*b#=xL~min6ZrmtTI3<<_XL1()(mCSI~+DHcgM*Bt`_;ag&LgkOgx(f~-1cfB5c zVjAXyp9b{DAAih-76Z^Mj)=%%;@Q!sg}8M3Sqi-dnclrPvV8O-4xl;PKV)6ox@d5B zEkDC(Bu1P#La^XN6HAO|)Qgdz3zG`y%#5)-tE&Jw$hzX2U^Eyo>ej6*-z%Azord_2 zeJIp`;SaEQrVohLR_LEdR0CZZD0a!o|b$QNN+759mvJQ{%R>JT3nEQ6@Z~;wyVQL7V z^Wpto07frI2@{9J_Xa5y7o^Ei~NARuo-gA61 zv|+^$&~81nM}+1Ote!O5uoO1ssP8T8J{sDb10i1Wctwtw7BLGhPCE__!vePIn{U2R zWN3hPJJ%WUHd{TH1frEFUXo>K1-DpKTRS<9u|C)7)*Sl3|NWdDpB%pv#0LUM@^V?o zR1!x7K>HX9wWQLUeO(?I?d1MI8Uu(Ns(X*FTR)3$hE;O@{Dth^nzITLWjUZBcTVRl zNsmAFxNL#&3+ThC2s*OQ^LEbO32wL5C;dPYaBO#3jD1g3!0hpuTr9nS{^Ij5s3vP^ zbc5RN?}LB)`*QF_UhADp%V9Vr>HYxf-W()r%FvCQH1ck-|j?R!y^&=bU=bM&ROD0Ii&pYTGij7tqzJS7WCwZCJ6! zD}z>p@|vUl0FCRM!z78XIdsFip-AUuSZB4|?E$vdbR0f>gg*Q9Giun#@ij4NFk-|A zdSd+Ja*jdH5~MtC$(c>ly`==uC{K3ksi(?8Xz0-4G;rX65V}0We#iGea6j>YEWaCG z2}^C}e`-%2X>0L84)Qzz6$_w+L&L$}dVyf!tX>^Kv#KF%Ni2l`rO%-dby~d6Nl5-^ zH|rh~(C|bYIB=kS2@ZM4K5Db^YjT<*% zm)MVzNB9KvoOD3LxN^=pXA3wM%>S4gH*wr4F@ET7E3)G|iuZV28?1%Tm0@bD1kfO) zi&m{#v48h(F#{Uv#0CwNAq6|a*DPL{v3KzEP=NNx4u(Ip>7yKC`t|~vdlEnoZ~)z+ z1xKuGQV}cO7eW4Q>`?l9fFFhyynv>fQGbsxGD*?P4N*6X7A;B!*%Q)dQUMLl+K9I_ zEX_y_)cgB+v~oQlI14tWSI zf|_qPb6AwOh^Mt}doC?mvQ*Z7XAE^x+72dGo2WH&$ z0E6qMn{ILdjhI3^T*_eSCJ}r9twa>1)Pe^yqOb1#*%k1)-{Ot z`lJFHQPr^A-E;R~x|5?D%m$x;%A5zz2DHJooa>ZD4-4e=xqufQ{3!qqRLFwQ1+04o zxsXuBik0ZZ6Hla9Uwt($x^(W`nP9fYdlpMF7Kka@6%|^QZ@5ydS!1zgt(t}&T0_+K zx=?C6BR!Ws6x!!opV{1T=baLzu3Jk6w8RvuSKTC~`rQj=`Ah*>{d$ZVHfTs6fAUGl z(@Mgn*DC4pHs|g0y4}V_>;&JGG(az3zKqU2x2?R<-+#YYk{EiMj%u+}6NE4nwKXF^ zGa0o}pjCiuh#0y+B4g7NnMYuPdq^6fG0xJZOAEkIPf(wdz2h%mp&}iD2b#gb z%mWiXMh*z1LI9_P)?@+4wJlt*K(u34RrsU&Gn}LiGJ$$-+xaRAbGph?RA{y z&GaEjFfQZnE~$VnV*whJdi(9S=?o5c_iIRS2=$%DQpm>4AAplX<6(1C`w(dX&_`VH z;L-uAYY<@;-Xng7h!df>w_l2|-RmzROCC`yr~yiunO~>=Z%2p(!yFxqX8}7a!MVw= zmEo{7HWJvc`|Y>hPJ_8BLb|o20vcRZZSN}OEx2?z6Y98eV`=ngl`zFQ1Q`b>FcB>p z*t@*?#UCHe7tZ$?A<45eet-^tiTzCog#0iS%`hTzY6sA+T_uCJDcnn0iX-%wFJBQB zn>Zw*AgaU3k8|F_hY9WpXv*1%59qvb$vEr8^3o(1(ClxK*UCEwkRqMeDt0)^sKKK6 z+nV20<|P9rTCL=K77olFB)a%=G)OWY>$yDRyYa1iE6;GEQFCeU4x)uC^{k9vR^zbe z@CKVPv3nnvlZBhZ_^fTdmd!J z8aZn8Z|OdQb?0PO79v+2w;&y2L> z;@a4=XD^Qa_(a9`@gIMAF$~osal|Tzqr%qk^#7D;+X-v_6pHx79 z@x>Q(`Q?}CkUn850JK<}_)qof)#%&rzKeFOqS2T-^?7=pbLs8l)V0{&Y+Ca=+eG%R zxy@l?6gkY1xd0umAB!vEzKAk##?yARD$X0Jo*Eg@`lYYW0lH62nBdB<7m3&ius}{b zg~3qq&2_(zQ0_Zz<3scaJ^N~oH?F4R$jhFs zLJrHv*d@0Zb?n%Y?qsW>pAjq4I3!N9VSUPzi}N@5>98|?hmG#tkoG+!v$h1HCxSbQ z7A+cSXfb`CR6t`S&_x4BIOKiz-6Bqn+eXSqD5HfXSIdeWrw9HGzl6*=y}+9d8Rh}< z#osTYU)dbJ|G<75=r-03fV&M5#>-$Hxnx0YRv%tT=32pUzz*eOUXG}ZI8LYnj3#;L zq@pKLgZd5VUzh%i>agLe)hVaMwBX*0cQMn!!EeWo?aG&2L^`uMbM~A<)kVID4IPr- z*#f@SYuElRc8Wx`6aX3yNXoi|6s@Q^g7U?)XU|d8u&Jl~Ht=K?ic&Pn@?7(H-#GLjp%sv4VLU6##7b8ZVu#a@0C-!M=O>ZOPYKK_xn9ZG#55 z61(smWQRJj@QIS^0v>H}&qSgd#2;(cEMa;2a-Q=6;qd;=17>}Z zy|qQNL=NKJ5{mk~NRgs)SWHw)I-rq4R&QG1001BWNklN4ThU0@Od{RBvT0jkn)q-3OW?t?`pjPEC=fwk%yHH*xBPjNA&NT(P7B`uXRdr@>rk2B?GsjhW{{=dX)R zC3ajgiC%ftRW$k$Ck0lN^ZmzMh5+Nc2j5M*JxR@7%)(EL;ha7#$Sabm`z&tDKatpd z?AUQsn#Cl9i6Qj?0xdSI-@wVyN6?2K&ZWHUF$i(S_q{OX4+iq2iIb>H*Dje}pQHmC zhqUU|QR+;k(!yz4Hxve1vUG{?3Aef1JZYHZaGQJaMniNdSfCIMymg@DlyJr1Wtu$M zqXUQ%P>~K{--_kSmh%f=z{Mp)l<48e>zS^b@)n@^UKE15=bn2a5(nc#Rj>np;!y51 zzXKw6>TnKh5g%k+kaR#}`$4{CWy#LPZ|*!ox+=8y-+xbxCL!*l9<`BHTR9(VHsbz? ztxFZlBtkUIDJ@T-K3vB4EY9(fliKv@FLNG~>4bybQBD|>n^kQlCG=cFckl=r3m+oc zVuF@?`I_m|rc?Wl?V~0ssu=9BL)m;zO_s>AB>_<|Ne47$UA)*yl;2X#T+0sWW5y^a zB)pLbz%*S)6_xZsLg`$!>dJjeHtA^ycP=tp{lHI{Il$kn!2m}u%bEFGa&et=&pwA; zA}=H)XDqx0em6WvAjED=Ib0~J&#s$j%rmJii+${II0gj z>g7MVS%qi6+^8OA0Vvdz?$6~MiWq{hJ#Ayw{%Vcz1U0l080WS)QnR5t*9NZ6W&7pm zr&%aRzf-t0NGC24l9`qgK!5q=m!k93fHCuIc()@=xNwoe^s6T)^b1@wT%yKJ`OiD^ zusdp`74&j=kB}KEOqz#u*BcV5H!%7R!yq%7lEKu%th34YOZI2JYYwn#wsunFs*Za91168jpPwL}kS zL6_>l_mC8d#VFU*4QlKd&piDM7Y@Bt?uV~(9dGqD3J{-2@b3$y3G*sV!&=+R=d7%^UqVrRv46FGKusfz*4ghx_}#9~qdC zW0^-TCDO6E-`l_$B?3K~?r^gkaW+{`;Yzhg*A{ETOI4|ICC6&&c?O);25`ch`-TsX zwQJY)DFbxvIwx~-z%-Q@kt)ZU! z{r9y3W^jO7C)X6Gm*`p;FndrP8a?CmZX9h4*hfH2IJ`>_KC-d>I%U+a8VNv~k$j7U z>$ZcmiCI5_`2zYl@2KOsRB|Y@iA3|6ug{=c2O1%c3> zQvF3l! z#C={l-JjOZm6m`KmYM1=+-fVYcE$A+TSSR0E7avgk)M40iSHmG!oeXc99=vjv(bmc zQKcL-YdGRDQCDN*+TWZt%2qjgN6C*F#c6@Bzh1>D#@kW`XsEAXG1PKycP8)?MoC|Y z9gcq01viDepWFfh$u-w^$anKLO2`}If&Nl6(X-?OkEh#*hopr!9(B+3O>KPt_ z7*|E!9dzop(A8DnQ^?28{GwNLQe_gqhF;Ry{cB3k(c`EAFQbelAe* zMKD0@GBWH#*IS8m*_roy$?O#`)WOmvTH0VlRwM)@z+X3i{sM$dPssmVty(pCIg4_h z>w@_UvioOY*4msXdTK?k2 zqT>cV;1*!d(7iFJ0qTZdJ)4I)$3vW%|HT(y;<1*Xd2Ez! z_1COfv%@1d%r_VVRB~>oC3UemouAl%lr0P^dY;4Y8^$q)Q)FU(w)_5Ezx$2XU$-Xi z_3v=O*)}@h)0#DFiDL|Wo2`UgZt(k|S~wpl3N*tnw=nx^x8zg`qvdz_AjeaqJm%Hr z8xYyEkP9VY;eY-07dwZvjp1m$(Db(CeM_zTErH1DHUmJ1Ik--nHcg^pVr@uLiBxOh z7>#~E*R5NhX_}{$LxUqjQvt3AIL(_kPfXw52A5NBAf;D?aGkX*7gHZW!6hD>+@LMz z-TOCJx%JBu6zhT|>-q;D96>Kkd!7M~x-32b^n0+$y+e-yzC#V+(E4RJuEq`-kGO%1 ztXOl{4>H<0q1KC~;#fGErxef_L^&>~iLD&1I&a8);kewRl-luOLdXHT~4Y$M)4N5d~3d4NWt;P%BzE0Js3CTMh z#RFTnZo^?#Yr-g3oR<{&Sdh^)vn}O-M!HvQEr2H8S~LIheij=#UDAn*;5Cq=n;Rf=4-SiH zuqL9IjT~Z_BV2p!wIb8%%%c}wbfKkZwGN4%ttI}RoOxi&#m;3*#F;;qh8m5C(+uAn^`)P7CYEREYf}zr_;pm{08kM+ zn1JohJD*;)3@(>)Br~e7YE!m83zaQfPLh|ykqPYyPUAX?xi}7%lAFU?NVhRX8!I5M zu)`CF%m4Q4ukp|*ZSDaV>wR4>c}d;p#1OTJd(3`^i%7FFz>VIKu|Jmf4vR;9SxoZR z@wtx2bM9urH?LF~_Epv@I=@B3ff1oU z;Mz!2)r5<7{;_|b@)7XJ9O|FybMytZ+L|@Lhg1W|ED=+2|0OJnee>_Y2PacG=0=}GF^wVTYZTi34i>1Ut1=IRAB`UF=${mj#8 z#%nXv!l6IXDn7;~qaPYIQYEj{B9>@%9C^#ZXe6{+z{=>MJ}Qq}IlOJi5Ec`oY~}gj z@93N}7!!Y0wMtdVqmrnWC4gSXj^3wm5l7_;noFGKmn>Z>bGnREhoNAl>+SZy6dYF$ zm11FIqXd6&)sK^e_}3!_~D5;Xd(20Nk*=I5qiD0qRlqPTy0W<5Z zx9IZDUEI5iaX1byE_+VU;o#u`H0Tqp{5*wos0BxNyP3sDK*n zMOg;u!5lUGJV&9RfeTEW_#}f#i4V{hn|A-u$%J~RDYAKVSNzF|?2xYggAr7E0qeFQ zbiczdX>G2Rg^LYI}f%qCkM=GPRQEX_lBEjH`WdaqO@ZDFhb!X zwLN?G2tbuLWJaAk2ioX{gxv1 zq>oP!VX?;J@D9LTc)wB-Uo<-G?&JAK$$kz9uv3qT%c3UIOTO?Ti&@lpT4Z?@IN*0IGp;_Q^ix)4Z3m96vKtBtO8J{d~kP>BNSqZ!JG*A5i<^jz2tft5WedIe=3A^%S}Ikz)~;L22~!Sm9t@PB<55BOh5<++)6q&9 zh!*@>FNULWIWF5Q%5yYp+FVLQU&$rXDsi5_Xq$?yR0m>n7i-<7HNDNIeQ&GGp-)mN zEL1|VFZE*)=bzV(roS9sKYZ8SchRe_ykhTgsxwm@3|%X@4{zJ*BpZr$&e2|%rGSQ< z>;%3lK&bcZ~QgR&Tn>BC7uDjsg z-d)W4$nRBQCa_}JiiGK${pgydfX0B3v*QOYM6Wq7LU6=1&aExW(o6XuCt3`A;QY@^ zwXm2$%33FDPoklfHT@ywE?yelwAce#9x^w?6~tOze91*>?rugN_GDtt=A@HOlAX!h z;33(wS5IrX+#J~cmyb}69c}WnlX*;+B$a4c4(MIGc2V8Bb?j{mV#YQj{~fr&HJsAm zqYponlfB{~)>&Q-a^dMC`f6-(+qTCQHk4G#XQFe65L)Hw9P}*8i2RSv9Sf;fXKnKa z&lqgko1;LnV5BSw`Mt@G0bAD z63fS_xU}l*gAYC=c;$H;4j`BC8-AE8&&rb7fcBzVQC2T3)I*U@>d}!aJ+5-6A=ZHq z)=RF3XrR+!0v0c@t}&@*a#u*fTeqm{WeA#pYv&=(@$INmGvFdF5-CgY@ZtB-Ew|i~ z65^!=pg&`ib!RpfXcYhsOshGoI}ScATDGFbT>E3%i!a&)*}He2=vY7DC=b-O*2x~- zr)$NbusB193}el~ttlaBDjtIHDo1~tf!f0Ll?6ig4|}*Kb3Oaav$&{cAG)RAElOW* zaQx`zr+UM>j2riuZ;qAd`icFjv;Z`QZ5Kutc@No@R*Nk7Bj?1^-ggH%YPe_5-fV=K zV9)epj&i={+8&~P&{>rnV5?X?aF(4$>|yL=N}oI0uqMMvBx7(&{i{b^;arh1pk+t1 zrU`l>AlBR5-i#U11R1h&)4OxtV}{f`rNm1cK*R6(vB$<~Yc`eOfYfO(JkL7Li){|9 z)MLuQ2+0$BUfWarFkqtoi)FkEFX+f-?v)k+l^$974rA-f&AuKpscqYHQ%c}OJq#eL z&&7gv?>03H5qgh-Lz{rsy@m*K;WVbMVL+drhYe%PGac|65AD(h&{#0#yzZDzH*VZ0 zAzNaiwoSLD%m}P9aGCP;xFQrv@!}M2ZjmaMO|1m7dlo5Lm_wP~=Ui`f;-OcT+|#ui zdlG*7smxUwV=|IqE!1hvkUe4_ZXV@qlyq+M3F9s|!m&oDpME<1=gl{x>^bq5r467l zwd=3Hj*C9NYa1g;uW>N+THciCaa@cTd-v=WuROgt@bSI) z!i(w2Nt2@XBuhN`!}s_mgJSr7!)fP^ot9EZ?Ktoo+0A|vDqVuNDS#ofQHy3R>7#}7 z*tbH6U|s0*BKV)D)%AYwjSItu5rrSLaN#G^pkaelk}2d_X$5Flvnp^ZFRgOIXwT$q zODK9{u1P4JO`yBa?f`MUI`za?x@*_Y91-&c7wE()^VSH?&!Py72-pd_ckj-Xx;jwf z#*I_DD9|axCwRidiL_|Zcap|HW$APhQDVGfIIy7y8=PRU$(Nr29iqt~rqvgANE;@R zkP;o1=;Fb$&n5e5&t4oN;`DS}N5a7_wn>44n^X7)o=wnv=@_S29eFqW)sJ0{tRZY{eyT_~Nb;-IcE7+y-+ zxk)NPiC3Rv>@+n7GD8ny8gUuB`SaQI@6(DGFD4~E%oiAseeb;wI9ZMpIgMhXr*XEU z@VWCcKIMtRNk7FJALdb`Mh&iy^FhMP8pjJ_^S-nLGzQm?^`DR-P0ux$uoY*tj3&6y zlAocnLk$uKT+S4+n9ZBDpbzGL5RqPAef>2(G5!gzDD}DcXTY&ZXTJ~GAuJuYW85)O zsi5F+T?-lpa`m?mvjEUGZBFO>$o<8L5vdjDGeH4PC9ImWI~C;8YN&hwIz2jO42|W# z<_qWUHv*WAuVGS$n05t+yN%}nWoR+dwWTGXL9DX8RVogsNcZ$p&q`#+V~?|H&lVox zF6nq~Rj*#nl}1Y&RvI;IObg)X6ldGFZ=VF_{+H!&l=0oWZ;#S8@Lz}v>UW2m>F_XB zXXPmC$d5?=yIM7C(%BrMgvwmCYSoN$G$_L44`_vN9teXG(JkH`#CXjkJ{yccf)zN0 z*H>SD&F%?xBi@q^7o;tqUz+|B-F?^HN-f8fg4f#GwQKo6RNTtbk&DxK)sjPy*>I>- zsm7E9fxGL}uFHqP&(eY32^j-8x?{=@Ra0m=Ts_R2Bhbs4Jt7^0_yp$kx3iPj0Isx< z-CEiL8ia(8@DVFq3LLO_@shNC$2QA~#ZfN2?XF$xcHT#_8hvQf3tNH1rQipWQ(AaH zdqUF`ofPHo+zFqS1%iW8PHDy1wX*>HtUa0?CFd*Y+&q7n^ETZAU}?RR zYk-$weSc1AX$@!)`3wd$fE{v#u|yGl(#HW##|D}zFf1|-UdkCgXEX%t7LvdL=Rm0G zg91#aoyL(rv)>YxV5mR>yd&^8A8p`Rz?|079?&>gL5+vd9dmI^fZG88!kb+G6Obc2 z)2^MnbIjU7x9nBfVRCTO?ANcK%<~Y7YE_WE$m`uNpB$rKR{th>uya~Vdq9KWk8>5- z(W4&@Lwkoy*;qC}t#!&*Tydq#OE0@FWVPz7$zheEZALQm!)E@B*Ekp8pgZnxbkLS~ zf|vio3ooK6Q>J8B5@a~;YyoJ@KuW*ax?O`;`yG1plp&VLU*((Ipg{xnH%M$^lT@Js zS^kl%66!du<#wK}4tLNB-9Bg#>+t_W{rmTquk9Vnq7y{0&6`5&u%v1p$$n0@0W|8A zKo=Tf_3{CA9F{Cl!)kYK+w<7G{#v#O%Yw*-(5G$NwyN6Tc&*L2GjskpG~4d7 zK82I``%l<`2-UK3YRfi&#sc(bz36}5P#O)hnd@saX9Lxcp^E3`EYSmFygGpkUd~318gkIX5=o!t*G!YT`ra`^wK}C0doxDPf|PEwh-Ez4 z3ecEXX;v|5J+tkRD6F2=L|`!iCZgx>5mHdIQmQtFWzu92i=tU?H|h z)}~IKI&o=?i=?z0a&Dlew%h+YJfxA!4ms|A|9uU;_0}v}${u$=a%pG;`{w7oc>u7T zpwSYMw1p3uIiY87)vA>|VD;)%gqr7GYoO-F<|s^!&;0od?1b@|efiS){%i+m5c9qF z-s4R6y~T)Nb7_-N8QfVDzjCFjs!og10NhtN^AD;4AlabY26MRuXd_NT$?o{iK3sX+ zRmI{aH!BXSUN`ww17FMk+TqC_y8&W61b27leAkb$|A-h+jE3^ZM_7dN1F#op3edTz zH|NoK_>o7_8HWiQTebu=X5Xbt7xvHiukE}PYT&g|Z4(O-$jHbPuEDW>?6`6C?mKhD zZv@$iREAQ`K~-rougq=()_NlxEri#PLV;TY8BYAU*&tMoOKzOP9C$pdCr{)8p5fZS zfdlD3|9QhY7%Pilq*k$FB@P-`6zQ@Y^L@4jG*+NS_3E5&?oSWE!kJ&xn!P;zWkOAl zSQ=#SHEVw3ziT)!;9HS%_wL(E`w#4wywdvErMWwjiUotyo{Sz)cPm2Yz=6*b=F3(s~rpw#nLg@ zS~PFYV$1tcT$~=4z-b@JBmErp9XVNz)!scA)jzLXm6lHU$)sww1~dq>j8ovAZx=j| zyaj7w>I5_cxqe8xwtEH-rWd&!v2*wg!EBZp&=IEOv0A;4&Jf%bc$u6{?>T@L$b2Qz6B>}}=} zu>=YCnb*ar-CVnF-FhK)(o;2$ba+mV0W^qNuUv$Vv;O#rMv!~lHbjO{8IHYW~SSzJ2iDlyRVY*=+ z=gdiKRf-fX!Y{=y@eVIX+?S&OjTJ%t5f#L#7Ch7xY^__y$`I=!3o6>9jo%dUuZEv7 zI%eZeUM?e1m<=srw6Ws(j<5sKUw{6^B^?f1xj&TJPvwgEElmu;Jzg zvYMoNG>k{-9Kf22Hzvmc8k`Op?zJV&7tnqTI?D5;6a5{FNaOLK($DhWD16k*9uT|O zxGGHtXZ?RVnDN5oI6z}k;D!)Cpw@G#y5azkzrn`KYchHpjE8zfA@6v6yRmi}ixaCS zJ8uL`<49bSikgb4;INr}MveruCd$Q^Tuh6;^H|9;6gB)1749tvNBS`AH!2awuTO8_ zt20Kpl_GOd&>RZnXh36{Z@%>=d(f${BvYU3Hb_LtVdFtgOyZ3>4(CRJwEXA%oW)K~ zXPj|HJR{1{_vCm$WA$JjN1@GC?5So19lAW$+yDpqJmK5d;T6hZlqX4bRfb_N3aDjSw>miw=V%4FbRiF6C48DL4<*zo` zBOXSbJR15Q&4JssYtM$BXQ>cpGYVQ{3j8AhZIWfllBG0k_)tl8tJ2y!E$p`L0(7`+ zMNu3kJue1&Lbz31j(HqEems@u92-H4jROC8K%3-3LK-Bs>3(H*@rTaGS@Kb3OC(%) z^ce~aU{P^*H^FuG|7lao0002>NklpF literal 12559 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 diff --git a/app/favicon.ico b/app/favicon.ico index 38b626af57557ea7ca2f468e025592f16e01a540..6f6ece8e3b04d61746ad66aaadb350115756c844 100644 GIT binary patch literal 15086 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 Bl-B?N diff --git a/app/global.css b/app/global.css index a356dc9..fbbd6b3 100644 --- a/app/global.css +++ b/app/global.css @@ -1,112 +1,119 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; -@layer base { - :root { - --background: 0 0% 100%; - --foreground: 0 0% 3.9%; - --card: 0 0% 100%; - --card-foreground: 0 0% 3.9%; - --popover: 0 0% 100%; - --popover-foreground: 0 0% 3.9%; - --primary: 0 0% 9%; - --primary-foreground: 0 0% 98%; - --secondary: 0 0% 96.1%; - --secondary-foreground: 0 0% 9%; - --muted: 0 0% 96.1%; - --muted-foreground: 0 0% 45.1%; - --accent: 0 0% 96.1%; - --accent-foreground: 0 0% 9%; - --destructive: 0 84.2% 60.2%; - --destructive-foreground: 0 0% 98%; - --border: 0 0% 89.8%; - --input: 0 0% 89.8%; - --ring: 0 0% 3.9%; - --chart-1: 12 76% 61%; - --chart-2: 173 58% 39%; - --chart-3: 197 37% 24%; - --chart-4: 43 74% 66%; - --chart-5: 27 87% 67%; - --radius: 0.5rem - ; - --sidebar-background: 0 0% 98%; - --sidebar-foreground: 240 5.3% 26.1%; - --sidebar-primary: 240 5.9% 10%; - --sidebar-primary-foreground: 0 0% 98%; - --sidebar-accent: 240 4.8% 95.9%; - --sidebar-accent-foreground: 240 5.9% 10%; - --sidebar-border: 220 13% 91%; - --sidebar-ring: 217.2 91.2% 59.8%} - .dark { - --background: 0 0% 3.9%; - --foreground: 0 0% 98%; - --card: 0 0% 3.9%; - --card-foreground: 0 0% 98%; - --popover: 0 0% 3.9%; - --popover-foreground: 0 0% 98%; - --primary: 0 0% 98%; - --primary-foreground: 0 0% 9%; - --secondary: 0 0% 14.9%; - --secondary-foreground: 0 0% 98%; - --muted: 0 0% 14.9%; - --muted-foreground: 0 0% 63.9%; - --accent: 0 0% 14.9%; - --accent-foreground: 0 0% 98%; - --destructive: 0 62.8% 30.6%; - --destructive-foreground: 0 0% 98%; - --border: 0 0% 14.9%; - --input: 0 0% 14.9%; - --ring: 0 0% 83.1%; - --chart-1: 220 70% 50%; - --chart-2: 160 60% 45%; - --chart-3: 30 80% 55%; - --chart-4: 280 65% 60%; - --chart-5: 340 75% 55% - ; - --sidebar-background: 240 5.9% 10%; - --sidebar-foreground: 240 4.8% 95.9%; - --sidebar-primary: 224.3 76.3% 48%; - --sidebar-primary-foreground: 0 0% 100%; - --sidebar-accent: 240 3.7% 15.9%; - --sidebar-accent-foreground: 240 4.8% 95.9%; - --sidebar-border: 240 3.7% 15.9%; - --sidebar-ring: 217.2 91.2% 59.8%} -} -@layer base { - * { - @apply border-border; - } - body { - @apply bg-background text-foreground; - } -} +@import "tailwindcss"; +@import "tw-animate-css"; +@import "shadcn/tailwind.css"; -/* Add this in your global CSS file */ -.scrollbar-custom { - scrollbar-width: thin; -} +@custom-variant dark (&:is(.dark *)); -.scrollbar-custom::-webkit-scrollbar { - height: 4px; /* Adjust for horizontal scrollbars */ +@theme inline { + --color-background: var(--background); + --color-foreground: var(--foreground); + --font-sans: var(--font-sans); + --font-mono: var(--font-geist-mono); + --color-sidebar-ring: var(--sidebar-ring); + --color-sidebar-border: var(--sidebar-border); + --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); + --color-sidebar-accent: var(--sidebar-accent); + --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); + --color-sidebar-primary: var(--sidebar-primary); + --color-sidebar-foreground: var(--sidebar-foreground); + --color-sidebar: var(--sidebar); + --color-chart-5: var(--chart-5); + --color-chart-4: var(--chart-4); + --color-chart-3: var(--chart-3); + --color-chart-2: var(--chart-2); + --color-chart-1: var(--chart-1); + --color-ring: var(--ring); + --color-input: var(--input); + --color-border: var(--border); + --color-destructive: var(--destructive); + --color-accent-foreground: var(--accent-foreground); + --color-accent: var(--accent); + --color-muted-foreground: var(--muted-foreground); + --color-muted: var(--muted); + --color-secondary-foreground: var(--secondary-foreground); + --color-secondary: var(--secondary); + --color-primary-foreground: var(--primary-foreground); + --color-primary: var(--primary); + --color-popover-foreground: var(--popover-foreground); + --color-popover: var(--popover); + --color-card-foreground: var(--card-foreground); + --color-card: var(--card); + --radius-sm: calc(var(--radius) - 4px); + --radius-md: calc(var(--radius) - 2px); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) + 4px); + --radius-2xl: calc(var(--radius) + 8px); + --radius-3xl: calc(var(--radius) + 12px); + --radius-4xl: calc(var(--radius) + 16px); } -.scrollbar-custom::-webkit-scrollbar-thumb { - border-radius: 4px; +:root { + --background: oklch(1 0 0); + --foreground: oklch(0.147 0.004 49.25); + --card: oklch(1 0 0); + --card-foreground: oklch(0.147 0.004 49.25); + --popover: oklch(1 0 0); + --popover-foreground: oklch(0.147 0.004 49.25); + --primary: oklch(0.67 0.16 58); + --primary-foreground: oklch(0.99 0.02 95); + --secondary: oklch(0.967 0.001 286.375); + --secondary-foreground: oklch(0.21 0.006 285.885); + --muted: oklch(0.97 0.001 106.424); + --muted-foreground: oklch(0.553 0.013 58.071); + --accent: oklch(0.67 0.16 58); + --accent-foreground: oklch(0.99 0.02 95); + --destructive: oklch(0.577 0.245 27.325); + --border: oklch(0.923 0.003 48.717); + --input: oklch(0.923 0.003 48.717); + --ring: oklch(0.709 0.01 56.259); + --chart-1: oklch(0.88 0.15 92); + --chart-2: oklch(0.77 0.16 70); + --chart-3: oklch(0.67 0.16 58); + --chart-4: oklch(0.56 0.15 49); + --chart-5: oklch(0.47 0.12 46); + --radius: 0.625rem; + --sidebar: oklch(0.985 0.001 106.423); + --sidebar-foreground: oklch(0.147 0.004 49.25); + --sidebar-primary: oklch(0.67 0.16 58); + --sidebar-primary-foreground: oklch(0.99 0.02 95); + --sidebar-accent: oklch(0.67 0.16 58); + --sidebar-accent-foreground: oklch(0.99 0.02 95); + --sidebar-border: oklch(0.923 0.003 48.717); + --sidebar-ring: oklch(0.709 0.01 56.259); } -@keyframes spin { - to { transform: rotate(360deg); } -} -.animate-spin { - animation: spin 1s linear infinite; -} - -@keyframes pulse { - 0%, 100% { opacity: 1; } - 50% { opacity: 0.5; } -} -.animate-pulse { - animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; +.dark { + --background: oklch(0.147 0.004 49.25); + --foreground: oklch(0.985 0.001 106.423); + --card: oklch(0.216 0.006 56.043); + --card-foreground: oklch(0.985 0.001 106.423); + --popover: oklch(0.216 0.006 56.043); + --popover-foreground: oklch(0.985 0.001 106.423); + --primary: oklch(0.77 0.16 70); + --primary-foreground: oklch(0.28 0.07 46); + --secondary: oklch(0.274 0.006 286.033); + --secondary-foreground: oklch(0.985 0 0); + --muted: oklch(0.268 0.007 34.298); + --muted-foreground: oklch(0.709 0.01 56.259); + --accent: oklch(0.77 0.16 70); + --accent-foreground: oklch(0.28 0.07 46); + --destructive: oklch(0.704 0.191 22.216); + --border: oklch(1 0 0 / 10%); + --input: oklch(1 0 0 / 15%); + --ring: oklch(0.553 0.013 58.071); + --chart-1: oklch(0.88 0.15 92); + --chart-2: oklch(0.77 0.16 70); + --chart-3: oklch(0.67 0.16 58); + --chart-4: oklch(0.56 0.15 49); + --chart-5: oklch(0.47 0.12 46); + --sidebar: oklch(0.216 0.006 56.043); + --sidebar-foreground: oklch(0.985 0.001 106.423); + --sidebar-primary: oklch(0.77 0.16 70); + --sidebar-primary-foreground: oklch(0.28 0.07 46); + --sidebar-accent: oklch(0.77 0.16 70); + --sidebar-accent-foreground: oklch(0.28 0.07 46); + --sidebar-border: oklch(1 0 0 / 10%); + --sidebar-ring: oklch(0.553 0.013 58.071); } @layer base { diff --git a/app/icon.png b/app/icon.png index f54b3728d882e82e76955d4191f39bb3bdeaa15a..b631cdd3b92030af42863ec4b130925d64f524b5 100644 GIT binary patch literal 8429 zcmVVzxT|`moy+}32PGSTjAR1902r9%RsCk|!3Q7Ws5hLc0m>3LQ5kV=^ z1QetQO0j?-(mPV6!~NfPW@mSH&+a+ro_p?v%=0YwaL(?O@16Pj%x1_%TC%gVi=%5- z;kw4Us^IhGxGr(7OsD$?@b{>59m3!3xYptNmVYxcGS*(C!<3ARrDGs?A@rpsuA6ZE z99J`31=G~ObExNYT(g~PDL~JQt=HvmBR!f5YaTuZN z0K}R6=wO}$0Kyl;KzifqkBdU|f1yx_zl3WffH;|#9nMn#K>W7o{Oh>t<>esqux@Hk zj{<~G^Qw(J0RV)*3>_YZ>mgieY2(SKo|3oU9wpi5vn8WIhV0qBC$DG{tQQhP{)Oua z0C70oji!Y-cBer6yYc^5ab=~mvlS~=1nWMp1SlchyJv4Yt52q`UAXBHfI#gjZ6$30 zfbi7W|BPz@u5{_|?m)8uzs^SeD?r$t+eUH?0Epid zop>MD1=VmWRjw@O&U%_7h$H{_$3Nt*yE^BVMp4gGQ~DL!S&^Ftas>d0&uKOZSH2lj zVS}wup@NbRWKE#ETh5<9FMA*>3KS@i8ydxXmPT9`fG{)F22ut9#D5Ttj>MIAexK99 zl&?_UQnkDx5tJs4o5;+MV0`6WpT~mgj{6 z=r({bHzzIS2mlbjIVxuZ^v7Q`rPCdE$nwwWZ8n9fDs;wk=Vkx?{rTC?BWSEmPT~(q z0|4S*iOQGZGC`3199Y7(nl)=CTeoe6qm8~cSj%8Zd-mj;wQToq2maFm?QcxjY21($ z02mO}2+n-^>|+WCeCpIGDOQYrw+ma29Xlo^N|eY;%_o@wl2$hZ1gd6nOR@kwhgxU> zhL-;QpO6U?$IJF@RE-mt3eZ{znlfsgqGc%m@xC;_d%x*BGBOIt?mfA-ff9E#cXtc~ z0Hj;)005yl>xpQLGEF`Ep@$!qnKPyE@ zfT&iZUU~SWJg#Z-HF23<2ihEr>S!VWhU3BCB^u>Za23DxpMT4~z40}Uty{NBqehLS zNRh&_YgcM4#28(jJKqgg149j|7YgYH4IAjyXjq?Gndbq(zSJxBKRFZt{3*u(I05so z@nBMx?$=*`Ep@fQmMjyX7}#h z0XC*#AZy*1J^&bFZiqfJ+!<3MR{#L`7Q z+YnW;04#q~NREO93d$bK^<1`WrV_%#hYy!~?`4QN^%4t!UJ2*Vos)h0(rQ1<0{}NB z4FHJM6*rGheQ5qCN#L7rx<$r}9TQq*&z?P{P{BfS>hvi&eE5iPg|J+D$)!@YT2*=e z`RCo|3;=Jv^_Fz%)G1*XD5J z41Phzj~yq?nm3nPwQ5P@#*JjooE*7HLL1Bk3n~cr@;mRmD;+v?NZ6@Ll_~>(vz~Q< z;ZJ&ZlC*8tRs+z8T9CUyT#YDI8I_DFM(yP31;Dd8O7d=o6)js!srmfg6wX#PV^PS8C~)oB zsO$)=s)+!gV^RQALVf6qX#gLlygx-+wQi+U&H4@M>;71V2v=-8064a_YuBb?hs3Oc zAOH`bEB`TlJ$v@7Fc_Z5p+&<>1wGL5^Nt@zTe={=6%66bEn2h~Qv>CaOD~noGG(OJ zRaZ&VrcI@3lO~Fwd_JBIt_5}hnKWsVv}@N+b+wXVGoT_>NTtO%LNqH20AyQfpddD7 zK=T&OBLN_R;|XEfAd41#BAYjFNw@+-Zt%&1AOKt*zvM$CKKUo@liO~&RsK8rzmbj6 zxO$||BTx%HVVO$Lt^%t%4C5|70Oi!Gm^>MLyp0Y)o0LNih5!=y{SE+H2s`uN@pMd^ zHcjZf+e<^N9##Ms09PwN;NExuJo@OP^6tCus#SQ+HP^^{kS82}4$4&Y|4wti3jjJz z|G|#KhYuGXGIR)3#n+^0k)o<&^s8TTNhw*r{BsHOy_dmEZjJ$cG>c(^)Jv;YE#>>~ zH-Wczl!{pu6d{fsJ%)TBFV109)+tk_NbA-m$4U+Z=0Ql~^?}U9UR7i(HPM$m=UwpAjuDp_t;-m}X2AKeX>GYm+1pxdO z|NlR`nvEMbO3Ril6S5#`CZ$T2lFi`%QRVdM({kw0A*h*$)ePUXX_Ks9zg~G!UwVmI zfFj)?Z|2OIt)pAG^z6uxxpU`%P<0(*>lH9%%2W`eRR936Aj%qiYj}92O3^aFwS=us zE7qAn3#wPQuKalLpzPQ|&vQzpC&n-;2*3h-(LPumm)C&<-2V_=I4emoGwYsw@=1An z)F_p~MggpyYIt5xF~t!mjL)7qt2CN@PW`=q+goWU@!F%jAwE;5eh>X97Wze8O zGGIXbkRB~v3ceo?u!_{n3opDNuf94wt^hPz&<7BtT%9c1Kjf-0+FcD5lSKglR%ZPy zb7s#`+D|M1-sDK5D1^^Ta%tUpd zEQj9H6UR@e8LHG&%*L<2{z`_u#57XOYVh@5y?aCbEU4Ikz9$=M?Pe(j8N^}$m^N*? zG>47B!uW#6$h8aGF0^uVX zuV+-lMh!I~K=Spb&@Dgb!g0FaXFVd&7I^7`wq%PH{0LU1wf*q*XbQUqc+v3m9Dab*AnK5dKH zU?V0V!xdoCQcMuX1;EjQTrCOh%$%-Qz^>i9q>&2hcK7%i2*jS>H_Tl4%6j$gW)g0PzXCXclzNWkK!Qww3izKbtjaCevn2OO{N@-dBnM zP?9Z4^u(%FtK`NTZK?p+zFs3|z{sK1ur0#XN2!Xck0ObvZ zSJnr>7XSb&%_oFCE~F-jG0K8IA(Mrdrj(bS1b~~;xN$DD4F1btdF5}f_>8e~<)Mq? zZp|k2)Z%9wfLgV#lrzXyK6~bzoH=twv7G%$_}HoCtorgxsZy00@6jt@@uJ0Y)zw$4 z8>ruhxF0R+@6gIjhL0fV=jJRvaFB=wbQmU;pZMraZ=9xKI(< zu`_ov4;2n10IvThY`{dEdHG~LrYN60SdJOA`rcCg_+L8NxP*%%SEv|vBVKpyb@J9* z|4z7G2>|6xlzC61k1TBA!i93h6<4VG*guoHqAg)e24e?M2)h9p-TY^tEs>fvYr@{x zt6dR#0G6@ntO4a$;%|Nx+qgs05Hpxa0G6VK7EzSpOsQ6_x~yF30YK}RJYTyEJRKsD z5B>P@<1z~Syy%VGuyKPN|LHiKerH@T)ld}+VVb%2Y}%e;kI`#-*=}t^LzgE82rFxj*`?TE`cAz;ED@?41X3;*|fF>O?>T1C#BKI2%ss_&Le zvnc9(j0=FN-B*X#q{EWK$7zG-u7Kb&311qnmW)xHK zM(c9><@7;W+f8}iNZhiA0MIcM3EkkqgW({1)r|{~9YuL7ckbM&KstW>Crj^lIuL_H z#8kKY8wElHdkGHJO}5f=!u{7(Go5cp{2Dc?L-;QbrPk^-YviVzey(JbnOUv~qM(j# z*lleGXkyzFfm=@{1b~)m_3G7>=5g*Eg4<|~7Hk7}6K5v~vJ7V z3<y&6MLiPm@)p$Y&C6i5-|)qe*Ad33_EDz6$XYp3Wv;ykd+qvDvr&d z0Eo+i*g0G1l&A1@9A6Z|*Is+AGKz9qmMmGKB4`Wd&zGIMc7Tr}K%|h+f?BD#)Pw@F zS3As1YZef6^wF|Lw2BTqWb?Y1t_F{Qp(PxXKOXn^+gsBvW0JQ^} zfL^`UvUUdIV@eK-qV4eYSKkDOs)TS{HB=EC+76pBYL`(#jrL>L%KK>gGh<-_+{jc% zFXl1~=LRt(>bkSdl;_`on6mjk`8ox)Z7?o{JH0b}M#{D^U|3p1h@GU=(71*e>!Bue z>dYxw_w9NqQ>HYoGAc0b2f*QvJ~c&mgR`Vq@nSIPAChMWJbS_LAc6ka|Bo2QH|W2a z7+R%?(ab`01OyUPfh5IGj~_yZgl*|2osv}3Sl&2 zFD=iD=@33SvA9j=wHh@)?3ncZDxDhqdZI z@lzLhOaK1;Wz3k-ni9@G)W|4vtfJh}Nd;soBI?A#WlkRtJ)*|IuvdUNRwgT}vaDLg zR7jZbTrDvwn}5~^tr@=!;6WO2Zs@VtxP}=<>Xsn*dKTMC0`s8SA_8WBvnPciq9JIa zc)%4kuRsFAaZ6*)Rw{7-02Pp7=qh182}5(=ZTJow@#@K3@Y?|co{=}+c*E&ewu*o; z@k)C!v*qr)e=Q?Mj8ODhiNMY6x8tBhpMdtM^VXyYXI&1b*7SCzzhA!iBX3TX4&B3m z+fCs2 z?v^p?B0;8KhS!iGFUq)aqcH&vOJO7jsAJ6xNQ!M)v)}s2I{Nf^RA$YZDL-ub!Hp^S zR)B9AC~ASdJfT=jyh2W3iC}f>?;roY{OM2bb}=24cK}E#ErqOv1hS6{d+@;rW%~5# zR!mlRlC#lRv}O#3&gO4nsIntRzA3jMyqOn;Nwocb*H8Dwl1y$}W&v3X$;Zv~P<;L$ zenmDMl{CQL>mqe={{d`q3iwzyY}jb$SozXYA``Q0!eqe}%Nh6Hr1!AFL8peB^6Rc$ z5f7N}%s%t2r2<(JvT@_4GIQpPyr6kxomJq;B`iCgHH9{X9fgA{gIuo^@li!(2)B5_> zY6m7;*SmEz0zq5DtvA9{F^X`!^Gdx8J-;Lg%zic%nx4)KT;`$kjOWPGrSo0#$)|`G zf#7?QWzi^eoFj4$*aL!^tY_XLG)^Xl|(oaR7+7Z-5&??Cr2#-?LrY$@z{O zG)iLy{G|J4m1O)vyq#=_gW?8i&SI5_>$iriT3tn4eP_?0&agTcEneh4YitP5#p|u% zpySW}zhBwV8W?9RRo^aM?pF2+OXn_~Wf3QjSpt?t`@|FdW%TGVJ_ne46=bd-D zb=h=doS5|R$13z4RExL4;Im5j7A4+*MtH_!!p*!UEv0D_Xfq$p4CLplnqmQPzKLf+ z(!uxiGk?}?H%*5U@bZg#3@2wOxHUhT{Rvq>d?IP=?5l9zEJUrM66F zX_eEjmLq-(25dM{7~t>Lty?^N^X#{tJs-gP17LrcXqTEN#%T0dWtcI>Y>?}(*P8+> z^N?73*NweYoZiz#9ej0xdv@(n3vWLT;aG}{0y87V zju|VD|Ne31Hn6u25dcPz7!SS>rC$BIjuo%t&T7KiEY9LTp4y;6+5}exb^Oyf&mv&p zT0_y5@pOTZGn16-Avo?ZnNJY7S2*D*;pXVE)i|W7PTe}n_@dTBEoK&Wu&{6s0h4s~ zWYgP!wqogr@#wq+W!tuG$b{gInvfyeYH5TFFnx0tO=wpshPPppijgaUo9+YvCW__$ z6bgW|5_qt~&*Bkp z+;rqc9bxQs*RQcfb|^*>z}d|Z`dlRuWj=@>YUIWPfbV(vinNMH8EqM7!y7pP=l671 zx5lcBx*4)7dOF{H^G)g7x1aKu(o)VWlPM!!AE7pAr=u)fus|Ne>FRqRG`VAv>MhR} zV!(wP!F4A^o$|QFIc^})--f|xnRY*G?Z>#IOO`Bw%^7Dc z8KAfK8vufx8aQyE+C#uJcAH%&%Uad%2U=@d{4zsXzQv0bms{}OfRQ6dhPsP+%m4vU zwlN-~NB7Amo|Ic}yHy47ZHqnFH{;LZ_jBid?C#u8Kz#;IYNL-j!z-l31whZpY#y~m zi5lrC<Q8(&~sQMdvqDD9PGR7$^VLp$z9je1*dzF9dfQz-*6cG4|wNfrRk{?Bkl?xbPT zkvhZ8oj6)mpnJe(OBWIV?px!|e`5qxhueb5RXo1TmaSz6C_}n+?}}ZaPKIC3QJ}DG4dPRMPpaey08K+Blo`+sjT`jp)mx^1 zFvV5%V%^5sNI$$1oAfri%bx0}^J2}UI-Sf-D^{+A`}mi5v5z+V&LFq7Sg{gH2I->J zVj}}gI!dCAhH=_v#XKvT=dC7Patwe2!f)_*R8%XOnM~e=Q;wR2(}Gz6WCdoBZQ$J6 z`2F{q9F7XBkCw@h4oF4m)2ENrzPh&BR2^2RS$%^<+kgJ^4b1R)N`0jpz?>V$XLwHa zZuqQNc%*_CYtR6w@#sP2)-t~jV+cPOH4Ypp0pNfT_a#12;W<8AqGU;>w%XQ_Hyp#ODF$DVLO4kbenhGvS7(Dzy*x zgd6hQpMpQ`OlLN8sSoet28325IU2MssC%&R_CFe$O-W2isxAWDtwGCv5Baw%TVVrrR;!?6mDtX9h=jS{-dtS7VRH<2btA0QgKCi?e?>j9xq%g)i{r z>`z-sI{<2&`i0Is4D?}}EGlW$q;&^r>`!+HP}3f-p{%unT;hh&#UnmH@u?i@`fQNL zyz~e0Fa8%g`$!e?O7nH=)*C_F;c(CNP+Vit7w_f7xgC6*=kpB!yAJ?^?;ha`VEEUU!p3b*lPA9~@4r78 zd(2j;G!Szlx>A^wmc&b^zmw3d5fHlm`~wP;0001}Nklrjrgu5pu- zAh0T^#53T-7sK%4VLM5^LMsV+QGe%IlXGy*#Z#vH&mh<^;w#$x3(~!bKrUer~P}AhPy3AxT6*RCr$PU3qw0)s;W@ZF*0;cRO)x$1J8cgk+oqLIM?#7y<+cptKaq))x5M zDKlN@w51Tyul?H6DQ)SrFm#|4N>gH%kdOvv)j&eXVnRu6VsO0RRhBKuveviV@s+H2 zL2@M9^1|f)l`p>UzI)H_p7T5RoO7QLoM|&E0W_m;Kl5^!698ZvP*4sGgn*4;#)AYK zKtcd`u46c>0l)wVo(C1f z0B{ZTCH z8zJE?P+=L|16>HsJyM>%06YU1M#vUHCg21B5P@Up2Lwx@1)7m9!Vq(+&1L}R0R?Xj znwW)g?0-zi1b}wHaPb)pnBskhZNNb>JPR0Z0R)=3!=niCJ_Q&aM0Z1Iil;Cw!_8U^ zAgjmE!bO1K1wgP6FfgMefCLiMyN#_fOtc5vdwA$B3eK|_z(=h!U|wuB>>QXVK?~TFyw=OE(?EFYkWE4kT-6$VWmBbUpa9S)2CB8u{57-Od(n6GYZJmfv20r4b& zt@K&%@L3qpMgX`A0E7|buK>nwgwT%}%skhy>e+$V5CnjM0o5+c%7vsqMIqvHMh;r4 z3N!$wqyJAI(d+S=#>U1o0K}0$DzCHZ!u`Ts7{lZ7V>+0ao*q!qSDW^f{vB+#h>*ts zK!hC^UW%d)>-A7|27tKYu~8-VmLi%{_v2_pGf^Wk{a2}6)7_2d{4NsTKLfxN7}Uz6 z_p3|1bcGU6xg1f)Z)~O*2Pzx{TFlI3SK_2>>oJ zv;<+WCjr25S(UH&aKKc- zfUR`#+nQXOMlS)NNK3J2GBI& zfXp>xNw|Eol@s&zCd{hmVntn!RU}}RdIw8#16z>cYCQXQ;@H#oRPDJ`#+eoXA``ON zs732f3IQLL50qk(RYv8I>Qr+~z43&RECBJ&0VVtH;%Np~UP0Fc#cWo215xZQ5Q#bOa{LkF#)U4kqY3+-}on$l7&yLj

A0 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 N002ovPDHLkV1n0kFWvwE diff --git a/app/icon.svg b/app/icon.svg index 9b5ea15..9c7adf2 100644 --- a/app/icon.svg +++ b/app/icon.svg @@ -1,3 +1,8 @@ - \ No newline at end of file + + + + + + + \ No newline at end of file diff --git a/app/layout.tsx b/app/layout.tsx index e2f5e2e..4777f1d 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -3,8 +3,10 @@ import { ThemeProvider } from "@/components/theme-provider" import { Inter } from 'next/font/google'; import type { ReactNode } from 'react'; import type { Metadata } from "next"; -import { Toaster } from '@/components/ui/toaster'; import { mockServer } from '@/mocks/server'; +import { TooltipProvider } from "@/components/ui/tooltip" +import { Toaster } from "@/components/ui/sonner" + const inter = Inter({ subsets: ['latin'], @@ -46,9 +48,18 @@ export default async function Layout({ children }: { children: ReactNode }) { defaultTheme="dark" enableSystem disableTransitionOnChange - > - {children} - + > + {/* Background gradient */} +

+ + {/* Animated abstract shapes */} +
+
+
+
+ {children} + + diff --git a/app/login/page.tsx b/app/login/page.tsx index 1bb68cd..355fb7c 100644 --- a/app/login/page.tsx +++ b/app/login/page.tsx @@ -1,16 +1,20 @@ -import { authOptions } from "@/auth" -import { LoginForm } from "@/components/LoginForm/login-form" -import { getServerSession } from "next-auth" +import { AuthForm } from "@/components/Auth/AuthForm" +import { auth } from "@/lib/auth" +import { headers } from "next/headers" import { redirect } from 'next/navigation' export default async function Page() { - const session = await getServerSession(authOptions) - if (session) redirect("/") + const session = await auth.api.getSession({ + headers: await headers(), + }); + + if (session) redirect("/"); + return ( -
-
- +
+
+
- ) + ); } diff --git a/app/manifest.json b/app/manifest.json index ccf313a..e9ec274 100644 --- a/app/manifest.json +++ b/app/manifest.json @@ -1,6 +1,6 @@ { - "name": "MyWebSite", - "short_name": "MySite", + "name": "Dcup", + "short_name": "Dcup", "icons": [ { "src": "/web-app-manifest-192x192.png", diff --git a/app/opengraph-image.jpg b/app/opengraph-image.jpg index 4d0ea9a648ad47bade0d396f6faf37124c964c8d..fe09ca3b9f9d9e0bec7410e0c37d9024126cbfdc 100644 GIT binary patch literal 52261 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

R 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 aX<#%BjHZFnG%%V5M$^EMNdxx(Zvp^_{AHp5 literal 77316 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%0AfPGbRG9Eu<8IB5^@?1F-nQF)~c(HAi<$~HOE~= zS6M}_zm;U2@L?aAzwzGU5NJ()5YVipv*x9IPOnT^Lxt@Q4oFOoz{p4pD4hWO1hUfpE&aUC58f5XhKLBg=wn@=4z z(q1okrw@Pb2VihG^ff@?ngDnqHbDB&|BZw2KMcz}1t?A5X2msFjaYE8-l~+&H(N%_ zi2M6%N939cQ=&uv;kR?;TM?k(@=xiBGbpr?dte+OWL3o;9SC+`5?|Nn`wz&Aex(;b z#`YUL8wm@+Di^4E)m^%n+|py9v4ENo-#xskDqV3j=_?KFS%J1Z1<(Mn+f03Pgarkq z<-9i|QlzWwH;;acSxfcGKHO+!#qhjDFExv_Fj(llJh`8)^W;fV?^={c42T6GEXO=T zbLxl{wogB*%wX)e&W-pjYsuogvuTYkqsN4<3<2 zX|`$eaj>wWC%7xaPjW2m^lOc`#yKC;^Cb7~$zIF2r?~S4U+Qztt2LU5x64&tM|lIz zNCcJ9+xOoQE}Tyub-R%jcR{-$B_OXWMdPNa!*{N#B3Br*xx)uuNft4$V*NS@^eeDW zt}~9X50G{xZ-xvQ^J}_BZp_htRmN(NosWuhT71`h3qmvUNIHrh$Kw$?la9leMl?o!_V~dc+CJRS~X+<}Z2WVA5gdE<%wg@w#wB$s5Iu zFZ9p0h6OAWANp{bypjwe{{-8_W6n+DRsf(SJxn|C4o}rwPM@l#%Uil?+z?v4rF^ zBjUWj*jcM<`CcCPG6^j!UyW*uc8z4xuuYzve5o=#%+SxB7Y91@=EhI_EBEK`UuSI; z7>UKs)Vo4egQyh z8R*$-5D-;poxHQQ}>4i|00e z2Y|DL{?$EOy)eJg`evx*5SZNfuwKzRXQWHrhhR52!^(%U%)PZgptou3XB+{xX zB6*t+8ypV43|sy93|dM} z25oZxpWYo|BO*xlSW5(Qd8N5!^au1G&u;2vRTOQZJPmR~8=Sgw;Ve1?IwC{MVx3f-}PU zw!b$S$Vo)s`)|)Y`)>^<$4pAIjQCr_|GmM+!T5^q%l~oVE1RLnq}4BO{ShyNv#3D; z2K`?`uFTfCH|l;sA^e328Wtk5;~G>RyB5^>$e=>y$0#{PL(~dL+WEIOP)VYdeh*4J zjg0QNU=#?s%Ve)ZP2siGM6-rp|7y(PBRQ6)3KN-Y!x$aXOhKa02>+~nFX9hKY%XM1 z`#qUHM~u8g`>3GV$lFP*BF4Q`70uRZm#uC~_1k5PL5cp!(rZVicw5#SHXlWh{&iA~ z{SBad(>=18dtta_*hAp)sT=P+>2clgBh75rJ|mQ4DD*x`sm(gCV+8>04&<2J>)pw* z(%!r;SQjL-H`Qj*KvCSR?^sWyW?Z|3=?)M@F0rGOL$JK|TeGJH`&n^o1FD?8EWup# zGJ?xlnULI8PPiHp;Xki2bGCR_{9tN0NQ%i|;Oco~br6SBzgEfg+UBJ`11j+u$~wyD zAtqhTlyLd#ragzJnql_*Mn;TayELV{kE{FnAlDEoWQ<@j6|tP$aUF9%QrfP#bC@8` zz(LE?@9x&`FwjYg_v4XPp`P5DW@}AJOzk6!jpNpdI>#wyecP*NaDBCLtX;M(j&bT$ zwQ-6f^f^A$x{y$GUuMyqdlwtESf9d2=iCv(M6znfxwCc(`cF&dcbeiJ3C?n*pA}qb zE|sRBjXT|sA6VA-Klr8WR8>WBsYO_tjm!wn0DDP%uM7W>U1pbdo7+89 z(fytHd}3{AWoy$-$9d=Hdud<~u7>LCfrK`)#;?doRC^1S3^cotD>13jiW5W}+{QbT zo^?T+$6g6wRPZ~Zy4es5$$&F2Tfb(~=ix8nU$i34L26Ik#PQ~DDzECZ>2TwZH)|Go zabpmGN4is(E8q{PI(^~c;-VyPaiFh^$$ITAP7=IS$g?#Z6#IAzD^|E&w?w7H=vMhm z*|EM{6>4J7l~zn|&iYlR99)c5Mnihi*m~mUF?LFI(;^?Ar5I+{3X$JpAX9LXALGKO z+57`y5RGQsX`KC}86EW59$Bxp9T@W4Pbc?>pG5yodT@mZ-cP$^a94D|664fe^!>2L z%@TNyu*hq@*w3W<_~aCL>?AHzW%nClL;`{97yur4M9?R~Xmv^#-%{L{^3i9MCcdEk zxBRZp1+%%n=#@G~%mDq`hH)&&-tq_ETIj^g{FZ%5kg^sOC4DSY^a7a?C@MhYg^w1k zts$ywZuCFiZtvrx{CdOp=eAQ)Ukk`9RFP&kf$gU2fj)93W7U*lwXLD?jfDkODUwdE zqsspmm}lB~fkKWo<>~>V-*2_-@(^+Q(iuS2l!aB7;CDBcW)v+bzIEkZBUk6SX}WE^ z&Uwm(U^wm5;hDhQ#&~LDyirBnb?FZR_64|7TsEX`42IJZI>9-&@XIufP-CB9B;PS% zqS0JB{v*X%grbf~Ik8oB9Qhh##yh??_!G^quB7%V_vn%{f@_A1vqeUn{I{#$1609f zkpIWMKBSqxD{|3IGt9^#dd;$t@ypp+vv5n-kuAld)+4X9E@n&Cr5_7$o(>o-R(Lgq z$rLK{WabB#_MIy&yC+HOu}!x0WAtNrqCb3oF!t1b0X8QDrt<{enwsuSuHem|oDsc{ z3T_P62CuDVrq0!xEC6{W!AMMG@o_UsxCUl>JIwi~*TRRLZJt3N{Jo20y6$UI`}?l` zmq^~jyWovjlLH18lnTd=84^9!ae~!CjRvg3Zhk#V=l&TI5NP|_i&e>k`ueBy} zqYo|FU;+SF?kFQ+PvKp?wCQYU{h(@Z?YmdBjr{CFvWl?)#OZu){+DJ0OBGDeXTprD z2F=zZ60P~gs%A=?7uzkN@3fH`uy5>$C2T62=llY@MZ-z%(9ePUIerrc!H{B!ubyvf z&1WMl&Abaex%TPyj}N1vg&NR6O%Gtnu|@pmH5$8i0X9Gr4`A|M5VUz#3!T@zah9~1j$L~}&@RlorZiUWKE#|AYSms^fNBvr?k$7gKD<8dDP?(B0k=_k6{ zx^gv2&aOL__;6X1J8Y4zP+E+umGhP2ZX@ZBWN73o&RIu?u8reo0gTteoCx1CF4UXS z4-nez%Y05^srv8l+_k!#uu6*F0cifY*-j7r$YxuT@bji?Atv$u-LeF^_KQ&k4F^Ib?obG;tVK}`%!G#jnlg=471AXkpac8nBrTjJFm z&-=4Yh@Qt=*df~GfZb-%IF4*?9=_GiN;vJ1%G5?`Dy<$H_e5#1=%6F8ZAElVGN|IZ z=}Nq#P^r$ zzXO3G%ZxEqs}LevR+4cCETHt~eIM=Tv;U#{RW+KU0RIqeCi=H%Xwx51WIF2)FBmGZ zldH?^{aZe^*as?38odE{6$_TpqrQ(2Z^Byu0{?1axWlQjg4OpC`_`oeUlJQj69IxB z)zhsswlMNitdwWgK+#+GAqI&SM^iUq0b zB6JBe>ADqy1Vuz3jwr~qe!`*)y709JFx$!@PQUw#wb_&r>@1O>(;By9zkaydL&&^Z zPzmiKZ?{f$f~?vN?rjUqLvTut5Fp&20tDM#S8=z;bI@YpB591wo5x6t*OGF?m_{1NN6P}<9%Z?o zQRdLNo3e_fRjXT3SR!Oo3L7ar?`ejv$}6>y%&=SQQ4}Y4uea#M!6@jNKo^V}BhYtA zSc626?zl5r#m!d^*z>B=^YCxHkt<$=n5D+bv5H-BA_krV!O?P)w#&y4yU~4tX9DzI z@6q?;zvVc>FNFFDqR3y#aU}ypo;ReD-W+SJHF;+I^C@afA)IUnyc77?qA*Nu(OX7= zUQH@9Te>=0eLMHNp_wt+Ai4hjOk$&>4hVydhv;De!qKueAy#DaO9Kf|Wu^VdEEEN6 z$5GF=lD?IU4tckts-xz2KT}^wo-zMk@VMn^8C5I#C|qEFv$_S%TH>2lKkdu( z839#)Sr+c*j?mt6)l6Nkak=Ud~%%u^H$N>*+G58rb*wvXPiUYz>P9chFAN#Y}q%E{c4A!7Tq%<98{$EiQ@Jtnq2Vo!3;zN^+B zS*X{&%YDl?Pa}oSI_#NrpSY8(D|5#?u14u)p%TNt%_3|B7;N01b56MuznPkpM)iVp zqq7Jt0Cf4yT)6eqDcLtoM-;n8_RW_q`@;$G{m>7D^7Qkkw-1b2Nl~(&nyFB|%e_l7 z74|xtXzhdI%Y4Wnw~4Po*|3@uSUz^B%?2~o*+$k(xAOBI zD>#~I19;+^`ch!Qt~;Yce4e5eLrm^IA>C(?n*ETuImt%3%x?64+%t@EPmji}I3WlY zZyP@Z6JCH7szwFQ24gwCt3qoCVtX4?dT`}Mr2A}c8cs@&z|wA|gD@gE7n08ZbWx$# zLw;8D>QFkk>tQXP)omZGq8MUwRj%7ab$sO=w8B4{u^;vQiUj zkl0>>IPm0tWcCSjHt6MN%MTI+??0Xcy11j*C)$^cUx4DC2f0Lk$MuzShRv&R;_3sX*+ntxYyLue|ieTo=Dj(@fOsMJd*# z9%Eg+D|wb4Z}EMAYTiVi*XL#5=e_Fso8{1Rkn~ojX!c6c18K)AzL6}OVF0{VMilPE z5X*Jqf8}7>;%#%|0&o%_m&2s(&&O_WPi=erNTp=sdfl5y@t8WTP^F*KgVi%CodSJ? zdv*a7-)ICT&ziF5*C|j|c(gLQyRo<7`-1IE?fDVqb(Wh*=}&t60+8ia-m??gXvDGp zU$tyZX90tL3CQ3&{>hgEo~UW>vft_NnGSC4?Ck#fNN1?Wtt_{M)gtU!L~Ujxzmp99f4 z|Lc+jJCpw-MV&HWAWBG^M|q6jz>UKoA}qpPm#}aw3uD)JpvquOuV#Wmfn}`xRi>Z6 zZSX^8_ObWS!hNg^<2cqGYn4E3 z$48zgH2|%8sX~dQk?bTj7T;sYp)|H*Jl^{JSJ|g$r5tWe&8U@ zwZayFqn>hTw#`j*G-+As)m0G#5fkX$c~UC3@Lt0kC4q>XtBdB1@8alF%}GJXIDU&7 z3#MdeiuIGJv*6%JubIP5;OM5C-Lo)`W~c~(LgS}#lnH-8!a^$KMfpb;D(o)(7nu-g zOs;I_wPVL4J1BL?j?sx)xh?uTF-Yl15bt3&_)f4{>PaMm0j?%rb)EXb{{6gKZMc3C z-*DoyHYo=#3Fuj`9UJ&;gbKNk&OP%zKoh>+QC`2Q^T{`dBI9eE&x;7W)blb;^bs~W z$`7|ub|QiYYj1_1>H=}(bMP)h)PC!|*2Wu3p)ZCh9=rw-kAuLx@)Dw3e?ZiLY8RY* z=w~e(_<`s&?ZfcXiF}IQ5U`U_Nh&&mmCO_WCsrzcwa(uQ@_l*x@|{O(uzS+$sb3_O zohAL|)IoTaD)<}?_|j*x47~Qzswh>g_9`Eqh$cl}MJzKOw*|L)&I%>N`*}^xPG1QY z$4(;>*{XZ#ZM2E+8i$G%OFOY!!Uxg-Dy5awOA56MXFTfjkye1Fkh}RWbJ^-jsgXZ2 zNVxgr^lTKq?WOPsbU)w~Ze8~Bg}yX}!;<9nSAH*hW8wPd>X$yaR7`j&Aj3aY*R)wM$MnQ9Q8vX+vjM>azdjAg ztpZ9HW9;bh@SA`EjR?R*Xrg zVyIE2E}|42L2^Z9!uS81t^MB$|NT4k2mb#yur^c$ut?Y7UW)!NKZoYn{ooZq62N5u zOvN+6X}{E3Q5N532l>qgXzN$tGF;Fp-m2?=hlKIJtjDSd;$SIM-6pg9u&K;!4v$=_pvnJ zs;Nb1a_000;vL?@&d=!~dl6hhNZcC14Wxg$c zYb3f*n>e1DQ<1LxT5#N7ij`Cgpd?;V?+a<7>0 z+hs;v9zH9#;v|26>p+njZ~Icew~citLCub=ezG^b#%T4{hLh})6(^2!mTr~LQx|=| z;C^?XeZTJq+p zDNJkp?AB3r_^%;&bpfo zXqD1mGHII)oNkk(r3n+9_kx`a<=%N((`=n;-N>ePwGy|IAZ!FcW_#T}BD4YBjnVUp zz;2K0f}*d=XK~qC$)yI!ND}=E2&>j(H2cZ*ejDoG#L!gw&3&gZj>F8)I{2o3~kEd@t_kawFwfKnI2&wD3$FL!cb+vTjKNBY>hMI+{c~QvRDl zV1eGGGT$QF#pDY$-VcBd!WQPmVl9&wEc(LQQ9Auy=(-|1pRe#qK_BSDX)&qPi{_~s zPkWuw*NNvRKrQhvBu{-0N&Rn0pNzct<|`%*TOG0MW&Es<<7m0ETF|~lsri7T^M(Nl zJAM(X$BFS0HKt-sfY?^;`wnA;G3Qt!^?1%V015x0oD<^kr4sGvu1^wQrU|22yu4NTO zC$y~bqS?~`e-4c~fECws><`%r-0 zI@-m+XsPI9$?mLCLV;L@=lf07oVlWgXfJM%&y50r#_BDF`fkX6{nbldgi`u_uK)uJ z5lPP76@N*_-(jU4MZ0?ELWc7BW{Ot#-RE=i_R_RT878TcQ<$bVZ(ue*Y8!&a)9E|RLYo%wUPTBya#8qanz>y4tJvTwQ(m8 zxX}0O0YoY$;3b+rXZG>{J6ree@zLk&iS10M?4KYW{xHz47YiD{8%J8#5YXk3R278m z>TiAep3wXeWHgW2Lr){N?5&4V8*NRVsfc8bjz|&oheiDs7Xi6T{Iq-VAUD2yFDw77 zv;~56E95A0V_5K`VBP1~Kwu7K$1jjx6BP@Vt$gu(?0_$al z()VGY1FSLnMK3GQ)LfUrk6*GbUbsTTL#x^OMP7IU1`0jq^cS{(ypb|!W-XMtS*Y=h9$UNn6SSsLPwtD>0fy>88)uc(x zL3Mqc5CAZ%7sHEm#Bl6w3Fli(3Q&;zcHtvxPdxonY4=sN=v&H2+ZvWR>Q_(ZKT<@z zs)J-W95$boz6k??!5k$X{E_JFzGU?K`cpYo%j1B4Dg*s9` zF>$~789!hrRi6u4;;Dlgts*S?W^$dV<@+cK#s_oQcnCLFe&VTTMU4lLXx+8Z{58%+ zcJ6Gp)BKNr$L;Gb);x)#28nBl)8wsc0_$;iqfEk=l3iKb^2&$i;r)@1?M<`4XlXLP zS9cN70&A9HuDXGwo&yneW4(l}=QZ;io&DK|5&WAV+V->i4gWHI{be`$-}w5XLC>aP z3uG^hLvFw#H9L~;t=KQw=U8TVXR=M}9elLjpDzUTcCSZOpK2{DzpThUKV%zi(fC*V z`hRkn{1w~&Ep-kY%wzxjWnw4?q@Qg^n8ED8a!oKc`Vw&+04M+o9w4;jf1uoGj;*|{ z{}J#3PV}%6z()ZPu?zo8to)y!mGhcLO|TuGbDYq0E9BIeC$X;iM=^UE^z{A0-O6iu zQ84!25)1IhhlxPlI#rw~>ZqIa#g%pM+)`F*F;JEw7d?-C#AQ|`ftZ7F~- zx1xiHG@hy%;dzntZK{SxszBG_0mv7Qdfdk6`pYjIm$U7FFA?_6XIyNx3#nHz%IF;<&}x8?vs?A}8+UkH znr&qS(JO4ygKUvr8hDqLdqX$cMgsq+d`w}o(XjQl*OM@z1LS}T+hRjt^g5g9Hlkt- z8{`E@C}x1ud|TZlI0PyP-%~@o715M7ZZ0jI+e|XBhbF#l!24)&N)MPKgl9z36ck%M zWy}Uw2X{USYBDJGl|mdna$yGW+yf}T*Nwz({l~Ei#XI9e;+AZ?OZ=8v9tTzoef7JF z@aRt2AUeR>bHvZ$px32Z-JX6h<<6B>C?w=Oum$n~`F=dG!FVdRqRDD(b8R0n9F=BR z+K|Z%aFqja)XXxMS`6Px1_j@b!~ieH^Oo0(#PsVA?lL>4a)TY5#7KXRc|-%%Jw_7J z(1fTxN&h)`xO%d&!RhKyQmYb~vP%S2?3}N#tLCpM*whD}k|$e6llaDRQ-ewIHZKV> zQXDg7iaw(SI_+J$aCnty)Ae&rYo`h+1*UjTHTIiC{T;i)0ll8Hg4GOA+Ip`eh8La4X|X)trhEwCYOu+}7o9j! z#-IX+dbh~zIQGTLq7#sc^g0lBIr%~}3AgC*XbWk6EiGzAS(;hd>_R8YdxwnWYg89o zzk8Xbqd)FO<#hJAt1OEoCiFZ%)T^3lOul-HVBMT{pdVHK0H&-rS+;H* z@{3^R;#SksiZ~_bpX=nxC-kBgNV>oeV~p?)5p}&wPXQ>G4QI#=BgHM-v8y}LNIB-0 zG?Q3mRCPKjIz2b539#F*^ze`{aF{b_&Vn?$#7sMfCb^jj0IOf5G=RVcc)|EjM-yULPHUNgm_%J zvp*Qy9j34|yyA^T~zo0SUvNiu@f$=CSV%N#eE zCtrGRF~{gSFK2RfA_68cUCJqDGiUcErDZAJJ#TmTEU?60fv5XkjQJQsjko?|2?It3 z6|I@#>;9b=2NQ^!DayL9-n*?p`QS z^3uSXRcNqwId-HP^^r~9Ori`UpgZa1DfTHrw&tyxQ~6U4ddfpkHp%Ht16B_oYP{hI zn7kTFzhj9hY;w8J?6I+o-iE@hEbg$Dwh&5v38tuVXA`4_+-~?C z0$l+d&@_tPGaSQ)VhrLmP5|2NI5iK0w>3(s`V=*XIwu?;`h0MUtcmh2Cx!N z)!4zvc9%rcq}AUSRdR+tp>=E&42U?t=_l%O`xclO}CM#LOI{9J%rq$)f9e7^3`M@&Sff~$EyYaREL-Wy$4iN@0u?hL`0>8-XSWeND)PP3yKgB5fG&dDjftw1OfztA|PErKv4+N zd!%;)gepoe(jg$dB-B8PcmHSR%$z#stnYra?z-2tlw}gK_fFpZyifU+YvMbEep+CL z1kv=iK7$Z;UqJF%I41i@Pqa(iSB$?%7dq1Cx3Abl4>!3znp;J%j>3J7Fgek|l_a_p zcTLS(vYEe{(Wcr8xD`h@fzc%|mBSLD5#u`#=H_{=88UJuQ`pv*5I5cLjbDRfG4 zi0F@hA!yW!!M`W=nLPq)JgJii5*$-t)P0_w7JL%bb52NE(?2Xijd7KosJ7jP1S2#l z#bf5j%yu-Ra)aUC-m>Z z)4?L>M|k;WcQ$ygM)gQmUD=T9RRbN+=W^{8Ke>Jd`l@>Yg%%b>jd>~XxalSIf+@5j zWlh|rEgUy_YGX@;y@n>Zn;hyg9w-9$!KPrastor=Rqo3C;A5vx@Dt>8^KQGv3|EB6 z&#Oa30AN6?kJVX%YDYNI)5X){Y+?Ci{DV{cL5iT@*UYNxsc5~yCO%9g^`bK$BvjU} zX|VXjjkQ6+HQ|XS6nt3>1jYWOeY6OrBh&fk>!hzzm3#- zG2kTIJ8WW9NaQvjYJktMUOQ81B#q^XBA1=wHK8ZfD0Z**`tcpm;^kZU7>%oDZV)QG z{fb*dO$W8-t((n$tD>wh3oTB+Ow&Z>wsF#?Alhxew`c#pKyr+1&ieyqM4 z0^}vcGD_ByMo0Zdzqr~wzv_CvCSJkeBt(|;tuYXa=?Un2L?}LE7DpfI6@3$3a<0Do zT|49Tg3Y)pH&DV*nka3zDEbi)hcP$t4#Cl5P!~~iY0gi|p;KEtEsOhm zyv6#=WR4+;21!>m0!BF9KUaJ9X|?*74lVVk<413o9gSj^^FTs^n*QLn*f(4$@^6yc z1Hq%Am0uWr-)u@mSh&sgU_n!?L9pfU26}whod)~^D{(>xh7y~75BcIP$93LwY(LU; z=s~odGBgVuCV4=Shnz=&;emY?`0B`WBa$U{*NW>CozBpTyl(nz%W^$#jZPm24H-4p zZ<$u^FkF+De)LE}Vss;d)hF$_A3Q%IxE!vFV3A)*F@9f^mr684v2=SXTdJl)Cosz$2*|NGVvK|?n3g95U zwX6P^Q4@_zgxh+FVb_?vAWVROKK!svH+wbYf~K`J4yS$xpjGJSFN1v4f<-_t-kS_u zCv)Q&k3SIuXFKoB2wQ%MJhXMEjVm91Os+4tbO>$Y=l}@JZU|0XvAd_m;cr0hfA!3`eyqwR_d<C2BhFFZKvBRZ1t?^3a8Q2PP>DMt$G*j<8dSNI-5&z>Q}QKFET4U#^Ot2+pHNj z5UTiKeZWXDZz`t{A-wbKwdgI|i|^UTD5eqtL_mu6FIfVA%^LWJ|EFDnjNhtlh=STRFsk4=UW@g`VF-v;@G)XVpos$@P$q^(RrmaTm?FX*!A@SlRwypNgd zr(OAPEHT6vw$tKT702?G zpckBg-f~OUCvez>)iIY@OBIZPnjyJx(ZW=ut~O$Zwa(1)!mFu-SJvr5OoIux@m0yW zS~Xk;D`D#~jr#=n?P1+bC?euKIk+A#auVCtI@oRzdzLPs6$LX!9JWg7MF%irC^^NETC zaVlryR;~vnfs%djb3l%g+dW>9fT|f^-?WNCIw=TyCyljmm0Aj*ZfvH1MrEl}D`SFf!|Xw2RPZv>0g!D)3)=8IYO4sFtnKVWE&)4m9P;cQa zE`sf`%sUrclLKlw)gX*BX`4oN?%u8|Y^Qr8StqXi{I>J7ygF-46Vp)*1i za%R`fE%K2w;UQ^eWrZMKK88&{NyB`Qp;=8kN$A5iO0~V4f zh|pVL&;bxGL+kd`E>Uuyj!G71S4ONZKVhty`A}u2*og=>zd;?~k{g(^bhJ8KUOtk0 zQWkqB%l6PUk70N6LPL2=no3>2nlKDUxkZ~l%|!^B+PiLroIM?yqndr3XS`8<|J4Aszy433Svx6LJIjlw=xvDCGXJ+SVE6PpdeY zmb#t`%-Zyc+G^aZLSSkK33}kytTuK~Om#>K30!K4T86?GW`a~<*j*j^jaT0IQmt#f zZ-U25BI1azH31S)83TlnRYEtO|=Mrp*v6t7l#sgh~EqMV`o)RFwMU#!e?xNy|th#l<) z*Sw$PTMY!aXlj_R>f+eb3zNfV1WKdp+<2b76lyR*=Wep+TJoS}^=T(8o%>&v&E0Ka zT``yb24ze3>0<50WqGW&kk@~xs1{l}ns0^{+Io06 zDBb&vzw>#HBowx80c9n-=MxXxEdcRy=ZOhv)Dd#j~=ZKanPi-Uu^yE>sEKGM|wxCs~UY9($UuadYOeR0FE zEC1rWXp4rzJpjYlAOGNmV)|LCG9aT`Q3Z4nb5a4^?p!W)Z0rU!X3yW)`x-1K{Nase z`y};F!f8z6bMx)k-=NAsNzDcKjahNKk;=ZG4V3YnL~b`qW=U^7ywA_QeH(&oZ6gSl z6jMG?QWqyA(TU4PlV7(c%PWzXD4R;q^ZhL-quM32m02(>jO;!?nF?#|yV1_{-Q$#A zdjpo2DM;I`4~@QGrI-;rEv-bv2!Y=p95`0*~Jv**#{~Vuq?j&vHm4L&}U(Deo9=R~;

INqBvk<3WZJD`^YNqp^V^D?J;bnuBPFKZPjlN$la7)vPW!)| z*0GFYD=0{pC&8e1el_us9{^N*ek@;aEG70}dy~t4w`t^;udg1)$HrkSFa0#e!Ni?t zIU}STW0u?9XFa83g?`z8c{7BjX5z-_)B1Y9LADBLTA~*YNz_2t<+{w;lH7mxpoD+y z9BxG?Y(HMucF1*ZT$mNKgrhq9aD_aOJ9Xdn*s^AxL}wb%Fje?i?xlm>h$BU0)u9Go zPwprcNd6jMT!b9A&dZhfO9RpA+NWr`R)_f(0D363vrUM$Uq%_iyjFLYrNM+N-YPb6 zbM(^9%J7R#JG%*k6&rvYqrd;;X<>r<8woGnJXp^)ue17jT3QqE4VS(q355P|)A?x& zi37qeGGvDlg#C4^sB(qA#Hiyr?6y;h#CT33t2JFcYhu-6vm7(Z<-# zva7g#TNhk8DWqk93`buj#uALE>`=OuCI}G2xer{l5WwQ~O|$R%7BC&m+v}I2a)V$* z0?*s$&&_VQLpKYrksKzfHg-V}&nLatDf1~H;ACwEk@Hu^I^c5J05yV^GZB9{KS(6u z!XleS0#wsbHa_xct}!AB-{aL;*qcv^+s+X>6if8y04q46iBd6T`@s4jdEyJp1__o> z&GdQM#Xc7gZr7cqhmVCA4bfZwM9bm5ZOgWQp4`%>XfoFAjJ%gSPAe!W}ttxt_u zZla|*iWxzX6p8lhZ4j2Zn(|?_=9d*D3kCHJa>!4b1$vK@Kpp)Re$Y4H0AZgaNQGA( z?NQwNx@u5*w8(ANhndr*7N6<5P6o&N?W+2B8UuEvr1@gQ3yu}_{`D57cbiXqE8CjF zR++^LeL$-d96BCd0&`h8`Ju6$4Yi^6udKYZk_?z>&f2I5WhRUQQbZFzttrfL*^WwE zk-4xe>qlMpbsgVn#+7^DVWzz@7f0FhH=uVQsXM2g8S>h^L1lMmSmUdReHPf~!PL{q z7u5OUu~IblHGHMDMoN%;d*Esy6S7q~ooHb?B=afhVOdSB^8B~EBF_a%MetZ&g}!W9 zdSL(kR5n5RjzEFRu{Y{8%5|@a0$j$%bd4S2ABlwozr&8>XMCzjsmyU1w_2z__}#9; zrn{R#%-`sjJ3y*Zt?8JJ==_kAae^)9{Pj`4tgnw1l7)%w9&>t^7GO<7><}kw*Mai`xT@fdbpbbizb%O~06@;B-)CK25d4?Z z(+89+oBCKBwPNhmL0xM<*NV-~d#0vwMz!=2%y=;M&Sn_JzYmxK@$F%R$hOt^|Lo?DY4C$-g$ocrP^h5Gx59M#M-Tx2xxL z1?7elm@*WRANK8^F?9;OlaT73yxJYF-vk!|2Yc8wk7}Sni;OXO^$W`I7?}@8TO2m91D>cEUf?F{^XKkt9 zuR$sU3cv5Fzc{b=zIc zdri32RW7FXLRl~?VmEd|OSy(BwJr&V*c3_9xP?Nms84Rb0~!S{{AQ!}i>*8KaN%1~ ze$^>uogx~Jk#2G!LP4Nwo@qzj=qKfr49SvW*H3LT%w@w~3?A=m%s7~4(xtEK1C~0` z@Z6gOu6T(O6>&vGCI#A&+<+()Z`m@D&BLc0bh7gFCEPLPd8z&&%bL zra{8T*I{DUcnXD|G-?B*M>taelq7NQV3rwSp#o#myrG1;b-oMzSw%B12aR@CdheYN zv|+&tub7Qhzu)T*P%Jr|j|HlRn+;M$D?l@7){Qz~@2}U^3Yo@zz?9sQm$%G znpGqnRkyma<~S&R+oB7nxUA1kfDQ3UDEAEA1%2jO7rCOr;)bN53Mcj_FZf+bbU-$W zq}-V%SztzH-TA5b2KMVp+LZyxeUhjFjK6E%+Hpld`YXZ@A6P+CjwC>^-oPsIiWbHS zv5XeI^l!OXXQ|zxec#(~Wc)*L|AMSZGm?F;M?cJ4O^6sdUtc(VvK;0Fk8{&GQRVR( zCU#H$O7FGn>mh{83woUqDoP0GmleFDpYp-DXEb#&4=6Z|>m5FV>2*C!jKv5YDaz2~6K>2`2X8g;RmZ5%NZ`l6F!pPI?^?6n zndGP1J?^X(4vrbYEL1vB-pk0Tn~Hd6zul0xIf}FLA>3FHph^J1Tpz80%{^5{>EzH$ zjFwlrtT=C#_%;iwFQE}~#2G3NK7;6EF(5oDvl1*}_WsIg9c3QQ^PxJOcV8|ADPw-F zjRNXXdM~?L&p5o6d7)tc@C6n>gGqfcTSiZgRqCSz>jU;kpJ0?s`yr`q1cqVq>iZr( zbJNMG)5fz-Put>nr!1atfF=~yT)qQzwWaNOAm=_+?Bteg*r0b3z{?@Jy6I`YK7WzE zOrH&Ub{SIfbU6x+{ta>$|4Km*#|k=b23M@6({3+yQ!muSMyNq62|f`LvW@)Oe6k~D zp$;a-P8Y#7imfp>w>+(Y3LN< z0)FT$V4}lJ@kKKN_|CA+mrT;nji0ceFw^ON2>j^_tmU9tNZg$8*%ZWCFsY3Ws$PaU zZsJVem-WPRfNt!POx_Nt^85zt)#&Q%rGY97!OE)}h!98fe-ey3{3;@&`(UPzZ~ zNv#M?)bbVpQUh3aZ>jv%MBO4MAs&2arA_9{8OcGMmh`QJvY3+ZZ9-wZML?nITQ{Vl z%p8tOWt+7w3pwf05W{&8^9n0Y--)JQe-J1_cB&!3!t}%TRE3zpFobVuM@x!2^Q|bc z5X&8Pf#ZDuwTc37<&;z2?|&?w>J*LG)VR{Z|H-LyP7l%U;vtzmEYGzy(8mxi?6p?J zd=v5(tuqiPhO|dqY{csy$bULWj0>DRD6aRZ3S7c|MmAb`J+br3dn8#IQgLX)c*Zn6 zsvhuD3{sps@dq=oyt9elItsWR?zb|;ogIAvpL*!8&r;NS)B*2lh>;bNWCD-AN`44H z?Z1aq4nAgFX`m4g@`$xP6MGo#18|w5d-La!p?<&mB3vCx2cKoTeBhfutN7^SJ30l0 zE}ne}mtV82Yh!!|jd{*vVe;Gw4cmQsoeDzO+9ou@C8IsxdlWFc&2 zz-N$l=DI-F;Qo<ou%-twiU3_js)G zk8hwm%k+t_t-|g5-}N6~*>6QWBY*()h2r~O&-9f7(xeVQ#r{%<2mvEL6IcHZ^QMf> z3oc>e)UD^@sPx^@zvDz+{KyEK(hF$4Td(;&+{{k=`JG*lK};tu?lmkIde24dZ$JCB zCPDb}13WWYEjt72AhCPv@e?n8rA-O`sB6NBg6oL@bRGE?$xhZ;Xp0bZhCeL}uP!bw z;E44(jL{LH=yW>c{sv<8U-Be>1MeEaj{!hH#@WWL5P!+Up|*aRxP^=SdCPdk4Rzsc zJ41EmBv_J3yop0xx4pfhg#LYfPxB^Df>7c7qo=C+x9a^Z+UR^hr|nc9zM2bu)w0JK z2RJrcA}eB}Mg^mtzSP?Y*;sVfueW`mi2p#iE=YQIq{LehU*o4#9v2xFgv6Zl3o&fo z>@#|mV7dQq#DqUASZV6#P#kMQOk=oFnO8LR(Y)Nfw|YW(RBRszNsMi)7~=SUI2f@q z^yDyIeqV2L{#F!YTC=gWPR|4s2kDwvI)Z>tIEfEh1LOk@Hn`NJHJ`h1kY$iz% zBpkM{{06D2qw7>|l$a6|ZdZ=Hti7F7eVSL_OLh2|1)k1y=N}#Y$mF1`yjJM?kUJw= zKwMGVQ`cO#xs5x^V<$~U9$FoLn>48McUgzKxlTRFOr*VX9IOsWeYl^yk(Y&l)`_q% zEwE^>H<$cGT*YhG?1qI_Y##NhV3MgvtH&mfTwLk0>u$O*K5q>M?s(1z0C?`iUnpGV z7dmrI7=QFc23%-&b?1$Tse(=vkM#gr8@X*y@}}iOUOJUK(b^x}R?%L_2%twI0joRx zHYDd1yt6$yC9D0--S%@DWY(DA<1qlp2QsM*> z{35rU(uUBrQ4IlnO`L$&Nde$GGWJa9@sXVeO$zwE7s(HX=M1W^9nzDqKgWF4=@5-1 zWB7+h>&9x3YD9L%(GUn3T?hWwlrSbMDia{IYgqsMoyG0JTD2hiCOX2sa_C!xW}b8P z?W1ZVnGdRAPl$|XLErvrjz$ag=+@^i=DwAPX~Y$)@&CB6Bzz!C(kP@iJA2*kKD5qn zsRkVZIqNlh`r<*k7gLtGvX#tp2_rWF8RY3>q;Y^t4+WTbOj&MozBEa z+jfi9Huvi5n-jL*^34?b;~u&7?iw}KROlX6wMb&?u8KUqmbDN8+MA6wN5@>H^1*#o z^zE{5X7`BPOE9l>x`ezEkwhPIq;nZST#C&X0aHe_A$}B9;&k9)IbmIvbw(h)tNjC7 z_-mJ<$Q-i^z(bxrx*iGac@uk^Hc(s-mX)l}dNgsOvW0p$LmKJ;Gt9Pzl)#6_{CNKuAiSchFmR zks;X&f9<#iE)|~TT!)tRy_HqfXidAIl)e80U-8jOs^ZQd=QlR>%ap z%Q}+lr*mE7uVIsScX!$)iUt;$u+9k~9SWT{+d*)|f&6o4X;VFSv6-x#Q^8I%BJ}(o z>uJ}mGP9|DR7K2Ji{z@Za*6sk^71?hLi0C4BsSIc2K-E-lP}5K#U4HolJ1{39HY`F zc`7iy7HXI>L`3D7I;Sbs*4GiMg~C+J#o8a|!N#>|2My!(MHT>glxZA>$$5rjWcKb@ z(ahkc`r|WnkMy;S1z1}aja36^0HK^P?9BN=gu<~_sZIVGSKo!Z2OBpk3KrifoiKT| zk4CNhl~~(99J~Hs_d2v8QIK%Snrz*aEZUiu|(3& z>~W%oaDLZg|KX7x{pP+%HuzJVD)*x}6fCY(;LYM>0x$_18#Uf-_dMxo(N%VPPP*=M zs8D+U$@l+KT4iNTNX8}RzJA8n+a4eA!j3Zac<~mrVYc7kltX7<`09Ls;+`wtW3R&Z zSf$UDR50?eQGC(C+sDCM;`8NWB;DjG?$Mb>gxsK^^E@$zs-a^ON_ja zZz^TZ&brq>rR6L5*^hO~WE92NbltH@; zaZ5u$atBY_nWT1-fY@C>aWiM8Wl>ke*|g2)MDeR`0T%UTl=CF91I6GbQ@;tM{ZZw_ z(47s-XNFhqUccD+9c18{wtSA}RSLmRly-_L3*W{9)?_yG0hcw01Bdd=WG=xQ!rASA z-bpi4SNZ&0kFPI=EbmED0E}$}Vczw8ZG4km?`+t&plZ{NitARqKx&Y?vA=*}BEqm~ z!j%N(%mbaR@w*I*I+w`8%z0VN+Uu4+&F-wLR-D9e*ZlP{Yr9hIi(1J&zSqp2pWN5!1W9^iNk|ilsd!rvhgKRk`B6kL<@lO~=R<=M)dJ_vg~{l(w|k1^w^rM^J_T`L_RY5bSg*#Cjo z8E=QG2;;yUKYp$7=}m7jGjx22)+gP2o=K41NaLlX$oePhsAv|M|Gct@eHQ9)%=SE; zB5y$7H*7M&2WbYMSS`p|8{9T}hZG#a(x48F9LdZsb%PC@^U)X8hY-+gi#W2A^Ct{f zhyJoU1a;u&wSN%U4)}1zG(ETrAPyex;n8nxNh!=lv$~4lJ@f#bK>?@wSp^UyjV_Qn zloKu5SkC+INgB&gcPF&z*Tlt4vqHYzjpdIiXb!f{+81nZkiY)ECPLBRH;5tc$q^rj zJf6`sMMUE}v3|3``%bPE{^EM~8GJ8S*Hnf)4Oq(#a!q%m=UG;TFEt7O=l%CD^C%i^ z<__D}XHR`g@h)Dna=aV3_2PiKzNU&1+X2?gp1j7WgzU5&KSgX!`IDK}!~SKwTG&K| zIBt9VH^^+XSna%1ig%*V1@q~i$hZ2UT{I#KrOoTsj{P)$^6LJ3KVdf$G=0IF*NfK8 zrCz&c54fdGT-icICdYc+lcNCUN=!nGoiVXZsD4^p2_-g+*{^h(_*)ZmF-D09$WawK9 zo5FCpvQQ9Bx9lFOHFlhEtEB*rce4qL)zzBw^DTnzu@ciVf>ex}F<^jT?4Oz<7%W@k zTK4G2&P~WjJ?crqru7{-_yB=l3i~xh44JfO;!zgimmDTtHU$6x78|}`^xisYh&sqx3}i@Hj{xoayTDyt z7haEw&cD81DI9&PAXc6JL>4*(;X?3lr%Fh}yz*reBMAq(5^W#$LYO@~z;|>SPkZ+AP(Ad!d<_yH`qNO9f_3z%dD2eYF zcYkitRw9n_sr_my4U&siW~Q_gGXwXa+l?a!TG=)(1x~x;&MYubr{^ITBW@;osYU}* z{N?kSvqAf(8ixP|m0%5W`mV1d4`9_LPmP`hBy%Z;?NS0(%e@4xJYZIpc7q4A$7pPu zCP#RXD-Hi-=}8?S=K_jEf6(VvaD=hQr{~&n(Ow>_dAh*F$0P%Bo|ubUkABhiJ2X0n@O${)isieOCyIAI4J6*1Ufl-Kn5CW|eS}&=&}Pp_KS! zjVaK5O|GNQptjN`DbzR$b*KXw#Ap}p_I2VZp8&pK(978Swff(TIcS3a-o5ls9;2_J ze&d5qkZtnTVrq5yT_Xa7G-4NvkH$t47iP=0A}OEno9L{&x_MJFwcDkE52<&NdKDvxhr`WOUsZ)WV*pB*wm?e>#>Lgx}ZQPw}sx3S+ zG)F%)o#BOd0>Eu4X&*(;7rP0aPn#10*y_H~>>BbAWYC^s!Vp&CS14oPbhu*lmR@C@ps8DBbv>*NcgI85Aj2G zC#2*78rcu;_Xelfh{{;eFDBSJ>AV%XD0MK|I~~;=$oiR8Dx~64pXU=Uq-y1$p}N4S zY`kZ)`Rh2TFv$$nl<65Z=ynok3o-1#ssC!QT1cU_(~eNMg4x0`k^%gEtPyafU?XDY ze4NNZ zG+kMc7li%C`K_E#U)at z!P~Q>yC!vjRfF;j^}CX%ctBWNwTHaB(zq=oQ_{nHdt)9qd9E*e+Nmy{Iiidw3mVLX zA?^qGYk~s(;mIvlBKQ{QWS!*ZXW!10fvqT%1FzB1n5uR5)q<6-HD1%lucc3;uMsdU z;M4HWIucySaqi9d%K*g&b&yHQ#e-1hAYxL)p8H#%$El(_=M}#OPc|3?KrEe`UqwU# zIGkVZn(BJ5<9}ZjHA0$Er^pt#y%-$7?9kpaO~}ZW!L|K|E%pZrosIs+uShaPzX@4a z_lLt$OPv=4zrs*CJOKD{$BXk|7(zo8>i7`AXLe6*cjhj5r8R$s+LuOKqh;#qzIkS) zf4Wq774tkD9Oa1qLViS&nVk&#)LPeI;;6`VnAw9&_t;6;XRs2)Su?Gx@nA?om|RQK zsTU9KG$;s;gfXhNTnLhOF~TaH%EblP&*~1iS}pC^w4yZy$AP`&g%gznzmv z;QIa0Q;1$ubL+dm=oYd#pcY>^Kl%|*y3KX)#bG!HG(E$Ky)zR$0DD3N944jaA+4_B z&Bo!LqA?_EueR!_23T4l3-qP`zAACfD^QLQ8a>x2xG(6vq6xX6ko@tI`&PywG<{3+ z3Brt+n1fIol>ctLY@Dh;{w(;#>}K_$f#2bZ@&XRSMMN1B+{&-!mP|MP=)tGsOVM_k zE9riLh<af+OrZaYkKz^RInio{OdDN|5D}UvGx706(cf78L>Nbd@MHrM93frChmn%Or8h;mXzR3?-lq8O&i&bsP8qWyNk>TzpA3Fj8oK? zbnB#=VfNg9gUojdDCdWZT)p(v{3UOl-g3Rll2xiLU6Nahj-twuFW2EOlB`!VbWzN` z#2BLwSq#Nyzp3K>wfkWhQ-gm+B^w z(GuB5hM6wige4hA7B&!X^TCO-mH&;t?cd#;(RYZ-ctFVPm7m)shw}c%0p-&+OYaV~ zcU#E-93CtU&+MgrTvm~S%#%eJ8;41%XW?KbmX{)#T4@*vLlt1t=pT)3XM zu8tThPd@@vZdkolJyN3-RsiGD3Jjwoel$_h$#K^qjA1;+~R@>-! zO%p9TGgDg@zt`eRebJZ`fb_#y1K7RVQOYAnOWDT}M(sZGGZ_SgYL@ct`XSfT0lp$3MzM(!5ATR$C*Gp;?iOFc@m-}m0$TT!NYbP*&cqn&BG z@KAf0?xA52Xa$t}52|wEf;#ECP-C8RQLn|D)uhO@RU=%k7A>spPRJgeTzn~jVzeX) z`v(kd&aRvlrQLmTJcw)EanW57sjdt8ro&P2FfPpC=8E%KlFb6F)deDCrn>(&W~j{| z=K_kyta&9KskNrs$w`RG&z)X1k8TgmJehQuv}KcYH@^&swefbp$Jpq9 zbq|Zs>~Q}(1i8eksU>EbzD}3%HNW%^-|ri3DHfZH(!L{l;SV+NOo?rL5-(JSYMtC1 z&S!g|5_Le&=^xXhjm(fdYL|Wjdx65ZXYte(l4K5&X?rDj_wuW$U_juZZBu#vATc(6 z-6B<|s=SY?Mg*QyrGKGzg}_yv2ahzX9g&Spu5GMw?cF>EDT5S1FVkt;_(s3r1fMQH z7`bTD775(_*<(@)b}EJaTgZVSBjp>uvy%sS?K&SN@qI4UY_fT1VNK^=U}CYEH}12w_ixjQ{(F==Sd$V&Ptl24z+Ys1t`)T>%#-qpxY-sKAExr|q!KWNANu zn*=4>km zhMc}NJBU#d-|U;vFr{`8^$NtQ#@$ntWe%stfzdTWe5~!|KMZ95ANIxn!S{NJ0;>oI zEFd{194FwDOM<)KwTyYfW<1G3TiO7tBAY0V?^ws3`f69RE4jyS3~{QVrR%engiZ+O zZzyijkSuhDiuR)AX7z_87plsu)#EgInhmM`hXsIq>N5cJZSKT(`vSkR?L=n1&_-uH zd%S*r@!u&j{)*Ogx~pZ?nme$677U$dBETm1etNI?C2+qHJ$jr_2-{FbR|C!wn|w<^ zWA{Fo4=!&w;4o2k=Tq?_bf?$u7ys@Yi46#XTM;Qcqb}mzn{Eq^CFkNYlH}H+a!*3O zaH8j88P)(1r;9n!*_Z57n|x0nJ-vCD+89J83hIH}$Rb3a00Mp6i3v%(llP+RuTeE1 zFn9%6?#8wqpsUHM8BSE8fz66Wp%KYv#beG|!Mh@dm-8>jJELAVNaezzSimhWj;rfD zuaEFjV&9CnYWHstNZ~~FKgsEVL=w$M`9kIC#5Hp1d1_TdCJ%IKUo*R92pYs}(2Gy) zZC&5^V{a?w+(1@ff;vN0%w?n11XGNQ+VPnT9F#`^uSnRn=9g%JKkFlk`Sa^WlDb?a zzQp@~{0tK?ELrka1#y5(|2lqq0u8FOB=I?)RttApv#Z&K5+ zvA}L;{rM$m26z~+{0_yVb{Qz)z%SF&FOF6}&zhJ3teJr)gNX^vTd;Pk^P`numUV8W zoYEJE^3_bWi|+k2KbeD==|DFgjciwLnlBrTl-T|ehj;EQ#|O}-3xWh_tYS&ZL}n;2 zymM12>XsfvmqBI?8*WMI>MK2$u#x417DHDd?KkOUtV8@>w#!X9-yMrbJ?cC|eD)9; zo(?t?U_2{Yg6vGYQigXAL3d0g>oxjseo{LQ3z zle3v?`kV<4xLIbasYrh*7AJ1*lXIG!8*bx!&CkYKsVany+JykalKq}4IF_BMjP3jz zKe68+qwX!259#2+0`W!bS5TfxCh)`Zegw?>&|F~Se2m#ADaXzbtdyZ71+CuJt`4Q>OhukV$&3E-Mu|4$_iC+=}c<(W* z!Wsi(O}dbkF|Sj6VvA+9jhvm6T2M2ly@SYY)YTvrtv@(=nMjAXO=pRU^BN0~w@UUYgza(|NpDubSM=uNz+47ER+jVdbD79> zm3Zka$LxhZ%1i(J9{H=G^nYI`|BYqTf8`PX?0wKV7zgAVxp*g= zwlt}s`8s)BYKVg;&r8!ja)q4=n?G&8=akJ7e5zw@jU(|~bn`Xx&AG8WbSD~85G1Sn z7}N~0i3FIl>EI&FJPqE5ayAeG&=#IS$$Aic5K);L0tEw-KUEOwr6zr#m?16v1|6T7 zM9v8y=YiHF!(k^NDa=+0R5uC$H$O-X08PH3Z<*b@LPY)s(E*q@f(){ic5eHagADx* zdi@hgOgYk^av#QGR)k%CgMt8NU5FG}3LsA-`)~bG7YPFxV9;?rl?6hN?9T-{Xk;!d zknaoteF$(cX2l5q8$@LQwlAE^FDarU7=rBEM^R5)CIYn{R-JfAMLxseSw(5r`iSZX zVA6gI74{p1w*anz9Y#K<#tgta^nv#yN&*juqZ6U?=?MSdAZU^`@$`EPzTZj(D8}j` zDXY-om!r#6$61mzTB{M8yZt1z_<~^Lv3O@hJfXvPvU( zGj~Xx$4;ASvdVFMKp_@shoLR0$2kGe3C$+#ohOT-0;(;G$XVK@<3w~x-k&Ya9|WQL zT(~=|W<>T=R%Ka`U26R?NGaZ*raPU9>v4hE+q0*1RO#T=ZTb_mH}QM%<8Z(0#cK?S z(!!h78dTuR1}+?ah~@w={>dhU`kp6`ZHHbmE^MsLsw|8e3nHfl0z6W73P5{+xBN3g zN0ZsTqL(ZDR5Pdb#RV#T571s1X?e6(7qZUPfT^#!9B=m#1^rm?(txgB@E#zM6=(ak zsje!{Pe!^75a)Ze9ZHoYu4}+M53tTGS5CGEX1LCpK%rDsD|f(oITpXXFcwDE6EQZQ zh-SZ!5IaKGodK5RVu1iq&kHnd{LK_-l_N&X49hotte z(8Cf~w2GHBCk*)5=>16lEz-EP%-1#1i~)uq@FwWy;BwV-%a@n!c2 zK&!+H&DSTJmbSB+!hEN=!8PoI-#09pl=%v<+D`1JuOQ|ggcICyg|9{m=0v-bm09$p zaJ|=$M9~T(4Ia4EN8!T=je>hhoAOsV0yqS~-)bjBPwe@1)^N zIFqOf#Ux!YtFwX;>Z)(l0E)=4X!3^#x6~YR!ayc&65glxz^J9Ml%94v^YZRF3SGdN zFD^>nn4I=J$FX-aW<7^?;bp2Vd%`s;5#+@Z%zSkllTEWybN%4ruB7cb%kf&uR1bxJ zAWV45mId6jQY1wO&jj2K!dxq(g>H@RKJS`Rxu>>sZ39MRZQ-o{&xxQwSUc)0ItoEo z;B@CzNmQU$zG}`rlhw2br0eKcW@bEvuZwa|vc6^td_UG|E%*{bgf(4pNm}{zxF&fs z&d)VrN#TIe6i^jv`BPGEGK?xS3E9g`pMfXc*4cNjXe_wldGPXV*22IipUXqEV^GO4 z4}31}YA&8+PSPxKlNs;g_I~zU#Be%*$20h-pMK_nu}R22MY-)5pm+j~DH~hdVt$;e zBVqRRuf>i3Yh<$92W$@Pd)r|X#Cu`t~w;m1v*v+58k5Cb6;>6Cj38@3);zI7Sb7$@=#NUupau=h4-b)*% zX&qbf3EEo1;Gtn9TjBEDd|nM@?8D`^v#2>u9K?WmK_Bd^R$CFDuXr z&7t9U%3~``i514)&&?;#X`hRJ8V$o2MA00b1*J53Qc4$$a)?$&(d&|}v0qr1kIo)T zH(64??mtL2$8W_)?@qQz_PhdG#5_Q%w^Bu3pVkYtk-stnZ%dIGCK~O{&XrgAia5?yg)rO@5X*Sgy$7PPK8<)x$RsXz9Qws4 zaj^#Cet`L(-hb|~)|Ldd^iF5K1Z02zGRWY6>a|4|6Nl1mt5V-by%rYX+sBMA%!d;K z%PHkW*wj<)on6?-eAs!_;pY~3!CtkFhYt)2PUP``7(qaBha{=(QUk6+w=$j;q?}bKy$iO_K0mwIWV@U_I^RR<}W%98la<&S{fGFoPf}rx4@@?qy-~yFW zO*EvSe1C(~k|Bqim{yFoV>!V@&QNo|NraA z4~%ZgoIHbzm-chNf8%IuRThCFS+1}9!Vkm^Nk`d?}3kYadl#^`o>mg znuLfLf)ELJs%bDmgip1e)xlB!Cgnho0X3Aqua-?RCC*RaW?K%}o{BJd20oxHsdVxl zGb$dVvk|lZ5v5J^(uoZ1=9G601AF|WLXFn%r7Y3ZRR#K7XV8*k$pV!V3Z!-`ro+(f zI4Y3R<`QNp418gfoj<%t{ltN9Aw+)xbIc_RCN2J9XPQq2SPQp0z5soeSVB4@1BMg+ zdiP#L>$=78Qfc^!i}llrQKBny%R(d3k2=X>NFY`1FU>>F3X>iG@~uG6_e_8_a~9Q! z+>>yI90C(VKIps=ahn!=2m%>KpM%1)AbiMluu zVtDp6F+sDoeCXMS=^NicjH}W;K4z%c_kVq4Nq4ao$hTNe0M--Sll|2oVuJeaiC(Y8}{N&Vo-LRFtc@wNcY@7_CbdRN|H4Ay10#&htRN_R{11T_^<4Gz_SMNzsmd0u%^~-+aPL0gb0Xqq5`7QY$yUDHVBFu z5CN$X0cp}fS|AjuN*7R6I)Wes1*8`VO+jgqAV^6fQUeJ!Bq83#cDs*zf9IZa?vHz) z?|JU8Ec3cnfUNb7ImeiD%*L7rPOa3OWb;PZ2fjTHPPSQH6Yf1C-Zuvvg3kFXy5_N9@gnzFOhG@&3!F2agr~zKlLH2 zn_Sw0)cz{RUiV(b_0`qe;)dQ}8BAXVGsfLpK(v`7wumh#!oeMDQKyNkPu#&Dd2=5u z8^&H?XX=9A|6Y6MjoPUpHG_gwWGPqs$0*)`I+iK4gfcs)$gf!t!PUud<&D!V426cG z?61YG&&Wq`h3PZ6GG0=ns$&iPDh&#Z*(+Y}ajxo{+-LqJrO9n$V%cqQZOV>wVW*sI z^XUG5v|hHU!;nIAx2;MCZ0FCDD+)kZ7`>LJc8%`;LUF>h{`UBt(XLY}Y-V~VtDCc$ zixx_9ioj8%=!#yoVQ`!B?oHl;^CvYS$}TJL2{o$5ulWDL1NUhIExw$koIzlaE_f6J zQFqGonLQh)-)D{6rO;XiO$WD+xVT*CiEH7NC8sv)V8p&Oyv)gU^@-gxzVW$6uUCB4 zMT-RymYP6u__P~PuQl#{nWGa9mG61IE_-bX*FOeylruw#lQHF32|KZm| zEj9fB{dr*!BnVrqD6e#|ygpo8(b7XaLA%yi*!7%b1y8_pS|?GaF=lS;MsJ^rI%21* zkHK%BN%o)BdBFX?SjjSx`>|QO^mWAnE$~*p!Je(k%c*loWMT4YHh*2bTu0k{ryH|f zH~~D)$-!Ph4;z*jpP#*qFUBsfr*qfZZ+)#@ZxGyZl7n$h(|4g65|xH&;Sq7~9iENf z$23THqtu`H44Hl=*}@P6`9`!LLqFOxd<* zv+#NvtgF=aQS?WvyO=ujh-s8&?^*GM5VS}ZUFiyQZ}6Q`xm%rb5`A3=Z|D5!9@`+f z?CjX*c3b2+AK#@Mtf@`jUl}HPN!lY!lT$ir3WN=6koC!`vm(dn8?WCNxb$`eX%MA_ z7oKzF(D+8c1_EjD-u<8TSaQUt2{MV5i~zi?++lF!qcvS$+3Kb#UbKLAzl(CrwPAqi z{07iYt^m{d-iqxjn@_1GEjBH;6jqWwhgmThN z2#Efs+ZpOhe4!_E(VsB#9Dr+eI{g^+LqC!I(85KLY+j?cS`@FMN9aVZB4&JHLEdfH zsJ){g>h#g$Iwj^WO;sRj0oIlqy^M62HfRYu6h}H*QK7-xckl;D`!N`AePK9sj3^61zW6V1%>K7hz; z!}B+bIlez|7O7vMEoe<&YMsPJS1bXtvq&SoaPm+lZzP@E8i9>g23QO?F5o?TT4i(` zO29FL4h8rPL9>lL9Cc`0QYfJ%4fq->r!kxVB_axm;&YT`j{(NYq$1vE&{u#!X>4g+ zJ~|7fi*25VV9Bs$0NNtrCIGKrfRk{*Z~-_`iKeu%OSPT79oWZO^?+VsOcZ9yasW;} zg<>ChH6_VOLq^JL&c|e-%!l|5?r2jVBFqE`)M7aO#->$FmX$70M1-LCY={2y`v17L z;pBe_PXHCuj3S{J!d`JKo>U-X&0+HcCg%X0;a*|J?>4dwod1TFasTb-w^vuC%>cJ^ z%BB4Hd0*+E0G?0HjLGuwhBjwnh&o`V4$QU?0!qV#Z_& zI7wLknKjW(D|;RjT2%U?_mejs51$3Wf|{V0KmK`HipFjq7|V%V#B=P?Q)#$eoh9q& zOA)A{ir)O^wd6WJQ`7csb@qFX61~6a-v38%5mss1dlRbC$e&DCSk;E#T@I_Hh6iFx%m08-u z){SX$nsEL42vPx#mI;YfKUetGv1Wo@PuNl8&BG-4Z1G{vpn(55KhgMaWPVC+kph z+>N@hi0_CMED9^RQJBj`eTfGuC3OaGV94!&Ye*aZw}4|4g}pPl0Q7}IDjHQ42%-k> zw#;{{tFRXtDk}>;%z#Q_vG+CF!3R!-Q-s4FHm=o17MW|;)%bd%SyLqoM5UGh1aYkwOgmG7TheR?HnHB2u^zqd(3ZNrb1 zHq$Xzl4pEvhtyWl4T;_rVK1j6{kj$WuY~mEd!wul4d1l3K^~}s1ElD?cO?q#QD`~m z?XNQHN3tPwhQtVhwY&mtU76unjPVTQq=graKMzze(n{T>VVvbst?I2MnZ9xEn~_RW z(e9>j@K#B{Mt=&5>lU-OQ0o6b5l-zH#My?_4K&dYK$Cch^Awh z+F{{pNU<+!Rl>}Gw791uWHJ=+a%*t>UUP_ZAx4N45#n{4l;kZr6Ub`+Wvoi0cO^&ZrwD z&~SQo^jNeh5A0e(PJ=;K)RH`|cPtkEMOb|NdtF-bw5Zef*Dp<{88+pqrz?5+59Nr+ zW4g~wfe!}pNL{TPP*!t-U#Uz4*Mrs_t%j1 zNoeKE8RT1#1~*#n4Rw2(qBE;DW4GBs*(%Nh`!EyF0!Q;-Y7BDb(4Ue`;T%3DP8N$I zvbURs_n*c19^M*cnjOm}&2UR<1)ZZ^AZ>p#&a(}x)RDHTYuNYE6mkNiDKT7$4+@0R zTq0ML1ZN4V4Hak7<~^2g65bq|%PD2&rg=Y9M;7|jnpb_UsO};he+E*~PJOd))6%fS z{gU#7zbL7Ht77%L^wSqy`04pqdIx+cY{Jo)yo8_~^*5KsK;zyj60@SwppCt~Iep~; zNBXb!=T%1c4akH`^YaR7f$_}Gz20~I%r5)@1w^yH0y*;~%`R|mFJ|oaBP8FnJZ7y2 z`!Nk@Fvz?lGBvy27Y@z>PovU+=WGlrqLfogHzoPXBuFjE+XQ=y+dRJ<1pDMT?zc%l zoz>XWvY&24yvQliuQ0q6gIvJ^ewSdn!#lP(-5?_12(V*)6U^j|{Y5&|d8`&cYNwVS z0*cmBso1GWhS6(6Vj$ko$%C3QZy>U_QuoT(`C%XvJ_{AzB=U^(sqM|(WT?2k-|_H8 znWO+5gc#=Qk^XfT#9b~0TZplaA8NwX@MJKvhc`m>FT){u=IghoO{AYre98isLev>%T zOg6w%PBIU5r5as-bxgMC7zn5hp0W)qw^N4^Kc3dE_%0{sdH<9KjdNQ=?xxlM%U@OH z7CcPUXe3K8$Jmw!_5<`ZPB)>H?JPG6XgotdK!!q+a=j;W?>Q=8o)*GHj#DeUz{APbEjc>}4+#Qo4IM4D898mR5 z9LAMu+>WI719DhO+=fu)!0QG9v=%-P>KNj4+RWY~UU9C|mHacC1W+lpeJu2XiD?|a z&$X{Sx?9%nxy335n1k0g5VQb4R>22@=+gbc@3y+jEgRuf+0RK%dxs5rOAJY$ygro9 z=$29Uj69p&6esGX+4FM}-RKOF-^HmTZ7K&B~RD`9mZ$#U6L=tE`H)>)cE z&B4Wqr@{LH)MxY2*d$+dboef>YkeY9XdE4(#h1svG%<#FQ>UB z8Y9P%$qh3jhs32Ar*i_q5BU~TgIJb@bXn8`gWkL$@UVV<@5qxQZwKkb*XL0 zD7JjZ3hdw&mFBOe$JWO&^OcoZQwS0W+>|=tEgCSln%Z;8#f$UtM6~8m2QFj>?8r_g z{Erk>-1t;}uJmS#x^6mO+!q`914QvVJ?_)?6O-!F`c_5uRfl!CYaXCjTfW<>yLFGA z;qvoSOE>YwBdIyZ#A1N;1Ut>%9&9RI#K{J%QJ z)@yK$Jm?OS6n=DS{H^0&%vTxsstH}Op?xD+dA~ok$|R-priBjg==dpVXi-K-5BPO2 zuvKnumxe;I<;O@Uu%qaiw%JbG7_KR($OZb*?UkEUXcQ@tD>vNQI_1=%8QeB)m3{qk z!;SW1p!Zom$#s|Vn=x-z5M9HF-Cw=#GU4*DHGiYX9uA8yR17(YiipVWsknN0K|VV< z{cvWyT-z(1-8UYd?g~KYTgU?HkriO)bApIva5_RCp;+cnYQF{$@@JlUy{-vlUWE4m zm;hPV-`)h$yWdYiKmXUuIMZdx;i+UO->}_~R#?%~s5i!6wfLna%wy+4Y#)iMXh%mE z<&iGK)z|7kW0q8`vizr(aS-^rBLy1_=hbgY7vZ;P%QtV}m>&zBh$BWq&y7i3^XE7# z`Q+E0`unR{Wh<07Ly*pC(o5Fu@8+=M0D6!LF66`Bd;s?l^nsoMN7XlKQZEhlLw39a z_a)Znucp#5vJq&cY~hkvwS)I-MCa0)=sQpyE! z$u_NG8jPy0E%txzU`5E5?vspQ9`WIsuMknUENFe;=+rY94h_73Q(4uEhrMT00xlVx ze6HHB-LFu-p}MuQ?CnF%J(qfKVAAVnM*eC66{IS)F6@Q~pb-SGLtkOFX2Q2_`5bFs zJPg&XW;xC_##+cp^3lCsnrj~HoXulOlt2z3wmL)SOTIILQ9E`2-YF>PsM9~cVy-oc zy9xw%i^OKlJy!BvcAUeQJ1$W?Su=X{Ym8CjR~6hb1B(~)hD2_H&T$rs^ZL8{3B(nZ zP_pVO(uQWF(?+e2y%&E_ZLa-pt7LXv_jpG0QzVCd^CJD{CeY7oxEnK(=I@vO19X{! zHXzjtG{>8KB=MXVldgVrLFlpX9T-)W<5|j-S{i5_LB=+##cj9HDVlOq9~FO6v#ZSH z7~HEixf|f!RAk#{mt((kJDqRSRJR9n$;q}@v=J*|`!<#$n*3eNDLLzS5kKO`i-3$A2JI;UOh&TVWt}PZ;UJVDK0rp!oko@*i$e*bpx|aJG4g zhOy;u*^?^J&%KrJ9k>D*Q?-q{@F$)q9K2d`v~q7(pbwN;OqufIqX)O4-RU|m2$q_{2A3vT61iZ z)|>+7zUxrD{)toXRvElSZrGA2o-mvP<#fWT`D0gd!M^48Gu-N<&F=QQPX zpm}$sqJY3xj)dL7^Yh7$)*@j%;230zQ|~nO+6DCz$tF#4f4B z)VoFOS(?K^^RT>ZR+Sp>cv0jE(&FMuOiF z2b&4ER&X`-Nj2`3K`T&dzFy>-p*`CT`%n$1imtOO>%b%~bp zRrZmafdG#yqItpAgNKqUWcWt@?NWB9c(jj=Wjx~b_7{IC3cEHih}X33F6 z?oXv-YGYd@Tf}$!^P%>zOz6f%KAgI~r{4Q!X%B|18@=$8e#|UpNRBiy)3R$S!{Lz_{)w568IJcIXH@13_^1dSBO1uDtb%_yoR<2_u zBPdY4KWfpF>7)s!4Vk^%fZ78CnLZSh^r6B6&qOs>hOHb&uHF6$KW0?E5Go08bd{pc z(Uk60rKkh}sqkayhamM;?3Br=9PEtiG(-6rAvN)tyq+QwzY6k}4Yv3JA}W1JCw`Hk z-FcHBtM8N_(-rXW;ZgWDxXIcWm<~Tr4a``DL#AmaS?y0`M-%mD=6&HE_gX=Kj`&U~ z^lbxIl(MG z^~Anau8fw`dB*gQGV%nb3$D%$KRFaH!;6hc9C6(J5c;rQ}_13#+*S% z25ca;$TaU`@`t;LrxvEp%>nUsPc*%ewALJ;-*h_0W4HgvcCD7vK^~HRKo_gV2E^G1 z>Z-4}Kbpj~zbZy1T=U2j(C{Xi844iv_g2A`F+j+(jf2cyfA2;7GJLVd`O4)6n_8$% zha6oTa+!wNjRw;O66Y-Yv+!Ba#l8=>#^|$7F2FdZH_=n`Xl~N5tsFdDxqKh_V4GPW z*qH~J&r+qOWF3tiZf3M0wGw;DDCTq!v>4=GzH_yaH}I2%0)A)1Yd5RhmcYfb^*%^; z{s+uLmc;^4$~Hb3Rwqg`*StFvTkz~bZQU{bnFnh|v+se4?_6{PD%60sKlC~c{v^*H zyz79JkN~z6?h4iK&YVo8~iVVfC@kU1UB^;37%U$5QUV!a$0t`6EE-)<545 zcuqwUujU7p)BFRas%bpUx9ub3wq&f|$-u8M^nR`_6M?lVnqc#7s>mmF%khVxufR8rOUU+V}hg<|zT z`oWvx?(@@|NifG2zB&uZs5g=B#Xe2Tl93Rgy~BGSCmv(t-?-Raq(JYkEc9oB6VM)X1U$qAYS5c_iFM}0 z%0yak+(oOA0DyEG&)ARcQ+w(U^d|g@21;UqXaI3u6^I7BXau74C|8}6k>;g?)Nhpe zk9I8^ZSaw0m!_qVvu76WWB9!w5kq57B$>|-5QA#VM%E(M2)*sIJ&d@wb*D?FN2Pm< zE3S%8DBcBd8msFc0+6YpC}Ff19Th<1G+2^ZQYaVm-tv8l_vXqXdBtkBhZlJ(5Z`<9 zsRZQm+kVfdc9grt{nl>##vwC+t(o+q9Vdl!-;C47E(0wcq2<1d9aaq zh)+4h!^3WeLCp`)UE3gb{nJ@I=frd9mHL4S9Va!Nx0{sRW>hB=w=D5~3aq?Z`OYQ$ zR3oJPp6`gWa%Tn9;W_d{PC*R(i)8(!$(|i-Zk9Yi*`=;N$WWX_Rb4SN<46GFkaRbo zfp^9)iOw~70)(-upp=N5YjF6a{^ZV4-$B%6`kU;<3o^GHBshelh&A{G1q=zSFPxifsT zZy0d1lJ7}M2|2fx(2!pL4qOlN^!x|c|GVnGc`W#xq~L(V)hLV>66B}tU~>gedYmm;R;+e45Zb0G1UzcMX= zB=M}*STMjV%z4iGD!M3&BLI@5?AY8PP~S4M-blCdb${`<>bfd7aXqc$UG1gVvIZ{J zp>nEZx{?=%M0aF~0Dsq+n|lCF=OjD7u`l&!UNlWwW&O;H%6JX8!52TmUoI?{zXyWm z1kf`UZCXh0M?EzdxHBe)e%(?hefZ1nd(iHeIqe#XpV9W%kA<`PF3AlyNvP_bz#lMT zX~q|;Mdt%FA7QihVn^EM9^Y{BjA7laz^UbPBelyC9UzUZ=zXbeLVU9(EEl1O?7P|G zMHWY4;A~#XSmr!}P>?bdkeDrRIFLdc=eV!ki}(iG64^J5d~-uHdZ=$y9dtBG^bjiu zWb{5mvf&s!YU1fxD*mJ7{g}7Dgis&EV%%_}{!kDk4kesRyI5u?Df%R*C*kc!RjP9b zTaW2I<8PEi*TMN^JW%cokiA%WVx%kZf#{ky?2#W^JaL;OA9XaJ^zq)9Hqez$&<93i z#UPBV07;UF4@SA56@Wq!G`uG)FJ1t3h0}cWIPrzcxv88tKS0MXW%4LRG>B>dzkEh^ z{qh>c;qi&f{^_ncZ(@V)30C_$ZlmN5RK~Z%$~&wQ5AQi%lK?Pnn!aOgF42Z?$a3RB z$mX_q-iZ>`aSouwq?b|W@PNWkiwlE7l{_CjeSi|{^eFg(l)9XHnNx>TAn{lm@HN#A z$AZB4G{t1AZ2J_(y(CA8;^dmmP-RQpjDMo9Y%zL;c@}+Vk=;*>+hN9HwfkcP0!G_Z zIu-^iokQzw(I`4St>F;^5fb>>MSS)xiD59vMBaF4D+L=4ot{Oh>w-OiLf2FIz};XX zV0r?X*M+0pvu3@4EGXp!_prgyOpj*vzCX%qW@;2Zd^PS;v3#dLa`T?$SEES-ZxmOc zlmi@6(XGKl5Hi(5(FIX_{PB_RRX|p9E{M$zKGB z954XQ4ioj7j=Y$3u}>Ck(eUu)A>WEfsu|l-$21dx5>Qy!3OQeB^%0v21hr4my`t(rHkzeH3zX=xnx432GNX3%& z=24jzO!IWx(hP2IyK8$5B-(R!J%dhNb-MxRn;Bv1h!;LZz^KS_o#gaB%Vlfl%}OaU z!>~RukOilGsu(vnvzV$Bj_D8>zSN~(Foz@b0M_;>Yt{++(<~oGS3n4=%)zeqMd_1> z$LV>Ph6eKRKHxU^o$vbn_=fU`6|%>(dPU;)yqwMo-R}V;-cTDfLY@3h|yDh>Rwqda&kJC6!-euN_7Qq2xFvr*k1jFN$>l0$RZyd z;|KaZC8I+VD!0xU3)R#t-wJ^9g?Q0&ZKa1+y3Q z7VtrSUjI8!DnW^sUej~Z1pZvzw!C!2t-?$%>GY5~KzOBaS-!{}!i1bhjk&*AC#>-? zGubB=)-a>fXC*UeVx;X+;|g*V)w<#NT=3kgTf+CQfC!rvtEM#-Fc}g#s{WbfUo1wk zI2+%dTv_ojLvb4{;-$JxO-3f@mZNF~yYl7L0*5sZ3yUl6iyywo4iEZqG!@?X{l?<3 z{ezl2KiYon4{B~xckMhO+1&7nE=$esZ}Ri0Z{+(*k0u_I$0Y|NS!Ku>|BWLVb4%1o zB(*zS-fKG9S-JSy7uh914$u=QxD_@1P6XC1vF#p;AMKsz!+p-_fNFG0N)|<_=DMm7U@` z@$vcA=LR8NE9!kdW36ex6tc}V%yHXws~8{cKeCNk{E|fsRf-6h5mv>S5ORF#U;?a{ zA1cV4Ylv)4pcnCL5a&3unXAsqL$U(fMy2~5T-Q%_Yy;27U6dH6N^~$7C*StZB}?5b zE><8nfwumRHZix~mRH7sKzve~(0I_!_0wcRn=DNoKopTDNf$1>^$!~#Nf`7)uo%mk zoaC`Kp+D9{pCp~X@YWX(tPQiP|AZR^&Lrc3*YF>3V}9BF64AwS3FnT}n zxqfR6r6DQ%?46oN-;$cO>PO;ipc|HnXR(!mLM(V68#;CVQxg}~hNEOb#C7TPvfd}5 zb-)-2%H069$3T|%+uzDorEGrEscJ&JC!^{2eqf0BFnrpwXx*K@h#M2^v2C zQP4ThkW<2`u0AK3|E|hGyetP}NfkirtRkI2GwE+KaVvX$Y*R-%u?w6WhGdl|4fl96 zuA?34#rES0DqjYL=g}8jGivTXd$kj&q5lCoH#UtD2J-IF;)1WJ86$qPQL{6?Ht`dW z(?H7RS__7FXQdUnsLf#Qz5E;TG6A-qfyuu??ffr!{Qu-N|8;G3X>IgO8_Cr1@l#Lt zmI(<+fmDJn&{B6Et-6t;bT>s!Nz7DvnRBO7agzXKtv_f?FLXtD85xE)&!m_1nAwTu zRglQ?k%I~F(F@_I7Ng1JOHOXeucl$;Z!R1c&rNu3s6Vq~`YbdTZ`6`5OrIdfaNoXE zQ1a5b&et!*H-gO+#&o4E*F#s+gDB>Q#`$R4Q>CHP@ATuw zG>e8Z7>;-Ifp5segqy}}+UD*hmZuTkhoojg472M(CV}P?`O8<_XY@0)DcZ7Z#(`30 zr6HGdG00WtutKxbE->&r8gVL%5ACGlQh|u zF=6^cRR_NfVle$^)94jzKfxgr#+;1e1HqOV=j+W(x<7bw@#FlBYNj1p#@iT!7ubIY0t{T1|f_rx-`fR~XVMiU%3nCQ)(%4@8977B1H}POHh1f-s~%}JKEaC9 z@+pGEkB4Ok8FdsWF_{t&}|sj!@5 z&}V^!h^lkiFZ!9u4f|rM0{7kmRLi#@iueO&<9^$_ep%$LW^7^ih!Vol%G=|-UYI)Q zIPMM~uzl3l5oBpl$~z9`%xd>rQWBvT8PH;@6^lyDd@CV~g;*|rAQu8S=GkXSX*jGI z{Q}igm-acwAuR?sopwq)8mZ)&3T|j}-4eGT$=bCP1d+nNW%HxYQY#3!dI`WPeXukC zOZ&DiAp!ZT0tdomcWK>7h!5ECK&b#RkpUd{a_&X=8fD0aXdP>KHBKz}`KuG52^~^B zRJHYFkbhiz#zPlUluVEMi4*Nvhg;S-j}WZyt#DDs>U|NRtP`8%OQDx~6*kM45`DA@ zwbh&DORtV=@9|N?iRM38nL7ELpHrbLU%vf*lv-{22RH*K4J1FTqjXFjo%8%&6Tc{| z3`Ys}7Zz1kOUG}eqc-7$y8XWV90(|=5}l!?{!vhs3akzw+ECG_fFuXIndDdiNltMT z5sW;J)Rc(0?jzBmaRROP2DrGd?z*??N^_Ev19FF|Z`@Q)|4Vh=Z)l@phsvSRB9DTZ z%Hw9EUp3ZcJUXFM;Im+m+u7|Eg=3C>d7p9$zrOeIcV&J{?v@62ib0Mhaf2iOc+P+= zl6R7bY>Ck)&X@F?K+31f5>}rcyepqUIn3TG*%*vzNl>S1M?4Upl_9d*UR8yk~hvn0YZGrU~P@D|j}EV&O8ru*)G(i9lJ7 z*$X-K-9kqam_=hAXCuNsYaK7Q7m(U5fQha|tia4Y#zf00$Aa@wJot78IXQvyN=@*Y z_v8tnB(@K_3(fKC?slHQnOhtues`J5d8Xvze(4NUB=FE65Q)_lplhG|5g}iSFKynx zS3LEm@#$dq!z_JzXO<5V;g)0ZWu^vS6uCb{?*M}RH4F*zvz49hpbwjVcB%MiIC=fE z^QKuvz@}LR<`1umRuEuzA5h{@shU#cA@h-fTSzogPx={Z9RY~4zsu_X^M8YXeEDCr Cq=st% diff --git a/app/sitemap.ts b/app/sitemap.ts new file mode 100644 index 0000000..da681f6 --- /dev/null +++ b/app/sitemap.ts @@ -0,0 +1,24 @@ +import type { MetadataRoute } from 'next' + +export default function sitemap(): MetadataRoute.Sitemap { + return [ + { + url: 'https://dcup.dev/docs', + lastModified: new Date(), + changeFrequency: 'weekly', + priority: 1, + }, + { + url: 'https://dcup.dev/blog', + lastModified: new Date(), + changeFrequency: 'weekly', + priority: 1, + }, + { + url: 'https://dcup.dev', + lastModified: new Date(), + changeFrequency: 'monthly', + priority: 0.8, + }, + ] +} diff --git a/auth.ts b/auth.ts deleted file mode 100644 index c31f2ce..0000000 --- a/auth.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { NextAuthOptions } from "next-auth"; -import { DrizzleAdapter } from "@auth/drizzle-adapter"; -import GoogleProvider, { GoogleProfile } from "next-auth/providers/google"; -import GithubProvider, { GithubProfile } from "next-auth/providers/github"; -import { env } from "process"; -import { accounts, sessions, users, verificationTokens } from "./db/schemas/users"; -import { databaseDrizzle } from "./db"; - -const dcupEnv = env.DCUP_ENV - -export const authOptions: NextAuthOptions = { - secret: env.NEXTAUTH_SECRET, - session: { strategy: "jwt" }, - pages: { - signIn: "/login", - error: "/login", - }, - - adapter: DrizzleAdapter(databaseDrizzle, { - usersTable: users, - accountsTable: accounts, - sessionsTable: sessions, - verificationTokensTable: verificationTokens, - }), - callbacks: { - session: async ({ session, token }) => { - if (session) { - session.user.id = token.id as string; - session.user.name = token.name as string; - session.user.email = token.email as string; - session.user.image = token.picture as string - } - return session; - }, - jwt: async ({ user, token }) => { - if (user) { - token.id = user.id; - } - return token; - }, - }, - providers: [ - GoogleProvider({ - clientId: env.NEXT_PUBLIC_GOOGLE_CLIENT_ID!, - clientSecret: env.GOOGLE_CLIENT_SECRET!, - profile(profile: GoogleProfile) { - return { - id: profile.sub, - name: profile.name, - email: profile.email, - image: profile.picture, - plan: dcupEnv === 'CLOUD' ? 'FREE' : 'OS' - }; - }, - }), - GithubProvider({ - clientId: env.AUTH_GITHUB_ID!, - clientSecret: env.AUTH_GITHUB_SECRET!, - profile(profile: GithubProfile) { - return { - id: profile.id.toString(), - name: profile.name, - image: profile.avatar_url, - email: profile.email, - plan: dcupEnv === 'CLOUD' ? 'FREE' : 'OS' - }; - }, - }), - ] -} diff --git a/components.json b/components.json index 0843c32..add3af3 100644 --- a/components.json +++ b/components.json @@ -1,15 +1,17 @@ { "$schema": "https://ui.shadcn.com/schema.json", - "style": "new-york", + "style": "radix-lyra", "rsc": true, "tsx": true, "tailwind": { "config": "tailwind.config.js", "css": "app/global.css", - "baseColor": "neutral", + "baseColor": "stone", "cssVariables": true, "prefix": "" }, + "iconLibrary": "lucide", + "rtl": false, "aliases": { "components": "@/components", "utils": "@/lib/utils", @@ -17,5 +19,7 @@ "lib": "@/lib", "hooks": "@/hooks" }, - "iconLibrary": "lucide" -} \ No newline at end of file + "menuColor": "default", + "menuAccent": "bold", + "registries": {} +} diff --git a/components/Auth/AuthForm.tsx b/components/Auth/AuthForm.tsx new file mode 100644 index 0000000..52ae11e --- /dev/null +++ b/components/Auth/AuthForm.tsx @@ -0,0 +1,340 @@ +"use client"; + +import { useState, useTransition } from "react"; +import { useRouter } from "next/navigation"; +import { useForm } from "react-hook-form"; +import { zodResolver } from "@hookform/resolvers/zod"; +import * as z from "zod"; +import { motion, AnimatePresence } from "framer-motion"; +import { authClient } from "@/lib/auth-client"; +import { FaGoogle, FaGithub } from "react-icons/fa"; +import { EyeIcon, EyeOffIcon } from "lucide-react"; + +// shadcn components +import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "@/components/ui/card"; +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +import { Logo } from "../Logo/logo"; +import { Spinner } from "../ui/spinner"; +import { toast } from "sonner" +// Form schemas +const loginSchema = z.object({ + email: z.email("Invalid email address"), + password: z.string().min(1, "Password is required"), +}); + +const signupSchema = z.object({ + email: z.email("Invalid email address"), + password: z.string().min(8, "Password must be at least 8 characters"), + name: z.string().min(2, "Name must be at least 2 characters").optional(), +}); + +type LoginValues = z.infer; +type SignupValues = z.infer; + +// Animation variants +const fadeUp = { + hidden: { opacity: 0, y: 20 }, + visible: { opacity: 1, y: 0, transition: { duration: 0.5 } }, +}; + +const staggerChildren = { + hidden: { opacity: 0 }, + visible: { + opacity: 1, + transition: { + staggerChildren: 0.1, + }, + }, +}; + +export function AuthForm() { + const router = useRouter(); + const [isPending, startTransition] = useTransition(); + const [activeTab, setActiveTab] = useState<"login" | "signup">("login"); + const [showPassword, setShowPassword] = useState(false); + + // Login form + const { + register: registerLogin, + handleSubmit: handleLoginSubmit, + formState: { errors: loginErrors }, + } = useForm({ + resolver: zodResolver(loginSchema), + }); + + // Signup form + const { + register: registerSignup, + handleSubmit: handleSignupSubmit, + formState: { errors: signupErrors }, + } = useForm({ + resolver: zodResolver(signupSchema), + }); + + const onLogin = (data: LoginValues) => { + startTransition(async () => { + const { error } = await authClient.signIn.email({ + email: data.email, + password: data.password, + }); + if (error) { + toast.error(error.message || "unkown error") + return; + } + router.replace("/"); + }); + }; + + const onSignup = (data: SignupValues) => { + startTransition(async () => { + const { error } = await authClient.signUp.email({ + email: data.email, + password: data.password, + name: data.name!, + plan: process.env.DCUP_ENV === 'CLOUD' ? 'FREE' : 'OS' + }); + if (error) { + toast.error(error.message || "unkown error") + return; + } + router.replace("/"); + }); + }; + + const loginWith = (provider: "google" | "github") => { + startTransition(async () => { + const { error } = await authClient.signIn.social({ + provider, + }); + if (error) { + toast.error(error.message || "unkown error") + } + }); + }; + + + return ( + + + + + {/* Logo */} + + + + + + Dcup + + + Advanced RAG for Personal Knowledge + + + + + + setActiveTab(v as "login" | "signup")} className="w-full"> + + Login + Sign Up + + + + {activeTab === "login" && ( + + +

+
+ + + {loginErrors.email && ( +

{loginErrors.email.message}

+ )} +
+
+ +
+ + +
+ {loginErrors.password && ( +

{loginErrors.password.message}

+ )} +
+ + + + + )} + + {activeTab === "signup" && ( + + +
+
+ + + {signupErrors.name && ( +

{signupErrors.name.message}

+ )} +
+
+ + + {signupErrors.email && ( +

{signupErrors.email.message}

+ )} +
+
+ +
+ + +
+ {signupErrors.password && ( +

{signupErrors.password.message}

+ )} +
+ +
+
+
+ )} + + + +
+
+ +
+
+ Or continue with +
+
+ + + + + + + + + + + + +

+ By continuing, you agree to our{" "} + {" "} + and{" "} + + . +

+
+ + + + ); +} diff --git a/components/Avatar/UserAvatar.tsx b/components/Avatar/UserAvatar.tsx index 0a15a9d..273f89e 100644 --- a/components/Avatar/UserAvatar.tsx +++ b/components/Avatar/UserAvatar.tsx @@ -11,17 +11,17 @@ import { AvatarFallback, AvatarImage } from "@/components/ui/avatar" -import { Session } from "next-auth" import Link from "next/link"; +import { User } from "better-auth"; -export const UserAvatar = ({ session }: { session: Session }) => { +export const UserAvatar = ({ session }: { session: User }) => { return ( - - {session.user?.name?.charAt(0)} + + {session?.name?.charAt(0)} diff --git a/components/LoginForm/login-form.tsx b/components/LoginForm/login-form.tsx deleted file mode 100644 index 9119b80..0000000 --- a/components/LoginForm/login-form.tsx +++ /dev/null @@ -1,97 +0,0 @@ -"use client" -import { cn } from "@/lib/utils" -import { Button } from "@/components/ui/button" -import { - Card, - CardContent, - CardDescription, - CardFooter, - CardHeader, - CardTitle -} from "@/components/ui/card"; -import { Loader } from "@/components/Loader/Loader"; -import { signIn } from "next-auth/react"; -import { FaGithub, FaGoogle } from "react-icons/fa"; -import { useTransition } from "react"; -import { useRouter, useSearchParams } from "next/navigation"; -import { useSignInErrorMessage } from "@/lib/errors/auth_hook"; -import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert"; -import { AlertCircleIcon } from "lucide-react"; - -export function LoginForm({ - className, - ...props -}: React.ComponentPropsWithoutRef<"div">) { - const [isPending, startTransition] = useTransition(); - const router = useRouter() - const params = useSearchParams(); - const errorType = params.get("error"); - - const decodedErrorType = decodeURIComponent(errorType || ""); - const errorMessage = useSignInErrorMessage(decodedErrorType); - - const loginWith = (method: string) => { - startTransition(async () => { - const login = async () => { - try { - const res = await signIn(method) - if (res?.error) { - router.push(`/login?error=${encodeURIComponent(res.error)}`); - } else if (res?.ok) { - router.push("/"); - } - } catch { - router.push( - `/login?error=${encodeURIComponent("An unexpected error occurred")}`, - ); - } - return; - }; - await login(); - }); - }; - if (isPending) { - return ; - } - - - return ( -
- - {errorType && errorMessage && ( - - - SignIn Failed - {errorMessage} - - )} - - Login - - Welcome to Dcup - - - -
- - -
-
- -

- By continuing, you agree to our - -

-
-
-
- ) -} diff --git a/components/Logo/logo.tsx b/components/Logo/logo.tsx index 0192891..5b6a347 100644 --- a/components/Logo/logo.tsx +++ b/components/Logo/logo.tsx @@ -1,20 +1,20 @@ import Image from "next/image"; import Link from "next/link"; -export const Logo = () => { +export const Logo = ({ size = 45, withName }: { size?: number, withName?: boolean }) => { return ( -
+
-
+
{/* Light Mode Logo */} D-Cup Logo Light @@ -22,15 +22,15 @@ export const Logo = () => { D-Cup Logo Dark
-

+ {withName &&

Dcup -

+ }
); diff --git a/components/app-sidebar.tsx b/components/app-sidebar.tsx index 916ffe2..3ccc139 100644 --- a/components/app-sidebar.tsx +++ b/components/app-sidebar.tsx @@ -15,15 +15,14 @@ import { SidebarFooter, SidebarHeader, SidebarMenu, - SidebarMenuButton, SidebarMenuItem, } from "@/components/ui/sidebar" import { Logo } from "./Logo/logo" -import { getServerSession } from "next-auth" -import { authOptions } from "@/auth" import { FaGithub, FaSearch } from "react-icons/fa" import { RiBillLine } from "react-icons/ri" import { env } from "process" +import { auth } from "@/lib/auth" +import { headers } from "next/headers" const isCloud = env.DCUP_ENV === 'CLOUD'; const data = { @@ -79,16 +78,16 @@ const data = { } export async function AppSidebar({ ...props }: React.ComponentProps) { - const session = await getServerSession(authOptions) + const session = await auth.api.getSession({ + headers: await headers(), + }) return ( - - - + diff --git a/components/component-example.tsx b/components/component-example.tsx new file mode 100644 index 0000000..2c1e4fc --- /dev/null +++ b/components/component-example.tsx @@ -0,0 +1,495 @@ +"use client" + +import * as React from "react" + +import { + Example, + ExampleWrapper, +} from "@/components/example" +import { + AlertDialog, + AlertDialogAction, + AlertDialogCancel, + AlertDialogContent, + AlertDialogDescription, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogMedia, + AlertDialogTitle, + AlertDialogTrigger, +} from "@/components/ui/alert-dialog" +import { Badge } from "@/components/ui/badge" +import { Button } from "@/components/ui/button" +import { + Card, + CardAction, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from "@/components/ui/card" +import { + Combobox, + ComboboxContent, + ComboboxEmpty, + ComboboxInput, + ComboboxItem, + ComboboxList, +} from "@/components/ui/combobox" +import { + DropdownMenu, + DropdownMenuCheckboxItem, + DropdownMenuContent, + DropdownMenuGroup, + DropdownMenuItem, + DropdownMenuLabel, + DropdownMenuPortal, + DropdownMenuRadioGroup, + DropdownMenuRadioItem, + DropdownMenuSeparator, + DropdownMenuShortcut, + DropdownMenuSub, + DropdownMenuSubContent, + DropdownMenuSubTrigger, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu" +import { Field, FieldGroup, FieldLabel } from "@/components/ui/field" +import { Input } from "@/components/ui/input" +import { + Select, + SelectContent, + SelectGroup, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/components/ui/select" +import { Textarea } from "@/components/ui/textarea" +import { PlusIcon, BluetoothIcon, MoreVerticalIcon, FileIcon, FolderIcon, FolderOpenIcon, FileCodeIcon, MoreHorizontalIcon, FolderSearchIcon, SaveIcon, DownloadIcon, EyeIcon, LayoutIcon, PaletteIcon, SunIcon, MoonIcon, MonitorIcon, UserIcon, CreditCardIcon, SettingsIcon, KeyboardIcon, LanguagesIcon, BellIcon, MailIcon, ShieldIcon, HelpCircleIcon, FileTextIcon, LogOutIcon } from "lucide-react" + +export function ComponentExample() { + return ( + + + + + ) +} + +function CardExample() { + return ( + + +
+ Photo by mymind on Unsplash + + Observability Plus is replacing Monitoring + + Switch to the improved way to explore your data, with natural + language. Monitoring will no longer be available on the Pro plan in + November, 2025 + + + + + + + + + + + + + Allow accessory to connect? + + Do you want to allow the USB accessory to connect to this + device? + + + + Don't allow + Allow + + + + + Warning + + + + + ) +} + +const frameworks = [ + "Next.js", + "SvelteKit", + "Nuxt.js", + "Remix", + "Astro", +] as const + +function FormExample() { + const [notifications, setNotifications] = React.useState({ + email: true, + sms: false, + push: true, + }) + const [theme, setTheme] = React.useState("light") + + return ( + + + + User Information + Please fill in your details below + + + + + + + + File + + + New File + ⌘N + + + + New Folder + ⇧⌘N + + + + + Open Recent + + + + + Recent Projects + + + Project Alpha + + + + Project Beta + + + + + More Projects + + + + + + Project Gamma + + + + Project Delta + + + + + + + + + + Browse... + + + + + + + + + Save + ⌘S + + + + Export + ⇧⌘E + + + + + View + + setNotifications({ + ...notifications, + email: checked === true, + }) + } + > + + Show Sidebar + + + setNotifications({ + ...notifications, + sms: checked === true, + }) + } + > + + Show Status Bar + + + + + Theme + + + + + Appearance + + + + Light + + + + Dark + + + + System + + + + + + + + + + Account + + + Profile + ⇧⌘P + + + + Billing + + + + + Settings + + + + + Preferences + + + Keyboard Shortcuts + + + + Language + + + + + Notifications + + + + + + Notification Types + + + setNotifications({ + ...notifications, + push: checked === true, + }) + } + > + + Push Notifications + + + setNotifications({ + ...notifications, + email: checked === true, + }) + } + > + + Email Notifications + + + + + + + + + + + Privacy & Security + + + + + + + + + + + Help & Support + + + + Documentation + + + + + + + Sign Out + ⇧⌘Q + + + + + + + +
+ +
+ + Name + + + + Role + + +
+ + + Framework + + + + + No frameworks found. + + {(item) => ( + + {item} + + )} + + + + + + Comments +