├── .editorconfig
├── .eslintignore
├── .eslintrc.json
├── .gitignore
├── .prettierignore
├── .vscode
└── settings.json
├── README.md
├── app
├── api
│ └── og
│ │ └── route.tsx
├── layout.tsx
├── page.tsx
└── providers.tsx
├── components
├── calender-date-range-picker.tsx
├── data-card-placeholder.tsx
├── data-card.tsx
├── icons.tsx
├── latency-chart-card.tsx
├── latency-chart-placeholder.tsx
├── latency-chart-populated.tsx
├── latency-chart.tsx
├── layout.tsx
├── main-nav.tsx
├── model-cards.tsx
├── site-header.tsx
├── tailwind-indicator.tsx
├── theme-provider.tsx
├── theme-toggle.tsx
└── ui
│ ├── button.tsx
│ ├── calendar.tsx
│ ├── card.tsx
│ ├── popover.tsx
│ └── tabs.tsx
├── config
└── site.ts
├── lib
├── fonts.ts
└── utils.ts
├── next-env.d.ts
├── next.config.mjs
├── package.json
├── postcss.config.js
├── prettier.config.js
├── public
├── favicon.ico
├── gptstatus.png
├── next.svg
├── thirteen.svg
└── vercel.svg
├── styles
└── globals.css
├── tailwind.config.js
├── tsconfig.json
├── tsconfig.tsbuildinfo
├── types
└── nav.ts
├── workers
├── gpt-3.5-turbo
│ ├── gpt-3.5-turbo-heartbeat.ts
│ └── wrangler.toml
├── gpt-4
│ ├── gpt-4-heartbeat.ts
│ └── wrangler.toml
├── text-davinci-003
│ ├── text-davinci-003-heartbeat.ts
│ └── wrangler.toml
└── utils.ts
└── yarn.lock
/.editorconfig:
--------------------------------------------------------------------------------
1 | # editorconfig.org
2 | root = true
3 |
4 | [*]
5 | charset = utf-8
6 | end_of_line = lf
7 | indent_size = 2
8 | indent_style = space
9 | insert_final_newline = true
10 | trim_trailing_whitespace = true
11 |
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
1 | dist/*
2 | .cache
3 | public
4 | node_modules
5 | *.esm.js
6 |
--------------------------------------------------------------------------------
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json.schemastore.org/eslintrc",
3 | "root": true,
4 | "extends": [
5 | "next/core-web-vitals",
6 | "prettier",
7 | "plugin:tailwindcss/recommended"
8 | ],
9 | "plugins": ["tailwindcss"],
10 | "rules": {
11 | "@next/next/no-html-link-for-pages": "off",
12 | "react/jsx-key": "off",
13 | "tailwindcss/no-custom-classname": "off"
14 | },
15 | "settings": {
16 | "tailwindcss": {
17 | "callees": ["cn"],
18 | "config": "./tailwind.config.js"
19 | },
20 | "next": {
21 | "rootDir": ["./"]
22 | }
23 | },
24 | "overrides": [
25 | {
26 | "files": ["*.ts", "*.tsx"],
27 | "parser": "@typescript-eslint/parser"
28 | }
29 | ]
30 | }
31 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | node_modules
5 | .pnp
6 | .pnp.js
7 |
8 | # testing
9 | coverage
10 |
11 | # next.js
12 | .next/
13 | out/
14 | build
15 |
16 | # misc
17 | .DS_Store
18 | *.pem
19 |
20 | # debug
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 | .pnpm-debug.log*
25 |
26 | # local env files
27 | .env.local
28 | .env.development.local
29 | .env.test.local
30 | .env.production.local
31 |
32 | # turbo
33 | .turbo
34 |
35 | .contentlayer
36 | .env
37 |
38 | # cloudflare
39 | .dev.vars
40 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | cache
2 | .cache
3 | package.json
4 | package-lock.json
5 | public
6 | CHANGELOG.md
7 | .yarn
8 | dist
9 | node_modules
10 | .next
11 | build
12 | .contentlayer
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "typescript.tsdk": "../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib",
3 | "typescript.enablePromptUseWorkspaceTsdk": true
4 | }
5 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # next-template
2 |
3 | A Next.js 13 template for building apps with Radix UI and Tailwind CSS.
4 |
5 | ## Usage
6 |
7 | ```bash
8 | npx create-next-app -e https://github.com/shadcn/next-template
9 | ```
10 |
11 | ## Features
12 |
13 | - Radix UI Primitives
14 | - Tailwind CSS
15 | - Fonts with `next/font`
16 | - Icons from [Lucide](https://lucide.dev)
17 | - Dark mode with `next-themes`
18 | - Automatic import sorting with `@ianvs/prettier-plugin-sort-imports`
19 | - Tailwind CSS class sorting, merging and linting.
20 |
21 | ## License
22 |
23 | Licensed under the [MIT license](https://github.com/shadcn/ui/blob/main/LICENSE.md).
24 |
--------------------------------------------------------------------------------
/app/api/og/route.tsx:
--------------------------------------------------------------------------------
1 | import { ImageResponse } from "@vercel/og"
2 |
3 | export const runtime = "edge"
4 |
5 | export async function GET(request: Request) {
6 | return new ImageResponse(
7 | (
8 |
20 | Hello world!
21 |
22 | ),
23 | {
24 | width: 1200,
25 | height: 600,
26 | }
27 | )
28 | }
29 |
--------------------------------------------------------------------------------
/app/layout.tsx:
--------------------------------------------------------------------------------
1 | import "@/styles/globals.css"
2 | import { Metadata } from "next"
3 | import { Analytics } from "@vercel/analytics/react"
4 |
5 | import { siteConfig } from "@/config/site"
6 | import { fontSans } from "@/lib/fonts"
7 | import { cn } from "@/lib/utils"
8 | import { SiteHeader } from "@/components/site-header"
9 | import { TailwindIndicator } from "@/components/tailwind-indicator"
10 | import { ThemeProvider } from "@/components/theme-provider"
11 |
12 | import { CalendarSelectionProvider } from "./providers"
13 |
14 | export const metadata: Metadata = {
15 | title: {
16 | default: siteConfig.name,
17 | template: `%s - ${siteConfig.name}`,
18 | },
19 | description: siteConfig.description,
20 | themeColor: [
21 | { media: "(prefers-color-scheme: light)", color: "white" },
22 | { media: "(prefers-color-scheme: dark)", color: "black" },
23 | ],
24 | icons: {
25 | icon: "/favicon.ico",
26 | shortcut: "/favicon-16x16.png",
27 | apple: "/apple-touch-icon.png",
28 | },
29 | openGraph: {
30 | type: "website",
31 | locale: "en_US",
32 | title: siteConfig.name,
33 | siteName: siteConfig.name,
34 | description: siteConfig.description,
35 | url: siteConfig.url,
36 | images: [
37 | {
38 | url: `${siteConfig.url}/gptstatus.png`,
39 | width: 1200,
40 | height: 600,
41 | alt: siteConfig.name,
42 | },
43 | ],
44 | },
45 | twitter: {
46 | card: "summary_large_image",
47 | title: siteConfig.name,
48 | description: siteConfig.description,
49 | images: [
50 | {
51 | url: `${siteConfig.url}/gptstatus.png`,
52 | width: 1200,
53 | height: 600,
54 | alt: siteConfig.name,
55 | },
56 | ],
57 | creator: siteConfig.creator,
58 | },
59 | }
60 |
61 | interface RootLayoutProps {
62 | children: React.ReactNode
63 | }
64 |
65 | export default function RootLayout({ children }: RootLayoutProps) {
66 | return (
67 | <>
68 |
69 |
76 |
77 |
78 |
79 |
80 |
{children}
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 | >
89 | )
90 | }
91 |
--------------------------------------------------------------------------------
/app/page.tsx:
--------------------------------------------------------------------------------
1 | import { CalendarDateRangePicker } from "@/components/calender-date-range-picker"
2 | import LatencyChartCard from "@/components/latency-chart-card"
3 | import ModelCards from "@/components/model-cards"
4 |
5 | export const revalidate = 150
6 |
7 | export default function IndexPage() {
8 | return (
9 |
10 |
11 |
Dashboard
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | )
21 | }
22 |
--------------------------------------------------------------------------------
/app/providers.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import { createContext, useState } from "react"
4 | import { DateRange } from "react-day-picker"
5 |
6 | export const CalendarSelectionContext = createContext<{
7 | date: DateRange | undefined
8 | setDate: React.Dispatch>
9 | }>({
10 | date: undefined,
11 | setDate: () => {},
12 | })
13 |
14 | export function CalendarSelectionProvider({
15 | children,
16 | }: {
17 | children: React.ReactNode
18 | }) {
19 | const [date, setDate] = useState(undefined)
20 |
21 | return (
22 |
23 | {children}
24 |
25 | )
26 | }
27 |
--------------------------------------------------------------------------------
/components/calender-date-range-picker.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import * as React from "react"
4 | import { useContext } from "react"
5 | import { format } from "date-fns"
6 | import { Calendar as CalendarIcon } from "lucide-react"
7 |
8 | import { cn } from "@/lib/utils"
9 | import { Button } from "@/components/ui/button"
10 | import { Calendar } from "@/components/ui/calendar"
11 | import {
12 | Popover,
13 | PopoverContent,
14 | PopoverTrigger,
15 | } from "@/components/ui/popover"
16 | import { CalendarSelectionContext } from "@/app/providers"
17 |
18 | export function CalendarDateRangePicker({
19 | className,
20 | }: React.HTMLAttributes) {
21 | const { date, setDate } = useContext(CalendarSelectionContext)
22 |
23 | return (
24 |
25 |
26 |
27 |
50 |
51 |
52 |
60 |
61 |
62 |
63 | )
64 | }
65 |
--------------------------------------------------------------------------------
/components/data-card-placeholder.tsx:
--------------------------------------------------------------------------------
1 | import { Timer } from "lucide-react"
2 |
3 | import { Card, CardContent, CardHeader, CardTitle } from "./ui/card"
4 |
5 | type Props = {
6 | title: string
7 | }
8 |
9 | export default function DataCardPlaceolder({ title }: Props) {
10 | return (
11 |
12 |
13 | {title}
14 |
15 |
16 |
17 | 42s
18 | {/*
19 | +20.1% from last month
20 |
*/}
21 |
22 |
23 | )
24 | }
25 |
--------------------------------------------------------------------------------
/components/data-card.tsx:
--------------------------------------------------------------------------------
1 | import { sql } from "@vercel/postgres"
2 | import { LucideIcon, Timer } from "lucide-react"
3 |
4 | import { Card, CardContent, CardHeader, CardTitle } from "./ui/card"
5 |
6 | type Props = {
7 | title: string
8 | subtitle?: string
9 | model: string
10 | datapoint: string
11 | modifier?: (datapoint: string) => string | undefined
12 | unit: string | undefined
13 | Icon: LucideIcon
14 | }
15 |
16 | export default async function DataCard({
17 | title,
18 | subtitle,
19 | model,
20 | datapoint,
21 | modifier,
22 | unit,
23 | Icon,
24 | }: Props) {
25 | let data
26 | try {
27 | // Fetch the latest response time for the specific model
28 | data =
29 | await sql`SELECT * FROM response_times WHERE model=${model} ORDER BY id DESC LIMIT 1`
30 | } catch (e) {
31 | console.log(e)
32 | throw e
33 | }
34 |
35 | const { rows } = data
36 |
37 | return (
38 |
39 |
40 |
41 | {title}
42 |
43 | {subtitle ? subtitle : ""}
44 |
45 |
46 |
47 |
48 |
49 |
50 | {rows[0]
51 | ? modifier
52 | ? `${modifier(rows[0][datapoint])}${unit ? unit : ""}`
53 | : `${rows[0][datapoint]}${unit ? unit : ""}`
54 | : "N/A"}
55 |
56 | {/*
57 | +20.1% from last month
58 |
*/}
59 |
60 |
61 | )
62 | }
63 |
--------------------------------------------------------------------------------
/components/icons.tsx:
--------------------------------------------------------------------------------
1 | import {
2 | LucideProps,
3 | Moon,
4 | SunMedium,
5 | Twitter,
6 | type Icon as LucideIcon,
7 | } from "lucide-react"
8 |
9 | export type Icon = LucideIcon
10 |
11 | export const Icons = {
12 | sun: SunMedium,
13 | moon: Moon,
14 | twitter: Twitter,
15 | logo: (props: LucideProps) => (
16 |
22 | ),
23 | gitHub: (props: LucideProps) => (
24 |
30 | ),
31 | }
32 |
--------------------------------------------------------------------------------
/components/latency-chart-card.tsx:
--------------------------------------------------------------------------------
1 | import { Suspense } from "react"
2 |
3 | import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"
4 | import LatencyChart from "@/components/latency-chart"
5 | import LatencyChartPlaceholder from "@/components/latency-chart-placeholder"
6 |
7 | export default function LatencyChartCard() {
8 | return (
9 |
10 |
11 | Overview
12 |
13 |
14 | }>
15 | {/* @ts-expect-error Async Server Component */}
16 |
17 |
18 |
19 |
20 | )
21 | }
22 |
--------------------------------------------------------------------------------
/components/latency-chart-placeholder.tsx:
--------------------------------------------------------------------------------
1 | export default function LatencyChartPlaceholder() {
2 | return Loading ...
3 | }
4 |
--------------------------------------------------------------------------------
/components/latency-chart-populated.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import { useContext } from "react"
4 | import { format } from "date-fns"
5 | import {
6 | CartesianGrid,
7 | Line,
8 | LineChart,
9 | ResponsiveContainer,
10 | Tooltip,
11 | XAxis,
12 | YAxis,
13 | } from "recharts"
14 |
15 | import { CalendarSelectionContext } from "@/app/providers"
16 |
17 | const modelColors: Record = {
18 | "text-davinci-003": "#0000FF", // bright blue
19 | "gpt-3.5-turbo": "#008000", // dark green
20 | "gpt-4": "#FF8C00", // dark orange
21 | }
22 |
23 | type Props = {
24 | data: Record[]
25 | }
26 |
27 | export default function LatencyChartPopulated({ data }: Props) {
28 | const { date, setDate } = useContext(CalendarSelectionContext)
29 |
30 | let displayedData
31 | if (date) {
32 | const { from, to } = date
33 |
34 | if (from && to) {
35 | displayedData = data.filter((item) => {
36 | const itemDate = new Date(item.date)
37 | return itemDate >= from && itemDate <= to
38 | })
39 | } else if (from) {
40 | displayedData = data.filter((item) => {
41 | const itemDate = new Date(item.date)
42 | return itemDate >= from
43 | })
44 | } else if (to) {
45 | displayedData = data.filter((item) => {
46 | const itemDate = new Date(item.date)
47 | return itemDate <= to
48 | })
49 | }
50 | } else {
51 | displayedData = data.slice(-720) // 24 hours of data
52 | }
53 |
54 | if (displayedData == undefined || displayedData.length === 0) {
55 | return (
56 |
57 |
No data to display
58 |
59 | )
60 | }
61 |
62 | const uniqueModels = Array.from(
63 | new Set(
64 | displayedData
65 | .flatMap((item) => Object.keys(item))
66 | .filter((key) => key !== "date")
67 | )
68 | )
69 |
70 | const CustomTooltip = ({ active, payload, label }: any) => {
71 | if (active && payload && payload.length) {
72 | // Sort the payload array in descending order based on the 'value' property
73 | const sortedPayload = [...payload].sort(
74 | (a: any, b: any) => b.value - a.value
75 | )
76 |
77 | return (
78 |
86 |
{`Date: ${format(
87 | new Date(label),
88 | "MMM dd HH:mm"
89 | )}`}
90 | {sortedPayload.map((entry: any) => (
91 |
96 | {`${entry.dataKey}: ${entry.value} s`}
97 |
98 | ))}
99 |
100 | )
101 | }
102 |
103 | return null
104 | }
105 |
106 | return (
107 |
108 |
113 |
114 | {uniqueModels.map((model) => (
115 |
122 | ))}
123 | format(new Date(tickItem), "HH:mm")}
126 | label={{
127 | value: "Time",
128 | position: "insideBottom",
129 | offset: -8,
130 | style: { fontSize: "12px" },
131 | }}
132 | />
133 |
136 | } />
137 |
138 |
139 | )
140 | }
141 |
--------------------------------------------------------------------------------
/components/latency-chart.tsx:
--------------------------------------------------------------------------------
1 | import { sql } from "@vercel/postgres"
2 |
3 | import LatencyLineChart from "./latency-chart-populated"
4 |
5 | export default async function LatencyChart() {
6 | let data
7 | try {
8 | data = await sql`SELECT * FROM response_times`
9 | } catch (e) {
10 | console.log(e)
11 | throw e
12 | }
13 |
14 | const { rows } = data
15 |
16 | const transformedData = rows.reduce[]>(
17 | (acc, row) => {
18 | const existingEntry = acc.find(
19 | (entry: Record) =>
20 | entry.date === String(row.date)
21 | )
22 | if (existingEntry) {
23 | existingEntry[row.model] = Number(row.duration / 1000)
24 | } else {
25 | acc.push({
26 | date: String(row.date),
27 | [row.model]: Number(row.duration / 1000),
28 | })
29 | }
30 | return acc
31 | },
32 | []
33 | )
34 |
35 | return
36 | }
37 |
--------------------------------------------------------------------------------
/components/layout.tsx:
--------------------------------------------------------------------------------
1 | import { SiteHeader } from "@/components/site-header"
2 |
3 | interface LayoutProps {
4 | children: React.ReactNode
5 | }
6 |
7 | export function Layout({ children }: LayoutProps) {
8 | return (
9 | <>
10 |
11 | {children}
12 | >
13 | )
14 | }
15 |
--------------------------------------------------------------------------------
/components/main-nav.tsx:
--------------------------------------------------------------------------------
1 | import * as React from "react"
2 | import Link from "next/link"
3 |
4 | import { NavItem } from "@/types/nav"
5 | import { siteConfig } from "@/config/site"
6 | import { cn } from "@/lib/utils"
7 | import { Icons } from "@/components/icons"
8 |
9 | interface MainNavProps {
10 | items?: NavItem[]
11 | }
12 |
13 | export function MainNav({ items }: MainNavProps) {
14 | return (
15 |
16 |
17 |
18 |
19 | {siteConfig.name}
20 |
21 |
22 | {items?.length ? (
23 |
40 | ) : null}
41 |
42 | )
43 | }
44 |
--------------------------------------------------------------------------------
/components/model-cards.tsx:
--------------------------------------------------------------------------------
1 | import { Suspense } from "react"
2 | import { ArrowUpDown, Gauge, Timer } from "lucide-react"
3 |
4 | import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"
5 | import DataCard from "@/components/data-card"
6 | import DataCardPlaceholder from "@/components/data-card-placeholder"
7 |
8 | const models = [
9 | {
10 | name: "GPT 4",
11 | value: "gpt-4",
12 | },
13 | {
14 | name: "GPT 3.5 Turbo",
15 | value: "gpt-3.5-turbo",
16 | },
17 | {
18 | name: "Text Davinci 003",
19 | value: "text-davinci-003",
20 | },
21 | {
22 | name: "Palm",
23 | value: "palm",
24 | disabled: true,
25 | },
26 | ]
27 |
28 | const cards = [
29 | {
30 | title: "Response Time",
31 | subtitle: "256 token test",
32 | datapoint: "duration",
33 | modifier: (datapoint: string) => `${Number(datapoint) / 1000}`,
34 | unit: "s",
35 | Icon: Timer,
36 | },
37 | {
38 | title: "Time To First Byte",
39 | datapoint: "ttfb",
40 | unit: "ms",
41 | Icon: ArrowUpDown,
42 | },
43 | {
44 | title: "Tokens Per Second",
45 | datapoint: "tps",
46 | Icon: Gauge,
47 | },
48 | ]
49 |
50 | export default function ModelCards() {
51 | return (
52 |
53 |
54 | {models.map(
55 | (model: { name: string; value: string; disabled?: boolean }) => {
56 | return (
57 |
58 | {model.name}
59 |
60 | )
61 | }
62 | )}
63 |
64 | {models.map((model: { name: string; value: string }) => {
65 | return (
66 |
67 |
68 | {cards.map((card) => (
69 | }>
70 | {/* @ts-expect-error Async Server Component */}
71 |
80 |
81 | ))}
82 |
83 |
84 | )
85 | })}
86 |
87 | )
88 | }
89 |
--------------------------------------------------------------------------------
/components/site-header.tsx:
--------------------------------------------------------------------------------
1 | import Link from "next/link"
2 |
3 | import { siteConfig } from "@/config/site"
4 | import { buttonVariants } from "@/components/ui/button"
5 | import { Icons } from "@/components/icons"
6 | import { MainNav } from "@/components/main-nav"
7 | import { ThemeToggle } from "@/components/theme-toggle"
8 |
9 | export function SiteHeader() {
10 | return (
11 |
12 |
13 |
14 |
15 |
48 |
49 |
50 |
51 | )
52 | }
53 |
--------------------------------------------------------------------------------
/components/tailwind-indicator.tsx:
--------------------------------------------------------------------------------
1 | export function TailwindIndicator() {
2 | if (process.env.NODE_ENV === "production") return null
3 |
4 | return (
5 |
6 |
xs
7 |
8 | sm
9 |
10 |
md
11 |
lg
12 |
xl
13 |
2xl
14 |
15 | )
16 | }
17 |
--------------------------------------------------------------------------------
/components/theme-provider.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import * as React from "react"
4 | import { ThemeProvider as NextThemesProvider } from "next-themes"
5 | import { ThemeProviderProps } from "next-themes/dist/types"
6 |
7 | export function ThemeProvider({ children, ...props }: ThemeProviderProps) {
8 | return {children}
9 | }
10 |
--------------------------------------------------------------------------------
/components/theme-toggle.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import * as React from "react"
4 | import { useTheme } from "next-themes"
5 |
6 | import { Button } from "@/components/ui/button"
7 | import { Icons } from "@/components/icons"
8 |
9 | export function ThemeToggle() {
10 | const { setTheme, theme } = useTheme()
11 |
12 | return (
13 |
22 | )
23 | }
24 |
--------------------------------------------------------------------------------
/components/ui/button.tsx:
--------------------------------------------------------------------------------
1 | import * as React from "react"
2 | import { VariantProps, cva } from "class-variance-authority"
3 |
4 | import { cn } from "@/lib/utils"
5 |
6 | const buttonVariants = cva(
7 | "inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:opacity-50 disabled:pointer-events-none ring-offset-background",
8 | {
9 | variants: {
10 | variant: {
11 | default: "bg-primary text-primary-foreground hover:bg-primary/90",
12 | destructive:
13 | "bg-destructive text-destructive-foreground hover:bg-destructive/90",
14 | outline:
15 | "border border-input hover:bg-accent hover:text-accent-foreground",
16 | secondary:
17 | "bg-secondary text-secondary-foreground hover:bg-secondary/80",
18 | ghost: "hover:bg-accent hover:text-accent-foreground",
19 | link: "underline-offset-4 hover:underline text-primary",
20 | },
21 | size: {
22 | default: "h-10 py-2 px-4",
23 | sm: "h-9 px-3 rounded-md",
24 | lg: "h-11 px-8 rounded-md",
25 | },
26 | },
27 | defaultVariants: {
28 | variant: "default",
29 | size: "default",
30 | },
31 | }
32 | )
33 |
34 | export interface ButtonProps
35 | extends React.ButtonHTMLAttributes,
36 | VariantProps {}
37 |
38 | const Button = React.forwardRef(
39 | ({ className, variant, size, ...props }, ref) => {
40 | return (
41 |
46 | )
47 | }
48 | )
49 | Button.displayName = "Button"
50 |
51 | export { Button, buttonVariants }
52 |
--------------------------------------------------------------------------------
/components/ui/calendar.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import * as React from "react"
4 | import { ChevronLeft, ChevronRight } from "lucide-react"
5 | import { DayPicker } from "react-day-picker"
6 |
7 | import { cn } from "@/lib/utils"
8 | import { buttonVariants } from "@/components/ui/button"
9 |
10 | export type CalendarProps = React.ComponentProps
11 |
12 | function Calendar({
13 | className,
14 | classNames,
15 | showOutsideDays = true,
16 | ...props
17 | }: CalendarProps) {
18 | return (
19 | ,
56 | IconRight: ({ ...props }) => ,
57 | }}
58 | {...props}
59 | />
60 | )
61 | }
62 | Calendar.displayName = "Calendar"
63 |
64 | export { Calendar }
65 |
--------------------------------------------------------------------------------
/components/ui/card.tsx:
--------------------------------------------------------------------------------
1 | import * as React from "react"
2 |
3 | import { cn } from "@/lib/utils"
4 |
5 | const Card = React.forwardRef<
6 | HTMLDivElement,
7 | React.HTMLAttributes
8 | >(({ className, ...props }, ref) => (
9 |
17 | ))
18 | Card.displayName = "Card"
19 |
20 | const CardHeader = React.forwardRef<
21 | HTMLDivElement,
22 | React.HTMLAttributes
23 | >(({ className, ...props }, ref) => (
24 |
29 | ))
30 | CardHeader.displayName = "CardHeader"
31 |
32 | const CardTitle = React.forwardRef<
33 | HTMLParagraphElement,
34 | React.HTMLAttributes
35 | >(({ className, ...props }, ref) => (
36 |
44 | ))
45 | CardTitle.displayName = "CardTitle"
46 |
47 | const CardDescription = React.forwardRef<
48 | HTMLParagraphElement,
49 | React.HTMLAttributes
50 | >(({ className, ...props }, ref) => (
51 |
56 | ))
57 | CardDescription.displayName = "CardDescription"
58 |
59 | const CardContent = React.forwardRef<
60 | HTMLDivElement,
61 | React.HTMLAttributes
62 | >(({ className, ...props }, ref) => (
63 |
64 | ))
65 | CardContent.displayName = "CardContent"
66 |
67 | const CardFooter = React.forwardRef<
68 | HTMLDivElement,
69 | React.HTMLAttributes
70 | >(({ className, ...props }, ref) => (
71 |
76 | ))
77 | CardFooter.displayName = "CardFooter"
78 |
79 | export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }
80 |
--------------------------------------------------------------------------------
/components/ui/popover.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import * as React from "react"
4 | import * as PopoverPrimitive from "@radix-ui/react-popover"
5 |
6 | import { cn } from "@/lib/utils"
7 |
8 | const Popover = PopoverPrimitive.Root
9 |
10 | const PopoverTrigger = PopoverPrimitive.Trigger
11 |
12 | const PopoverContent = React.forwardRef<
13 | React.ElementRef,
14 | React.ComponentPropsWithoutRef
15 | >(({ className, align = "center", sideOffset = 4, ...props }, ref) => (
16 |
17 |
27 |
28 | ))
29 | PopoverContent.displayName = PopoverPrimitive.Content.displayName
30 |
31 | export { Popover, PopoverTrigger, PopoverContent }
32 |
--------------------------------------------------------------------------------
/components/ui/tabs.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import * as React from "react"
4 | import * as TabsPrimitive from "@radix-ui/react-tabs"
5 |
6 | import { cn } from "@/lib/utils"
7 |
8 | const Tabs = TabsPrimitive.Root
9 |
10 | const TabsList = React.forwardRef<
11 | React.ElementRef,
12 | React.ComponentPropsWithoutRef
13 | >(({ className, ...props }, ref) => (
14 |
22 | ))
23 | TabsList.displayName = TabsPrimitive.List.displayName
24 |
25 | const TabsTrigger = React.forwardRef<
26 | React.ElementRef,
27 | React.ComponentPropsWithoutRef
28 | >(({ className, ...props }, ref) => (
29 |
37 | ))
38 | TabsTrigger.displayName = TabsPrimitive.Trigger.displayName
39 |
40 | const TabsContent = React.forwardRef<
41 | React.ElementRef,
42 | React.ComponentPropsWithoutRef
43 | >(({ className, ...props }, ref) => (
44 |
52 | ))
53 | TabsContent.displayName = TabsPrimitive.Content.displayName
54 |
55 | export { Tabs, TabsList, TabsTrigger, TabsContent }
56 |
--------------------------------------------------------------------------------
/config/site.ts:
--------------------------------------------------------------------------------
1 | export type SiteConfig = typeof siteConfig
2 |
3 | export const siteConfig = {
4 | name: "GPT Status",
5 | title: "GPT Status",
6 | url: "https://gptstat.us",
7 | description:
8 | "A community dashboard for tracking OpenAI's API availability and performance.",
9 | mainNav: [],
10 | links: {
11 | twitter: "https://twitter.com/DeveloperHarris",
12 | github: "https://github.com/DeveloperHarris/gptstats",
13 | },
14 | creator: "@DeveloperHarris",
15 | }
16 |
--------------------------------------------------------------------------------
/lib/fonts.ts:
--------------------------------------------------------------------------------
1 | import { JetBrains_Mono as FontMono, Inter as FontSans } from "next/font/google"
2 |
3 | export const fontSans = FontSans({
4 | subsets: ["latin"],
5 | variable: "--font-sans",
6 | })
7 |
8 | export const fontMono = FontMono({
9 | subsets: ["latin"],
10 | variable: "--font-mono",
11 | })
12 |
--------------------------------------------------------------------------------
/lib/utils.ts:
--------------------------------------------------------------------------------
1 | import { clsx, type ClassValue } from "clsx"
2 | import { twMerge } from "tailwind-merge"
3 |
4 | export function cn(...inputs: ClassValue[]) {
5 | return twMerge(clsx(inputs))
6 | }
7 |
--------------------------------------------------------------------------------
/next-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 |
4 | // NOTE: This file should not be edited
5 | // see https://nextjs.org/docs/basic-features/typescript for more information.
6 |
--------------------------------------------------------------------------------
/next.config.mjs:
--------------------------------------------------------------------------------
1 | /** @type {import('next').NextConfig} */
2 | const nextConfig = {
3 | reactStrictMode: true,
4 | experimental: {
5 | appDir: true,
6 | },
7 | }
8 |
9 | export default nextConfig
10 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "next-template",
3 | "version": "0.0.2",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev",
7 | "build": "next build",
8 | "start": "next start",
9 | "deploy": "wrangler deploy workers/heartbeat.ts",
10 | "lint": "next lint",
11 | "lint:fix": "next lint --fix",
12 | "preview": "next build && next start",
13 | "typecheck": "tsc --noEmit",
14 | "format:write": "prettier --write \"**/*.{ts,tsx,mdx}\" --cache",
15 | "format:check": "prettier --check \"**/*.{ts,tsx,mdx}\" --cache"
16 | },
17 | "dependencies": {
18 | "@radix-ui/react-popover": "^1.0.5",
19 | "@radix-ui/react-tabs": "^1.0.3",
20 | "@vercel/analytics": "^1.0.1",
21 | "@vercel/og": "^0.5.6",
22 | "@vercel/postgres": "^0.3.0",
23 | "class-variance-authority": "^0.4.0",
24 | "clsx": "^1.2.1",
25 | "cmdk": "^0.2.0",
26 | "date-fns": "^2.30.0",
27 | "lucide-react": "0.105.0-alpha.4",
28 | "next": "^13.3.0",
29 | "next-themes": "^0.2.1",
30 | "pg": "^8.11.0",
31 | "react": "^18.2.0",
32 | "react-day-picker": "^8.7.1",
33 | "react-dom": "^18.2.0",
34 | "recharts": "^2.6.2",
35 | "sharp": "^0.31.3",
36 | "tailwind-merge": "^1.12.0",
37 | "tailwindcss-animate": "^1.0.5"
38 | },
39 | "devDependencies": {
40 | "@cloudflare/workers-types": "^4.20230518.0",
41 | "@ianvs/prettier-plugin-sort-imports": "^3.7.1",
42 | "@types/node": "^17.0.12",
43 | "@types/react": "^18.0.22",
44 | "@types/react-dom": "^18.0.7",
45 | "@typescript-eslint/parser": "^5.58.0",
46 | "autoprefixer": "^10.4.13",
47 | "eslint": "^8.31.0",
48 | "eslint-config-next": "13.0.0",
49 | "eslint-config-prettier": "^8.3.0",
50 | "eslint-plugin-react": "^7.31.11",
51 | "eslint-plugin-tailwindcss": "^3.8.0",
52 | "postcss": "^8.4.21",
53 | "prettier": "^2.7.1",
54 | "tailwindcss": "^3.3.1",
55 | "typescript": "^4.9.3",
56 | "wrangler": "^3.0.1"
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/prettier.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('prettier').Config} */
2 | module.exports = {
3 | endOfLine: "lf",
4 | semi: false,
5 | singleQuote: false,
6 | tabWidth: 2,
7 | trailingComma: "es5",
8 | importOrder: [
9 | "^(react/(.*)$)|^(react$)",
10 | "^(next/(.*)$)|^(next$)",
11 | "",
12 | "",
13 | "^types$",
14 | "^@/types/(.*)$",
15 | "^@/config/(.*)$",
16 | "^@/lib/(.*)$",
17 | "^@/hooks/(.*)$",
18 | "^@/components/ui/(.*)$",
19 | "^@/components/(.*)$",
20 | "^@/styles/(.*)$",
21 | "^@/app/(.*)$",
22 | "",
23 | "^[./]",
24 | ],
25 | importOrderSeparation: false,
26 | importOrderSortSpecifiers: true,
27 | importOrderBuiltinModulesToTop: true,
28 | importOrderParserPlugins: ["typescript", "jsx", "decorators-legacy"],
29 | importOrderMergeDuplicateImports: true,
30 | importOrderCombineTypeAndValueImports: true,
31 | plugins: ["@ianvs/prettier-plugin-sort-imports"],
32 | }
33 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DeveloperHarris/gptstatus/293f828f64e50015f80c68ea2c0a124325ac116c/public/favicon.ico
--------------------------------------------------------------------------------
/public/gptstatus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DeveloperHarris/gptstatus/293f828f64e50015f80c68ea2c0a124325ac116c/public/gptstatus.png
--------------------------------------------------------------------------------
/public/next.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/thirteen.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/vercel.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/styles/globals.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 | @layer base {
6 | :root {
7 | --background: 0 0% 100%;
8 | --foreground: 222.2 47.4% 11.2%;
9 |
10 | --muted: 210 40% 96.1%;
11 | --muted-foreground: 215.4 16.3% 46.9%;
12 |
13 | --popover: 0 0% 100%;
14 | --popover-foreground: 222.2 47.4% 11.2%;
15 |
16 | --border: 214.3 31.8% 91.4%;
17 | --input: 214.3 31.8% 91.4%;
18 |
19 | --card: 0 0% 100%;
20 | --card-foreground: 222.2 47.4% 11.2%;
21 |
22 | --primary: 222.2 47.4% 11.2%;
23 | --primary-foreground: 210 40% 98%;
24 |
25 | --secondary: 210 40% 96.1%;
26 | --secondary-foreground: 222.2 47.4% 11.2%;
27 |
28 | --accent: 210 40% 96.1%;
29 | --accent-foreground: 222.2 47.4% 11.2%;
30 |
31 | --destructive: 0 100% 50%;
32 | --destructive-foreground: 210 40% 98%;
33 |
34 | --ring: 215 20.2% 65.1%;
35 |
36 | --radius: 0.5rem;
37 | }
38 |
39 | .dark {
40 | --background: 224 71% 4%;
41 | --foreground: 213 31% 91%;
42 |
43 | --muted: 223 47% 11%;
44 | --muted-foreground: 215.4 16.3% 56.9%;
45 |
46 | --accent: 216 34% 17%;
47 | --accent-foreground: 210 40% 98%;
48 |
49 | --popover: 224 71% 4%;
50 | --popover-foreground: 215 20.2% 65.1%;
51 |
52 | --border: 216 34% 17%;
53 | --input: 216 34% 17%;
54 |
55 | --card: 224 71% 4%;
56 | --card-foreground: 213 31% 91%;
57 |
58 | --primary: 210 40% 98%;
59 | --primary-foreground: 222.2 47.4% 1.2%;
60 |
61 | --secondary: 222.2 47.4% 11.2%;
62 | --secondary-foreground: 210 40% 98%;
63 |
64 | --destructive: 0 63% 31%;
65 | --destructive-foreground: 210 40% 98%;
66 |
67 | --ring: 216 34% 17%;
68 |
69 | --radius: 0.5rem;
70 | }
71 | }
72 |
73 | @layer base {
74 | * {
75 | @apply border-border;
76 | }
77 | body {
78 | @apply bg-background text-foreground;
79 | font-feature-settings: "rlig" 1, "calt" 1;
80 | }
81 | }
82 |
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | const { fontFamily } = require("tailwindcss/defaultTheme")
2 |
3 | /** @type {import('tailwindcss').Config} */
4 | module.exports = {
5 | darkMode: ["class"],
6 | content: ["app/**/*.{ts,tsx}", "components/**/*.{ts,tsx}"],
7 | theme: {
8 | container: {
9 | center: true,
10 | padding: "2rem",
11 | screens: {
12 | "2xl": "1400px",
13 | },
14 | },
15 | extend: {
16 | colors: {
17 | border: "hsl(var(--border))",
18 | input: "hsl(var(--input))",
19 | ring: "hsl(var(--ring))",
20 | background: "hsl(var(--background))",
21 | foreground: "hsl(var(--foreground))",
22 | primary: {
23 | DEFAULT: "hsl(var(--primary))",
24 | foreground: "hsl(var(--primary-foreground))",
25 | },
26 | secondary: {
27 | DEFAULT: "hsl(var(--secondary))",
28 | foreground: "hsl(var(--secondary-foreground))",
29 | },
30 | destructive: {
31 | DEFAULT: "hsl(var(--destructive))",
32 | foreground: "hsl(var(--destructive-foreground))",
33 | },
34 | muted: {
35 | DEFAULT: "hsl(var(--muted))",
36 | foreground: "hsl(var(--muted-foreground))",
37 | },
38 | accent: {
39 | DEFAULT: "hsl(var(--accent))",
40 | foreground: "hsl(var(--accent-foreground))",
41 | },
42 | popover: {
43 | DEFAULT: "hsl(var(--popover))",
44 | foreground: "hsl(var(--popover-foreground))",
45 | },
46 | card: {
47 | DEFAULT: "hsl(var(--card))",
48 | foreground: "hsl(var(--card-foreground))",
49 | },
50 | },
51 | borderRadius: {
52 | lg: `var(--radius)`,
53 | md: `calc(var(--radius) - 2px)`,
54 | sm: "calc(var(--radius) - 4px)",
55 | },
56 | fontFamily: {
57 | sans: ["var(--font-sans)", ...fontFamily.sans],
58 | },
59 | keyframes: {
60 | "accordion-down": {
61 | from: { height: 0 },
62 | to: { height: "var(--radix-accordion-content-height)" },
63 | },
64 | "accordion-up": {
65 | from: { height: "var(--radix-accordion-content-height)" },
66 | to: { height: 0 },
67 | },
68 | },
69 | animation: {
70 | "accordion-down": "accordion-down 0.2s ease-out",
71 | "accordion-up": "accordion-up 0.2s ease-out",
72 | },
73 | },
74 | },
75 | plugins: [require("tailwindcss-animate")],
76 | }
77 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "lib": ["dom", "dom.iterable", "esnext"],
4 | "allowJs": true,
5 | "skipLibCheck": true,
6 | "strict": true,
7 | "forceConsistentCasingInFileNames": true,
8 | "noEmit": true,
9 | "incremental": true,
10 | "esModuleInterop": true,
11 | "module": "esnext",
12 | "moduleResolution": "node",
13 | "resolveJsonModule": true,
14 | "isolatedModules": true,
15 | "jsx": "preserve",
16 | "baseUrl": ".",
17 | "paths": {
18 | "@/*": ["./*"]
19 | },
20 | "plugins": [
21 | {
22 | "name": "next"
23 | }
24 | ],
25 | "strictNullChecks": true,
26 | "types": ["@cloudflare/workers-types"]
27 | },
28 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
29 | "exclude": ["node_modules"]
30 | }
31 |
--------------------------------------------------------------------------------
/tsconfig.tsbuildinfo:
--------------------------------------------------------------------------------
1 | {"program":{"fileNames":["../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.esnext.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib/lib.esnext.intl.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/styled-jsx/types/css.d.ts","../../node_modules/.pnpm/@types+react@18.0.22/node_modules/@types/react/global.d.ts","../../node_modules/.pnpm/csstype@3.1.2/node_modules/csstype/index.d.ts","../../node_modules/.pnpm/@types+prop-types@15.7.5/node_modules/@types/prop-types/index.d.ts","../../node_modules/.pnpm/@types+scheduler@0.16.3/node_modules/@types/scheduler/tracing.d.ts","../../node_modules/.pnpm/@types+react@18.0.22/node_modules/@types/react/index.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/styled-jsx/types/index.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/styled-jsx/types/macro.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/styled-jsx/types/style.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/styled-jsx/types/global.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/shared/lib/amp.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/amp.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/assert.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/assert/strict.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/globals.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/async_hooks.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/buffer.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/child_process.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/cluster.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/console.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/constants.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/crypto.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/dgram.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/dns.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/dns/promises.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/domain.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/events.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/fs.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/fs/promises.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/http.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/http2.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/https.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/inspector.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/module.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/net.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/os.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/path.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/perf_hooks.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/process.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/punycode.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/querystring.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/readline.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/repl.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/stream.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/stream/promises.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/stream/consumers.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/stream/web.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/string_decoder.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/timers.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/timers/promises.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/tls.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/trace_events.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/tty.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/url.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/util.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/v8.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/vm.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/wasi.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/worker_threads.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/zlib.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/globals.global.d.ts","../../node_modules/.pnpm/@types+node@17.0.12/node_modules/@types/node/index.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/get-page-files.d.ts","../../node_modules/.pnpm/@types+react-dom@18.0.7/node_modules/@types/react-dom/index.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/compiled/webpack/webpack.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/config.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/lib/load-custom-routes.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/shared/lib/image-config.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/build/webpack/plugins/subresource-integrity-plugin.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/body-streams.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/shared/lib/router/utils/route-regex.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/shared/lib/router/utils/route-matcher.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/future/route-kind.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/future/route-definitions/route-definition.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/future/route-matches/route-match.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/request-meta.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/config-shared.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/base-http/index.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/api-utils/index.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/initialize-require-hook.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/node-polyfill-fetch.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/node-polyfill-web-streams.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/future/route-matchers/route-matcher.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/future/route-matcher-providers/route-matcher-provider.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/future/helpers/i18n-provider.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/future/route-matcher-managers/route-matcher-manager.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/router.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/build/analysis/get-page-static-info.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/build/webpack/loaders/get-module-build-info.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/build/webpack/plugins/middleware-plugin.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/render-result.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/web/next-url.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/compiled/@edge-runtime/cookies/index.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/web/spec-extension/cookies.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/web/spec-extension/request.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/web/spec-extension/fetch-event.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/web/spec-extension/response.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/web/types.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/lib/setup-exception-listeners.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/build/index.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/send-payload/revalidate-headers.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/send-payload/index.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/base-http/node.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/font-utils.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/load-components.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/build/webpack/plugins/next-font-manifest-plugin.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/render.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/shared/lib/router/utils/parse-url.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/response-cache/types.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/response-cache/index.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/future/helpers/module-loader/module-loader.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/future/route-definitions/app-route-route-definition.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/build/webpack/plugins/app-build-manifest-plugin.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/lib/coalesced-function.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/lib/incremental-cache/index.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/client/components/static-generation-async-storage.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/client/components/hooks-server-context.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/lib/patch-fetch.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/build/utils.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/web/spec-extension/adapters/headers.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/client/components/request-async-storage.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/client/components/headers.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/client/components/static-generation-bailout.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/future/route-modules/route-module.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/async-storage/async-storage-wrapper.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/async-storage/static-generation-async-storage-wrapper.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/web/http.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/future/route-modules/app-route/module.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/future/route-handler-managers/route-handler-manager.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/future/normalizers/normalizer.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/future/normalizers/locale-route-normalizer.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/base-server.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/future/route-definitions/locale-route-definition.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/future/route-definitions/pages-api-route-definition.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/future/route-matches/pages-api-route-match.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/lib/render-server.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/image-optimizer.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/next-server.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/future/route-matcher-managers/default-route-matcher-manager.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/future/route-matcher-managers/dev-route-matcher-manager.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/dev/static-paths-worker.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/dev/next-dev-server.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/next.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/lib/metadata/types/alternative-urls-types.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/lib/metadata/types/extra-types.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/lib/metadata/types/metadata-types.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/lib/metadata/types/manifest-types.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/lib/metadata/types/opengraph-types.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/lib/metadata/types/twitter-types.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/lib/metadata/types/metadata-interface.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/types/index.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/shared/lib/html-context.d.ts","../../node_modules/.pnpm/@next+env@13.3.0/node_modules/@next/env/types/index.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/shared/lib/mitt.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/client/with-router.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/client/router.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/client/route-loader.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/client/page-loader.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/shared/lib/bloom-filter/hashing.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/shared/lib/bloom-filter/base-filter.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/shared/lib/bloom-filter/bit-set.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/shared/lib/bloom-filter/index.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/shared/lib/router/router.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/shared/lib/constants.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/shared/lib/utils.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/pages/_app.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/app.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/shared/lib/runtime-config.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/config.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/pages/_document.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/document.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/shared/lib/dynamic.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dynamic.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/pages/_error.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/error.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/shared/lib/head.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/head.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/client/image.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/image.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/client/link.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/link.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/router.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/client/script.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/script.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/web/spec-extension/user-agent.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/compiled/@edge-runtime/primitives/url.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/compiled/@vercel/og/satori/index.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/compiled/@vercel/og/emoji/index.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/compiled/@vercel/og/types.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/compiled/@vercel/og/index.node.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/web/spec-extension/image-response.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/server.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/types/global.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/index.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/image-types/global.d.ts","./next-env.d.ts","./config/site.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/compiled/@next/font/dist/types.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/compiled/@next/font/dist/google/index.d.ts","../../node_modules/.pnpm/next@13.3.0_@babel+core@7.20.7_react-dom@18.2.0_react@18.2.0/node_modules/next/font/google/index.d.ts","./lib/fonts.ts","../../node_modules/.pnpm/clsx@1.2.1/node_modules/clsx/clsx.d.ts","../../node_modules/.pnpm/tailwind-merge@1.12.0/node_modules/tailwind-merge/dist/lib/tw-join.d.ts","../../node_modules/.pnpm/tailwind-merge@1.12.0/node_modules/tailwind-merge/dist/lib/tw-merge.d.ts","../../node_modules/.pnpm/tailwind-merge@1.12.0/node_modules/tailwind-merge/dist/lib/validators.d.ts","../../node_modules/.pnpm/tailwind-merge@1.12.0/node_modules/tailwind-merge/dist/lib/types.d.ts","../../node_modules/.pnpm/tailwind-merge@1.12.0/node_modules/tailwind-merge/dist/lib/default-config.d.ts","../../node_modules/.pnpm/tailwind-merge@1.12.0/node_modules/tailwind-merge/dist/lib/extend-tailwind-merge.d.ts","../../node_modules/.pnpm/tailwind-merge@1.12.0/node_modules/tailwind-merge/dist/lib/create-tailwind-merge.d.ts","../../node_modules/.pnpm/tailwind-merge@1.12.0/node_modules/tailwind-merge/dist/lib/merge-configs.d.ts","../../node_modules/.pnpm/tailwind-merge@1.12.0/node_modules/tailwind-merge/dist/lib/from-theme.d.ts","../../node_modules/.pnpm/tailwind-merge@1.12.0/node_modules/tailwind-merge/dist/index.d.ts","./lib/utils.ts","./types/nav.ts","../../node_modules/.pnpm/class-variance-authority@0.4.0_typescript@4.9.5/node_modules/class-variance-authority/dist/types.d.ts","../../node_modules/.pnpm/class-variance-authority@0.4.0_typescript@4.9.5/node_modules/class-variance-authority/dist/index.d.ts","./components/ui/button.tsx","../../node_modules/.pnpm/lucide-react@0.105.0-alpha.4_react@18.2.0/node_modules/lucide-react/dist/lucide-react.d.ts","./components/icons.tsx","./components/main-nav.tsx","../../node_modules/.pnpm/next-themes@0.2.1_next@13.3.0_react-dom@18.2.0_react@18.2.0/node_modules/next-themes/dist/types.d.ts","../../node_modules/.pnpm/next-themes@0.2.1_next@13.3.0_react-dom@18.2.0_react@18.2.0/node_modules/next-themes/dist/index.d.ts","./components/theme-toggle.tsx","./components/site-header.tsx","./components/tailwind-indicator.tsx","./components/theme-provider.tsx","./app/layout.tsx","./app/page.tsx","./components/layout.tsx"],"fileInfos":[{"version":"8730f4bf322026ff5229336391a18bcaa1f94d4f82416c8b2f3954e2ccaae2ba","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","4b421cbfb3a38a27c279dec1e9112c3d1da296f77a1a85ddadf7e7a425d45d18","1fc5ab7a764205c68fa10d381b08417795fc73111d6dd16b5b1ed36badb743d9","746d62152361558ea6d6115cf0da4dd10ede041d14882ede3568bce5dc4b4f1f","d11a03592451da2d1065e09e61f4e2a9bf68f780f4f6623c18b57816a9679d17","aea179452def8a6152f98f63b191b84e7cbd69b0e248c91e61fb2e52328abe8c",{"version":"3aafcb693fe5b5c3bd277bd4c3a617b53db474fe498fc5df067c5603b1eebde7","affectsGlobalScope":true},{"version":"f3d4da15233e593eacb3965cde7960f3fddf5878528d882bcedd5cbaba0193c7","affectsGlobalScope":true},{"version":"adb996790133eb33b33aadb9c09f15c2c575e71fb57a62de8bf74dbf59ec7dfb","affectsGlobalScope":true},{"version":"8cc8c5a3bac513368b0157f3d8b31cfdcfe78b56d3724f30f80ed9715e404af8","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"c5c05907c02476e4bde6b7e76a79ffcd948aedd14b6a8f56e4674221b0417398","affectsGlobalScope":true},{"version":"5f406584aef28a331c36523df688ca3650288d14f39c5d2e555c95f0d2ff8f6f","affectsGlobalScope":true},{"version":"22f230e544b35349cfb3bd9110b6ef37b41c6d6c43c3314a31bd0d9652fcec72","affectsGlobalScope":true},{"version":"7ea0b55f6b315cf9ac2ad622b0a7813315bb6e97bf4bb3fbf8f8affbca7dc695","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"eb26de841c52236d8222f87e9e6a235332e0788af8c87a71e9e210314300410a","affectsGlobalScope":true},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true},{"version":"81cac4cbc92c0c839c70f8ffb94eb61e2d32dc1c3cf6d95844ca099463cf37ea","affectsGlobalScope":true},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true},{"version":"d154ea5bb7f7f9001ed9153e876b2d5b8f5c2bb9ec02b3ae0d239ec769f1f2ae","affectsGlobalScope":true},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true},{"version":"9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951","affectsGlobalScope":true},{"version":"6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de","affectsGlobalScope":true},{"version":"6e7997ef61de3132e4d4b2250e75343f487903ddf5370e7ce33cf1b9db9a63ed","affectsGlobalScope":true},{"version":"2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993","affectsGlobalScope":true},{"version":"5e5e095c4470c8bab227dbbc61374878ecead104c74ab9960d3adcccfee23205","affectsGlobalScope":true},{"version":"09aa50414b80c023553090e2f53827f007a301bc34b0495bfb2c3c08ab9ad1eb","affectsGlobalScope":true},{"version":"d7f680a43f8cd12a6b6122c07c54ba40952b0c8aa140dcfcf32eb9e6cb028596","affectsGlobalScope":true},{"version":"3787b83e297de7c315d55d4a7c546ae28e5f6c0a361b7a1dcec1f1f50a54ef11","affectsGlobalScope":true},{"version":"e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40","affectsGlobalScope":true},{"version":"faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e","affectsGlobalScope":true},{"version":"06393d13ea207a1bfe08ec8d7be562549c5e2da8983f2ee074e00002629d1871","affectsGlobalScope":true},{"version":"2768ef564cfc0689a1b76106c421a2909bdff0acbe87da010785adab80efdd5c","affectsGlobalScope":true},{"version":"b248e32ca52e8f5571390a4142558ae4f203ae2f94d5bac38a3084d529ef4e58","affectsGlobalScope":true},{"version":"6c55633c733c8378db65ac3da7a767c3cf2cf3057f0565a9124a16a3a2019e87","affectsGlobalScope":true},{"version":"fb4416144c1bf0323ccbc9afb0ab289c07312214e8820ad17d709498c865a3fe","affectsGlobalScope":true},{"version":"5b0ca94ec819d68d33da516306c15297acec88efeb0ae9e2b39f71dbd9685ef7","affectsGlobalScope":true},{"version":"34c839eaaa6d78c8674ae2c37af2236dee6831b13db7b4ef4df3ec889a04d4f2","affectsGlobalScope":true},{"version":"34478567f8a80171f88f2f30808beb7da15eac0538ae91282dd33dce928d98ed","affectsGlobalScope":true},{"version":"ab7d58e6161a550ff92e5aff755dc37fe896245348332cd5f1e1203479fe0ed1","affectsGlobalScope":true},{"version":"6bda95ea27a59a276e46043b7065b55bd4b316c25e70e29b572958fa77565d43","affectsGlobalScope":true},{"version":"aedb8de1abb2ff1095c153854a6df7deae4a5709c37297f9d6e9948b6806fa66","affectsGlobalScope":true},{"version":"a4da0551fd39b90ca7ce5f68fb55d4dc0c1396d589b612e1902f68ee090aaada","affectsGlobalScope":true},{"version":"11ffe3c281f375fff9ffdde8bbec7669b4dd671905509079f866f2354a788064","affectsGlobalScope":true},{"version":"52d1bb7ab7a3306fd0375c8bff560feed26ed676a5b0457fa8027b563aecb9a4","affectsGlobalScope":true},"0990a7576222f248f0a3b888adcb7389f957928ce2afb1cd5128169086ff4d29",{"version":"bbdf156fea2fabed31a569445835aeedcc33643d404fcbaa54541f06c109df3f","affectsGlobalScope":true},"4c68749a564a6facdf675416d75789ee5a557afda8960e0803cf6711fa569288","6a386ff939f180ae8ef064699d8b7b6e62bc2731a62d7fbf5e02589383838dea","f5a8b384f182b3851cec3596ccc96cb7464f8d3469f48c74bf2befb782a19de5",{"version":"5917af4ff931b050dba49a1dedd9c00f15f7b3dc4345ad8491bfacd2ec68ed32","affectsGlobalScope":true},"cc69795d9954ee4ad57545b10c7bf1a7260d990231b1685c147ea71a6faa265c","8bc6c94ff4f2af1f4023b7bb2379b08d3d7dd80c698c9f0b07431ea16101f05f","1b61d259de5350f8b1e5db06290d31eaebebc6baafd5f79d314b5af9256d7153","57194e1f007f3f2cbef26fa299d4c6b21f4623a2eddc63dfeef79e38e187a36e","0f6666b58e9276ac3a38fdc80993d19208442d6027ab885580d93aec76b4ef00","05fd364b8ef02fb1e174fbac8b825bdb1e5a36a016997c8e421f5fab0a6da0a0","0cba3a5d7b81356222594442753cf90dd2892e5ccfe1d262aaca6896ba6c1380","a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a",{"version":"c2ab70bbc7a24c42a790890739dd8a0ba9d2e15038b40dff8163a97a5d148c00","affectsGlobalScope":true},"422dbb183fdced59425ca072c8bd09efaa77ce4e2ab928ec0d8a1ce062d2a45a",{"version":"2a801b0322994c3dd7f0ef30265d19b3dd3bae6d793596879166ed6219c3da68","affectsGlobalScope":true},"1dab5ab6bcf11de47ab9db295df8c4f1d92ffa750e8f095e88c71ce4c3299628","f71f46ccd5a90566f0a37b25b23bc4684381ab2180bdf6733f4e6624474e1894",{"version":"54e65985a3ee3cec182e6a555e20974ea936fc8b8d1738c14e8ed8a42bd921d4","affectsGlobalScope":true},"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","bcc8caf03ee65fe8610d258752f255fbdddbb2e4de7b6c5628956a5a0d859ec8","34e5de87d983bc6aefef8b17658556e3157003e8d9555d3cb098c6bef0b5fbc8","cc0b61316c4f37393f1f9595e93b673f4184e9d07f4c127165a490ec4a928668","f27371653aded82b2b160f7a7033fb4a5b1534b6f6081ef7be1468f0f15327d3","c762cd6754b13a461c54b59d0ae0ab7aeef3c292c6cf889873f786ee4d8e75c9","f4ea7d5df644785bd9fbf419930cbaec118f0d8b4160037d2339b8e23c059e79",{"version":"bfea28e6162ed21a0aeed181b623dcf250aa79abf49e24a6b7e012655af36d81","affectsGlobalScope":true},"7a5459efa09ea82088234e6533a203d528c594b01787fb90fba148885a36e8b6","ae97e20f2e10dbeec193d6a2f9cd9a367a1e293e7d6b33b68bacea166afd7792","10d4796a130577d57003a77b95d8723530bbec84718e364aa2129fa8ffba0378","ad41bb744149e92adb06eb953da195115620a3f2ad48e7d3ae04d10762dae197","bf73c576885408d4a176f44a9035d798827cc5020d58284cb18d7573430d9022","7ae078ca42a670445ae0c6a97c029cb83d143d62abd1730efb33f68f0b2c0e82",{"version":"e8b18c6385ff784228a6f369694fcf1a6b475355ba89090a88de13587a9391d5","affectsGlobalScope":true},"5d0a9ea09d990b5788f867f1c79d4878f86f7384cb7dab38eecbf22f9efd063d","12eea70b5e11e924bb0543aea5eadc16ced318aa26001b453b0d561c2fd0bd1e","08777cd9318d294646b121838574e1dd7acbb22c21a03df84e1f2c87b1ad47f2","08a90bcdc717df3d50a2ce178d966a8c353fd23e5c392fd3594a6e39d9bb6304",{"version":"8207e7e6db9aa5fc7e61c8f17ba74cf9c115d26f51f91ee93f790815a7ea9dfb","affectsGlobalScope":true},"2a12d2da5ac4c4979401a3f6eaafa874747a37c365e4bc18aa2b171ae134d21b","002b837927b53f3714308ecd96f72ee8a053b8aeb28213d8ec6de23ed1608b66","1dc9c847473bb47279e398b22c740c83ea37a5c88bf66629666e3cf4c5b9f99c","a9e4a5a24bf2c44de4c98274975a1a705a0abbaad04df3557c2d3cd8b1727949","00fa7ce8bc8acc560dc341bbfdf37840a8c59e6a67c9bfa3fa5f36254df35db2","1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff",{"version":"806ef4cac3b3d9fa4a48d849c8e084d7c72fcd7b16d76e06049a9ed742ff79c0","affectsGlobalScope":true},"cfe724f7c694aab65a9bdd1acb05997848c504548c9d4c71645c187a091cfa2a","5f0ed51db151c2cdc4fa3bb0f44ce6066912ad001b607a34e65a96c52eb76248",{"version":"3345c276cab0e76dda86c0fb79104ff915a4580ba0f3e440870e183b1baec476","affectsGlobalScope":true},"664d8f2d59164f2e08c543981453893bc7e003e4dfd29651ce09db13e9457980","e383ff72aabf294913f8c346f5da1445ae6ad525836d28efd52cbadc01a361a6","f52fbf64c7e480271a9096763c4882d356b05cab05bf56a64e68a95313cd2ce2","59bdb65f28d7ce52ccfc906e9aaf422f8b8534b2d21c32a27d7819be5ad81df7","1835259a20b9fa6b1882931375b69ae5978195f2b139b4e0db51ec8319261649","28a2e7383fd898c386ffdcacedf0ec0845e5d1a86b5a43f25b86bc315f556b79","3aff9c8c36192e46a84afe7b926136d520487155154ab9ba982a8b544ea8fc95","a880cf8d85af2e4189c709b0fea613741649c0e40fffb4360ec70762563d5de0","85bbf436a15bbeda4db888be3062d47f99c66fd05d7c50f0f6473a9151b6a070","9f9c49c95ecd25e0cb2587751925976cf64fd184714cb11e213749c80cf0f927","f0c75c08a71f9212c93a719a25fb0320d53f2e50ca89a812640e08f8ad8c408c",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"0b3eba6dca8c6e534d16ef7b7d76cb546cd3cbab616c8f71daa0a151b5412b9e","30a1b56068b3820c91a055425a6af2294f8ef2bb10a59dcda413f6437093620d","e4dd91dd4789a109aab51d8a0569a282369fcda9ba6f2b2297bc61bacfb1a042","db6d2d9daad8a6d83f281af12ce4355a20b9a3e71b82b9f57cddcca0a8964a96","5d97586646b92d2c7d8013e7078d7e06662db89d1155d2903e7ef893665dbd16","625e5d5e9e25017d53e65c62ff944d812d48ec1bbaaf7395c8f8cdf6c9218061","f307044185ce95a12cd54318863a9c56ed9271a4fc45df9e0c4d47db4285c3c2","39a3fc61a65aee8c90cd81bb2c9b508be6c5cc745cd40eaed95954a07c11bb82","6ceac05c32f579adbed2f1a9c98cd297de3c00a3caaffc423385d00e82bce4ce","973b59a17aaa817eb205baf6c132b83475a5c0a44e8294a472af7793b1817e89","ada39cbb2748ab2873b7835c90c8d4620723aedf323550e8489f08220e477c7f","fa5bbc7ab4130dd8cdc55ea294ec39f76f2bc507a0f75f4f873e38631a836ca7","f7c024ce0f73f3a0e56f35826bed34dd9743ad7daa19068acca653dd7d45f010","0b8c260ba3dce2d948222ddb53abb6d2de7692cca77ee8433507b0de0b8ff98d","d0a911a97b9eaf51bb8307ad2399e795790bb4fe2b247d7574bd5479fb5bd87e","43612765af269faa0548381af60886fdd78c507412bbcb3b676ba986b2e90bba","efc234c21b905df4553132cc604830f2aab1c0e492a6f7de5c0ea7fb22fbc2c1","c10a063aa725e3279752833d3661d6c5403b3dcddf339e82ac5aa36f104abc0d","8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","99549a6392ef52a5a1c5e8a9d3a449d9a518d25af22e5a4c31bdd11b61ded010","741c438ec079a077b08d37d9c0466924b68e98ed47224e83fcb125c5863eb355","649d4c4855a24d8f7cbe4977a0733c405b8ab00f87774359987e4648d0d9da1e","98435f5eaadf367fa5b29e886f6265456219dbbb05e075d135aa5938f7ffc46d","1b82026434e469addbcb287a1f2c6e81eab7e9c461714543ea37715763f45ef8","3fcd21b8633fd84dc57ba6e4a17d13f68946fb1702e1e68ca5b6412dcaa20275","9e588ebf03931ac4de811943fdecf605bea04e2060fafae0bf4529a4c9351607","403f280e4101791df0e67aaf1f52c23391390a9535aa597df533e6fe74c2bb75","aed65bf7421ea3b799066d0560878aa28f6728bd648a2cd33859eca4c1b8e3ac","ca1b882a105a1972f82cc58e3be491e7d750a1eb074ffd13b198269f57ed9e1b","c56cba491c0f32b78198af0ac7471c1cceca57db4e0a2c23c0b2659063bfae53","737d402374f91fad8f0928daf76e9ee9fd5912aeb35b351e44eb7ecea2dcb87c","fc7214ff37161bf1e89c52b11fc7dddceccab809e36ea0ee26353c7502b0b27b","58902668adae2e5eb67efbccb4048afa02308fa684f1a4e4c7d47668ecf58c1b","3d365237792d79384c1315ad7fba7505b4355ba88d2032349ab437bf7b22e2e8","ee9461f976caf518f336892f101a85109686d1fcfecee8d9079b81e9c68dc86e","e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","c3624afffa46c8cd4c775a9578a627277e9b06cddfbc3fdb14cc0f4673f45ae7","cace786bf8078d7cb640d94f97c2f47e5c4f979c6a2e3c9168e54a0d79a6ac0a","17937316a2f7f362dd6375251a9ce9e4960cfdc0aa7ba6cbd00656f7ab92334b","575bc12d93a33c09e803375cd99a77f50c9272d01abe26d5de27af637c7427a3","7d7ce795ac82a239ce89b7088e6fcf8a406b1ebb6c4ff75ae3970beafba35585","e01ed711d76cfe84c7d099d75306323fa1ebc27ce02a742fab271e82a1da4dee","7d1b37284c9a4c58e2954aa21485d37881b5ab25937b29ebfb63c4d37fc3ae3d","1efe66d15fb19a2e8f3aff712fdfd1b9f7b19e7c3603ee188b13a9572ff9a7d8","f0e480e327dd94c30c7003c7ca188b401ab451396f40e4ec5ae2f9b3a944a7be","2a130020150086164f429b0ba507ad66a729f2cbaee14ed4348fdb2504bdd49e","6e5f5cee603d67ee1ba6120815497909b73399842254fc1e77a0d5cdc51d8c9c","f6404e7837b96da3ea4d38c4f1a3812c96c9dcdf264e93d5bdb199f983a3ef4b","4a3fb0f285c6bd13500366e3023d90b40bd2fbafcfe6e1ffaa8e6ab62bba4907","3cd0346fc79e262233785d9fe2cbad08fc3fe6339af3419791687152ddfe5596","9f3c4349b19905df8e6977106894cb01cbb5ebd6f2a8da64bddaae8b1b3e1c04","2652448ac55a2010a1f71dd141f828b682298d39728f9871e1cdf8696ef443fd","1e7fb60ac7ae5365d12ec98b3efbcb9130c400ad3ccc07f2db6f26ff24d62ccf","0aef0a60e229dfeff49f68bf941d24b8338fc3d55aa7c64b1c9acbf9d3a67b46","c4277bc74428f8b8c3ffb5a3bc6684d6bda2ce66e7428e4a99df7ebaedf0f708","5b2e8cec02a40770a0c3f953d78dce6632f345638f85af4b24fd16fcfbaf0019","d23518a5f155f1a3e07214baf0295687507122ae2e6e9bd5e772551ebd4b3157","53a99fb41040b64c6bc8aa5b231547439d205e61f7f022a43a6a1da65657cbf6","3a083cc0c3bd0346304a0de0568a2cec000bed4cd7885bab3be70bfecef50e96","c8556b8716fc69ab436b340f8a5171d56cf9f03b3017f345fda4876174608080","c2299e6708a155e6c156ef9e92c83e074dbd32611fd84d6b07648d34cd35209a","fb480794b12bbe2cdce8a9e6759e3045208765278f248c6a6135c6993aa9683f","b0423e07b18195c4a276f95b30b464ee0816dc5e4fc59c262f60afe189930516","8317f1d2e04f181eca793161466a31d3082d3af6eb6516ba1fead9fe66037431","3ca193730b6d9fbb08cee1241b648297527dfa64a86853f7a1384e9943d76726","88961917ec908f9fde57b86b8038b8b30766ba14cfdcc214c7c5498d7c9f7924","6d8e12183e7baed15513970482d9cca86954bb7dfaef8ca862718ca144aadb3b","45e5c75f8ddf51eff85961cf1912a9a745809957f8b57a0a7d859e20b19ae260","5279f50f5711aaad3894a016eb905fa50d75bcba30bd652f8be73ab5f3037a73","1366638c25b6ce477f6394c584cc0e2364ff72ffaeec3ceb7dde1c7b939fade9","e927c2c13c4eaf0a7f17e6022eee8519eb29ef42c4c13a31e81a611ab8c95577","1822b69406252b606dc1aec3231a7104ac1d456cfa2c0a9041e61061895ae348","0d05309199fe921b0b7dc131104f5dd2957a024072781a8393ea5357c8ce9a49","c1ac179620434b59c1569f2964a5c7354037ac91a212a1fb281673589965c893","9f891dc96f3e9343c4e823ba28195fd77e59c84199696a8bdfe7b67925732409","63f50c44294385846e5deed7d9d056b3b3bad04ebaa63e1fdca149e1627f5d40","7a5df736ff13c4981f10fe29ab73e61a6c3f8e4cfc30224e73566725b601d802","98b94a34fe1138e1d59d138dbf0d7b19592d6540393a1b4653d4ad7271d2f64d","b9de430616a42e94268dc62720d46bc80e04350efed18fc04be7a12974cfb84d","2c6f043430f24bde409ed1e70d197b3ef70607cd656817bfd6cf02e630bb7a39","495a5da35b04cd142d1301921ce8776c3bd8eab85bbf0ea694e631bc5cd35338","9d20a77883a17070169ea0f80ba2cd27575df30510f5bf4d6d292b3ea547f681","b0967cf27e8a3c05a82ca58cc96bb2e1443b03d400d5b19b85735cac81adb2ca","5cab8fa167ee711e4dfcd22ed632c60be36bd49dc6eea8cfdd3613c59d00c43d","6176b9f450623c979d65630c243971e4348b39f9c2b3052f4b1b2f2d558c13c7","06bcd1f53ae68951411b1649b45fdea22d87db52d2dbeeb8b0af44d47a186c3f","b65c4ff9cd4815c5f1855e8702740c8bbb4921140e3c415c5affe3e376e322dc","69b1a4767d6249cc8fa88110fbcee746684f9159c7c9d4f14f6ea3bf11ab8bd5","be90dde0efc4ce2544606fa5bd2cf15660f43175f49daae067c53a16d7cbf024","15e84dd6d50ef02f936e7bf8f32f71e7469d486df900955e6f8c152266e4b801","0efea28e99af48ea75df7cccb178ba8030aad78fdf04c884bde983a95b5b4545",{"version":"1fe4972a8ec31134aec90e9dba4073616d21464820c780774e156fa7ccb32bf7","affectsGlobalScope":true},"c31eabb9cbf9582fb62ceccaaae17d03768ec31b1dda9b9b258ee999500ce1ca","070187a9132cd795f971a1c22b75000c0a73bbdfc49c8d3091e763df8c80b002","2766dee26ea113e9b491b7842cb44df57c4d79b17057b42607e09fc174bd411d","cb4047ce260c2f4585b2d592d04a1d9a9c2a1ba32679a688523ec314a977989a","0511c61c22d677da1b6bab4d3844aead1d7e27028d2f0ed1ed315e0860ed5357",{"version":"b4610d904ab939109aa8bcee6f795de8da780b6b4a4d8ff2ff9d2e3b699f55b7","affectsGlobalScope":true},{"version":"6707b2ff066e782f676f90ba7abfca7d6f321eececbbecf3d42eebb7a8c28da2","affectsGlobalScope":true},"b87389fa915955221ff512128d9bad0b60fa922b6b29a358c032b3c5a1754ebd","7f9daeb92677b8461e7d64e05cb7a4fadcc4f1df15352fc41a7e9493fa9ae7ff","2ebe37d9476d15f0541dd5d79267db6e30d6491ed349254ee68a0de25620c577","2d3c25f508407607500045c74c69b5b6abe74838807f4dc2ef5c4bbf1cc642e6",{"version":"3cf72817794f1152e41b704c8f6072c099f0e676bcd704a967901220873fec94","affectsGlobalScope":true},"8e0579532322778ab89c3c61228588e08093aa2d698dcff9be3215e0dbc70be7","49d1d55994ac37a756bd332aad59ef68d89ae15a2b79c3c343f8432c468e09bc","06dfd2ebf571b3df2cc23a70f031417eb77f7702f0ce727cec99a296242d6929","65c24a8baa2cca1de069a0ba9fba82a173690f52d7e2d0f1f7542d59d5eb4db0","b7fff2d004c5879cae335db8f954eb1d61242d9f2d28515e67902032723caeab","8303df69e9d100e3df8f2d67ec77348cb6494dc406356fdd9b56e61aa7c3c758","8de50542d92f9ac659c30ead0a97e9c107dd3404a3b4fd4bf3504589a026221a","4545c1a1ceca170d5d83452dd7c4994644c35cf676a671412601689d9a62da35","a80e3207332979fcd48223790af48f61192c1d348162adb7e4f30f23085dc0e1","a2d648d333cf67b9aeac5d81a1a379d563a8ffa91ddd61c6179f68de724260ff","c3a905a7fa93ca648349e934fb19356cf7b40e48d65658de3e0c77d67696fd40","a3f41ed1b4f2fc3049394b945a68ae4fdefd49fa1739c32f149d32c0545d67f5","c2489c80994d62e5b51370a6f02f537db4c37af5f914fcb5b2755b81f1906cae","47699512e6d8bebf7be488182427189f999affe3addc1c87c882d36b7f2d0b0e","da5f632f5f82f60322089dc4f73fde31ba4c51d599d920d1cad0eef686c71f7c","42c686ce08bf5576ed178f4a6a62d1b580d941334fb53bdff7054e0980f2dc75","605b66155b4f222c5f5a48bf19224815e4bceb2966dfb1c5704692ed07e5fa0a","cdf21eee8007e339b1b9945abf4a7b44930b1d695cc528459e68a3adc39a622e","1d079c37fa53e3c21ed3fa214a27507bda9991f2a41458705b19ed8c2b61173d","26a451bf3a5f87ebaaa7694c5b664c3d9cec296f3fa8b797b872aee0f302b3a0","5835a6e0d7cd2738e56b671af0e561e7c1b4fb77751383672f4b009f4e161d70","c0eeaaa67c85c3bb6c52b629ebbfd3b2292dc67e8c0ffda2fc6cd2f78dc471e6","4b7f74b772140395e7af67c4841be1ab867c11b3b82a51b1aeb692822b76c872","25c4bd23e828e865868722c7a1d01876ed891ddfbd92cb6f006e747f56eee0c9","c2008605e78208cfa9cd70bd29856b72dda7ad89df5dc895920f8e10bcb9cd0a","ec61ebac4d71c4698318673efbb5c481a6c4d374da8d285f6557541a5bd318d0","10ec84e648ffc7654868ca02c21a851bc211c8e4d50fd68131c1afa9afd96a33","b5934ca186f498c83e9a663d3df019d82290303fd86b1658cf27cf892b50aaf9",{"version":"90c89a318a59d6b3decbc0bc476210548eba1c3668037058b0a6e6cc363d47dd","affectsGlobalScope":true},{"version":"57ad3ef8cd87e876021acbcabcc6457f21a721cb0c5388de700bd57ea32030c1","affectsGlobalScope":true},"9c00f78ac4e60d1c34d0fb415df6b2fea5f6eea200076dff4d782256a4c2802d","79d056984a8964d3917c7587067447d7565d9da696fcf6ecaa5e8437a214f04e","9269d492817e359123ac64c8205e5d05dab63d71a3a7a229e68b5d9a0e8150bf","2bf8d68be6cfc43093d8e9961a77958ba6a406b2af4fbc04ae5c301fad5aef55","807535f4e95ebccc1eae3d675289b1be5c23e6aaa6fd624f2be485e3e1e6f23d","1d1872677306b44559ce09926b9eab6a34507d5f5dd465324d94f34cf7a36872","1e00b8bf9e3766c958218cd6144ffe08418286f89ff44ba5a2cc830c03dd22c7","f3c253f3833841eb9dd65d6b99a2f357debfdeef5f85c85c291a465bbf03bc6b","7a129438cedf12b5f1b5f773a3e96242b7569c95243432dcf12618f80fca5cdc","0165115e3c8788801fb59e9c3cca0c7ba573515a8b7ce010c7d75deba92b455f","0e000fd63bd08abc96dbd4746c371b8a0368f351629590ee7ba12c9787cdc8e6","463ed32d194c6bd58c35083d76af0170ad1b04f7b3ef91c9803593bd089c2864","84936ce43e5e01db3ee57c205d244181d85cd0e1fadbc6e1f94b3d9bd9a3aae5","802417aed26cb50faf8b7176fa00279bdb5acbb53bf4a63ae00d47d25d904516","bc1899efe6dcdce9c9c8bd9ce97d58b197facb7f4a516e5d13a804fa5f77cf4f","4d080c54c10ec25e6e84337dbaff7953066150baf94fd48db6c70a37cdd43a8a","3ad4660add51c3c3adf49524d61cc1e3ed57e16274c62c6cfb047b64aab973aa","22f25ec27fa1c1ca03010aa71b8077c742ab5bf6a08a44663a287a296be34481","74ac2c0b3fa70bb0cf47f80fabc73f6b868ba177ced233e294068fc099cf5a06","7c8c3dfc0cdd370d44932828eb067ef771c8fe7996693221d5d4b90af6d54f2d","fce3be25a64ca64c47d90887b7055580ad97976c00d1e3b9bac188cc381f05a6","951a918a753179bf5c018065e3302c8e2d899600ac1e7e5dfc1c2d9867a643c5","842454d0222fa151b62f4f18c893335993829311367f4502270d449bd32c1b72","ca8d9484968d464e3779ac344132494f8a41084d74ece61e5b19ec86e73bb0ad","894711d8c2e76012cc3258ab90fc6339b19a792349f94c16e1b4801709e0eb94","dc45760b1f08ebb5d24b69ddc2ea2a42b724e17c643cd73ef52128d992a62cc9","94caf997b590e006b84f927275ddddfb84bbf8539535b0888bd83eea867e88c4","ae0d70b4f8a3a43cb0a5a89859aca3611f2789a3bca6a387f9deab912b7605b0","966b0f7789547bb149ad553f5a8c0d7b4406eceac50991aaad8a12643f3aec71","8063cff815975c1dceb2f9cdba3cffa6afd97b084d71acc0264b7af00ef31d76","d78bd0f8ac7d8de2d80a0ca8818216f4f7d94abfea6c7f3a2581252ba110938d","3dbad0bac309b341e0f1a930e0a163b1bd041f5375975a0f9ecca9b4783ad8f0","de749e7f86ee33a1874c595c605a45746138ef46b7d35b1699043abb01f1e7c3","f7ff7b1534fec1cc87e8063745cb140dcfe2014c5e559994093d986b93274f69","29f43c6639fe1f2302cbc29a4362f15bb40fe1e5e88fb9d7cdf1e2ccb8102826","fa70bdc67035c981fcb92927c0964016a5d731937b51767e12b596dc53c2471d"],"options":{"esModuleInterop":true,"jsx":1,"module":99,"skipLibCheck":true,"strict":false,"strictNullChecks":true},"fileIdsList":[[112],[69,112],[72,112],[73,78,112],[74,84,85,92,101,111,112],[74,75,84,92,112],[76,112],[77,78,85,93,112],[78,101,108,112],[79,81,84,92,112],[80,112],[81,82,112],[83,84,112],[84,112],[84,85,86,101,111,112],[84,85,86,101,112],[87,92,101,111,112],[84,85,87,88,92,101,108,111,112],[87,89,101,108,111,112],[69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118],[84,90,112],[91,111,112],[81,84,92,101,112],[93,112],[94,112],[72,95,112],[96,110,112,116],[97,112],[98,112],[84,99,112],[99,100,112,114],[84,101,102,103,112],[101,103,112],[101,102,112],[104,112],[105,112],[84,106,107,112],[106,107,112],[78,92,101,108,112],[109,112],[92,110,112],[73,87,98,111,112],[78,112],[101,112,113],[112,114],[112,115],[73,78,84,86,95,101,111,112,114,116],[101,112,117],[62,112],[58,59,60,61,112],[112,276],[62,112,282],[67,112],[112,227],[112,229],[112,124,134,146,212],[112,136],[98,112,119,120,124,134,147,173,174,175,178,212],[112,122,145],[112,122],[112,122,145,146],[112,180,181,212],[72,112,119,180,181,212],[72,112,119,175],[62,112,125],[62,111,112,119],[62,112,145,218],[62,112,145],[112,216,224],[62,112,217,226],[112,259],[62,101,112,119,250],[62,66,87,112,119,212,248,249],[112,123],[112,205,206,207,208,209,210],[112,207],[62,112,213,226],[62,112,226],[87,112,119,135,226],[72,112,119],[112,175,176,186],[87,112,119,134,136],[87,101,112,119,133,135,136,212],[87,98,111,112,119,123,124,125,129,133,134,135,136,142,143,144,145,148,157,158,160,162,163,164,165,166,168,170,175,190,192,212],[87,101,112,119],[112,122,124,125,126,133,212,226],[112,134],[98,111,112,119,124,129,132,133,134,135,136,142,143,144,155,158,161,164,167,175,190,193,199,201,202],[112,134,175],[112,133,134],[112,142,191],[112,130,131],[112,130,194],[112,130],[112,132,135,171,189],[112,130,131,132,140,141,143],[112,130,131,132,140,143,200],[112,132,141,142],[112,140],[112,129,131,132],[112,132,195],[112,129,131],[112,129,134,152,172,179,185,187,188],[112,129,131,152,176,177,182,183,184],[87,111,112,119,125,133,134,170],[112,157,170,226],[112,176,177],[112,120,163,212,226],[87,98,111,112,119,124,129,133,135,137,139,144,147,148,155,157,158,160,161,162,166,167,170,175,193,196,197,198,226],[87,112,119,133,199,203],[62,87,98,112,119,123,125,133,136,148,162,163,164,165,212],[87,98,111,112,119,127,132,135],[112,169],[87,112,119,148],[98,112,119,123,124,129,133,135,142,143],[87,112,119,148,159],[87,112,119,135,160],[87,112,119,134,142],[87,112,119],[112,151],[112,150],[112,152],[112,251],[112,134,149,151,155],[112,134,149,151],[87,112,119,127,134,152,153,154],[112,220],[112,220,221,222],[62,112,120,162,165,212,226],[62,98,111,112,119,123,215,217,219,223,226],[112,129,135,145],[98,112,119],[112,128],[62,87,98,112,119,123,212,213,214,224,225],[57,62,63,64,65,112,212,250],[112,231],[112,233],[112,235],[112,260],[112,237],[112,239],[66,68,112,212,228,230,232,234,236,238,240,242,243,245,253,254],[112,241],[112,217],[112,244],[72,112,152,153,154,155,246,247,252],[112,119],[62,66,87,98,112,119,121,123,136,204,211,226,250],[112,264,265,266,267,268,269,270,271,272],[112,264,267],[112,266,267],[112,267],[112,264],[112,255,258,262,274,285,286,287],[112,242,258,278],[112,279],[112,285],[62,112,242,258,274,275,280],[112,242,258,278,280,281,284],[62,112,282,283],[62,112,278,280,283],[62,112,274,277],[112,261],[112,263,273],[112,255,256]],"referencedMap":[[214,1],[69,2],[70,2],[72,3],[73,4],[74,5],[75,6],[76,7],[77,8],[78,9],[79,10],[80,11],[81,12],[82,12],[83,13],[84,14],[85,15],[86,16],[71,1],[118,1],[87,17],[88,18],[89,19],[119,20],[90,21],[91,22],[92,23],[93,24],[94,25],[95,26],[96,27],[97,28],[98,29],[99,30],[100,31],[101,32],[103,33],[102,34],[104,35],[105,36],[106,37],[107,38],[108,39],[109,40],[110,41],[111,42],[112,43],[113,44],[114,45],[115,46],[116,47],[117,48],[60,1],[121,49],[58,1],[62,50],[61,1],[277,51],[276,1],[263,1],[59,1],[279,49],[283,52],[282,49],[68,53],[228,54],[230,55],[145,56],[157,57],[179,58],[146,59],[173,1],[163,60],[147,61],[165,60],[158,60],[126,60],[183,62],[177,1],[182,63],[176,64],[184,1],[239,65],[241,66],[219,67],[218,68],[217,69],[244,49],[216,70],[150,1],[247,1],[260,71],[259,1],[249,1],[251,72],[248,49],[250,73],[122,1],[174,1],[124,74],[205,1],[206,1],[208,1],[211,75],[207,1],[209,76],[210,76],[156,1],[227,70],[231,77],[235,78],[136,79],[186,80],[187,81],[135,82],[161,83],[193,84],[127,85],[134,86],[123,87],[203,88],[202,89],[162,1],[142,90],[171,1],[192,91],[191,1],[172,92],[194,92],[195,93],[131,94],[190,95],[130,1],[200,96],[201,97],[143,98],[141,99],[140,100],[196,101],[132,102],[189,103],[185,104],[120,1],[198,105],[137,1],[175,106],[178,107],[197,1],[164,108],[199,109],[204,110],[138,1],[139,1],[148,85],[166,111],[133,112],[170,113],[169,114],[144,115],[160,116],[159,117],[188,1],[149,118],[180,119],[181,120],[151,121],[153,122],[252,123],[152,124],[154,125],[246,1],[155,126],[67,1],[221,127],[222,1],[220,1],[223,128],[225,1],[233,49],[237,49],[213,129],[125,1],[215,1],[224,130],[168,131],[167,132],[129,133],[128,1],[229,1],[226,134],[57,1],[66,135],[63,49],[64,1],[65,1],[232,136],[234,137],[236,138],[261,139],[238,140],[256,141],[240,141],[255,142],[242,143],[243,144],[245,145],[253,146],[254,147],[212,148],[273,149],[270,150],[268,151],[269,150],[272,152],[271,152],[264,1],[265,153],[267,1],[266,1],[11,1],[12,1],[14,1],[13,1],[2,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[22,1],[3,1],[4,1],[26,1],[23,1],[24,1],[25,1],[27,1],[28,1],[29,1],[5,1],[30,1],[31,1],[32,1],[33,1],[6,1],[37,1],[34,1],[35,1],[36,1],[38,1],[7,1],[39,1],[44,1],[45,1],[40,1],[41,1],[42,1],[43,1],[8,1],[49,1],[46,1],[47,1],[48,1],[50,1],[9,1],[51,1],[52,1],[53,1],[54,1],[55,1],[1,1],[10,1],[56,1],[288,154],[289,155],[280,156],[290,157],[281,158],[285,159],[286,1],[287,160],[284,161],[278,162],[258,1],[262,163],[274,164],[257,165],[275,1]],"exportedModulesMap":[[214,1],[69,2],[70,2],[72,3],[73,4],[74,5],[75,6],[76,7],[77,8],[78,9],[79,10],[80,11],[81,12],[82,12],[83,13],[84,14],[85,15],[86,16],[71,1],[118,1],[87,17],[88,18],[89,19],[119,20],[90,21],[91,22],[92,23],[93,24],[94,25],[95,26],[96,27],[97,28],[98,29],[99,30],[100,31],[101,32],[103,33],[102,34],[104,35],[105,36],[106,37],[107,38],[108,39],[109,40],[110,41],[111,42],[112,43],[113,44],[114,45],[115,46],[116,47],[117,48],[60,1],[121,49],[58,1],[62,50],[61,1],[277,51],[276,1],[263,1],[59,1],[279,49],[283,52],[282,49],[68,53],[228,54],[230,55],[145,56],[157,57],[179,58],[146,59],[173,1],[163,60],[147,61],[165,60],[158,60],[126,60],[183,62],[177,1],[182,63],[176,64],[184,1],[239,65],[241,66],[219,67],[218,68],[217,69],[244,49],[216,70],[150,1],[247,1],[260,71],[259,1],[249,1],[251,72],[248,49],[250,73],[122,1],[174,1],[124,74],[205,1],[206,1],[208,1],[211,75],[207,1],[209,76],[210,76],[156,1],[227,70],[231,77],[235,78],[136,79],[186,80],[187,81],[135,82],[161,83],[193,84],[127,85],[134,86],[123,87],[203,88],[202,89],[162,1],[142,90],[171,1],[192,91],[191,1],[172,92],[194,92],[195,93],[131,94],[190,95],[130,1],[200,96],[201,97],[143,98],[141,99],[140,100],[196,101],[132,102],[189,103],[185,104],[120,1],[198,105],[137,1],[175,106],[178,107],[197,1],[164,108],[199,109],[204,110],[138,1],[139,1],[148,85],[166,111],[133,112],[170,113],[169,114],[144,115],[160,116],[159,117],[188,1],[149,118],[180,119],[181,120],[151,121],[153,122],[252,123],[152,124],[154,125],[246,1],[155,126],[67,1],[221,127],[222,1],[220,1],[223,128],[225,1],[233,49],[237,49],[213,129],[125,1],[215,1],[224,130],[168,131],[167,132],[129,133],[128,1],[229,1],[226,134],[57,1],[66,135],[63,49],[64,1],[65,1],[232,136],[234,137],[236,138],[261,139],[238,140],[256,141],[240,141],[255,142],[242,143],[243,144],[245,145],[253,146],[254,147],[212,148],[273,149],[270,150],[268,151],[269,150],[272,152],[271,152],[264,1],[265,153],[267,1],[266,1],[11,1],[12,1],[14,1],[13,1],[2,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[22,1],[3,1],[4,1],[26,1],[23,1],[24,1],[25,1],[27,1],[28,1],[29,1],[5,1],[30,1],[31,1],[32,1],[33,1],[6,1],[37,1],[34,1],[35,1],[36,1],[38,1],[7,1],[39,1],[44,1],[45,1],[40,1],[41,1],[42,1],[43,1],[8,1],[49,1],[46,1],[47,1],[48,1],[50,1],[9,1],[51,1],[52,1],[53,1],[54,1],[55,1],[1,1],[10,1],[56,1],[288,154],[289,155],[280,156],[290,157],[281,158],[285,159],[286,1],[287,160],[284,161],[278,162],[258,1],[262,163],[274,164],[257,165],[275,1]],"semanticDiagnosticsPerFile":[214,69,70,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,71,118,87,88,89,119,90,91,92,93,94,95,96,97,98,99,100,101,103,102,104,105,106,107,108,109,110,111,112,113,114,115,116,117,60,121,58,62,61,277,276,263,59,279,283,282,68,228,230,145,157,179,146,173,163,147,165,158,126,183,177,182,176,184,239,241,219,218,217,244,216,150,247,260,259,249,251,248,250,122,174,124,205,206,208,211,207,209,210,156,227,231,235,136,186,187,135,161,193,127,134,123,203,202,162,142,171,192,191,172,194,195,131,190,130,200,201,143,141,140,196,132,189,185,120,198,137,175,178,197,164,199,204,138,139,148,166,133,170,169,144,160,159,188,149,180,181,151,153,252,152,154,246,155,67,221,222,220,223,225,233,237,213,125,215,224,168,167,129,128,229,226,57,66,63,64,65,232,234,236,261,238,256,240,255,242,243,245,253,254,212,273,270,268,269,272,271,264,265,267,266,11,12,14,13,2,15,16,17,18,19,20,21,22,3,4,26,23,24,25,27,28,29,5,30,31,32,33,6,37,34,35,36,38,7,39,44,45,40,41,42,43,8,49,46,47,48,50,9,51,52,53,54,55,1,10,56,288,289,280,290,281,285,286,287,284,278,258,262,274,257,275],"affectedFilesPendingEmit":[[214,1],[69,1],[70,1],[72,1],[73,1],[74,1],[75,1],[76,1],[77,1],[78,1],[79,1],[80,1],[81,1],[82,1],[83,1],[84,1],[85,1],[86,1],[71,1],[118,1],[87,1],[88,1],[89,1],[119,1],[90,1],[91,1],[92,1],[93,1],[94,1],[95,1],[96,1],[97,1],[98,1],[99,1],[100,1],[101,1],[103,1],[102,1],[104,1],[105,1],[106,1],[107,1],[108,1],[109,1],[110,1],[111,1],[112,1],[113,1],[114,1],[115,1],[116,1],[117,1],[60,1],[121,1],[58,1],[62,1],[61,1],[277,1],[276,1],[263,1],[59,1],[279,1],[283,1],[282,1],[68,1],[228,1],[230,1],[145,1],[157,1],[179,1],[146,1],[173,1],[163,1],[147,1],[165,1],[158,1],[126,1],[183,1],[177,1],[182,1],[176,1],[184,1],[239,1],[241,1],[219,1],[218,1],[217,1],[244,1],[216,1],[150,1],[247,1],[260,1],[259,1],[249,1],[251,1],[248,1],[250,1],[122,1],[174,1],[124,1],[205,1],[206,1],[208,1],[211,1],[207,1],[209,1],[210,1],[156,1],[227,1],[231,1],[235,1],[136,1],[186,1],[187,1],[135,1],[161,1],[193,1],[127,1],[134,1],[123,1],[203,1],[202,1],[162,1],[142,1],[171,1],[192,1],[191,1],[172,1],[194,1],[195,1],[131,1],[190,1],[130,1],[200,1],[201,1],[143,1],[141,1],[140,1],[196,1],[132,1],[189,1],[185,1],[120,1],[198,1],[137,1],[175,1],[178,1],[197,1],[164,1],[199,1],[204,1],[138,1],[139,1],[148,1],[166,1],[133,1],[170,1],[169,1],[144,1],[160,1],[159,1],[188,1],[149,1],[180,1],[181,1],[151,1],[153,1],[252,1],[152,1],[154,1],[246,1],[155,1],[67,1],[221,1],[222,1],[220,1],[223,1],[225,1],[233,1],[237,1],[213,1],[125,1],[215,1],[224,1],[168,1],[167,1],[129,1],[128,1],[229,1],[226,1],[57,1],[66,1],[63,1],[64,1],[65,1],[232,1],[234,1],[236,1],[261,1],[238,1],[256,1],[240,1],[255,1],[242,1],[243,1],[245,1],[253,1],[254,1],[212,1],[273,1],[270,1],[268,1],[269,1],[272,1],[271,1],[264,1],[265,1],[267,1],[266,1],[2,1],[3,1],[4,1],[5,1],[6,1],[7,1],[8,1],[9,1],[10,1],[288,1],[289,1],[280,1],[290,1],[281,1],[285,1],[286,1],[287,1],[284,1],[278,1],[258,1],[262,1],[274,1],[257,1],[275,1]]},"version":"4.9.5"}
--------------------------------------------------------------------------------
/types/nav.ts:
--------------------------------------------------------------------------------
1 | export interface NavItem {
2 | title: string
3 | href?: string
4 | disabled?: boolean
5 | external?: boolean
6 | }
7 |
--------------------------------------------------------------------------------
/workers/gpt-3.5-turbo/gpt-3.5-turbo-heartbeat.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable import/no-anonymous-default-export */
2 |
3 | import { logResponseTimes, testOpenAIAPI } from "../utils"
4 |
5 | export interface Env {
6 | OPENAI_API_KEY: string
7 | DB_URL: string
8 | }
9 |
10 | const model = "gpt-3.5-turbo"
11 |
12 | export default {
13 | async scheduled(
14 | event: ScheduledEvent,
15 | env: Env,
16 | ctx: ExecutionContext
17 | ): Promise {
18 | console.log("Scheduled event called at", new Date(event.scheduledTime))
19 |
20 | const response = await testOpenAIAPI(env.OPENAI_API_KEY, model)
21 |
22 | if (
23 | response == undefined ||
24 | response.ttfb == undefined ||
25 | response.duration == undefined
26 | ) {
27 | return
28 | }
29 |
30 | // Log response time
31 | await logResponseTimes(
32 | env.DB_URL,
33 | model,
34 | new Date(event.scheduledTime),
35 | response.ttfb,
36 | response.duration
37 | )
38 | },
39 | }
40 |
--------------------------------------------------------------------------------
/workers/gpt-3.5-turbo/wrangler.toml:
--------------------------------------------------------------------------------
1 | name = "gpt-3-5-turbo-heartbeat"
2 | compatibility_date = "2023-05-26"
3 | node_compat = true
4 | usage_model = "unbound"
5 |
6 | [triggers]
7 | crons = ["*/5 * * * *"]
8 |
9 | [vars]
10 |
--------------------------------------------------------------------------------
/workers/gpt-4/gpt-4-heartbeat.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable import/no-anonymous-default-export */
2 |
3 | import { logResponseTimes, testOpenAIAPI } from "../utils"
4 |
5 | export interface Env {
6 | OPENAI_API_KEY: string
7 | DB_URL: string
8 | }
9 |
10 | const model = "gpt-4"
11 |
12 | export default {
13 | async scheduled(
14 | event: ScheduledEvent,
15 | env: Env,
16 | ctx: ExecutionContext
17 | ): Promise {
18 | console.log("Scheduled event called at", new Date(event.scheduledTime))
19 |
20 | const response = await testOpenAIAPI(env.OPENAI_API_KEY, model)
21 |
22 | if (
23 | response == undefined ||
24 | response.ttfb == undefined ||
25 | response.duration == undefined
26 | ) {
27 | return
28 | }
29 |
30 | // Log response time
31 | await logResponseTimes(
32 | env.DB_URL,
33 | model,
34 | new Date(event.scheduledTime),
35 | response.ttfb,
36 | response.duration
37 | )
38 | },
39 | }
40 |
--------------------------------------------------------------------------------
/workers/gpt-4/wrangler.toml:
--------------------------------------------------------------------------------
1 | name = "gpt-4-heartbeat"
2 | compatibility_date = "2023-05-26"
3 | node_compat = true
4 | usage_model = "unbound"
5 |
6 | [triggers]
7 | crons = ["*/5 * * * *"]
8 |
9 | [vars]
10 |
--------------------------------------------------------------------------------
/workers/text-davinci-003/text-davinci-003-heartbeat.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable import/no-anonymous-default-export */
2 |
3 | import { logResponseTimes, testOpenAIAPI } from "../utils"
4 |
5 | export interface Env {
6 | OPENAI_API_KEY: string
7 | DB_URL: string
8 | }
9 |
10 | const model = "text-davinci-003"
11 |
12 | export default {
13 | async scheduled(
14 | event: ScheduledEvent,
15 | env: Env,
16 | ctx: ExecutionContext
17 | ): Promise {
18 | console.log("Scheduled event called at", new Date(event.scheduledTime))
19 |
20 | const response = await testOpenAIAPI(env.OPENAI_API_KEY, model)
21 |
22 | if (
23 | response == undefined ||
24 | response.ttfb == undefined ||
25 | response.duration == undefined
26 | ) {
27 | return
28 | }
29 |
30 | // Log response time
31 | await logResponseTimes(
32 | env.DB_URL,
33 | model,
34 | new Date(event.scheduledTime),
35 | response.ttfb,
36 | response.duration
37 | )
38 | },
39 | }
40 |
--------------------------------------------------------------------------------
/workers/text-davinci-003/wrangler.toml:
--------------------------------------------------------------------------------
1 | name = "text-davinci-003-heartbeat"
2 | compatibility_date = "2023-05-26"
3 | node_compat = true
4 | usage_model = "unbound"
5 |
6 | [triggers]
7 | crons = ["*/5 * * * *"]
8 |
9 | [vars]
10 |
--------------------------------------------------------------------------------
/workers/utils.ts:
--------------------------------------------------------------------------------
1 | import { Client } from "pg"
2 |
3 | const max_tokens = 256
4 | const temperature = 1
5 |
6 | const chat_url = "https://api.openai.com/v1/chat/completions"
7 | const completions_url = "https://api.openai.com/v1/completions"
8 |
9 | export async function testOpenAIAPI(OPENAI_API_KEY: string, model: string) {
10 | // Create request
11 | const base = {
12 | model,
13 | temperature,
14 | max_tokens,
15 | stream: true,
16 | }
17 |
18 | let body
19 | let url
20 |
21 | if (model == "gpt-4" || model == "gpt-3.5-turbo") {
22 | url = chat_url
23 | body = JSON.stringify({
24 | ...base,
25 | messages: [
26 | {
27 | role: "system",
28 | content: "You are an expert in quantum mechanics & computing.",
29 | },
30 | {
31 | role: "user",
32 | content:
33 | "Can you please provide an extensive & in-depth overview of Quantum Cryptography, and the current research being done?",
34 | },
35 | ],
36 | })
37 | } else {
38 | url = completions_url
39 | body = JSON.stringify({
40 | ...base,
41 | prompt:
42 | "Can you please provide an extensive & in-depth overview of Quantum Cryptography, and the current research being done?",
43 | })
44 | }
45 |
46 | // Send request
47 | let generationAttempts = 0
48 | const maxGenerationAttempts = 3
49 | let finishReason = null
50 |
51 | let startDate
52 |
53 | let ttfb
54 | let duration
55 |
56 | while (generationAttempts < maxGenerationAttempts) {
57 | generationAttempts++
58 |
59 | startDate = Date.now()
60 |
61 | const response = await fetch(url, {
62 | method: "POST",
63 | headers: {
64 | "Content-Type": "application/json",
65 | Authorization: `Bearer ${OPENAI_API_KEY}`,
66 | },
67 | body,
68 | })
69 |
70 | // Handle response
71 | if (!response.ok) {
72 | console.log(
73 | `Unexpected response from OpenAI API: ${response.status} ${response.statusText}`
74 | )
75 | return
76 | }
77 |
78 | if (!response.body) {
79 | console.log("No response body")
80 | return
81 | }
82 |
83 | const reader = response.body.getReader()
84 | const decoder = new TextDecoder("utf-8")
85 |
86 | // Get first byte
87 | let chunk = await reader.read()
88 |
89 | // Log first byte time
90 | ttfb = Date.now() - startDate
91 |
92 | // Read the rest of the response
93 | let chunks = []
94 | while (!chunk.done) {
95 | chunks.push(decoder.decode(chunk.value, { stream: true }))
96 | chunk = await reader.read()
97 | }
98 |
99 | // Log total response time
100 | duration = Date.now() - startDate
101 |
102 | // Decode last chunk (ensure to flush the decoder's end-of-stream)
103 | chunks.push(decoder.decode(chunk.value, { stream: false }))
104 |
105 | // Concatenate chunks into single string
106 | let responseText = chunks.join("")
107 |
108 | // Split the response by newline to separate JSON objects
109 | let jsonStrings = responseText.split("\n")
110 |
111 | let parsedResult
112 | // Loop through array from end to find last valid JSON object
113 | for (let i = jsonStrings.length - 1; i >= 0; i--) {
114 | try {
115 | parsedResult = JSON.parse(jsonStrings[i].replace("data: ", ""))
116 | // If parsing was successful, break from loop
117 | break
118 | } catch (e) {
119 | // If parsing wasn't successful (i.e., not valid JSON), continue to next string
120 | continue
121 | }
122 | }
123 |
124 | // Extract finish reason from parsed result
125 | finishReason = parsedResult.choices[0].finish_reason
126 |
127 | // Ensure logs are always 256 tokens
128 | if (finishReason !== "length") {
129 | console.log(`Unexepcted finish reason: ${finishReason}`)
130 | continue
131 | } else {
132 | break
133 | }
134 | }
135 |
136 | if (
137 | generationAttempts === maxGenerationAttempts &&
138 | finishReason !== "length"
139 | ) {
140 | console.log(
141 | `Failed to generate response after ${maxGenerationAttempts} attempts`
142 | )
143 | return
144 | }
145 |
146 | // Debug
147 | console.log("Time to first byte: " + ttfb + "ms")
148 | console.log("Total response time: " + duration + "ms")
149 |
150 | return {
151 | ttfb,
152 | duration,
153 | }
154 | }
155 |
156 | export async function logResponseTimes(
157 | db_url: string,
158 | model: string,
159 | date: Date,
160 | ttfb: number,
161 | duration: number
162 | ) {
163 | const client = new Client(db_url + "?sslmode=require")
164 | await client.connect()
165 |
166 | const text =
167 | "INSERT INTO response_times(model, date, ttfb, duration, tps) VALUES($1, $2, $3, $4, $5) RETURNING *"
168 |
169 | try {
170 | const res = await client.query(text, [
171 | model,
172 | date,
173 | ttfb,
174 | duration,
175 | max_tokens / (duration / 1000),
176 | ])
177 | console.log(res.rows[0])
178 | } catch (err) {
179 | console.error(err)
180 | } finally {
181 | await client.end()
182 | }
183 | }
184 |
--------------------------------------------------------------------------------