diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..19e26993 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,50 @@ +# Dependencies +node_modules +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Build outputs +.next +.turbo +out +dist +build + +# Environment files +.env +.env.local +.env.development.local +.env.test.local +.env.production.local + +# Testing +coverage + +# Misc +.DS_Store +*.pem + +# Debug +*.log + +# Local development +.git +.gitignore +README.md +.vscode +.idea + +# Data directories - MUST exclude to prevent database lock errors +data/ +*.db +*.db-shm +*.db-wal + +# Caddy data +caddy-data/ +caddy-config/ + +# Docker files +docker-compose.yml +docker-compose.*.yml diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml new file mode 100644 index 00000000..801047e8 --- /dev/null +++ b/.github/workflows/docker-build.yml @@ -0,0 +1,76 @@ +name: Build and Push Docker Images + +on: + push: + branches: + - main + - develop + tags: + - 'v*' + pull_request: + branches: + - main + - develop + workflow_dispatch: + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + +jobs: + build-and-push: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + strategy: + matrix: + include: + - service: web + dockerfile: docker/web/Dockerfile + context: . + - service: caddy + dockerfile: docker/caddy/Dockerfile + context: . + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to GitHub Container Registry + if: github.event_name != 'pull_request' + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-${{ matrix.service }} + tags: | + type=ref,event=branch + type=ref,event=pr + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + type=sha,prefix={{branch}}- + type=raw,value=latest,enable={{is_default_branch}} + + - name: Build and push Docker image + uses: docker/build-push-action@v5 + with: + context: ${{ matrix.context }} + file: ${{ matrix.dockerfile }} + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=gha + cache-to: type=gha,mode=max + platforms: linux/amd64,linux/arm64 diff --git a/.gitignore b/.gitignore index 7ce8fb56..3f30cd96 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,5 @@ data .env* /.idea tsconfig.tsbuildinfo +/caddy-data +/caddy-config diff --git a/README.md b/README.md index c8676d1e..222cd667 100644 --- a/README.md +++ b/README.md @@ -2,14 +2,14 @@ [https://caddyproxymanager.com](https://caddyproxymanager.com) -Caddy Proxy Manager is a modern control panel for Caddy that simplifies reverse proxy configuration, TLS automation, access control, and observability. The stack is built with Next.js 16 (App Router), Material UI, and a lightweight SQLite data layer. It ships with OAuth2 SSO, first-class Caddy admin API integration, and tooling for Cloudflare DNS challenge automation. +Caddy Proxy Manager is a modern control panel for Caddy that simplifies reverse proxy configuration, TLS automation, access control, and observability. The stack is built with Next.js 16 (App Router), Material UI, and a lightweight SQLite data layer. It features simple username/password authentication, first-class Caddy admin API integration, and tooling for Cloudflare DNS challenge automation. ## Highlights -- **Next.js 16 App Router** – server components for data loading, client components for interactivity, and a unified API surface. +- **Next.js 16 App Router** – server components for data loading, client components for interactivity, and a unified API surface. - **Material UI dark mode** – fast, responsive dashboard with ready-made components and accessibility baked in. -- **OAuth2 single sign-on** – PKCE flow with configurable claims; the first authenticated user is promoted to administrator. -- **End-to-end Caddy orchestration** – generate JSON for HTTP(S) proxies, redirects, 404 hosts, and TCP/UDP streams via the Caddy admin API. +- **Simple authentication** – environment-based username/password login configured via docker-compose. +- **End-to-end Caddy orchestration** – generate JSON for HTTP(S) proxies, redirects, 404 hosts via the Caddy admin API. - **Cloudflare DNS challenge support** – xcaddy build bundles the `cloudflare` DNS and `layer4` modules; credentials are configurable in the UI. - **Security-by-default** – HSTS (`Strict-Transport-Security: max-age=63072000`) applied to every managed host. - **Embedded audit log** – every configuration change is recorded with actor, summary, and timestamp. @@ -19,17 +19,17 @@ Caddy Proxy Manager is a modern control panel for Caddy that simplifies reverse ``` . ├── app/ # Next.js App Router entrypoint (layouts, routes, server actions) -│ ├── (auth)/ # Login + OAuth setup flows +│ ├── (auth)/ # Login flow │ ├── (dashboard)/ # Dashboard layout, feature surface, client renderers │ ├── api/ # Route handlers for auth callbacks/logout │ ├── providers.tsx # Global MUI theme + CssBaseline │ └── layout.tsx # Root HTML/body wrapper ├── src/ -│ └── lib/ # SQLite integration, migrations, models, Caddy config builder +│ └── lib/ # SQLite integration, models, Caddy config builder ├── docker/ │ ├── web/ # Next.js production image (standalone output) │ └── caddy/ # xcaddy build with Cloudflare + layer4 modules -├── compose.yaml # Multi-container deployment (Next.js app + Caddy) +├── docker-compose.yml # Multi-container deployment (Next.js app + Caddy) ├── data/ # Generated at runtime (SQLite DB, cert storage, Caddy state) └── README.md # You are here ``` @@ -39,24 +39,22 @@ Caddy Proxy Manager is a modern control panel for Caddy that simplifies reverse - `ProxyHostsClient.tsx` – create/update/delete HTTP(S) reverse proxies, assign certs/access lists. - `RedirectsClient.tsx` – manage 301/302 redirects with optional path/query preservation. - `DeadHostsClient.tsx` – serve custom offline pages with programmable status codes. -- `StreamsClient.tsx` – configure TCP/UDP layer4 proxies. - `AccessListsClient.tsx` – manage HTTP basic auth credentials and membership. - `CertificatesClient.tsx` – import PEMs or request managed ACME certificates. -- `SettingsClient.tsx` – general metadata, OAuth2 endpoints, Cloudflare DNS token. +- `SettingsClient.tsx` – general metadata and Cloudflare DNS token configuration. - `AuditLogClient.tsx` – list chronological administrative activity. ## Feature Overview ### Authentication & Authorization -- OAuth2/OIDC login with PKCE. -- First user bootstrap to admin role. -- Session persistence via signed, rotating cookies stored in SQLite. +- Simple username/password authentication configured via environment variables. +- Credentials set in docker-compose or `.env` file. +- Session persistence via signed JWT tokens. ### Reverse Proxy Management - HTTP(S) proxy hosts with TLS enforcement, WebSocket + HTTP/2 toggles. - Redirect hosts with custom status codes and query preservation. - Dead/maintenance hosts with custom responses. -- Stream (TCP/UDP) forwarding powered by the Caddy layer4 module. - Access list (basic auth) integration for protected hosts. - TLS certificate lifecycle: managed ACME (DNS-01 via Cloudflare) or imported PEMs. @@ -70,87 +68,122 @@ Caddy Proxy Manager is a modern control panel for Caddy that simplifies reverse - Node.js 20+ (development) - Docker + Docker Compose v2 (deployment) -- OAuth2 identity provider (OIDC compliant preferred) - Optional: Cloudflare DNS API token for automated certificate issuance ## Quick Start +### Development + 1. **Install dependencies** ```bash npm install ``` - > Package downloads require network access. +2. **Create environment file** -2. **Run the development server** + ```bash + cp .env.example .env + ``` + + Edit `.env` and set your admin credentials: + ```env + ADMIN_USERNAME=your-username + ADMIN_PASSWORD=your-secure-password + SESSION_SECRET=your-random-secret-here + ``` + +3. **Run the development server** ```bash npm run dev ``` -3. **Configure OAuth2** +4. **Login** - - Visit `http://localhost:3000/setup/oauth`. - - Supply your identity provider’s authorization, token, and userinfo endpoints plus client credentials. - - Sign in; the first user becomes an administrator. + - Visit `http://localhost:3000/login` + - Enter your configured username and password + - You're now logged in as administrator -4. **Configure Cloudflare DNS (optional)** +5. **Configure Cloudflare DNS (optional)** - Navigate to **Settings → Cloudflare DNS**. - Provide an API token with `Zone.DNS:Edit` scope and the relevant zone/account IDs. - Any managed certificates attached to hosts will now request TLS via DNS validation. +### Production Deployment + ## Docker Compose -`compose.yaml` defines a two-container stack: +`docker-compose.yml` defines a two-container stack: -- `app`: Next.js server with SQLite database and certificate store in `/data`. -- `caddy`: xcaddy-built binary with Cloudflare DNS provider and layer4 modules. The default configuration responds on `caddyproxymanager.com` and serves the required HSTS header: - - ```caddyfile - caddyproxymanager.com { - header Strict-Transport-Security "max-age=63072000" - respond "Caddy Proxy Manager is running" 200 - } - ``` +- `web`: Next.js server with SQLite database and certificate store in `/data`. +- `caddy`: xcaddy-built binary with Cloudflare DNS provider and layer4 modules. Launch the stack: ```bash +# Create .env file with your credentials +cp .env.example .env + +# Edit .env and set secure values for: +# - ADMIN_USERNAME +# - ADMIN_PASSWORD +# - SESSION_SECRET + +# Start the containers docker compose up -d ``` -Environment variables: +### Environment Variables -- `SESSION_SECRET`: random 32+ character string used to sign session cookies. -- `DATABASE_PATH`: path to the SQLite database (default `/data/app/app.db` in containers). -- `CERTS_DIRECTORY`: directory for imported PEM files shared with the Caddy container. -- `CADDY_API_URL`: URL for the Caddy admin API (default `http://caddy:2019` inside the compose network). -- `PRIMARY_DOMAIN`: default domain served by the bootstrap Caddyfile (defaults to `caddyproxymanager.com`). +**Required (Security):** + +- `SESSION_SECRET`: Random 32+ character string used to sign session tokens. Generate with: `openssl rand -base64 32` +- `ADMIN_USERNAME`: Username for admin login (default: `admin`) +- `ADMIN_PASSWORD`: Password for admin login (default: `admin`) + +**Optional (Application):** + +- `BASE_URL`: Public base URL for the application (default: `http://localhost:3000`) +- `PRIMARY_DOMAIN`: Default domain served by Caddy (default: `caddyproxymanager.com`) +- `CADDY_API_URL`: URL for the Caddy admin API (default: `http://caddy:2019`) +- `DATABASE_PATH`: Path to the SQLite database (default: `/app/data/caddy-proxy-manager.db`) + +⚠️ **Important**: Always change the default `ADMIN_USERNAME` and `ADMIN_PASSWORD` in production! ## Data Locations -- `data/app/app.db`: SQLite database storing configuration, sessions, and audit log. +- `data/caddy-proxy-manager.db`: SQLite database storing configuration, sessions, and audit log. - `data/certs/`: Imported TLS certificates and keys generated by the UI. -- `data/caddy/`: Autogenerated Caddy state (ACME storage, etc.). +- `caddy-data/`: Autogenerated Caddy state (ACME storage, etc.). +- `caddy-config/`: Caddy configuration storage. ## UI Features - **Proxy Hosts:** HTTP(S) reverse proxies with HSTS, access lists, optional custom certificates, and WebSocket support. - **Redirects:** 301/302 responses with optional path/query preservation. - **Dead Hosts:** Branded responses for offline services. -- **Streams:** TCP/UDP forwarding powered by the Caddy layer4 module. - **Access Lists:** Bcrypt-backed basic auth credentials, assignable to proxy hosts. - **Certificates:** Managed (ACME) or imported PEM certificates with audit history. - **Audit Log:** Chronological record of every configuration change and actor. -- **Settings:** General metadata, OAuth2 endpoints, and Cloudflare DNS credentials. +- **Settings:** General metadata and Cloudflare DNS credentials. ## Development Notes -- SQLite schema migrations are embedded in `src/lib/migrations.ts` and run automatically on startup. +- SQLite schema migrations are embedded and run automatically on startup via Prisma. - Caddy configuration is rebuilt on every change and pushed via the admin API. Failures are surfaced to the UI. -- OAuth2 login uses PKCE and stores session tokens as HMAC-signed cookies backed by the database. +- Authentication uses NextAuth.js with JWT session strategy. +- Type checking: `npm run typecheck` +- Build: `npm run build` + +## Security Considerations + +1. **Change default credentials**: Never use `admin/admin` in production +2. **Use strong SESSION_SECRET**: Generate with `openssl rand -base64 32` +3. **Use HTTPS in production**: Configure BASE_URL with `https://` protocol +4. **Restrict network access**: Ensure port 3000 is only accessible via reverse proxy +5. **Keep updated**: Regularly update dependencies and Docker images ## License diff --git a/app/(auth)/login/LoginClient.tsx b/app/(auth)/login/LoginClient.tsx index 8fe79919..51221bb8 100644 --- a/app/(auth)/login/LoginClient.tsx +++ b/app/(auth)/login/LoginClient.tsx @@ -1,38 +1,68 @@ "use client"; -import Link from "next/link"; -import { Alert, Box, Button, Card, CardContent, Stack, Typography } from "@mui/material"; +import { useRouter } from "next/navigation"; +import { FormEvent, useState } from "react"; +import { Alert, Box, Button, Card, CardContent, Stack, TextField, Typography } from "@mui/material"; import { signIn } from "next-auth/react"; -export default function LoginClient({ oauthConfigured, providerId }: { oauthConfigured: boolean; providerId: string }) { - const handleSignIn = async () => { - await signIn(providerId, { callbackUrl: "/" }); +export default function LoginClient() { + const router = useRouter(); + const [loginError, setLoginError] = useState(null); + const [loginPending, setLoginPending] = useState(false); + + const handleSignIn = async (event: FormEvent) => { + event.preventDefault(); + setLoginError(null); + setLoginPending(true); + + const formData = new FormData(event.currentTarget); + const username = String(formData.get("username") ?? "").trim(); + const password = String(formData.get("password") ?? ""); + + if (!username || !password) { + setLoginError("Username and password are required."); + setLoginPending(false); + return; + } + + const result = await signIn("credentials", { + redirect: false, + callbackUrl: "/", + username, + password + }); + + if (!result || result.error) { + setLoginError("Invalid username or password."); + setLoginPending(false); + return; + } + + router.replace(result.url ?? "/"); + router.refresh(); }; return ( - + - - + + Caddy Proxy Manager - - Sign in with your organization's OAuth2 provider to continue. - + Sign in with your credentials - {oauthConfigured ? ( - - ) : ( - - The system administrator needs to configure OAuth2 settings before logins are allowed. If this is a fresh installation, - start with the OAuth setup wizard. - - )} + diff --git a/app/(auth)/login/page.tsx b/app/(auth)/login/page.tsx index 5206d955..46188780 100644 --- a/app/(auth)/login/page.tsx +++ b/app/(auth)/login/page.tsx @@ -1,6 +1,5 @@ import { redirect } from "next/navigation"; import { auth } from "@/src/lib/auth"; -import { getOAuthSettings } from "@/src/lib/settings"; import LoginClient from "./LoginClient"; export default async function LoginPage() { @@ -9,11 +8,5 @@ export default async function LoginPage() { redirect("/"); } - const settings = getOAuthSettings(); - const oauthConfigured = Boolean(settings); - - // Determine provider ID based on settings - const providerId = settings?.providerType === "authentik" ? "authentik" : "oauth"; - - return ; + return ; } diff --git a/app/(dashboard)/DashboardLayoutClient.tsx b/app/(dashboard)/DashboardLayoutClient.tsx index c8693df5..c7a14978 100644 --- a/app/(dashboard)/DashboardLayoutClient.tsx +++ b/app/(dashboard)/DashboardLayoutClient.tsx @@ -3,22 +3,26 @@ import { ReactNode } from "react"; import Link from "next/link"; import { usePathname } from "next/navigation"; -import { Box, Button, Divider, List, ListItemButton, ListItemText, Stack, Typography } from "@mui/material"; -import type { UserRecord } from "@/src/lib/auth/session"; +import { Avatar, Box, Button, Divider, List, ListItemButton, ListItemText, Stack, Typography } from "@mui/material"; + +type User = { + id: string; + name?: string | null; + email?: string | null; +}; const NAV_ITEMS = [ { href: "/", label: "Overview" }, { href: "/proxy-hosts", label: "Proxy Hosts" }, { href: "/redirects", label: "Redirects" }, { href: "/dead-hosts", label: "Dead Hosts" }, - { href: "/streams", label: "Streams" }, { href: "/access-lists", label: "Access Lists" }, { href: "/certificates", label: "Certificates" }, { href: "/settings", label: "Settings" }, { href: "/audit-log", label: "Audit Log" } ] as const; -export default function DashboardLayoutClient({ user, children }: { user: UserRecord; children: ReactNode }) { +export default function DashboardLayoutClient({ user, children }: { user: User; children: ReactNode }) { const pathname = usePathname(); return ( @@ -27,77 +31,170 @@ export default function DashboardLayoutClient({ user, children }: { user: UserRe display: "flex", minHeight: "100vh", position: "relative", - overflow: "hidden" + background: + "radial-gradient(circle at 12% -20%, rgba(99, 102, 241, 0.28), transparent 45%), radial-gradient(circle at 88% 8%, rgba(45, 212, 191, 0.24), transparent 46%), linear-gradient(160deg, rgba(2, 3, 9, 1) 0%, rgba(4, 10, 22, 1) 40%, rgba(2, 6, 18, 1) 100%)" }} > - - - Caddy - - + + + Caddy Proxy + + + Manager + + + + + + - Proxy Manager - - - {user.name ?? user.email} - - + {NAV_ITEMS.map((item) => { + const selected = pathname === item.href; + return ( + + + + ); + })} + + - + + + + + {(user.name ?? user.email ?? "A").slice(0, 2).toUpperCase()} + + + + {user.name ?? user.email ?? "Admin"} + + + Administrator + + + - - {NAV_ITEMS.map((item) => { - const selected = pathname === item.href; - return ( - - - - ); - })} - - -
- -
+
+ +
+
- {children} + {children}
); diff --git a/app/(dashboard)/access-lists/actions.ts b/app/(dashboard)/access-lists/actions.ts index a099f01f..481039ad 100644 --- a/app/(dashboard)/access-lists/actions.ts +++ b/app/(dashboard)/access-lists/actions.ts @@ -11,7 +11,9 @@ import { } from "@/src/lib/models/access-lists"; export async function createAccessListAction(formData: FormData) { - const { user } = await requireUser(); + const session = await requireUser(); + const user = session.user; + const userId = Number(user.id); const rawUsers = String(formData.get("users") ?? ""); const accounts = rawUsers .split("\n") @@ -29,45 +31,53 @@ export async function createAccessListAction(formData: FormData) { description: formData.get("description") ? String(formData.get("description")) : null, users: accounts }, - user.id + userId ); revalidatePath("/access-lists"); } export async function updateAccessListAction(id: number, formData: FormData) { - const { user } = await requireUser(); + const session = await requireUser(); + const user = session.user; + const userId = Number(user.id); await updateAccessList( id, { name: formData.get("name") ? String(formData.get("name")) : undefined, description: formData.get("description") ? String(formData.get("description")) : undefined }, - user.id + userId ); revalidatePath("/access-lists"); } export async function deleteAccessListAction(id: number) { - const { user } = await requireUser(); - await deleteAccessList(id, user.id); + const session = await requireUser(); + const user = session.user; + const userId = Number(user.id); + await deleteAccessList(id, userId); revalidatePath("/access-lists"); } export async function addAccessEntryAction(id: number, formData: FormData) { - const { user } = await requireUser(); + const session = await requireUser(); + const user = session.user; + const userId = Number(user.id); await addAccessListEntry( id, { username: String(formData.get("username") ?? ""), password: String(formData.get("password") ?? "") }, - user.id + userId ); revalidatePath("/access-lists"); } export async function deleteAccessEntryAction(accessListId: number, entryId: number) { - const { user } = await requireUser(); - await removeAccessListEntry(accessListId, entryId, user.id); + const session = await requireUser(); + const user = session.user; + const userId = Number(user.id); + await removeAccessListEntry(accessListId, entryId, userId); revalidatePath("/access-lists"); } diff --git a/app/(dashboard)/access-lists/page.tsx b/app/(dashboard)/access-lists/page.tsx index 5af14275..9c913d89 100644 --- a/app/(dashboard)/access-lists/page.tsx +++ b/app/(dashboard)/access-lists/page.tsx @@ -1,7 +1,7 @@ import AccessListsClient from "./AccessListsClient"; import { listAccessLists } from "@/src/lib/models/access-lists"; -export default function AccessListsPage() { - const lists = listAccessLists(); +export default async function AccessListsPage() { + const lists = await listAccessLists(); return ; } diff --git a/app/(dashboard)/audit-log/page.tsx b/app/(dashboard)/audit-log/page.tsx index 2ad56c42..16ec157f 100644 --- a/app/(dashboard)/audit-log/page.tsx +++ b/app/(dashboard)/audit-log/page.tsx @@ -2,9 +2,9 @@ import AuditLogClient from "./AuditLogClient"; import { listAuditEvents } from "@/src/lib/models/audit"; import { listUsers } from "@/src/lib/models/user"; -export default function AuditLogPage() { - const events = listAuditEvents(200); - const users = listUsers(); +export default async function AuditLogPage() { + const events = await listAuditEvents(200); + const users = await listUsers(); const userMap = new Map(users.map((user) => [user.id, user])); return ( diff --git a/app/(dashboard)/certificates/actions.ts b/app/(dashboard)/certificates/actions.ts index ee85e101..107d3f89 100644 --- a/app/(dashboard)/certificates/actions.ts +++ b/app/(dashboard)/certificates/actions.ts @@ -16,7 +16,9 @@ function parseDomains(value: FormDataEntryValue | null): string[] { } export async function createCertificateAction(formData: FormData) { - const { user } = await requireUser(); + const session = await requireUser(); + const user = session.user; + const userId = Number(user.id); const type = String(formData.get("type") ?? "managed") as "managed" | "imported"; await createCertificate( { @@ -27,13 +29,15 @@ export async function createCertificateAction(formData: FormData) { certificate_pem: type === "imported" ? String(formData.get("certificate_pem") ?? "") : null, private_key_pem: type === "imported" ? String(formData.get("private_key_pem") ?? "") : null }, - user.id + userId ); revalidatePath("/certificates"); } export async function updateCertificateAction(id: number, formData: FormData) { - const { user } = await requireUser(); + const session = await requireUser(); + const user = session.user; + const userId = Number(user.id); const type = formData.get("type") ? (String(formData.get("type")) as "managed" | "imported") : undefined; await updateCertificate( id, @@ -45,13 +49,15 @@ export async function updateCertificateAction(id: number, formData: FormData) { certificate_pem: formData.get("certificate_pem") ? String(formData.get("certificate_pem")) : undefined, private_key_pem: formData.get("private_key_pem") ? String(formData.get("private_key_pem")) : undefined }, - user.id + userId ); revalidatePath("/certificates"); } export async function deleteCertificateAction(id: number) { - const { user } = await requireUser(); - await deleteCertificate(id, user.id); + const session = await requireUser(); + const user = session.user; + const userId = Number(user.id); + await deleteCertificate(id, userId); revalidatePath("/certificates"); } diff --git a/app/(dashboard)/certificates/page.tsx b/app/(dashboard)/certificates/page.tsx index 41b82e99..8578d2df 100644 --- a/app/(dashboard)/certificates/page.tsx +++ b/app/(dashboard)/certificates/page.tsx @@ -1,7 +1,7 @@ import CertificatesClient from "./CertificatesClient"; import { listCertificates } from "@/src/lib/models/certificates"; -export default function CertificatesPage() { - const certificates = listCertificates(); +export default async function CertificatesPage() { + const certificates = await listCertificates(); return ; } diff --git a/app/(dashboard)/dead-hosts/actions.ts b/app/(dashboard)/dead-hosts/actions.ts index 5324f06d..ef91b2fb 100644 --- a/app/(dashboard)/dead-hosts/actions.ts +++ b/app/(dashboard)/dead-hosts/actions.ts @@ -16,7 +16,9 @@ function parseDomains(value: FormDataEntryValue | null): string[] { } export async function createDeadHostAction(formData: FormData) { - const { user } = await requireUser(); + const session = await requireUser(); + const user = session.user; + const userId = Number(user.id); await createDeadHost( { name: String(formData.get("name") ?? "Dead host"), @@ -25,13 +27,15 @@ export async function createDeadHostAction(formData: FormData) { response_body: formData.get("response_body") ? String(formData.get("response_body")) : null, enabled: formData.has("enabled") ? formData.get("enabled") === "on" : true }, - user.id + userId ); revalidatePath("/dead-hosts"); } export async function updateDeadHostAction(id: number, formData: FormData) { - const { user } = await requireUser(); + const session = await requireUser(); + const user = session.user; + const userId = Number(user.id); await updateDeadHost( id, { @@ -41,13 +45,15 @@ export async function updateDeadHostAction(id: number, formData: FormData) { response_body: formData.get("response_body") ? String(formData.get("response_body")) : undefined, enabled: formData.has("enabled_present") ? formData.get("enabled") === "on" : undefined }, - user.id + userId ); revalidatePath("/dead-hosts"); } export async function deleteDeadHostAction(id: number) { - const { user } = await requireUser(); - await deleteDeadHost(id, user.id); + const session = await requireUser(); + const user = session.user; + const userId = Number(user.id); + await deleteDeadHost(id, userId); revalidatePath("/dead-hosts"); } diff --git a/app/(dashboard)/dead-hosts/page.tsx b/app/(dashboard)/dead-hosts/page.tsx index 8771e419..2fdf8e31 100644 --- a/app/(dashboard)/dead-hosts/page.tsx +++ b/app/(dashboard)/dead-hosts/page.tsx @@ -1,7 +1,7 @@ import DeadHostsClient from "./DeadHostsClient"; import { listDeadHosts } from "@/src/lib/models/dead-hosts"; -export default function DeadHostsPage() { - const hosts = listDeadHosts(); +export default async function DeadHostsPage() { + const hosts = await listDeadHosts(); return ; } diff --git a/app/(dashboard)/layout.tsx b/app/(dashboard)/layout.tsx index ff6b7640..bde3fb40 100644 --- a/app/(dashboard)/layout.tsx +++ b/app/(dashboard)/layout.tsx @@ -3,6 +3,6 @@ import { requireUser } from "@/src/lib/auth"; import DashboardLayoutClient from "./DashboardLayoutClient"; export default async function DashboardLayout({ children }: { children: ReactNode }) { - const { user } = await requireUser(); - return {children}; + const session = await requireUser(); + return {children}; } diff --git a/app/(dashboard)/page.tsx b/app/(dashboard)/page.tsx index 5764bed8..8081f920 100644 --- a/app/(dashboard)/page.tsx +++ b/app/(dashboard)/page.tsx @@ -1,4 +1,4 @@ -import db from "@/src/lib/db"; +import prisma from "@/src/lib/db"; import { requireUser } from "@/src/lib/auth"; import OverviewClient from "./OverviewClient"; @@ -9,46 +9,46 @@ type StatCard = { href: string; }; -function loadStats(): StatCard[] { - const metrics = [ - { label: "Proxy Hosts", table: "proxy_hosts", href: "/proxy-hosts", icon: "⇄" }, - { label: "Redirects", table: "redirect_hosts", href: "/redirects", icon: "↪" }, - { label: "Dead Hosts", table: "dead_hosts", href: "/dead-hosts", icon: "☠" }, - { label: "Streams", table: "stream_hosts", href: "/streams", icon: "≋" }, - { label: "Certificates", table: "certificates", href: "/certificates", icon: "🔐" }, - { label: "Access Lists", table: "access_lists", href: "/access-lists", icon: "🔒" } - ] as const; +async function loadStats(): Promise { + const [proxyHostsCount, redirectHostsCount, deadHostsCount, certificatesCount, accessListsCount] = + await Promise.all([ + prisma.proxyHost.count(), + prisma.redirectHost.count(), + prisma.deadHost.count(), + prisma.certificate.count(), + prisma.accessList.count() + ]); - return metrics.map((metric) => { - const row = db.prepare(`SELECT COUNT(*) as count FROM ${metric.table}`).get() as { count: number }; - return { - label: metric.label, - icon: metric.icon, - count: Number(row.count), - href: metric.href - }; - }); + return [ + { label: "Proxy Hosts", icon: "⇄", count: proxyHostsCount, href: "/proxy-hosts" }, + { label: "Redirects", icon: "↪", count: redirectHostsCount, href: "/redirects" }, + { label: "Dead Hosts", icon: "☠", count: deadHostsCount, href: "/dead-hosts" }, + { label: "Certificates", icon: "🔐", count: certificatesCount, href: "/certificates" }, + { label: "Access Lists", icon: "🔒", count: accessListsCount, href: "/access-lists" } + ]; } export default async function OverviewPage() { - const { user } = await requireUser(); - const stats = loadStats(); - const recentEvents = db - .prepare( - `SELECT action, entity_type, summary, created_at - FROM audit_events - ORDER BY created_at DESC - LIMIT 8` - ) - .all() as { action: string; entity_type: string; summary: string | null; created_at: string }[]; + const session = await requireUser(); + const stats = await loadStats(); + const recentEvents = await prisma.auditEvent.findMany({ + select: { + action: true, + entityType: true, + summary: true, + createdAt: true + }, + orderBy: { createdAt: "desc" }, + take: 8 + }); return ( ({ - summary: event.summary ?? `${event.action} on ${event.entity_type}`, - created_at: event.created_at + recentEvents={recentEvents.map((event: { action: string; entityType: string; summary: string | null; createdAt: Date }) => ({ + summary: event.summary ?? `${event.action} on ${event.entityType}`, + created_at: event.createdAt.toISOString() }))} /> ); diff --git a/app/(dashboard)/proxy-hosts/ProxyHostsClient.tsx b/app/(dashboard)/proxy-hosts/ProxyHostsClient.tsx index a1e1e228..38bc7411 100644 --- a/app/(dashboard)/proxy-hosts/ProxyHostsClient.tsx +++ b/app/(dashboard)/proxy-hosts/ProxyHostsClient.tsx @@ -1,11 +1,43 @@ "use client"; -import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; -import Grid from "@mui/material/Grid"; -import { Accordion, AccordionDetails, AccordionSummary, Box, Button, Card, CardContent, Chip, FormControlLabel, MenuItem, Stack, TextField, Typography, Checkbox } from "@mui/material"; +import { useMemo, useState } from "react"; +import { + Alert, + Box, + Button, + Card, + CardContent, + Checkbox, + Chip, + Collapse, + Dialog, + DialogActions, + DialogContent, + DialogTitle, + FormControlLabel, + IconButton, + MenuItem, + Stack, + Switch, + Table, + TableBody, + TableCell, + TableContainer, + TableHead, + TableRow, + TextField, + Typography, + Tooltip +} from "@mui/material"; +import AddIcon from "@mui/icons-material/Add"; +import EditIcon from "@mui/icons-material/Edit"; +import DeleteIcon from "@mui/icons-material/Delete"; +import CloseIcon from "@mui/icons-material/Close"; +import { useFormState } from "react-dom"; import type { AccessList } from "@/src/lib/models/access-lists"; import type { Certificate } from "@/src/lib/models/certificates"; import type { ProxyHost } from "@/src/lib/models/proxy-hosts"; +import { INITIAL_ACTION_STATE, type ActionState } from "@/src/lib/actions"; import { createProxyHostAction, deleteProxyHostAction, updateProxyHostAction } from "./actions"; type Props = { @@ -14,307 +46,626 @@ type Props = { accessLists: AccessList[]; }; +const AUTHENTIK_DEFAULT_HEADERS = [ + "X-Authentik-Username", + "X-Authentik-Groups", + "X-Authentik-Entitlements", + "X-Authentik-Email", + "X-Authentik-Name", + "X-Authentik-Uid", + "X-Authentik-Jwt", + "X-Authentik-Meta-Jwks", + "X-Authentik-Meta-Outpost", + "X-Authentik-Meta-Provider", + "X-Authentik-Meta-App", + "X-Authentik-Meta-Version" +]; + +const AUTHENTIK_DEFAULT_TRUSTED_PROXIES = ["private_ranges"]; + export default function ProxyHostsClient({ hosts, certificates, accessLists }: Props) { + const [createOpen, setCreateOpen] = useState(false); + const [editHost, setEditHost] = useState(null); + const [deleteHost, setDeleteHost] = useState(null); + return ( - - - - HTTP Edge - - + + + + Proxy Hosts + + + Define HTTP(S) reverse proxies orchestrated by Caddy with automated certificates. + + + - - {hosts.map((host) => ( - - - - + + + + Name + Domains + Upstreams + Status + Actions + + + + {hosts.length === 0 ? ( + + + No proxy hosts configured. Click "Create Host" to add one. + + + ) : ( + hosts.map((host) => ( + - - + + {host.name} - - {host.domains.join(", ")} + + + + {host.domains.slice(0, 2).join(", ")} + {host.domains.length > 2 && ` +${host.domains.length - 2} more`} - - - - - - } - sx={{ px: 2, bgcolor: "rgba(15, 23, 42, 0.45)" }} - > - Edit configuration - - - updateProxyHostAction(host.id, formData)} spacing={2.5}> - - - - - Managed by Caddy - {certificates.map((cert) => ( - - {cert.name} - - ))} - - - None - {accessLists.map((list) => ( - - {list.name} - - ))} - - - - - - - - - - - + + + + {host.upstreams.slice(0, 2).join(", ")} + {host.upstreams.length > 2 && ` +${host.upstreams.length - 2} more`} + + + + + + + + + setEditHost(host)} + sx={{ + color: "rgba(99, 102, 241, 0.8)", + "&:hover": { bgcolor: "rgba(99, 102, 241, 0.1)" } + }} + > + + + + + setDeleteHost(host)} + sx={{ + color: "rgba(239, 68, 68, 0.8)", + "&:hover": { bgcolor: "rgba(239, 68, 68, 0.1)" } + }} + > + + + - - + + + )) + )} + +
+ - - - -
-
-
- ))} -
+ setCreateOpen(false)} + certificates={certificates} + accessLists={accessLists} + /> - - - - Create proxy host - - - Deploy a new reverse proxy route powered by Caddy. - - - - - - - - - - Managed by Caddy - {certificates.map((cert) => ( - - {cert.name} - - ))} - - - None - {accessLists.map((list) => ( - - {list.name} - - ))} - - - - - } - label="Include subdomains in HSTS" - sx={{ width: "100%", m: 0 }} - /> - - - - } - label="Skip HTTPS hostname validation" - sx={{ width: "100%", m: 0 }} - /> - - - - } - label="Enabled" - sx={{ width: "100%", m: 0 }} - /> - - - - - - - - - + {editHost && ( + setEditHost(null)} + certificates={certificates} + accessLists={accessLists} + /> + )} + + {deleteHost && ( + setDeleteHost(null)} + /> + )}
); } -function HiddenCheckboxField({ name, defaultChecked, label }: { name: string; defaultChecked: boolean; label: string }) { +function CreateHostDialog({ + open, + onClose, + certificates, + accessLists +}: { + open: boolean; + onClose: () => void; + certificates: Certificate[]; + accessLists: AccessList[]; +}) { + const [state, formAction] = useFormState(createProxyHostAction, INITIAL_ACTION_STATE); + return ( - + + + + Create Proxy Host + + + + + + + + {state.status !== "idle" && state.message && ( + state.status === "success" && onClose()}> + {state.message} + + )} + + + + + Managed by Caddy (Auto) + {certificates.map((cert) => ( + + {cert.name} + + ))} + + + None + {accessLists.map((list) => ( + + {list.name} + + ))} + + + + + + + + + + + + + + + + + ); +} + +function EditHostDialog({ + open, + host, + onClose, + certificates, + accessLists +}: { + open: boolean; + host: ProxyHost; + onClose: () => void; + certificates: Certificate[]; + accessLists: AccessList[]; +}) { + const [state, formAction] = useFormState(updateProxyHostAction.bind(null, host.id), INITIAL_ACTION_STATE); + + return ( + + + + Edit Proxy Host + + + + + + + + {state.status !== "idle" && state.message && ( + state.status === "success" && onClose()}> + {state.message} + + )} + + + + + Managed by Caddy (Auto) + {certificates.map((cert) => ( + + {cert.name} + + ))} + + + None + {accessLists.map((list) => ( + + {list.name} + + ))} + + + + + + + + + + + + + + + + + ); +} + +function DeleteHostDialog({ + open, + host, + onClose +}: { + open: boolean; + host: ProxyHost; + onClose: () => void; +}) { + const [state, formAction] = useFormState(deleteProxyHostAction.bind(null, host.id), INITIAL_ACTION_STATE); + + return ( + + + + Delete Proxy Host + + + + + + + + {state.status !== "idle" && state.message && ( + state.status === "success" && onClose()}> + {state.message} + + )} + + Are you sure you want to delete the proxy host {host.name}? + + + This will remove the configuration for: + + + + • Domains: {host.domains.join(", ")} + + + • Upstreams: {host.upstreams.join(", ")} + + + + This action cannot be undone. + + + + + +
+ +
+
+
+ ); +} + +function AuthentikFields({ authentik }: { authentik?: ProxyHost["authentik"] | null }) { + const initial = authentik ?? null; + const [enabled, setEnabled] = useState(initial?.enabled ?? false); + + const copyHeadersValue = + initial && initial.copyHeaders.length > 0 ? initial.copyHeaders.join("\n") : AUTHENTIK_DEFAULT_HEADERS.join("\n"); + const trustedProxiesValue = + initial && initial.trustedProxies.length > 0 + ? initial.trustedProxies.join("\n") + : AUTHENTIK_DEFAULT_TRUSTED_PROXIES.join("\n"); + const setHostHeaderDefault = initial?.setOutpostHostHeader ?? true; + + return ( + + + + + + + + Authentik Forward Auth + + + Proxy authentication via Authentik outpost + + + setEnabled(checked)} + /> + + + + + + + + + + + + + + + ); +} + +function HiddenCheckboxField({ + name, + defaultChecked, + label, + disabled +}: { + name: string; + defaultChecked: boolean; + label: string; + disabled?: boolean; +}) { + return ( + } - label={label} - sx={{ width: "100%", m: 0 }} + label={{label}} + disabled={disabled} /> ); diff --git a/app/(dashboard)/proxy-hosts/actions.ts b/app/(dashboard)/proxy-hosts/actions.ts index 947f485d..29712aa2 100644 --- a/app/(dashboard)/proxy-hosts/actions.ts +++ b/app/(dashboard)/proxy-hosts/actions.ts @@ -2,7 +2,8 @@ import { revalidatePath } from "next/cache"; import { requireUser } from "@/src/lib/auth"; -import { createProxyHost, deleteProxyHost, updateProxyHost } from "@/src/lib/models/proxy-hosts"; +import { actionError, actionSuccess, INITIAL_ACTION_STATE, type ActionState } from "@/src/lib/actions"; +import { createProxyHost, deleteProxyHost, updateProxyHost, type ProxyHostAuthentikInput } from "@/src/lib/models/proxy-hosts"; function parseCsv(value: FormDataEntryValue | null): string[] { if (!value || typeof value !== "string") { @@ -19,46 +20,144 @@ function parseCheckbox(value: FormDataEntryValue | null): boolean { return value === "on" || value === "true" || value === "1"; } -export async function createProxyHostAction(formData: FormData) { - const { user } = await requireUser(); - await createProxyHost( - { - name: String(formData.get("name") ?? "Untitled"), - domains: parseCsv(formData.get("domains")), - upstreams: parseCsv(formData.get("upstreams")), - certificate_id: formData.get("certificate_id") ? Number(formData.get("certificate_id")) : null, - access_list_id: formData.get("access_list_id") ? Number(formData.get("access_list_id")) : null, - hsts_subdomains: parseCheckbox(formData.get("hsts_subdomains")), - skip_https_hostname_validation: parseCheckbox(formData.get("skip_https_hostname_validation")), - enabled: parseCheckbox(formData.get("enabled")) - }, - user.id - ); - revalidatePath("/proxy-hosts"); +function parseOptionalText(value: FormDataEntryValue | null): string | null { + if (!value || typeof value !== "string") { + return null; + } + const trimmed = value.trim(); + return trimmed.length > 0 ? trimmed : null; } -export async function updateProxyHostAction(id: number, formData: FormData) { - const { user } = await requireUser(); - const boolField = (key: string) => (formData.has(`${key}_present`) ? parseCheckbox(formData.get(key)) : undefined); - await updateProxyHost( - id, - { - name: formData.get("name") ? String(formData.get("name")) : undefined, - domains: formData.get("domains") ? parseCsv(formData.get("domains")) : undefined, - upstreams: formData.get("upstreams") ? parseCsv(formData.get("upstreams")) : undefined, - certificate_id: formData.get("certificate_id") ? Number(formData.get("certificate_id")) : undefined, - access_list_id: formData.get("access_list_id") ? Number(formData.get("access_list_id")) : undefined, - hsts_subdomains: boolField("hsts_subdomains"), - skip_https_hostname_validation: boolField("skip_https_hostname_validation"), - enabled: boolField("enabled") - }, - user.id - ); - revalidatePath("/proxy-hosts"); +function parseAuthentikConfig(formData: FormData): ProxyHostAuthentikInput | undefined { + if (!formData.has("authentik_present")) { + return undefined; + } + + const enabledIndicator = formData.has("authentik_enabled_present"); + const enabledValue = enabledIndicator + ? formData.has("authentik_enabled") + ? parseCheckbox(formData.get("authentik_enabled")) + : false + : undefined; + const outpostDomain = parseOptionalText(formData.get("authentik_outpost_domain")); + const outpostUpstream = parseOptionalText(formData.get("authentik_outpost_upstream")); + const authEndpoint = parseOptionalText(formData.get("authentik_auth_endpoint")); + const copyHeaders = parseCsv(formData.get("authentik_copy_headers")); + const trustedProxies = parseCsv(formData.get("authentik_trusted_proxies")); + const setHostHeader = formData.has("authentik_set_host_header_present") + ? parseCheckbox(formData.get("authentik_set_host_header")) + : undefined; + + const result: ProxyHostAuthentikInput = {}; + if (enabledValue !== undefined) { + result.enabled = enabledValue; + } + if (outpostDomain !== null) { + result.outpostDomain = outpostDomain; + } + if (outpostUpstream !== null) { + result.outpostUpstream = outpostUpstream; + } + if (authEndpoint !== null) { + result.authEndpoint = authEndpoint; + } + if (copyHeaders.length > 0 || formData.has("authentik_copy_headers")) { + result.copyHeaders = copyHeaders; + } + if (trustedProxies.length > 0 || formData.has("authentik_trusted_proxies")) { + result.trustedProxies = trustedProxies; + } + if (setHostHeader !== undefined) { + result.setOutpostHostHeader = setHostHeader; + } + + return Object.keys(result).length > 0 ? result : undefined; } -export async function deleteProxyHostAction(id: number) { - const { user } = await requireUser(); - await deleteProxyHost(id, user.id); - revalidatePath("/proxy-hosts"); +export async function createProxyHostAction( + _prevState: ActionState = INITIAL_ACTION_STATE, + formData: FormData +): Promise { + try { + const session = await requireUser(); + const user = session.user; + const userId = Number(user.id); + await createProxyHost( + { + name: String(formData.get("name") ?? "Untitled"), + domains: parseCsv(formData.get("domains")), + upstreams: parseCsv(formData.get("upstreams")), + certificate_id: formData.get("certificate_id") ? Number(formData.get("certificate_id")) : null, + access_list_id: formData.get("access_list_id") ? Number(formData.get("access_list_id")) : null, + hsts_subdomains: parseCheckbox(formData.get("hsts_subdomains")), + skip_https_hostname_validation: parseCheckbox(formData.get("skip_https_hostname_validation")), + enabled: parseCheckbox(formData.get("enabled")), + custom_pre_handlers_json: parseOptionalText(formData.get("custom_pre_handlers_json")), + custom_reverse_proxy_json: parseOptionalText(formData.get("custom_reverse_proxy_json")), + authentik: parseAuthentikConfig(formData) + }, + userId + ); + revalidatePath("/proxy-hosts"); + return actionSuccess("Proxy host created and queued for Caddy reload."); + } catch (error) { + console.error("Failed to create proxy host:", error); + return actionError(error, "Failed to create proxy host. Please check the logs for details."); + } +} + +export async function updateProxyHostAction( + id: number, + _prevState: ActionState = INITIAL_ACTION_STATE, + formData: FormData +): Promise { + try { + const session = await requireUser(); + const user = session.user; + const userId = Number(user.id); + const boolField = (key: string) => (formData.has(`${key}_present`) ? parseCheckbox(formData.get(key)) : undefined); + await updateProxyHost( + id, + { + name: formData.get("name") ? String(formData.get("name")) : undefined, + domains: formData.get("domains") ? parseCsv(formData.get("domains")) : undefined, + upstreams: formData.get("upstreams") ? parseCsv(formData.get("upstreams")) : undefined, + certificate_id: formData.get("certificate_id") ? Number(formData.get("certificate_id")) : undefined, + access_list_id: formData.get("access_list_id") ? Number(formData.get("access_list_id")) : undefined, + hsts_subdomains: boolField("hsts_subdomains"), + skip_https_hostname_validation: boolField("skip_https_hostname_validation"), + enabled: boolField("enabled"), + custom_pre_handlers_json: formData.has("custom_pre_handlers_json") + ? parseOptionalText(formData.get("custom_pre_handlers_json")) + : undefined, + custom_reverse_proxy_json: formData.has("custom_reverse_proxy_json") + ? parseOptionalText(formData.get("custom_reverse_proxy_json")) + : undefined, + authentik: parseAuthentikConfig(formData) + }, + userId + ); + revalidatePath("/proxy-hosts"); + return actionSuccess("Proxy host updated."); + } catch (error) { + console.error(`Failed to update proxy host ${id}:`, error); + return actionError(error, "Failed to update proxy host. Please check the logs for details."); + } +} + +export async function deleteProxyHostAction( + id: number, + _prevState: ActionState = INITIAL_ACTION_STATE +): Promise { + try { + const session = await requireUser(); + const user = session.user; + const userId = Number(user.id); + await deleteProxyHost(id, userId); + revalidatePath("/proxy-hosts"); + return actionSuccess("Proxy host deleted."); + } catch (error) { + console.error(`Failed to delete proxy host ${id}:`, error); + return actionError(error, "Failed to delete proxy host. Please check the logs for details."); + } } diff --git a/app/(dashboard)/proxy-hosts/page.tsx b/app/(dashboard)/proxy-hosts/page.tsx index cbe41f98..566f9220 100644 --- a/app/(dashboard)/proxy-hosts/page.tsx +++ b/app/(dashboard)/proxy-hosts/page.tsx @@ -3,10 +3,12 @@ import { listProxyHosts } from "@/src/lib/models/proxy-hosts"; import { listCertificates } from "@/src/lib/models/certificates"; import { listAccessLists } from "@/src/lib/models/access-lists"; -export default function ProxyHostsPage() { - const hosts = listProxyHosts(); - const certificates = listCertificates(); - const accessLists = listAccessLists(); +export default async function ProxyHostsPage() { + const [hosts, certificates, accessLists] = await Promise.all([ + listProxyHosts(), + listCertificates(), + listAccessLists() + ]); return ; } diff --git a/app/(dashboard)/redirects/RedirectsClient.tsx b/app/(dashboard)/redirects/RedirectsClient.tsx index 0b631243..3434e0c6 100644 --- a/app/(dashboard)/redirects/RedirectsClient.tsx +++ b/app/(dashboard)/redirects/RedirectsClient.tsx @@ -1,22 +1,37 @@ "use client"; -import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; +import { useState } from "react"; import { - Accordion, - AccordionDetails, - AccordionSummary, + Alert, Box, Button, Card, - CardContent, + Checkbox, Chip, + Dialog, + DialogActions, + DialogContent, + DialogTitle, FormControlLabel, + IconButton, Stack, + Table, + TableBody, + TableCell, + TableContainer, + TableHead, + TableRow, TextField, Typography, - Checkbox + Tooltip } from "@mui/material"; +import AddIcon from "@mui/icons-material/Add"; +import EditIcon from "@mui/icons-material/Edit"; +import DeleteIcon from "@mui/icons-material/Delete"; +import CloseIcon from "@mui/icons-material/Close"; +import { useFormState } from "react-dom"; import type { RedirectHost } from "@/src/lib/models/redirect-hosts"; +import { INITIAL_ACTION_STATE } from "@/src/lib/actions"; import { createRedirectAction, deleteRedirectAction, updateRedirectAction } from "./actions"; type Props = { @@ -24,134 +39,424 @@ type Props = { }; export default function RedirectsClient({ redirects }: Props) { + const [createOpen, setCreateOpen] = useState(false); + const [editRedirect, setEditRedirect] = useState(null); + const [deleteRedirect, setDeleteRedirect] = useState(null); + return ( - - - Redirects - - Return HTTP 301/302 responses to guide clients toward canonical hosts. + + + + Redirects + + + Return HTTP 301/302 responses to guide clients toward canonical hosts. + + + - - {redirects.map((redirect) => ( - - - - - - {redirect.name} - - - {redirect.domains.join(", ")} - - - - - - - } sx={{ px: 0 }}> - Edit - - - updateRedirectAction(redirect.id, formData)} spacing={2}> - - + + + + Name + Domains + Destination + Status Code + Status + Actions + + + + {redirects.length === 0 ? ( + + + No redirects configured. Click "Create Redirect" to add one. + + + ) : ( + redirects.map((redirect) => ( + + + + {redirect.name} + + + + + {redirect.domains.join(", ")} + + + + + {redirect.destination} + + + + - - + + - - - - - - - - - - + + + + + setEditRedirect(redirect)} + sx={{ + color: "rgba(99, 102, 241, 0.8)", + "&:hover": { bgcolor: "rgba(99, 102, 241, 0.1)" } + }} + > + + + + + setDeleteRedirect(redirect)} + sx={{ + color: "rgba(239, 68, 68, 0.8)", + "&:hover": { bgcolor: "rgba(239, 68, 68, 0.1)" } + }} + > + + + + + + + )) + )} + +
+ - - - -
-
- ))} -
+ setCreateOpen(false)} /> - - - Create redirect - - - - - - - - - - } label="Preserve path/query" /> - } label="Enabled" /> - - - - - - - - + {editRedirect && ( + setEditRedirect(null)} + /> + )} + + {deleteRedirect && ( + setDeleteRedirect(null)} + /> + )}
); } +function CreateRedirectDialog({ open, onClose }: { open: boolean; onClose: () => void }) { + const [state, formAction] = useFormState(createRedirectAction, INITIAL_ACTION_STATE); + + return ( + + + + Create Redirect + + + + + + + + {state.status !== "idle" && state.message && ( + state.status === "success" && onClose()}> + {state.message} + + )} + + + + + + + + + + + + + + + + ); +} + +function EditRedirectDialog({ + open, + redirect, + onClose +}: { + open: boolean; + redirect: RedirectHost; + onClose: () => void; +}) { + const [state, formAction] = useFormState(updateRedirectAction.bind(null, redirect.id), INITIAL_ACTION_STATE); + + return ( + + + + Edit Redirect + + + + + + + + {state.status !== "idle" && state.message && ( + state.status === "success" && onClose()}> + {state.message} + + )} + + + + + + + + + + + + + + + + ); +} + +function DeleteRedirectDialog({ + open, + redirect, + onClose +}: { + open: boolean; + redirect: RedirectHost; + onClose: () => void; +}) { + const [state, formAction] = useFormState(deleteRedirectAction.bind(null, redirect.id), INITIAL_ACTION_STATE); + + return ( + + + + Delete Redirect + + + + + + + + {state.status !== "idle" && state.message && ( + state.status === "success" && onClose()}> + {state.message} + + )} + + Are you sure you want to delete the redirect {redirect.name}? + + + This will remove the redirect from: + + + + • Domains: {redirect.domains.join(", ")} + + + • To: {redirect.destination} + + + + This action cannot be undone. + + + + + +
+ +
+
+
+ ); +} + function HiddenCheckboxField({ name, defaultChecked, label }: { name: string; defaultChecked: boolean; label: string }) { return ( - } label={label} /> + + } + label={{label}} + /> ); } diff --git a/app/(dashboard)/redirects/actions.ts b/app/(dashboard)/redirects/actions.ts index 507c4907..172b57f6 100644 --- a/app/(dashboard)/redirects/actions.ts +++ b/app/(dashboard)/redirects/actions.ts @@ -3,6 +3,7 @@ import { revalidatePath } from "next/cache"; import { requireUser } from "@/src/lib/auth"; import { createRedirectHost, deleteRedirectHost, updateRedirectHost } from "@/src/lib/models/redirect-hosts"; +import { actionSuccess, actionError, type ActionState } from "@/src/lib/actions"; function parseList(value: FormDataEntryValue | null): string[] { if (!value || typeof value !== "string") { @@ -15,41 +16,62 @@ function parseList(value: FormDataEntryValue | null): string[] { .filter(Boolean); } -export async function createRedirectAction(formData: FormData) { - const { user } = await requireUser(); - await createRedirectHost( - { - name: String(formData.get("name") ?? "Redirect"), - domains: parseList(formData.get("domains")), - destination: String(formData.get("destination") ?? ""), - status_code: formData.get("status_code") ? Number(formData.get("status_code")) : 302, - preserve_query: formData.get("preserve_query") === "on", - enabled: formData.has("enabled") ? formData.get("enabled") === "on" : true - }, - user.id - ); - revalidatePath("/redirects"); +export async function createRedirectAction(_prevState: ActionState, formData: FormData): Promise { + try { + const session = await requireUser(); + const user = session.user; + const userId = Number(user.id); + await createRedirectHost( + { + name: String(formData.get("name") ?? "Redirect"), + domains: parseList(formData.get("domains")), + destination: String(formData.get("destination") ?? ""), + status_code: formData.get("status_code") ? Number(formData.get("status_code")) : 302, + preserve_query: formData.get("preserve_query") === "on", + enabled: formData.has("enabled") ? formData.get("enabled") === "on" : true + }, + userId + ); + revalidatePath("/redirects"); + return actionSuccess("Redirect created successfully"); + } catch (error) { + return actionError(error, "Failed to create redirect"); + } } -export async function updateRedirectAction(id: number, formData: FormData) { - const { user } = await requireUser(); - await updateRedirectHost( - id, - { - name: formData.get("name") ? String(formData.get("name")) : undefined, - domains: formData.get("domains") ? parseList(formData.get("domains")) : undefined, - destination: formData.get("destination") ? String(formData.get("destination")) : undefined, - status_code: formData.get("status_code") ? Number(formData.get("status_code")) : undefined, - preserve_query: formData.has("preserve_query_present") ? formData.get("preserve_query") === "on" : undefined, - enabled: formData.has("enabled_present") ? formData.get("enabled") === "on" : undefined - }, - user.id - ); - revalidatePath("/redirects"); +export async function updateRedirectAction(id: number, _prevState: ActionState, formData: FormData): Promise { + try { + const session = await requireUser(); + const user = session.user; + const userId = Number(user.id); + await updateRedirectHost( + id, + { + name: formData.get("name") ? String(formData.get("name")) : undefined, + domains: formData.get("domains") ? parseList(formData.get("domains")) : undefined, + destination: formData.get("destination") ? String(formData.get("destination")) : undefined, + status_code: formData.get("status_code") ? Number(formData.get("status_code")) : undefined, + preserve_query: formData.has("preserve_query_present") ? formData.get("preserve_query") === "on" : undefined, + enabled: formData.has("enabled_present") ? formData.get("enabled") === "on" : undefined + }, + userId + ); + revalidatePath("/redirects"); + return actionSuccess("Redirect updated successfully"); + } catch (error) { + return actionError(error, "Failed to update redirect"); + } } -export async function deleteRedirectAction(id: number) { - const { user } = await requireUser(); - await deleteRedirectHost(id, user.id); - revalidatePath("/redirects"); +export async function deleteRedirectAction(id: number, _prevState: ActionState): Promise { + try { + const session = await requireUser(); + const user = session.user; + const userId = Number(user.id); + await deleteRedirectHost(id, userId); + revalidatePath("/redirects"); + return actionSuccess("Redirect deleted successfully"); + } catch (error) { + return actionError(error, "Failed to delete redirect"); + } } diff --git a/app/(dashboard)/redirects/page.tsx b/app/(dashboard)/redirects/page.tsx index 48f03aeb..71f6a8f7 100644 --- a/app/(dashboard)/redirects/page.tsx +++ b/app/(dashboard)/redirects/page.tsx @@ -1,7 +1,7 @@ import RedirectsClient from "./RedirectsClient"; import { listRedirectHosts } from "@/src/lib/models/redirect-hosts"; -export default function RedirectsPage() { - const redirects = listRedirectHosts(); +export default async function RedirectsPage() { + const redirects = await listRedirectHosts(); return ; } diff --git a/app/(dashboard)/settings/SettingsClient.tsx b/app/(dashboard)/settings/SettingsClient.tsx index 01eb3742..49e8d9e3 100644 --- a/app/(dashboard)/settings/SettingsClient.tsx +++ b/app/(dashboard)/settings/SettingsClient.tsx @@ -1,29 +1,29 @@ "use client"; -import { useState } from "react"; -import { Box, Button, Card, CardContent, FormControl, FormControlLabel, FormLabel, Radio, RadioGroup, Stack, TextField, Typography } from "@mui/material"; -import type { CloudflareSettings, GeneralSettings, OAuthSettings } from "@/src/lib/settings"; +import { useFormState } from "react-dom"; +import { Alert, Box, Button, Card, CardContent, Stack, TextField, Typography } from "@mui/material"; +import type { CloudflareSettings, GeneralSettings } from "@/src/lib/settings"; import { updateCloudflareSettingsAction, - updateGeneralSettingsAction, - updateOAuthSettingsAction + updateGeneralSettingsAction } from "./actions"; type Props = { general: GeneralSettings | null; - oauth: OAuthSettings | null; cloudflare: CloudflareSettings | null; }; -export default function SettingsClient({ general, oauth, cloudflare }: Props) { - const [providerType, setProviderType] = useState<"authentik" | "generic">(oauth?.providerType || "authentik"); +export default function SettingsClient({ general, cloudflare }: Props) { + const [generalState, generalFormAction] = useFormState(updateGeneralSettingsAction, null); + const [cloudflareState, cloudflareFormAction] = useFormState(updateCloudflareSettingsAction, null); + return ( Settings - Configure organization-wide defaults, authentication, and DNS automation. + Configure organization-wide defaults and DNS automation. @@ -31,7 +31,12 @@ export default function SettingsClient({ general, oauth, cloudflare }: Props) { General - + + {generalState?.message && ( + + {generalState.message} + + )} - - - - OAuth2/OIDC Authentication - - - Provide the OAuth 2.0/OIDC endpoints and client credentials issued by your identity provider. Scopes should include profile and - email data. - - - - Provider Type - setProviderType(e.target.value as "authentik" | "generic")} - > - } label="Authentik (OIDC)" /> - } label="Generic OAuth2" /> - - - - {providerType === "authentik" ? ( - <> - - - - - - ) : ( - <> - - - - - - - - - - - - - )} - - - - - - - @@ -124,7 +68,12 @@ export default function SettingsClient({ general, oauth, cloudflare }: Props) { Configure a Cloudflare API token with Zone.DNS Edit permissions to enable DNS-01 challenges for wildcard certificates. - + + {cloudflareState?.message && ( + + {cloudflareState.message} + + )} diff --git a/app/(dashboard)/settings/actions.ts b/app/(dashboard)/settings/actions.ts index f115460e..36ae6adc 100644 --- a/app/(dashboard)/settings/actions.ts +++ b/app/(dashboard)/settings/actions.ts @@ -1,51 +1,60 @@ "use server"; import { revalidatePath } from "next/cache"; -import { requireUser } from "@/src/lib/auth"; +import { requireAdmin } from "@/src/lib/auth"; import { applyCaddyConfig } from "@/src/lib/caddy"; -import { saveCloudflareSettings, saveGeneralSettings, saveOAuthSettings } from "@/src/lib/settings"; +import { saveCloudflareSettings, saveGeneralSettings } from "@/src/lib/settings"; -export async function updateGeneralSettingsAction(formData: FormData) { - await requireUser(); // ensure authenticated - saveGeneralSettings({ - primaryDomain: String(formData.get("primaryDomain") ?? ""), - acmeEmail: formData.get("acmeEmail") ? String(formData.get("acmeEmail")) : undefined - }); - revalidatePath("/settings"); -} +type ActionResult = { + success: boolean; + message?: string; +}; -export async function updateOAuthSettingsAction(formData: FormData) { - await requireUser(); - - const providerType = String(formData.get("providerType") ?? "authentik"); - - saveOAuthSettings({ - providerType: providerType === "generic" ? "generic" : "authentik", - authorizationUrl: String(formData.get("authorizationUrl") ?? ""), - tokenUrl: String(formData.get("tokenUrl") ?? ""), - clientId: String(formData.get("clientId") ?? ""), - clientSecret: String(formData.get("clientSecret") ?? ""), - userInfoUrl: String(formData.get("userInfoUrl") ?? ""), - scopes: String(formData.get("scopes") ?? ""), - emailClaim: formData.get("emailClaim") ? String(formData.get("emailClaim")) : undefined, - nameClaim: formData.get("nameClaim") ? String(formData.get("nameClaim")) : undefined, - avatarClaim: formData.get("avatarClaim") ? String(formData.get("avatarClaim")) : undefined - }); - revalidatePath("/settings"); -} - -export async function updateCloudflareSettingsAction(formData: FormData) { - await requireUser(); - const apiToken = String(formData.get("apiToken") ?? ""); - if (!apiToken) { - saveCloudflareSettings({ apiToken: "", zoneId: undefined, accountId: undefined }); - } else { - saveCloudflareSettings({ - apiToken, - zoneId: formData.get("zoneId") ? String(formData.get("zoneId")) : undefined, - accountId: formData.get("accountId") ? String(formData.get("accountId")) : undefined +export async function updateGeneralSettingsAction(_prevState: ActionResult | null, formData: FormData): Promise { + try { + await requireAdmin(); + saveGeneralSettings({ + primaryDomain: String(formData.get("primaryDomain") ?? ""), + acmeEmail: formData.get("acmeEmail") ? String(formData.get("acmeEmail")) : undefined }); + revalidatePath("/settings"); + return { success: true, message: "General settings saved successfully" }; + } catch (error) { + console.error("Failed to save general settings:", error); + return { success: false, message: error instanceof Error ? error.message : "Failed to save general settings" }; + } +} + +export async function updateCloudflareSettingsAction(_prevState: ActionResult | null, formData: FormData): Promise { + try { + await requireAdmin(); + const apiToken = String(formData.get("apiToken") ?? ""); + if (!apiToken) { + saveCloudflareSettings({ apiToken: "", zoneId: undefined, accountId: undefined }); + } else { + saveCloudflareSettings({ + apiToken, + zoneId: formData.get("zoneId") ? String(formData.get("zoneId")) : undefined, + accountId: formData.get("accountId") ? String(formData.get("accountId")) : undefined + }); + } + + // Try to apply the config, but don't fail if Caddy is unreachable + try { + await applyCaddyConfig(); + revalidatePath("/settings"); + return { success: true, message: "Cloudflare settings saved and applied to Caddy successfully" }; + } catch (error) { + console.error("Failed to apply Caddy config:", error); + revalidatePath("/settings"); + const errorMsg = error instanceof Error ? error.message : "Unknown error"; + return { + success: true, // Settings were saved successfully + message: `Settings saved, but could not apply to Caddy: ${errorMsg}. You may need to start Caddy or check your configuration.` + }; + } + } catch (error) { + console.error("Failed to save Cloudflare settings:", error); + return { success: false, message: error instanceof Error ? error.message : "Failed to save Cloudflare settings" }; } - await applyCaddyConfig(); - revalidatePath("/settings"); } diff --git a/app/(dashboard)/settings/page.tsx b/app/(dashboard)/settings/page.tsx index 25994d49..a71af942 100644 --- a/app/(dashboard)/settings/page.tsx +++ b/app/(dashboard)/settings/page.tsx @@ -1,12 +1,19 @@ import SettingsClient from "./SettingsClient"; -import { getCloudflareSettings, getGeneralSettings, getOAuthSettings } from "@/src/lib/settings"; +import { getCloudflareSettings, getGeneralSettings } from "@/src/lib/settings"; +import { requireAdmin } from "@/src/lib/auth"; + +export default async function SettingsPage() { + await requireAdmin(); + + const [general, cloudflare] = await Promise.all([ + getGeneralSettings(), + getCloudflareSettings() + ]); -export default function SettingsPage() { return ( ); } diff --git a/app/(dashboard)/streams/StreamsClient.tsx b/app/(dashboard)/streams/StreamsClient.tsx deleted file mode 100644 index 9cf1838e..00000000 --- a/app/(dashboard)/streams/StreamsClient.tsx +++ /dev/null @@ -1,134 +0,0 @@ -"use client"; - -import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; -import { - Accordion, - AccordionDetails, - AccordionSummary, - Box, - Button, - Card, - CardContent, - Chip, - FormControlLabel, - MenuItem, - Stack, - TextField, - Typography, - Checkbox -} from "@mui/material"; -import type { StreamHost } from "@/src/lib/models/stream-hosts"; -import { createStreamAction, deleteStreamAction, updateStreamAction } from "./actions"; - -type Props = { - streams: StreamHost[]; -}; - -export default function StreamsClient({ streams }: Props) { - return ( - - - - Streams - - Forward raw TCP/UDP connections through Caddy's layer4 module. - - - - {streams.map((stream) => ( - - - - - - {stream.name} - - - Listens on :{stream.listen_port} ({stream.protocol.toUpperCase()}) → {stream.upstream} - - - - - - - } sx={{ px: 0 }}> - Edit - - - updateStreamAction(stream.id, formData)} spacing={2}> - - - - TCP - UDP - - - - - } label="Enabled" /> - - - - - - - - - - - - - - ))} - - - - - Create stream - - - - - - - - TCP - UDP - - - } label="Enabled" /> - - - - - - - - - ); -} diff --git a/app/(dashboard)/streams/actions.ts b/app/(dashboard)/streams/actions.ts deleted file mode 100644 index 4fe6b0d7..00000000 --- a/app/(dashboard)/streams/actions.ts +++ /dev/null @@ -1,42 +0,0 @@ -"use server"; - -import { revalidatePath } from "next/cache"; -import { requireUser } from "@/src/lib/auth"; -import { createStreamHost, deleteStreamHost, updateStreamHost } from "@/src/lib/models/stream-hosts"; - -export async function createStreamAction(formData: FormData) { - const { user } = await requireUser(); - await createStreamHost( - { - name: String(formData.get("name") ?? "Stream"), - listen_port: Number(formData.get("listen_port")), - protocol: String(formData.get("protocol") ?? "tcp"), - upstream: String(formData.get("upstream") ?? ""), - enabled: formData.has("enabled") ? formData.get("enabled") === "on" : true - }, - user.id - ); - revalidatePath("/streams"); -} - -export async function updateStreamAction(id: number, formData: FormData) { - const { user } = await requireUser(); - await updateStreamHost( - id, - { - name: formData.get("name") ? String(formData.get("name")) : undefined, - listen_port: formData.get("listen_port") ? Number(formData.get("listen_port")) : undefined, - protocol: formData.get("protocol") ? String(formData.get("protocol")) : undefined, - upstream: formData.get("upstream") ? String(formData.get("upstream")) : undefined, - enabled: formData.has("enabled_present") ? formData.get("enabled") === "on" : undefined - }, - user.id - ); - revalidatePath("/streams"); -} - -export async function deleteStreamAction(id: number) { - const { user } = await requireUser(); - await deleteStreamHost(id, user.id); - revalidatePath("/streams"); -} diff --git a/app/(dashboard)/streams/page.tsx b/app/(dashboard)/streams/page.tsx deleted file mode 100644 index b759400e..00000000 --- a/app/(dashboard)/streams/page.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import StreamsClient from "./StreamsClient"; -import { listStreamHosts } from "@/src/lib/models/stream-hosts"; - -export default function StreamsPage() { - const streams = listStreamHosts(); - return ; -} diff --git a/app/setup/oauth/SetupClient.tsx b/app/setup/oauth/SetupClient.tsx deleted file mode 100644 index 33ddc3f4..00000000 --- a/app/setup/oauth/SetupClient.tsx +++ /dev/null @@ -1,97 +0,0 @@ -"use client"; - -import { useState } from "react"; -import Grid from "@mui/material/Grid"; -import { Box, Button, Card, CardContent, FormControl, FormControlLabel, FormLabel, Radio, RadioGroup, Stack, TextField, Typography } from "@mui/material"; - -export default function OAuthSetupClient({ startSetup }: { startSetup: (formData: FormData) => void }) { - const [providerType, setProviderType] = useState<"authentik" | "generic">("authentik"); - - return ( - - - - - - - Configure OAuth2/OIDC - - - Provide the OAuth configuration for your identity provider to finish setting up Caddy Proxy Manager. The first user who - signs in becomes the administrator. - - - - - - Provider Type - setProviderType(e.target.value as "authentik" | "generic")} - > - } label="Authentik (OIDC)" /> - } label="Generic OAuth2" /> - - - - {providerType === "authentik" ? ( - <> - - - - - - ) : ( - <> - - - - - - - - - - - - - - - - - - - )} - - - - - - - - - ); -} diff --git a/app/setup/oauth/actions.ts b/app/setup/oauth/actions.ts deleted file mode 100644 index b94af6cb..00000000 --- a/app/setup/oauth/actions.ts +++ /dev/null @@ -1,25 +0,0 @@ -"use server"; - -import { redirect } from "next/navigation"; -import { getUserCount } from "@/src/lib/models/user"; -import { saveOAuthSettings } from "@/src/lib/settings"; - -export async function initialOAuthSetupAction(formData: FormData) { - // Allow reconfiguring OAuth even if users exist (in case settings were lost) - // Just save the settings and redirect - const providerType = String(formData.get("providerType") ?? "authentik"); - - saveOAuthSettings({ - providerType: providerType === "generic" ? "generic" : "authentik", - authorizationUrl: String(formData.get("authorizationUrl") ?? ""), - tokenUrl: String(formData.get("tokenUrl") ?? ""), - userInfoUrl: String(formData.get("userInfoUrl") ?? ""), - clientId: String(formData.get("clientId") ?? ""), - clientSecret: String(formData.get("clientSecret") ?? ""), - scopes: String(formData.get("scopes") ?? ""), - emailClaim: formData.get("emailClaim") ? String(formData.get("emailClaim")) : undefined, - nameClaim: formData.get("nameClaim") ? String(formData.get("nameClaim")) : undefined, - avatarClaim: formData.get("avatarClaim") ? String(formData.get("avatarClaim")) : undefined - }); - redirect("/login"); -} diff --git a/app/setup/oauth/page.tsx b/app/setup/oauth/page.tsx deleted file mode 100644 index 9a8ea912..00000000 --- a/app/setup/oauth/page.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import { redirect } from "next/navigation"; -import { getOAuthSettings } from "@/src/lib/settings"; -import { getUserCount } from "@/src/lib/models/user"; -import { initialOAuthSetupAction } from "./actions"; -import OAuthSetupClient from "./SetupClient"; - -export default function OAuthSetupPage() { - // Only redirect if BOTH users exist AND OAuth is configured - // This allows reconfiguring OAuth even if users exist - const hasUsers = getUserCount() > 0; - const hasOAuth = getOAuthSettings(); - - if (hasUsers && hasOAuth) { - redirect("/login"); - } - - return ; -} diff --git a/compose.yaml b/compose.yaml deleted file mode 100644 index f81cdf21..00000000 --- a/compose.yaml +++ /dev/null @@ -1,32 +0,0 @@ -services: - app: - build: - context: . - dockerfile: docker/web/Dockerfile - ports: - - "3000:3000" - environment: - NODE_ENV: production - DATABASE_PATH: /data/app/app.db - SESSION_SECRET: ${SESSION_SECRET:-change-me} - CADDY_API_URL: http://caddy:2019 - CERTS_DIRECTORY: /data/certs - volumes: - - ./data/app:/data/app - - ./data/certs:/data/certs - depends_on: - - caddy - - caddy: - build: - context: . - dockerfile: docker/caddy/Dockerfile - ports: - - "80:80" - - "443:443" - - "2019:2019" - environment: - PRIMARY_DOMAIN: ${PRIMARY_DOMAIN:-caddyproxymanager.com} - volumes: - - ./data/caddy:/data - - ./data/certs:/data/certs:ro diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..3223f1ee --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,78 @@ +services: + web: + container_name: caddy-proxy-manager-web + image: ghcr.io/fuomag9/caddy-proxy-manager-web:latest + build: + context: . + dockerfile: docker/web/Dockerfile + restart: unless-stopped + ports: + - "3000:3000" + environment: + # Node environment + NODE_ENV: production + + # REQUIRED: Change this to a random secure string in production + # Generate with: openssl rand -base64 32 + SESSION_SECRET: ${SESSION_SECRET:-change-me-in-production} + + # Caddy API endpoint (internal communication) + CADDY_API_URL: ${CADDY_API_URL:-http://caddy:2019} + + # Public base URL for the application + BASE_URL: ${BASE_URL:-http://localhost:3000} + + # Database configuration + DATABASE_PATH: /app/data/caddy-proxy-manager.db + DATABASE_URL: file:/app/data/caddy-proxy-manager.db + + # NextAuth configuration + NEXTAUTH_URL: ${BASE_URL:-http://localhost:3000} + + # REQUIRED: Admin credentials for login + # WARNING: Change these values! Do not use defaults in production! + ADMIN_USERNAME: ${ADMIN_USERNAME:-admin} + ADMIN_PASSWORD: ${ADMIN_PASSWORD:-admin} + volumes: + - ./data:/app/data + depends_on: + caddy: + condition: service_healthy + networks: + - caddy-network + healthcheck: + test: ["CMD", "node", "-e", "require('http').get('http://localhost:3000/api/health', (r) => process.exit(r.statusCode === 200 ? 0 : 1))"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 40s + + caddy: + container_name: caddy-proxy-manager-caddy + image: ghcr.io/fuomag9/caddy-proxy-manager-caddy:latest + build: + context: . + dockerfile: docker/caddy/Dockerfile + restart: unless-stopped + ports: + - "80:80" + - "443:443" + - "2019:2019" + environment: + # Primary domain for Caddy configuration + PRIMARY_DOMAIN: ${PRIMARY_DOMAIN:-caddyproxymanager.com} + volumes: + - ./caddy-data:/data + - ./caddy-config:/config + networks: + - caddy-network + healthcheck: + test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:2019/config/"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 10s + +networks: + caddy-network: + driver: bridge diff --git a/docker/web/Dockerfile b/docker/web/Dockerfile index 4ce271ef..909e53b1 100644 --- a/docker/web/Dockerfile +++ b/docker/web/Dockerfile @@ -1,30 +1,50 @@ # syntax=docker/dockerfile:1.6 -FROM node:20-alpine AS base +FROM node:20-slim AS base WORKDIR /app FROM base AS deps +# Install build dependencies for native modules like better-sqlite3 +RUN apt-get update && apt-get install -y --no-install-recommends \ + python3 \ + make \ + g++ \ + && rm -rf /var/lib/apt/lists/* COPY package.json package-lock.json* ./ RUN if [ -f package-lock.json ]; then npm ci; else npm install; fi FROM base AS builder ENV NODE_ENV=production +ENV NEXT_TELEMETRY_DISABLED=1 +# Set a temporary database path for build +ENV DATABASE_PATH=/tmp/build.db +ENV DATABASE_URL=file:/tmp/build.db COPY --from=deps /app/node_modules ./node_modules COPY . . -RUN npm run build +RUN npx prisma generate +RUN npx prisma db push --skip-generate +RUN npm run build && rm -f /tmp/build.db FROM base AS runner ENV NODE_ENV=production ENV PORT=3000 WORKDIR /app -RUN addgroup -g 1001 nodejs && adduser -S nextjs -G nodejs +RUN groupadd -g 1001 nodejs && useradd -r -u 1001 -g nodejs nextjs COPY --from=builder /app/public ./public COPY --from=builder /app/.next/standalone ./ COPY --from=builder /app/.next/static ./.next/static COPY --from=builder /app/package.json ./package.json +# Copy Prisma client +COPY --from=builder /app/node_modules/.prisma ./node_modules/.prisma +COPY --from=builder /app/node_modules/@prisma ./node_modules/@prisma +COPY --from=builder /app/prisma ./prisma + +# Create data directory for SQLite database +RUN mkdir -p /app/data && chown -R nextjs:nodejs /app/data + USER nextjs EXPOSE 3000 diff --git a/package-lock.json b/package-lock.json index ab5bc9a3..9ca1db79 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,11 +12,13 @@ "@emotion/styled": "^11.14.1", "@mui/icons-material": "^7.3.4", "@mui/material": "^7.3.4", + "@prisma/client": "^6.18.0", "@types/better-sqlite3": "^7.6.13", "bcryptjs": "^3.0.2", "better-sqlite3": "^12.4.1", "next": "^16.0.1", "next-auth": "^5.0.0-beta.30", + "prisma": "^6.18.0", "react": "^19.2.0", "react-dom": "^19.2.0" }, @@ -88,6 +90,7 @@ "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -428,6 +431,7 @@ "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz", "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.13.5", @@ -471,6 +475,7 @@ "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.1.tgz", "integrity": "sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==", "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.13.5", @@ -1240,6 +1245,7 @@ "resolved": "https://registry.npmjs.org/@mui/material/-/material-7.3.4.tgz", "integrity": "sha512-gEQL9pbJZZHT7lYJBKQCS723v1MGys2IFc94COXbUIyCTWa+qC77a7hUax4Yjd5ggEm35dk4AyYABpKKWC4MLw==", "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.28.4", "@mui/core-downloads-tracker": "^7.3.4", @@ -1668,6 +1674,85 @@ "url": "https://opencollective.com/popperjs" } }, + "node_modules/@prisma/client": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-6.18.0.tgz", + "integrity": "sha512-jnL2I9gDnPnw4A+4h5SuNn8Gc+1mL1Z79U/3I9eE2gbxJG1oSA+62ByPW4xkeDgwE0fqMzzpAZ7IHxYnLZ4iQA==", + "hasInstallScript": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "peerDependencies": { + "prisma": "*", + "typescript": ">=5.1.0" + }, + "peerDependenciesMeta": { + "prisma": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/@prisma/config": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/@prisma/config/-/config-6.18.0.tgz", + "integrity": "sha512-rgFzspCpwsE+q3OF/xkp0fI2SJ3PfNe9LLMmuSVbAZ4nN66WfBiKqJKo/hLz3ysxiPQZf8h1SMf2ilqPMeWATQ==", + "license": "Apache-2.0", + "dependencies": { + "c12": "3.1.0", + "deepmerge-ts": "7.1.5", + "effect": "3.18.4", + "empathic": "2.0.0" + } + }, + "node_modules/@prisma/debug": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.18.0.tgz", + "integrity": "sha512-PMVPMmxPj0ps1VY75DIrT430MoOyQx9hmm174k6cmLZpcI95rAPXOQ+pp8ANQkJtNyLVDxnxVJ0QLbrm/ViBcg==", + "license": "Apache-2.0" + }, + "node_modules/@prisma/engines": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.18.0.tgz", + "integrity": "sha512-i5RzjGF/ex6AFgqEe2o1IW8iIxJGYVQJVRau13kHPYEL1Ck8Zvwuzamqed/1iIljs5C7L+Opiz5TzSsUebkriA==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "6.18.0", + "@prisma/engines-version": "6.18.0-8.34b5a692b7bd79939a9a2c3ef97d816e749cda2f", + "@prisma/fetch-engine": "6.18.0", + "@prisma/get-platform": "6.18.0" + } + }, + "node_modules/@prisma/engines-version": { + "version": "6.18.0-8.34b5a692b7bd79939a9a2c3ef97d816e749cda2f", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.18.0-8.34b5a692b7bd79939a9a2c3ef97d816e749cda2f.tgz", + "integrity": "sha512-T7Af4QsJQnSgWN1zBbX+Cha5t4qjHRxoeoWpK4JugJzG/ipmmDMY5S+O0N1ET6sCBNVkf6lz+Y+ZNO9+wFU8pQ==", + "license": "Apache-2.0" + }, + "node_modules/@prisma/fetch-engine": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.18.0.tgz", + "integrity": "sha512-TdaBvTtBwP3IoqVYoGIYpD4mWlk0pJpjTJjir/xLeNWlwog7Sl3bD2J0jJ8+5+q/6RBg+acb9drsv5W6lqae7A==", + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "6.18.0", + "@prisma/engines-version": "6.18.0-8.34b5a692b7bd79939a9a2c3ef97d816e749cda2f", + "@prisma/get-platform": "6.18.0" + } + }, + "node_modules/@prisma/get-platform": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.18.0.tgz", + "integrity": "sha512-uXNJCJGhxTCXo2B25Ta91Rk1/Nmlqg9p7G9GKh8TPhxvAyXCvMNQoogj4JLEUy+3ku8g59cpyQIKFhqY2xO2bg==", + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "6.18.0" + } + }, "node_modules/@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", @@ -1675,6 +1760,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@standard-schema/spec": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", + "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", + "license": "MIT" + }, "node_modules/@swc/helpers": { "version": "0.5.15", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", @@ -1751,6 +1842,7 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.2.tgz", "integrity": "sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==", "license": "MIT", + "peer": true, "dependencies": { "csstype": "^3.0.2" } @@ -1820,6 +1912,7 @@ "integrity": "sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.46.2", "@typescript-eslint/types": "8.46.2", @@ -2350,6 +2443,7 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -2769,6 +2863,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.8.19", "caniuse-lite": "^1.0.30001751", @@ -2807,6 +2902,34 @@ "ieee754": "^1.1.13" } }, + "node_modules/c12": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/c12/-/c12-3.1.0.tgz", + "integrity": "sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw==", + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.3", + "confbox": "^0.2.2", + "defu": "^6.1.4", + "dotenv": "^16.6.1", + "exsolve": "^1.0.7", + "giget": "^2.0.0", + "jiti": "^2.4.2", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "perfect-debounce": "^1.0.0", + "pkg-types": "^2.2.0", + "rc9": "^2.1.2" + }, + "peerDependencies": { + "magicast": "^0.3.5" + }, + "peerDependenciesMeta": { + "magicast": { + "optional": true + } + } + }, "node_modules/call-bind": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", @@ -2903,12 +3026,36 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "license": "ISC" }, + "node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "license": "MIT", + "dependencies": { + "consola": "^3.2.3" + } + }, "node_modules/client-only": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", @@ -2951,6 +3098,21 @@ "dev": true, "license": "MIT" }, + "node_modules/confbox": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz", + "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==", + "license": "MIT" + }, + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, "node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", @@ -3103,6 +3265,15 @@ "dev": true, "license": "MIT" }, + "node_modules/deepmerge-ts": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-7.1.5.tgz", + "integrity": "sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", @@ -3139,6 +3310,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "license": "MIT" + }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "license": "MIT" + }, "node_modules/detect-libc": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", @@ -3158,6 +3341,18 @@ "csstype": "^3.0.2" } }, + "node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -3173,6 +3368,16 @@ "node": ">= 0.4" } }, + "node_modules/effect": { + "version": "3.18.4", + "resolved": "https://registry.npmjs.org/effect/-/effect-3.18.4.tgz", + "integrity": "sha512-b1LXQJLe9D11wfnOKAk3PKxuqYshQ0Heez+y5pnkd3jLj1yx9QhM72zZ9uUrOQyNvrs2GZZd/3maL0ZV18YuDA==", + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "fast-check": "^3.23.1" + } + }, "node_modules/electron-to-chromium": { "version": "1.5.244", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.244.tgz", @@ -3187,6 +3392,15 @@ "dev": true, "license": "MIT" }, + "node_modules/empathic": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.0.tgz", + "integrity": "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, "node_modules/end-of-stream": { "version": "1.4.5", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", @@ -3410,6 +3624,7 @@ "integrity": "sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -3595,6 +3810,7 @@ "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -3909,6 +4125,34 @@ "node": ">=6" } }, + "node_modules/exsolve": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.7.tgz", + "integrity": "sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==", + "license": "MIT" + }, + "node_modules/fast-check": { + "version": "3.23.2", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.23.2.tgz", + "integrity": "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT", + "dependencies": { + "pure-rand": "^6.1.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -4198,6 +4442,23 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, + "node_modules/giget": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/giget/-/giget-2.0.0.tgz", + "integrity": "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==", + "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.0", + "defu": "^6.1.4", + "node-fetch-native": "^1.6.6", + "nypm": "^0.6.0", + "pathe": "^2.0.3" + }, + "bin": { + "giget": "dist/cli.mjs" + } + }, "node_modules/github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", @@ -4908,6 +5169,15 @@ "node": ">= 0.4" } }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, "node_modules/jose": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jose/-/jose-6.1.0.tgz", @@ -5231,6 +5501,7 @@ "resolved": "https://registry.npmjs.org/next/-/next-16.0.1.tgz", "integrity": "sha512-e9RLSssZwd35p7/vOa+hoDFggUZIUbZhIUSLZuETCwrCVvxOs87NamoUzT+vbcNAL8Ld9GobBnWOA6SbV/arOw==", "license": "MIT", + "peer": true, "dependencies": { "@next/env": "16.0.1", "@swc/helpers": "0.5.15", @@ -5317,6 +5588,12 @@ "node": ">=10" } }, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "license": "MIT" + }, "node_modules/node-releases": { "version": "2.0.27", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", @@ -5324,6 +5601,25 @@ "dev": true, "license": "MIT" }, + "node_modules/nypm": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.2.tgz", + "integrity": "sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==", + "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.2", + "pathe": "^2.0.3", + "pkg-types": "^2.3.0", + "tinyexec": "^1.0.1" + }, + "bin": { + "nypm": "dist/cli.mjs" + }, + "engines": { + "node": "^14.16.0 || >=16.10.0" + } + }, "node_modules/oauth4webapi": { "version": "3.8.2", "resolved": "https://registry.npmjs.org/oauth4webapi/-/oauth4webapi-3.8.2.tgz", @@ -5455,6 +5751,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "license": "MIT" + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -5597,6 +5899,18 @@ "node": ">=8" } }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "license": "MIT" + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "license": "MIT" + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -5616,6 +5930,17 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pkg-types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz", + "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", + "license": "MIT", + "dependencies": { + "confbox": "^0.2.2", + "exsolve": "^1.0.7", + "pathe": "^2.0.3" + } + }, "node_modules/possible-typed-array-names": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", @@ -5659,6 +5984,7 @@ "resolved": "https://registry.npmjs.org/preact/-/preact-10.24.3.tgz", "integrity": "sha512-Z2dPnBnMUfyQfSQ+GBdsGa16hz35YmLmtTLhM169uW944hYL6xzTYkJjC07j+Wosz733pMWx0fgON3JNw1jJQA==", "license": "MIT", + "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" @@ -5709,6 +6035,32 @@ "node": ">= 0.8.0" } }, + "node_modules/prisma": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-6.18.0.tgz", + "integrity": "sha512-bXWy3vTk8mnRmT+SLyZBQoC2vtV9Z8u7OHvEu+aULYxwiop/CPiFZ+F56KsNRNf35jw+8wcu8pmLsjxpBxAO9g==", + "hasInstallScript": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@prisma/config": "6.18.0", + "@prisma/engines": "6.18.0" + }, + "bin": { + "prisma": "build/index.js" + }, + "engines": { + "node": ">=18.18" + }, + "peerDependencies": { + "typescript": ">=5.1.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -5740,6 +6092,22 @@ "node": ">=6" } }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -5785,11 +6153,22 @@ "node": ">=0.10.0" } }, + "node_modules/rc9": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz", + "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==", + "license": "MIT", + "dependencies": { + "defu": "^6.1.4", + "destr": "^2.0.3" + } + }, "node_modules/react": { "version": "19.2.0", "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -5799,6 +6178,7 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz", "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==", "license": "MIT", + "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -5842,6 +6222,19 @@ "node": ">= 6" } }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", @@ -6555,6 +6948,12 @@ "node": ">=6" } }, + "node_modules/tinyexec": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz", + "integrity": "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==", + "license": "MIT" + }, "node_modules/tinyglobby": { "version": "0.2.15", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", @@ -6596,6 +6995,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -6755,8 +7155,9 @@ "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "dev": true, + "devOptional": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -7052,6 +7453,7 @@ "integrity": "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==", "dev": true, "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/package.json b/package.json index 45fc68c2..ee41f27b 100644 --- a/package.json +++ b/package.json @@ -15,11 +15,13 @@ "@emotion/styled": "^11.14.1", "@mui/icons-material": "^7.3.4", "@mui/material": "^7.3.4", + "@prisma/client": "^6.18.0", "@types/better-sqlite3": "^7.6.13", "bcryptjs": "^3.0.2", "better-sqlite3": "^12.4.1", "next": "^16.0.1", "next-auth": "^5.0.0-beta.30", + "prisma": "^6.18.0", "react": "^19.2.0", "react-dom": "^19.2.0" }, diff --git a/prisma/schema.prisma b/prisma/schema.prisma new file mode 100644 index 00000000..9fb074f6 --- /dev/null +++ b/prisma/schema.prisma @@ -0,0 +1,205 @@ +// This is your Prisma schema file, +// learn more about it in the docs: https://pris.ly/d/prisma-schema + +generator client { + provider = "prisma-client-js" +} + +datasource db { + provider = "sqlite" + url = env("DATABASE_URL") +} + +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + passwordHash String? @map("password_hash") + role String @default("user") + provider String + subject String + avatarUrl String? @map("avatar_url") + status String @default("active") + createdAt DateTime @map("created_at") + updatedAt DateTime @map("updated_at") + + sessions Session[] + accessLists AccessList[] + certificates Certificate[] + proxyHosts ProxyHost[] + redirectHosts RedirectHost[] + deadHosts DeadHost[] + apiTokens ApiToken[] + auditEvents AuditEvent[] + + @@map("users") +} + +model Session { + id Int @id @default(autoincrement()) + userId Int @map("user_id") + token String @unique + expiresAt DateTime @map("expires_at") + createdAt DateTime @map("created_at") + + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + + @@index([token]) + @@map("sessions") +} + +model OAuthState { + id Int @id @default(autoincrement()) + state String @unique + codeVerifier String @map("code_verifier") + redirectTo String? @map("redirect_to") + createdAt DateTime @map("created_at") + expiresAt DateTime @map("expires_at") + + @@map("oauth_states") +} + +model Setting { + key String @id + value String + updatedAt DateTime @map("updated_at") + + @@map("settings") +} + +model AccessList { + id Int @id @default(autoincrement()) + name String + description String? + createdBy Int? @map("created_by") + createdAt DateTime @map("created_at") + updatedAt DateTime @map("updated_at") + + user User? @relation(fields: [createdBy], references: [id], onDelete: SetNull) + entries AccessListEntry[] + proxyHosts ProxyHost[] + + @@map("access_lists") +} + +model AccessListEntry { + id Int @id @default(autoincrement()) + accessListId Int @map("access_list_id") + username String + passwordHash String @map("password_hash") + createdAt DateTime @map("created_at") + updatedAt DateTime @map("updated_at") + + accessList AccessList @relation(fields: [accessListId], references: [id], onDelete: Cascade) + + @@index([accessListId]) + @@map("access_list_entries") +} + +model Certificate { + id Int @id @default(autoincrement()) + name String + type String + domainNames String @map("domain_names") + autoRenew Boolean @default(true) @map("auto_renew") + providerOptions String? @map("provider_options") + certificatePem String? @map("certificate_pem") + privateKeyPem String? @map("private_key_pem") + createdBy Int? @map("created_by") + createdAt DateTime @map("created_at") + updatedAt DateTime @map("updated_at") + + user User? @relation(fields: [createdBy], references: [id], onDelete: SetNull) + proxyHosts ProxyHost[] + + @@map("certificates") +} + +model ProxyHost { + id Int @id @default(autoincrement()) + name String + domains String + upstreams String + certificateId Int? @map("certificate_id") + accessListId Int? @map("access_list_id") + ownerUserId Int? @map("owner_user_id") + sslForced Boolean @default(true) @map("ssl_forced") + hstsEnabled Boolean @default(true) @map("hsts_enabled") + hstsSubdomains Boolean @default(false) @map("hsts_subdomains") + allowWebsocket Boolean @default(true) @map("allow_websocket") + preserveHostHeader Boolean @default(true) @map("preserve_host_header") + meta String? + enabled Boolean @default(true) + createdAt DateTime @map("created_at") + updatedAt DateTime @map("updated_at") + skipHttpsHostnameValidation Boolean @default(false) @map("skip_https_hostname_validation") + + certificate Certificate? @relation(fields: [certificateId], references: [id], onDelete: SetNull) + accessList AccessList? @relation(fields: [accessListId], references: [id], onDelete: SetNull) + owner User? @relation(fields: [ownerUserId], references: [id], onDelete: SetNull) + + @@map("proxy_hosts") +} + +model RedirectHost { + id Int @id @default(autoincrement()) + name String + domains String + destination String + statusCode Int @default(302) @map("status_code") + preserveQuery Boolean @default(true) @map("preserve_query") + enabled Boolean @default(true) + createdBy Int? @map("created_by") + createdAt DateTime @map("created_at") + updatedAt DateTime @map("updated_at") + + user User? @relation(fields: [createdBy], references: [id], onDelete: SetNull) + + @@map("redirect_hosts") +} + +model DeadHost { + id Int @id @default(autoincrement()) + name String + domains String + statusCode Int @default(503) @map("status_code") + responseBody String? @map("response_body") + enabled Boolean @default(true) + createdBy Int? @map("created_by") + createdAt DateTime @map("created_at") + updatedAt DateTime @map("updated_at") + + user User? @relation(fields: [createdBy], references: [id], onDelete: SetNull) + + @@map("dead_hosts") +} + +model ApiToken { + id Int @id @default(autoincrement()) + name String + tokenHash String @unique @map("token_hash") + createdBy Int @map("created_by") + createdAt DateTime @map("created_at") + lastUsedAt DateTime? @map("last_used_at") + expiresAt DateTime? @map("expires_at") + + user User @relation(fields: [createdBy], references: [id], onDelete: Cascade) + + @@index([tokenHash]) + @@map("api_tokens") +} + +model AuditEvent { + id Int @id @default(autoincrement()) + userId Int? @map("user_id") + action String + entityType String @map("entity_type") + entityId Int? @map("entity_id") + summary String? + data String? + createdAt DateTime @map("created_at") + + user User? @relation(fields: [userId], references: [id], onDelete: SetNull) + + @@map("audit_events") +} diff --git a/public/.gitkeep b/public/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/lib/actions.ts b/src/lib/actions.ts new file mode 100644 index 00000000..58bf7895 --- /dev/null +++ b/src/lib/actions.ts @@ -0,0 +1,25 @@ +export type ActionState = { + status: "idle" | "success" | "error"; + message?: string; +}; + +export const INITIAL_ACTION_STATE: ActionState = { status: "idle" }; + +export function actionSuccess(message?: string): ActionState { + return { + status: "success", + message + }; +} + +export function actionError(error: unknown, fallbackMessage: string): ActionState { + const message = error instanceof Error ? error.message : fallbackMessage; + return { + status: "error", + message + }; +} + +export function extractErrorMessage(error: unknown, fallbackMessage: string): string { + return error instanceof Error ? error.message : fallbackMessage; +} diff --git a/src/lib/audit.ts b/src/lib/audit.ts index 476456b2..f54705d8 100644 --- a/src/lib/audit.ts +++ b/src/lib/audit.ts @@ -1,4 +1,4 @@ -import db, { nowIso } from "./db"; +import prisma, { nowIso } from "./db"; export function logAuditEvent(params: { userId?: number | null; @@ -8,16 +8,18 @@ export function logAuditEvent(params: { summary?: string | null; data?: unknown; }) { - db.prepare( - `INSERT INTO audit_events (user_id, action, entity_type, entity_id, summary, data, created_at) - VALUES (?, ?, ?, ?, ?, ?, ?)` - ).run( - params.userId ?? null, - params.action, - params.entityType, - params.entityId ?? null, - params.summary ?? null, - params.data ? JSON.stringify(params.data) : null, - nowIso() - ); + prisma.auditEvent.create({ + data: { + userId: params.userId ?? null, + action: params.action, + entityType: params.entityType, + entityId: params.entityId ?? null, + summary: params.summary ?? null, + data: params.data ? JSON.stringify(params.data) : null, + createdAt: new Date(nowIso()) + } + }).catch((error: unknown) => { + // Log error but don't throw to avoid breaking the main flow + console.error("Failed to log audit event:", error); + }); } diff --git a/src/lib/auth.ts b/src/lib/auth.ts index e44a44ae..b763de54 100644 --- a/src/lib/auth.ts +++ b/src/lib/auth.ts @@ -1,9 +1,6 @@ import NextAuth, { type DefaultSession } from "next-auth"; -import Authentik from "next-auth/providers/authentik"; -import { CustomAdapter } from "./auth/adapter"; -import { getOAuthSettings } from "./settings"; +import Credentials from "next-auth/providers/credentials"; import { config } from "./config"; -import type { SessionContext, UserRecord } from "./auth/session"; declare module "next-auth" { interface Session { @@ -18,153 +15,67 @@ declare module "next-auth" { } } -// Legacy compatibility types -export type { SessionContext, UserRecord }; +// Simple credentials provider that checks against environment variables +function createCredentialsProvider() { + return Credentials({ + id: "credentials", + name: "Credentials", + credentials: { + username: { label: "Username", type: "text" }, + password: { label: "Password", type: "password" } + }, + async authorize(credentials) { + const username = credentials?.username ? String(credentials.username).trim() : ""; + const password = credentials?.password ? String(credentials.password) : ""; -/** - * Creates the appropriate OAuth provider based on settings. - */ -function createOAuthProvider() { - const settings = getOAuthSettings(); - if (!settings) { - return null; - } - - // Use official Authentik provider for OIDC - if (settings.providerType === "authentik") { - // Extract issuer from authorization URL - // Authentik format: https://domain/application/o/APP_SLUG/authorization/authorize/ - // Issuer should be: https://domain/application/o/APP_SLUG/ - let issuer: string; - try { - const url = new URL(settings.authorizationUrl); - const pathParts = url.pathname.split('/').filter(Boolean); - const oIndex = pathParts.indexOf('o'); - - if (oIndex >= 0 && pathParts[oIndex + 2] === 'authorization') { - const slug = pathParts[oIndex + 1]; - issuer = `${url.origin}/application/o/${slug}/`; - } else { - // Fallback: remove the authorization path - issuer = settings.authorizationUrl.replace(/\/authorization\/authorize\/?$/, '/'); + if (!username || !password) { + return null; + } + + // Check against environment variables + if (username === config.adminUsername && password === config.adminPassword) { + return { + id: "1", + name: config.adminUsername, + email: `${config.adminUsername}@localhost`, + role: "admin" + }; } - console.log('[Auth.js] Derived Authentik issuer:', issuer); - console.log('[Auth.js] Will attempt OIDC discovery at:', `${issuer}.well-known/openid-configuration`); - } catch (e) { - console.error("Failed to parse Authentik issuer from URL", e); return null; } - - return Authentik({ - clientId: settings.clientId, - clientSecret: settings.clientSecret, - issuer, - authorization: { - params: { - scope: settings.scopes || "openid email profile", - }, - }, - }); - } - - // Generic OAuth2 provider for non-OIDC providers - const checks: Array<"pkce" | "state" | "none"> = ["state", "pkce"]; - - return { - id: "oauth", - name: "OAuth2", - type: "oauth" as const, - authorization: { - url: settings.authorizationUrl, - params: { - scope: settings.scopes || "openid email profile", - }, - }, - token: { - url: settings.tokenUrl, - }, - userinfo: { - url: settings.userInfoUrl, - }, - clientId: settings.clientId, - clientSecret: settings.clientSecret, - checks, - profile(profile: any) { - const emailClaim = settings.emailClaim || "email"; - const nameClaim = settings.nameClaim || "name"; - const avatarClaim = settings.avatarClaim || "picture"; - - return { - id: String(profile.sub || profile.id || profile.user_id || profile[emailClaim]), - email: String(profile[emailClaim]), - name: profile[nameClaim] ? String(profile[nameClaim]) : null, - image: profile[avatarClaim] ? String(profile[avatarClaim]) : null, - }; - }, - }; + }); } -const oauthProvider = createOAuthProvider(); +const credentialsProvider = createCredentialsProvider(); export const { handlers, signIn, signOut, auth } = NextAuth({ - adapter: CustomAdapter(), - providers: oauthProvider ? [oauthProvider] : [], + providers: [credentialsProvider], session: { - strategy: "database", + strategy: "jwt", maxAge: 7 * 24 * 60 * 60, // 7 days }, pages: { signIn: "/login", }, callbacks: { - async session({ session, user }) { + async jwt({ token, user }) { + // On sign in, add user info to token + if (user) { + token.id = user.id; + token.email = user.email; + token.role = "admin"; + } + return token; + }, + async session({ session, token }) { + // Add user info from token to session if (session.user) { - session.user.id = user.id; - // Fetch role from database - const db = (await import("./db")).default; - const dbUser = db.prepare("SELECT role FROM users WHERE id = ?").get(user.id) as { role: string } | undefined; - session.user.role = dbUser?.role || "user"; + session.user.id = token.id as string; + session.user.role = token.role as string; } return session; }, - async signIn({ user, account, profile }) { - // Auto-assign admin role to first user - const db = (await import("./db")).default; - const userCount = db.prepare("SELECT COUNT(*) as count FROM users").get() as { count: number }; - - if (userCount.count === 1) { - // This is the first user, make them admin - db.prepare("UPDATE users SET role = ? WHERE id = ?").run("admin", user.id); - } - - return true; - }, - async redirect({ url, baseUrl }) { - // Validate redirect URL to prevent open redirect attacks - if (url.startsWith("/")) { - // Reject URLs starting with // (protocol-relative URLs) - if (url.startsWith("//")) { - return baseUrl; - } - // Check for encoded slashes - if (url.includes('%2f%2f') || url.toLowerCase().includes('%2f%2f')) { - return baseUrl; - } - // Reject protocol specifications in the path - if (/^\/[a-zA-Z][a-zA-Z0-9+.-]*:/.test(url)) { - return baseUrl; - } - return url; - } - - // Only allow redirects to same origin - if (url.startsWith(baseUrl)) { - return url; - } - - return baseUrl; - }, }, secret: config.sessionSecret, trustHost: true, @@ -173,47 +84,28 @@ export const { handlers, signIn, signOut, auth } = NextAuth({ /** * Helper function to get the current session on the server. - * Returns user and session data in the legacy format for compatibility. */ -export async function getSessionLegacy(): Promise { - const session = await auth(); - if (!session?.user) { - return null; - } - - const db = (await import("./db")).default; - const user = db.prepare( - `SELECT id, email, name, role, provider, subject, avatar_url, status, created_at, updated_at - FROM users WHERE id = ?` - ).get(session.user.id) as UserRecord | undefined; - - if (!user) { - return null; - } - - return { - session: { - id: 0, // Auth.js doesn't expose session ID - user_id: Number(session.user.id), - token: "", // Not exposed by Auth.js - expires_at: session.expires || "", - created_at: "" - }, - user - }; +export async function getSession() { + return await auth(); } /** * Helper function to require authentication, throwing if not authenticated. - * Returns user and session data in the legacy format for compatibility. */ -export async function requireUser(): Promise { - const context = await getSessionLegacy(); - if (!context) { +export async function requireUser() { + const session = await auth(); + if (!session?.user) { const { redirect } = await import("next/navigation"); redirect("/login"); - // TypeScript doesn't know redirect() never returns, so we throw to help the type checker - throw new Error("Redirecting to login"); + throw new Error("Redirecting to login"); // TypeScript doesn't know redirect() never returns } - return context; + return session; +} + +export async function requireAdmin() { + const session = await requireUser(); + if (session.user.role !== "admin") { + throw new Error("Administrator privileges required"); + } + return session; } diff --git a/src/lib/auth/adapter.ts b/src/lib/auth/adapter.ts deleted file mode 100644 index aa1631ef..00000000 --- a/src/lib/auth/adapter.ts +++ /dev/null @@ -1,205 +0,0 @@ -import type { Adapter, AdapterUser, AdapterAccount, AdapterSession, VerificationToken } from "next-auth/adapters"; -import db, { nowIso } from "../db"; -import crypto from "node:crypto"; - -/** - * Custom Auth.js adapter for our existing SQLite database schema. - * Maps our existing users/sessions tables to Auth.js expectations. - */ -export function CustomAdapter(): Adapter { - return { - async createUser(user: Omit): Promise { - const stmt = db.prepare( - `INSERT INTO users (email, name, avatar_url, provider, subject, role, status, created_at, updated_at) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)` - ); - - // For Auth.js, we'll use 'oidc' as provider and email as subject initially - const subject = crypto.randomBytes(16).toString("hex"); - const info = stmt.run( - user.email, - user.name || null, - user.image || null, - "oidc", - subject, - "user", - "active", - nowIso(), - nowIso() - ); - - return { - id: String(info.lastInsertRowid), - email: user.email, - emailVerified: user.emailVerified || null, - name: user.name || null, - image: user.image || null - }; - }, - - async getUser(id: string): Promise { - const user = db.prepare("SELECT * FROM users WHERE id = ?").get(id) as any; - if (!user) return null; - - return { - id: String(user.id), - email: user.email, - emailVerified: null, - name: user.name, - image: user.avatar_url - }; - }, - - async getUserByEmail(email: string): Promise { - const user = db.prepare("SELECT * FROM users WHERE email = ?").get(email) as any; - if (!user) return null; - - return { - id: String(user.id), - email: user.email, - emailVerified: null, - name: user.name, - image: user.avatar_url - }; - }, - - async getUserByAccount({ providerAccountId, provider }): Promise { - // For Authentik OIDC, match by subject (sub claim) - const user = db.prepare( - "SELECT * FROM users WHERE subject = ?" - ).get(providerAccountId) as any; - - if (!user) return null; - - return { - id: String(user.id), - email: user.email, - emailVerified: null, - name: user.name, - image: user.avatar_url - }; - }, - - async updateUser(user: Partial & Pick): Promise { - const existing = db.prepare("SELECT * FROM users WHERE id = ?").get(user.id) as any; - - db.prepare( - `UPDATE users SET email = ?, name = ?, avatar_url = ?, updated_at = ? - WHERE id = ?` - ).run( - user.email || existing.email, - user.name || existing.name, - user.image || existing.avatar_url, - nowIso(), - user.id - ); - - return { - id: user.id, - email: user.email || existing.email, - emailVerified: user.emailVerified || null, - name: user.name || existing.name, - image: user.image || existing.avatar_url - }; - }, - - async deleteUser(userId: string): Promise { - db.prepare("DELETE FROM users WHERE id = ?").run(userId); - }, - - async linkAccount(account: AdapterAccount): Promise { - // Update the user's subject to the OIDC sub claim - db.prepare( - `UPDATE users SET subject = ?, updated_at = ? - WHERE id = ?` - ).run(account.providerAccountId, nowIso(), account.userId); - - return account; - }, - - async unlinkAccount({ providerAccountId, provider }): Promise { - // Set subject back to random - db.prepare( - `UPDATE users SET subject = ?, updated_at = ? - WHERE subject = ?` - ).run(crypto.randomBytes(16).toString("hex"), nowIso(), providerAccountId); - }, - - async createSession({ sessionToken, userId, expires }): Promise { - const expiresAt = expires.toISOString(); - - db.prepare( - `INSERT INTO sessions (user_id, token, expires_at, created_at) - VALUES (?, ?, ?, ?)` - ).run(userId, sessionToken, expiresAt, nowIso()); - - return { - sessionToken, - userId, - expires - }; - }, - - async getSessionAndUser(sessionToken: string): Promise<{ session: AdapterSession; user: AdapterUser } | null> { - const result = db.prepare( - `SELECT s.token, s.user_id, s.expires_at, u.id, u.email, u.name, u.avatar_url - FROM sessions s - JOIN users u ON s.user_id = u.id - WHERE s.token = ?` - ).get(sessionToken) as any; - - if (!result) return null; - - const expires = new Date(result.expires_at); - if (expires.getTime() < Date.now()) { - db.prepare("DELETE FROM sessions WHERE token = ?").run(sessionToken); - return null; - } - - return { - session: { - sessionToken: result.token, - userId: String(result.user_id), - expires - }, - user: { - id: String(result.id), - email: result.email, - emailVerified: null, - name: result.name, - image: result.avatar_url - } - }; - }, - - async updateSession(session: Partial & Pick): Promise { - if (session.expires) { - db.prepare( - "UPDATE sessions SET expires_at = ? WHERE token = ?" - ).run(session.expires.toISOString(), session.sessionToken); - } - - const existing = db.prepare("SELECT * FROM sessions WHERE token = ?").get(session.sessionToken) as any; - if (!existing) return null; - - return { - sessionToken: session.sessionToken, - userId: String(existing.user_id), - expires: session.expires || new Date(existing.expires_at) - }; - }, - - async deleteSession(sessionToken: string): Promise { - db.prepare("DELETE FROM sessions WHERE token = ?").run(sessionToken); - }, - - // Verification tokens not currently used, but required by adapter interface - async createVerificationToken(token: VerificationToken): Promise { - return token; - }, - - async useVerificationToken({ identifier, token }): Promise { - return null; - } - }; -} diff --git a/src/lib/auth/oauth.ts b/src/lib/auth/oauth.ts deleted file mode 100644 index 44bf652e..00000000 --- a/src/lib/auth/oauth.ts +++ /dev/null @@ -1,227 +0,0 @@ -import { redirect } from "next/navigation"; -import crypto from "node:crypto"; -import db, { nowIso } from "../db"; -import { config } from "../config"; -import { getOAuthSettings, OAuthSettings } from "../settings"; -import { createUser, findUserByProviderSubject, getUserCount, updateUserProfile, User } from "../models/user"; - -const OAUTH_STATE_TTL_MS = 1000 * 60 * 10; // 10 minutes - -type TokenResponse = { - access_token: string; - token_type: string; - expires_in?: number; - refresh_token?: string; - id_token?: string; -}; - -/** - * Validates that a redirect path is safe for internal redirection. - * Only allows paths that start with / but not // - * @param path - The path to validate - * @returns true if the path is safe, false otherwise - */ -function isValidRedirectPath(path: string): boolean { - if (!path) return false; - // Must start with / but not // (which could redirect to external site) - // Must not contain any protocol (http:, https:, ftp:, etc.) - if (!path.startsWith('/')) return false; - if (path.startsWith('//')) return false; - // Check for encoded slashes and protocols - if (path.includes('%2f%2f') || path.toLowerCase().includes('%2f%2f')) return false; - // Ensure no protocol specification - if (/^\/[a-zA-Z][a-zA-Z0-9+.-]*:/.test(path)) return false; - return true; -} - -export function requireOAuthSettings(): OAuthSettings { - const settings = getOAuthSettings(); - if (!settings) { - redirect("/setup/oauth"); - } - return settings; -} - -function createCodeVerifier(): string { - return crypto.randomBytes(32).toString("base64url"); -} - -function codeChallengeFromVerifier(verifier: string): string { - const hashed = crypto.createHash("sha256").update(verifier).digest(); - return Buffer.from(hashed) - .toString("base64") - .replace(/\+/g, "-") - .replace(/\//g, "_") - .replace(/=+$/, ""); -} - -function storeOAuthState(state: string, codeVerifier: string, redirectTo?: string) { - const expiresAt = new Date(Date.now() + OAUTH_STATE_TTL_MS).toISOString(); - db.prepare( - `INSERT INTO oauth_states (state, code_verifier, redirect_to, created_at, expires_at) - VALUES (?, ?, ?, ? ,?)` - ).run(state, codeVerifier, redirectTo ?? null, nowIso(), expiresAt); -} - -function consumeOAuthState(state: string): { codeVerifier: string; redirectTo: string | null } | null { - const row = db - .prepare( - `SELECT id, code_verifier, redirect_to, expires_at - FROM oauth_states WHERE state = ?` - ) - .get(state) as { id: number; code_verifier: string; redirect_to: string | null; expires_at: string } | undefined; - if (!row) { - return null; - } - - db.prepare("DELETE FROM oauth_states WHERE id = ?").run(row.id); - - if (new Date(row.expires_at).getTime() < Date.now()) { - return null; - } - - return { codeVerifier: row.code_verifier, redirectTo: row.redirect_to }; -} - -export function buildAuthorizationUrl(redirectTo?: string): string { - const settings = requireOAuthSettings(); - - // Validate redirectTo parameter to prevent open redirect attacks - let safeRedirectTo: string | undefined; - if (redirectTo) { - if (!isValidRedirectPath(redirectTo)) { - console.warn(`Invalid redirectTo parameter rejected: ${redirectTo}`); - safeRedirectTo = undefined; - } else { - safeRedirectTo = redirectTo; - } - } - - const state = crypto.randomBytes(24).toString("base64url"); - const verifier = createCodeVerifier(); - const challenge = codeChallengeFromVerifier(verifier); - storeOAuthState(state, verifier, safeRedirectTo); - - const redirectUri = `${config.baseUrl}/api/auth/callback`; - const url = new URL(settings.authorizationUrl); - url.searchParams.set("response_type", "code"); - url.searchParams.set("client_id", settings.clientId); - url.searchParams.set("redirect_uri", redirectUri); - url.searchParams.set("scope", settings.scopes); - url.searchParams.set("state", state); - url.searchParams.set("code_challenge", challenge); - url.searchParams.set("code_challenge_method", "S256"); - - return url.toString(); -} - -async function exchangeCode(settings: OAuthSettings, code: string, codeVerifier: string): Promise { - const redirectUri = `${config.baseUrl}/api/auth/callback`; - - const response = await fetch(settings.tokenUrl, { - method: "POST", - headers: { - "Content-Type": "application/x-www-form-urlencoded", - Accept: "application/json" - }, - body: new URLSearchParams({ - grant_type: "authorization_code", - code, - redirect_uri: redirectUri, - client_id: settings.clientId, - client_secret: settings.clientSecret, - code_verifier: codeVerifier - }) - }); - - if (!response.ok) { - const text = await response.text(); - throw new Error(`OAuth token exchange failed: ${response.status} ${text}`); - } - - return (await response.json()) as TokenResponse; -} - -async function fetchUserInfo(settings: OAuthSettings, tokenResponse: TokenResponse): Promise> { - if (!settings.userInfoUrl) { - throw new Error("OAuth userInfoUrl is not configured"); - } - - const response = await fetch(settings.userInfoUrl, { - headers: { - Authorization: `Bearer ${tokenResponse.access_token}`, - Accept: "application/json" - } - }); - - if (!response.ok) { - const text = await response.text(); - throw new Error(`OAuth userinfo fetch failed: ${response.status} ${text}`); - } - - return (await response.json()) as Record; -} - -function extractUserFromClaims(settings: OAuthSettings, claims: Record): { - email: string; - name: string | null; - avatar_url: string | null; - subject: string; -} { - const subject = String(claims.sub ?? claims.id ?? claims.user_id ?? ""); - if (!subject) { - throw new Error("OAuth userinfo response missing subject claim"); - } - const emailClaim = settings.emailClaim ?? "email"; - const nameClaim = settings.nameClaim ?? "name"; - const avatarClaim = settings.avatarClaim ?? "picture"; - - const rawEmail = claims[emailClaim]; - if (!rawEmail || typeof rawEmail !== "string") { - throw new Error(`OAuth userinfo response missing ${emailClaim}`); - } - - const name = typeof claims[nameClaim] === "string" ? (claims[nameClaim] as string) : null; - const avatar = typeof claims[avatarClaim] === "string" ? (claims[avatarClaim] as string) : null; - - return { - email: rawEmail, - name, - avatar_url: avatar, - subject - }; -} - -export async function finalizeOAuthLogin(code: string, state: string): Promise<{ user: User; redirectTo: string | null }> { - const container = consumeOAuthState(state); - if (!container) { - throw new Error("Invalid or expired OAuth state"); - } - - const settings = requireOAuthSettings(); - const tokenResponse = await exchangeCode(settings, code, container.codeVerifier); - const claims = await fetchUserInfo(settings, tokenResponse); - const profile = extractUserFromClaims(settings, claims); - - let user = findUserByProviderSubject(settings.authorizationUrl, profile.subject); - if (!user) { - const totalUsers = getUserCount(); - const role = totalUsers === 0 ? "admin" : "user"; - user = createUser({ - email: profile.email, - name: profile.name, - avatar_url: profile.avatar_url, - provider: settings.authorizationUrl, - subject: profile.subject, - role - }); - } else { - user = updateUserProfile(user.id, { - email: profile.email, - name: profile.name, - avatar_url: profile.avatar_url - })!; - } - - return { user, redirectTo: container.redirectTo }; -} diff --git a/src/lib/auth/session.ts b/src/lib/auth/session.ts deleted file mode 100644 index a00c0f14..00000000 --- a/src/lib/auth/session.ts +++ /dev/null @@ -1,143 +0,0 @@ -import { cookies } from "next/headers"; -import { redirect } from "next/navigation"; -import crypto from "node:crypto"; -import db, { nowIso } from "../db"; -import { config } from "../config"; - -const SESSION_COOKIE = "cpm_session"; -const SESSION_TTL_MS = 1000 * 60 * 60 * 24 * 7; // 7 days - -type CookiesHandle = Awaited>; - -async function getCookieStore(): Promise { - return (await cookies()) as CookiesHandle; -} - -function hashToken(token: string): string { - return crypto.createHmac("sha256", config.sessionSecret).update(token).digest("hex"); -} - -export type SessionRecord = { - id: number; - user_id: number; - token: string; - expires_at: string; - created_at: string; -}; - -export type UserRecord = { - id: number; - email: string; - name: string | null; - role: string; - provider: string; - subject: string; - avatar_url: string | null; - status: string; - created_at: string; - updated_at: string; -}; - -export type SessionContext = { - session: SessionRecord; - user: UserRecord; -}; - -export async function createSession(userId: number): Promise { - const token = crypto.randomBytes(48).toString("base64url"); - const hashed = hashToken(token); - const expiresAt = new Date(Date.now() + SESSION_TTL_MS).toISOString(); - - const stmt = db.prepare( - `INSERT INTO sessions (user_id, token, expires_at, created_at) - VALUES (?, ?, ?, ?)` - ); - const info = stmt.run(userId, hashed, expiresAt, nowIso()); - - const session = { - id: Number(info.lastInsertRowid), - user_id: userId, - token: hashed, - expires_at: expiresAt, - created_at: nowIso() - }; - - const cookieStore = await getCookieStore(); - if (typeof cookieStore.set === "function") { - cookieStore.set({ - name: SESSION_COOKIE, - value: token, - httpOnly: true, - secure: process.env.NODE_ENV === "production", - sameSite: "lax", - path: "/", - expires: new Date(expiresAt) - }); - } else { - console.warn("Unable to set session cookie in this context."); - } - - return session; -} - -export async function destroySession() { - const cookieStore = await getCookieStore(); - const token = typeof cookieStore.get === "function" ? cookieStore.get(SESSION_COOKIE) : undefined; - if (typeof cookieStore.delete === "function") { - cookieStore.delete(SESSION_COOKIE); - } - - if (!token) { - return; - } - - const hashed = hashToken(token.value); - db.prepare("DELETE FROM sessions WHERE token = ?").run(hashed); -} - -export async function getSession(): Promise { - const cookieStore = await getCookieStore(); - const token = typeof cookieStore.get === "function" ? cookieStore.get(SESSION_COOKIE) : undefined; - if (!token) { - return null; - } - - const hashed = hashToken(token.value); - const session = db - .prepare( - `SELECT id, user_id, token, expires_at, created_at - FROM sessions - WHERE token = ?` - ) - .get(hashed) as SessionRecord | undefined; - - if (!session) { - return null; - } - - if (new Date(session.expires_at).getTime() < Date.now()) { - db.prepare("DELETE FROM sessions WHERE id = ?").run(session.id); - return null; - } - - const user = db - .prepare( - `SELECT id, email, name, role, provider, subject, avatar_url, status, created_at, updated_at - FROM users WHERE id = ?` - ) - .get(session.user_id) as UserRecord | undefined; - - if (!user || user.status !== "active") { - return null; - } - - return { session, user }; -} - -export async function requireUser(): Promise { - const context = await getSession(); - if (!context) { - redirect("/login"); - } - return context; -} diff --git a/src/lib/caddy.ts b/src/lib/caddy.ts index 18796c59..b116122c 100644 --- a/src/lib/caddy.ts +++ b/src/lib/caddy.ts @@ -1,13 +1,30 @@ import { mkdirSync, writeFileSync } from "node:fs"; import { join } from "node:path"; import crypto from "node:crypto"; -import db, { nowIso } from "./db"; +import prisma, { nowIso } from "./db"; import { config } from "./config"; import { getCloudflareSettings, setSetting } from "./settings"; const CERTS_DIR = process.env.CERTS_DIRECTORY || join(process.cwd(), "data", "certs"); mkdirSync(CERTS_DIR, { recursive: true }); +const DEFAULT_AUTHENTIK_HEADERS = [ + "X-Authentik-Username", + "X-Authentik-Groups", + "X-Authentik-Entitlements", + "X-Authentik-Email", + "X-Authentik-Name", + "X-Authentik-Uid", + "X-Authentik-Jwt", + "X-Authentik-Meta-Jwks", + "X-Authentik-Meta-Outpost", + "X-Authentik-Meta-Provider", + "X-Authentik-Meta-App", + "X-Authentik-Meta-Version" +]; + +const DEFAULT_AUTHENTIK_TRUSTED_PROXIES = ["private_ranges"]; + type ProxyHostRow = { id: number; name: string; @@ -25,6 +42,32 @@ type ProxyHostRow = { enabled: number; }; +type ProxyHostMeta = { + custom_reverse_proxy_json?: string; + custom_pre_handlers_json?: string; + authentik?: ProxyHostAuthentikMeta; +}; + +type ProxyHostAuthentikMeta = { + enabled?: boolean; + outpost_domain?: string; + outpost_upstream?: string; + auth_endpoint?: string; + copy_headers?: string[]; + trusted_proxies?: string[]; + set_outpost_host_header?: boolean; +}; + +type AuthentikRouteConfig = { + enabled: boolean; + outpostDomain: string; + outpostUpstream: string; + authEndpoint: string; + copyHeaders: string[]; + trustedProxies: string[]; + setOutpostHostHeader: boolean; +}; + type RedirectHostRow = { id: number; name: string; @@ -44,15 +87,6 @@ type DeadHostRow = { enabled: number; }; -type StreamHostRow = { - id: number; - name: string; - listen_port: number; - protocol: string; - upstream: string; - enabled: number; -}; - type AccessListEntryRow = { access_list_id: number; username: string; @@ -72,6 +106,10 @@ type CertificateRow = { type CaddyHttpRoute = Record; +function isPlainObject(value: unknown): value is Record { + return Boolean(value) && typeof value === "object" && !Array.isArray(value); +} + function parseJson(value: string | null, fallback: T): T { if (!value) { return fallback; @@ -84,6 +122,46 @@ function parseJson(value: string | null, fallback: T): T { } } +function parseOptionalJson(value: string | null | undefined) { + if (!value) { + return null; + } + try { + return JSON.parse(value); + } catch (error) { + console.warn("Failed to parse custom JSON", error); + return null; + } +} + +function mergeDeep(target: Record, source: Record) { + for (const [key, value] of Object.entries(source)) { + const existing = target[key]; + if (isPlainObject(existing) && isPlainObject(value)) { + mergeDeep(existing, value); + } else { + target[key] = value; + } + } +} + +function parseCustomHandlers(value: string | null | undefined): Record[] { + const parsed = parseOptionalJson(value); + if (!parsed) { + return []; + } + const list = Array.isArray(parsed) ? parsed : [parsed]; + const handlers: Record[] = []; + for (const item of list) { + if (isPlainObject(item)) { + handlers.push(item); + } else { + console.warn("Ignoring custom handler entry that is not an object", item); + } + } + return handlers; +} + function writeCertificateFiles(cert: CertificateRow) { if (cert.type !== "imported" || !cert.certificate_pem || !cert.private_key_pem) { return null; @@ -117,6 +195,9 @@ function buildProxyRoutes( } const handlers: Record[] = []; + const meta = parseJson(row.meta, {}); + const authentik = parseAuthentikConfig(meta.authentik); + const hostRoutes: CaddyHttpRoute[] = []; if (row.hsts_enabled) { const value = row.hsts_subdomains ? "max-age=63072000; includeSubDomains" : "max-age=63072000"; @@ -147,22 +228,92 @@ function buildProxyRoutes( } } - handlers.push({ + const reverseProxyHandler: Record = { handler: "reverse_proxy", - upstreams: upstreams.map((dial) => ({ dial })), - preserve_host: Boolean(row.preserve_host_header), - ...(row.skip_https_hostname_validation - ? { - transport: { - http: { - tls: { - insecure_skip_verify: true - } - } + upstreams: upstreams.map((dial) => ({ dial })) + }; + + if (authentik) { + const outpostHandler: Record = { + handler: "reverse_proxy", + upstreams: [ + { + dial: authentik.outpostUpstream + } + ] + }; + + if (authentik.setOutpostHostHeader) { + outpostHandler.headers = { + request: { + set: { + Host: ["{http.reverse_proxy.upstream.host}"] } } - : {}) - }); + }; + } + + hostRoutes.push({ + match: [ + { + host: domains, + path: [`/${authentik.outpostDomain}/*`] + } + ], + handle: [outpostHandler], + terminal: true + }); + } + + if (row.preserve_host_header) { + reverseProxyHandler.headers = { + request: { + set: { + Host: ["{http.request.host}"] + } + } + }; + } + + if (row.skip_https_hostname_validation) { + reverseProxyHandler.transport = { + http: { + tls: { + insecure_skip_verify: true + } + } + }; + } + + const customReverseProxy = parseOptionalJson(meta.custom_reverse_proxy_json); + if (customReverseProxy) { + if (isPlainObject(customReverseProxy)) { + mergeDeep(reverseProxyHandler, customReverseProxy as Record); + } else { + console.warn("Ignoring custom reverse proxy JSON because it is not an object", customReverseProxy); + } + } + + const customHandlers = parseCustomHandlers(meta.custom_pre_handlers_json); + if (customHandlers.length > 0) { + handlers.push(...customHandlers); + } + + if (authentik) { + handlers.push({ + handler: "forward_auth", + upstreams: [ + { + dial: authentik.outpostUpstream + } + ], + uri: authentik.authEndpoint, + copy_headers: authentik.copyHeaders, + trusted_proxies: authentik.trustedProxies + }); + } + + handlers.push(reverseProxyHandler); const route: CaddyHttpRoute = { match: [ @@ -191,7 +342,8 @@ function buildProxyRoutes( } } - routes.push(route); + hostRoutes.push(route); + routes.push(...hostRoutes); } return routes; @@ -240,127 +392,130 @@ function buildDeadRoutes(rows: DeadHostRow[]): CaddyHttpRoute[] { })); } -function buildStreamServers(rows: StreamHostRow[]) { - if (rows.length === 0) { - return undefined; - } - - const servers: Record = {}; - for (const row of rows) { - if (!row.enabled) { - continue; - } - const key = `stream_${row.id}`; - servers[key] = { - listen: [`:${row.listen_port}`], - routes: [ - { - match: [ - { - protocol: [row.protocol] - } - ], - handle: [ - { - handler: "proxy", - upstreams: [{ dial: row.upstream }] - } - ] - } - ] - }; - } - if (Object.keys(servers).length === 0) { - return undefined; - } - return servers; -} - function buildTlsAutomation(certificates: Map) { - const managedDomains = new Set(); - for (const cert of certificates.values()) { - if (cert.type === "managed") { - const domains = parseJson(cert.domain_names, []); - domains.forEach((domain) => managedDomains.add(domain)); - } - } - - const cloudflare = getCloudflareSettings(); - if (!cloudflare) { - return undefined; - } - - const subjects = Array.from(managedDomains); - if (subjects.length === 0) { - return undefined; - } - - return { - automation: { - policies: [ - { - subjects, - issuers: [ - { - module: "acme", - challenges: { - dns: { - provider: { - name: "cloudflare", - api_token: cloudflare.apiToken - } - } - } - } - ] - } - ] - } - }; + // TODO: This function needs to be migrated to async to use getCloudflareSettings() + // For now, Cloudflare DNS challenges are disabled until migration is complete + return undefined; } -function buildCaddyDocument() { - const proxyHosts = db - .prepare( - `SELECT id, name, domains, upstreams, certificate_id, access_list_id, ssl_forced, hsts_enabled, - hsts_subdomains, allow_websocket, preserve_host_header, skip_https_hostname_validation, meta, enabled - FROM proxy_hosts` - ) - .all() as ProxyHostRow[]; - const redirectHosts = db - .prepare( - `SELECT id, name, domains, destination, status_code, preserve_query, enabled - FROM redirect_hosts` - ) - .all() as RedirectHostRow[]; - const deadHosts = db - .prepare( - `SELECT id, name, domains, status_code, response_body, enabled - FROM dead_hosts` - ) - .all() as DeadHostRow[]; - const streamHosts = db - .prepare( - `SELECT id, name, listen_port, protocol, upstream, enabled - FROM stream_hosts` - ) - .all() as StreamHostRow[]; - const certRows = db - .prepare( - `SELECT id, name, type, domain_names, certificate_pem, private_key_pem, auto_renew, provider_options - FROM certificates` - ) - .all() as CertificateRow[]; +async function buildCaddyDocument() { + const [proxyHosts, redirectHosts, deadHosts, certRows, accessListEntries] = await Promise.all([ + prisma.proxyHost.findMany({ + select: { + id: true, + name: true, + domains: true, + upstreams: true, + certificateId: true, + accessListId: true, + sslForced: true, + hstsEnabled: true, + hstsSubdomains: true, + allowWebsocket: true, + preserveHostHeader: true, + skipHttpsHostnameValidation: true, + meta: true, + enabled: true + } + }), + prisma.redirectHost.findMany({ + select: { + id: true, + name: true, + domains: true, + destination: true, + statusCode: true, + preserveQuery: true, + enabled: true + } + }), + prisma.deadHost.findMany({ + select: { + id: true, + name: true, + domains: true, + statusCode: true, + responseBody: true, + enabled: true + } + }), + prisma.certificate.findMany({ + select: { + id: true, + name: true, + type: true, + domainNames: true, + certificatePem: true, + privateKeyPem: true, + autoRenew: true, + providerOptions: true + } + }), + prisma.accessListEntry.findMany({ + select: { + accessListId: true, + username: true, + passwordHash: true + } + }) + ]); - const accessListEntries = db - .prepare( - `SELECT access_list_id, username, password_hash - FROM access_list_entries` - ) - .all() as AccessListEntryRow[]; + // Map Prisma results to expected types + const proxyHostRows: ProxyHostRow[] = proxyHosts.map((h: typeof proxyHosts[0]) => ({ + id: h.id, + name: h.name, + domains: h.domains, + upstreams: h.upstreams, + certificate_id: h.certificateId, + access_list_id: h.accessListId, + ssl_forced: h.sslForced ? 1 : 0, + hsts_enabled: h.hstsEnabled ? 1 : 0, + hsts_subdomains: h.hstsSubdomains ? 1 : 0, + allow_websocket: h.allowWebsocket ? 1 : 0, + preserve_host_header: h.preserveHostHeader ? 1 : 0, + skip_https_hostname_validation: h.skipHttpsHostnameValidation ? 1 : 0, + meta: h.meta, + enabled: h.enabled ? 1 : 0 + })); - const certificateMap = new Map(certRows.map((cert) => [cert.id, cert])); - const accessMap = accessListEntries.reduce>((map, entry) => { + const redirectHostRows: RedirectHostRow[] = redirectHosts.map((h: typeof redirectHosts[0]) => ({ + id: h.id, + name: h.name, + domains: h.domains, + destination: h.destination, + status_code: h.statusCode, + preserve_query: h.preserveQuery ? 1 : 0, + enabled: h.enabled ? 1 : 0 + })); + + const deadHostRows: DeadHostRow[] = deadHosts.map((h: typeof deadHosts[0]) => ({ + id: h.id, + name: h.name, + domains: h.domains, + status_code: h.statusCode, + response_body: h.responseBody, + enabled: h.enabled ? 1 : 0 + })); + + const certRowsMapped: CertificateRow[] = certRows.map((c: typeof certRows[0]) => ({ + id: c.id, + name: c.name, + type: c.type as "managed" | "imported", + domain_names: c.domainNames, + certificate_pem: c.certificatePem, + private_key_pem: c.privateKeyPem, + auto_renew: c.autoRenew ? 1 : 0, + provider_options: c.providerOptions + })); + + const accessListEntryRows: AccessListEntryRow[] = accessListEntries.map((e: typeof accessListEntries[0]) => ({ + access_list_id: e.accessListId, + username: e.username, + password_hash: e.passwordHash + })); + + const certificateMap = new Map(certRowsMapped.map((cert) => [cert.id, cert])); + const accessMap = accessListEntryRows.reduce>((map, entry) => { if (!map.has(entry.access_list_id)) { map.set(entry.access_list_id, []); } @@ -369,9 +524,9 @@ function buildCaddyDocument() { }, new Map()); const httpRoutes: CaddyHttpRoute[] = [ - ...buildProxyRoutes(proxyHosts, certificateMap, accessMap), - ...buildRedirectRoutes(redirectHosts), - ...buildDeadRoutes(deadHosts) + ...buildProxyRoutes(proxyHostRows, certificateMap, accessMap), + ...buildRedirectRoutes(redirectHostRows), + ...buildDeadRoutes(deadHostRows) ]; const tlsSection = buildTlsAutomation(certificateMap); @@ -390,26 +545,16 @@ function buildCaddyDocument() { } : {}; - const layer4Servers = buildStreamServers(streamHosts); - const layer4App = layer4Servers - ? { - layer4: { - servers: layer4Servers - } - } - : {}; - return { apps: { ...httpApp, - ...(tlsSection ? { tls: tlsSection } : {}), - ...layer4App + ...(tlsSection ? { tls: tlsSection } : {}) } }; } export async function applyCaddyConfig() { - const document = buildCaddyDocument(); + const document = await buildCaddyDocument(); const payload = JSON.stringify(document); const hash = crypto.createHash("sha256").update(payload).digest("hex"); setSetting("caddy_config_hash", { hash, updated_at: nowIso() }); @@ -429,6 +574,53 @@ export async function applyCaddyConfig() { } } catch (error) { console.error("Failed to apply Caddy config", error); + + // Check if it's a fetch error with ECONNREFUSED or ENOTFOUND + const err = error as { cause?: NodeJS.ErrnoException }; + const causeCode = err?.cause?.code; + + if (causeCode === "ENOTFOUND" || causeCode === "ECONNREFUSED") { + throw new Error(`Unable to reach Caddy API at ${config.caddyApiUrl}. Ensure Caddy is running and accessible.`); + } + throw error; } } + +function parseAuthentikConfig(meta: ProxyHostAuthentikMeta | undefined | null): AuthentikRouteConfig | null { + if (!meta || !meta.enabled) { + return null; + } + + const outpostDomain = typeof meta.outpost_domain === "string" ? meta.outpost_domain.trim() : ""; + const outpostUpstream = typeof meta.outpost_upstream === "string" ? meta.outpost_upstream.trim() : ""; + if (!outpostDomain || !outpostUpstream) { + return null; + } + + const authEndpointRaw = typeof meta.auth_endpoint === "string" ? meta.auth_endpoint.trim() : ""; + const authEndpoint = authEndpointRaw || `/${outpostDomain}/auth/caddy`; + + const copyHeaders = + Array.isArray(meta.copy_headers) && meta.copy_headers.length > 0 + ? meta.copy_headers.map((header) => header?.trim()).filter((header): header is string => Boolean(header)) + : DEFAULT_AUTHENTIK_HEADERS; + + const trustedProxies = + Array.isArray(meta.trusted_proxies) && meta.trusted_proxies.length > 0 + ? meta.trusted_proxies.map((item) => item?.trim()).filter((item): item is string => Boolean(item)) + : DEFAULT_AUTHENTIK_TRUSTED_PROXIES; + + const setOutpostHostHeader = + meta.set_outpost_host_header !== undefined ? Boolean(meta.set_outpost_host_header) : true; + + return { + enabled: true, + outpostDomain, + outpostUpstream, + authEndpoint, + copyHeaders, + trustedProxies, + setOutpostHostHeader + }; +} diff --git a/src/lib/config.ts b/src/lib/config.ts index 9ae33791..fe7c78c5 100644 --- a/src/lib/config.ts +++ b/src/lib/config.ts @@ -8,8 +8,20 @@ function requireEnv(name: string, fallback?: string): string { return value; } +// Generate a stable development secret (WARNING: only for development!) +// In production, SESSION_SECRET must be set in environment variables +const DEV_SECRET = "dev-secret-change-in-production-12345678901234567890123456789012"; +const DEFAULT_CADDY_URL = process.env.NODE_ENV === "development" ? "http://localhost:2019" : "http://caddy:2019"; + +// During build time or in development, use DEV_SECRET as fallback +// In production runtime, SESSION_SECRET must be set +const isProduction = process.env.NODE_ENV === "production"; +const isBuildTime = typeof window === "undefined" && !process.env.SESSION_SECRET; + export const config = { - sessionSecret: requireEnv("SESSION_SECRET", process.env.NODE_ENV === "development" ? crypto.randomBytes(32).toString("hex") : undefined), - caddyApiUrl: process.env.CADDY_API_URL ?? "http://caddy:2019", - baseUrl: process.env.BASE_URL ?? "http://localhost:3000" + sessionSecret: requireEnv("SESSION_SECRET", !isProduction || isBuildTime ? DEV_SECRET : undefined), + caddyApiUrl: process.env.CADDY_API_URL ?? DEFAULT_CADDY_URL, + baseUrl: process.env.BASE_URL ?? "http://localhost:3000", + adminUsername: process.env.ADMIN_USERNAME ?? "admin", + adminPassword: process.env.ADMIN_PASSWORD ?? "admin" }; diff --git a/src/lib/db.ts b/src/lib/db.ts index a2b6db05..5049a44c 100644 --- a/src/lib/db.ts +++ b/src/lib/db.ts @@ -1,20 +1,19 @@ -import Database from "better-sqlite3"; -import { mkdirSync } from "node:fs"; -import { dirname, join } from "node:path"; -import { runMigrations } from "./migrations"; +import { PrismaClient } from "@prisma/client"; -const defaultDbPath = join(process.cwd(), "data", "caddy-proxy-manager.db"); -const dbPath = process.env.DATABASE_PATH || defaultDbPath; +// Prevent multiple instances of Prisma Client in development +const globalForPrisma = globalThis as unknown as { + prisma: PrismaClient | undefined; +}; -mkdirSync(dirname(dbPath), { recursive: true }); +export const prisma = + globalForPrisma.prisma ?? + new PrismaClient({ + log: process.env.NODE_ENV === "development" ? ["error", "warn"] : ["error"], + }); -const db = new Database(dbPath); -db.pragma("journal_mode = WAL"); -db.pragma("busy_timeout = 5000"); +if (process.env.NODE_ENV !== "production") globalForPrisma.prisma = prisma; -runMigrations(db); - -export default db; +export default prisma; export function nowIso(): string { return new Date().toISOString(); diff --git a/src/lib/migrations.ts b/src/lib/migrations.ts deleted file mode 100644 index b97cd533..00000000 --- a/src/lib/migrations.ts +++ /dev/null @@ -1,236 +0,0 @@ -import Database from "better-sqlite3"; - -type Migration = { - id: number; - description: string; - up: (db: Database.Database) => void; -}; - -const MIGRATIONS: Migration[] = [ - { - id: 1, - description: "initial schema", - up: (db) => { - db.exec(` - CREATE TABLE IF NOT EXISTS schema_migrations ( - id INTEGER PRIMARY KEY - ); - - CREATE TABLE IF NOT EXISTS users ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - email TEXT NOT NULL UNIQUE, - name TEXT, - role TEXT NOT NULL DEFAULT 'user', - provider TEXT NOT NULL, - subject TEXT NOT NULL, - avatar_url TEXT, - status TEXT NOT NULL DEFAULT 'active', - created_at TEXT NOT NULL, - updated_at TEXT NOT NULL - ); - - CREATE TABLE IF NOT EXISTS sessions ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - user_id INTEGER NOT NULL, - token TEXT NOT NULL UNIQUE, - expires_at TEXT NOT NULL, - created_at TEXT NOT NULL, - FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE - ); - CREATE INDEX IF NOT EXISTS idx_sessions_token ON sessions(token); - - CREATE TABLE IF NOT EXISTS oauth_states ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - state TEXT NOT NULL UNIQUE, - code_verifier TEXT NOT NULL, - redirect_to TEXT, - created_at TEXT NOT NULL, - expires_at TEXT NOT NULL - ); - - CREATE TABLE IF NOT EXISTS settings ( - key TEXT PRIMARY KEY, - value TEXT NOT NULL, - updated_at TEXT NOT NULL - ); - - CREATE TABLE IF NOT EXISTS access_lists ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - name TEXT NOT NULL, - description TEXT, - created_by INTEGER, - created_at TEXT NOT NULL, - updated_at TEXT NOT NULL, - FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE SET NULL - ); - - CREATE TABLE IF NOT EXISTS access_list_entries ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - access_list_id INTEGER NOT NULL, - username TEXT NOT NULL, - password_hash TEXT NOT NULL, - created_at TEXT NOT NULL, - updated_at TEXT NOT NULL, - FOREIGN KEY (access_list_id) REFERENCES access_lists(id) ON DELETE CASCADE - ); - CREATE INDEX IF NOT EXISTS idx_access_list_entries_access_list_id - ON access_list_entries(access_list_id); - - CREATE TABLE IF NOT EXISTS certificates ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - name TEXT NOT NULL, - type TEXT NOT NULL, - domain_names TEXT NOT NULL, - auto_renew INTEGER NOT NULL DEFAULT 1, - provider_options TEXT, - certificate_pem TEXT, - private_key_pem TEXT, - created_by INTEGER, - created_at TEXT NOT NULL, - updated_at TEXT NOT NULL, - FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE SET NULL - ); - - CREATE TABLE IF NOT EXISTS proxy_hosts ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - name TEXT NOT NULL, - domains TEXT NOT NULL, - upstreams TEXT NOT NULL, - certificate_id INTEGER, - access_list_id INTEGER, - owner_user_id INTEGER, - ssl_forced INTEGER NOT NULL DEFAULT 1, - hsts_enabled INTEGER NOT NULL DEFAULT 1, - hsts_subdomains INTEGER NOT NULL DEFAULT 0, - allow_websocket INTEGER NOT NULL DEFAULT 1, - preserve_host_header INTEGER NOT NULL DEFAULT 1, - meta TEXT, - enabled INTEGER NOT NULL DEFAULT 1, - created_at TEXT NOT NULL, - updated_at TEXT NOT NULL, - FOREIGN KEY (certificate_id) REFERENCES certificates(id) ON DELETE SET NULL, - FOREIGN KEY (access_list_id) REFERENCES access_lists(id) ON DELETE SET NULL, - FOREIGN KEY (owner_user_id) REFERENCES users(id) ON DELETE SET NULL - ); - - CREATE TABLE IF NOT EXISTS redirect_hosts ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - name TEXT NOT NULL, - domains TEXT NOT NULL, - destination TEXT NOT NULL, - status_code INTEGER NOT NULL DEFAULT 302, - preserve_query INTEGER NOT NULL DEFAULT 1, - enabled INTEGER NOT NULL DEFAULT 1, - created_by INTEGER, - created_at TEXT NOT NULL, - updated_at TEXT NOT NULL, - FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE SET NULL - ); - - CREATE TABLE IF NOT EXISTS dead_hosts ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - name TEXT NOT NULL, - domains TEXT NOT NULL, - status_code INTEGER NOT NULL DEFAULT 503, - response_body TEXT, - enabled INTEGER NOT NULL DEFAULT 1, - created_by INTEGER, - created_at TEXT NOT NULL, - updated_at TEXT NOT NULL, - FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE SET NULL - ); - - CREATE TABLE IF NOT EXISTS stream_hosts ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - name TEXT NOT NULL, - listen_port INTEGER NOT NULL, - protocol TEXT NOT NULL, - upstream TEXT NOT NULL, - enabled INTEGER NOT NULL DEFAULT 1, - created_by INTEGER, - created_at TEXT NOT NULL, - updated_at TEXT NOT NULL, - FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE SET NULL - ); - - CREATE TABLE IF NOT EXISTS api_tokens ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - name TEXT NOT NULL, - token_hash TEXT NOT NULL, - created_by INTEGER NOT NULL, - created_at TEXT NOT NULL, - last_used_at TEXT, - expires_at TEXT, - FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE CASCADE - ); - CREATE UNIQUE INDEX IF NOT EXISTS idx_api_tokens_token_hash ON api_tokens(token_hash); - - CREATE TABLE IF NOT EXISTS audit_events ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - user_id INTEGER, - action TEXT NOT NULL, - entity_type TEXT NOT NULL, - entity_id INTEGER, - summary TEXT, - data TEXT, - created_at TEXT NOT NULL, - FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL - ); - `); - } - }, - { - id: 2, - description: "add provider type to OAuth settings", - up: (db) => { - // Add providerType field to existing OAuth settings - // Default to 'authentik' for existing installations since that's what we're supporting - const settings = db.prepare("SELECT value FROM settings WHERE key = 'oauth'").get() as { value: string } | undefined; - - if (settings) { - try { - const oauth = JSON.parse(settings.value); - // Only update if providerType doesn't exist - if (!oauth.providerType) { - oauth.providerType = 'authentik'; - db.prepare("UPDATE settings SET value = ? WHERE key = 'oauth'").run(JSON.stringify(oauth)); - } - } catch (e) { - console.error("Failed to migrate OAuth settings:", e); - } - } - } - }, - { - id: 3, - description: "add skip https hostname validation flag", - up: (db) => { - const columns = db.prepare("PRAGMA table_info(proxy_hosts)").all() as { name: string }[]; - const hasColumn = columns.some((column) => column.name === "skip_https_hostname_validation"); - if (!hasColumn) { - db.exec("ALTER TABLE proxy_hosts ADD COLUMN skip_https_hostname_validation INTEGER NOT NULL DEFAULT 0;"); - } - } - } -]; - -export function runMigrations(db: Database.Database) { - db.exec("PRAGMA foreign_keys = ON;"); - db.exec("CREATE TABLE IF NOT EXISTS schema_migrations (id INTEGER PRIMARY KEY);"); - - const appliedStmt = db.prepare("SELECT id FROM schema_migrations"); - const appliedRows = appliedStmt.all() as Array<{ id: number }>; - const applied = new Set(appliedRows.map((row) => row.id)); - - const insertStmt = db.prepare("INSERT INTO schema_migrations (id) VALUES (?)"); - - for (const migration of MIGRATIONS) { - if (applied.has(migration.id)) { - continue; - } - db.transaction(() => { - migration.up(db); - insertStmt.run(migration.id); - })(); - } -} diff --git a/src/lib/models/access-lists.ts b/src/lib/models/access-lists.ts index db34f932..2cb8700d 100644 --- a/src/lib/models/access-lists.ts +++ b/src/lib/models/access-lists.ts @@ -1,5 +1,5 @@ import bcrypt from "bcryptjs"; -import db, { nowIso } from "../db"; +import prisma, { nowIso } from "../db"; import { logAuditEvent } from "../audit"; import { applyCaddyConfig } from "../caddy"; @@ -25,86 +25,105 @@ export type AccessListInput = { users?: { username: string; password: string }[]; }; -function parseAccessList(row: any): AccessList { - const entries = db - .prepare( - `SELECT id, username, created_at, updated_at - FROM access_list_entries - WHERE access_list_id = ? - ORDER BY username ASC` - ) - .all(row.id) as AccessListEntry[]; - +function toAccessList( + row: { + id: number; + name: string; + description: string | null; + createdAt: Date; + updatedAt: Date; + }, + entries: { + id: number; + username: string; + createdAt: Date; + updatedAt: Date; + }[] +): AccessList { return { id: row.id, name: row.name, description: row.description, - entries, - created_at: row.created_at, - updated_at: row.updated_at + entries: entries.map((entry) => ({ + id: entry.id, + username: entry.username, + created_at: entry.createdAt.toISOString(), + updated_at: entry.updatedAt.toISOString() + })), + created_at: row.createdAt.toISOString(), + updated_at: row.updatedAt.toISOString() }; } -export function listAccessLists(): AccessList[] { - const rows = db - .prepare( - `SELECT id, name, description, created_at, updated_at - FROM access_lists - ORDER BY name ASC` - ) - .all(); - return rows.map(parseAccessList); +export async function listAccessLists(): Promise { + const lists = await prisma.accessList.findMany({ + orderBy: { name: "asc" }, + include: { + entries: { + select: { + id: true, + username: true, + createdAt: true, + updatedAt: true + }, + orderBy: { username: "asc" } + } + } + }); + return lists.map((list: typeof lists[0]) => toAccessList(list, list.entries)); } -export function getAccessList(id: number): AccessList | null { - const row = db - .prepare( - `SELECT id, name, description, created_at, updated_at - FROM access_lists WHERE id = ?` - ) - .get(id); - if (!row) { - return null; - } - return parseAccessList(row); +export async function getAccessList(id: number): Promise { + const list = await prisma.accessList.findUnique({ + where: { id }, + include: { + entries: { + select: { + id: true, + username: true, + createdAt: true, + updatedAt: true + }, + orderBy: { username: "asc" } + } + } + }); + return list ? toAccessList(list, list.entries) : null; } export async function createAccessList(input: AccessListInput, actorUserId: number) { - const now = nowIso(); - const tx = db.transaction(() => { - const result = db - .prepare( - `INSERT INTO access_lists (name, description, created_at, updated_at, created_by) - VALUES (?, ?, ?, ?, ?)` - ) - .run(input.name.trim(), input.description ?? null, now, now, actorUserId); - const accessListId = Number(result.lastInsertRowid); + const now = new Date(nowIso()); - if (input.users) { - const insert = db.prepare( - `INSERT INTO access_list_entries (access_list_id, username, password_hash, created_at, updated_at) - VALUES (?, ?, ?, ?, ?)` - ); - for (const account of input.users) { - const hash = bcrypt.hashSync(account.password, 10); - insert.run(accessListId, account.username, hash, now, now); - } + const accessList = await prisma.accessList.create({ + data: { + name: input.name.trim(), + description: input.description ?? null, + createdBy: actorUserId, + createdAt: now, + updatedAt: now, + entries: input.users + ? { + create: input.users.map((account) => ({ + username: account.username, + passwordHash: bcrypt.hashSync(account.password, 10), + createdAt: now, + updatedAt: now + })) + } + : undefined } - - logAuditEvent({ - userId: actorUserId, - action: "create", - entityType: "access_list", - entityId: accessListId, - summary: `Created access list ${input.name}` - }); - - return accessListId; }); - const id = tx(); + logAuditEvent({ + userId: actorUserId, + action: "create", + entityType: "access_list", + entityId: accessList.id, + summary: `Created access list ${input.name}` + }); + await applyCaddyConfig(); - return getAccessList(id)!; + return (await getAccessList(accessList.id))!; } export async function updateAccessList( @@ -112,15 +131,20 @@ export async function updateAccessList( input: { name?: string; description?: string | null }, actorUserId: number ) { - const existing = getAccessList(id); + const existing = await getAccessList(id); if (!existing) { throw new Error("Access list not found"); } - const now = nowIso(); - db.prepare( - `UPDATE access_lists SET name = ?, description = ?, updated_at = ? WHERE id = ?` - ).run(input.name ?? existing.name, input.description ?? existing.description, now, id); + const now = new Date(nowIso()); + await prisma.accessList.update({ + where: { id }, + data: { + name: input.name ?? existing.name, + description: input.description ?? existing.description, + updatedAt: now + } + }); logAuditEvent({ userId: actorUserId, @@ -131,7 +155,7 @@ export async function updateAccessList( }); await applyCaddyConfig(); - return getAccessList(id)!; + return (await getAccessList(id))!; } export async function addAccessListEntry( @@ -139,16 +163,23 @@ export async function addAccessListEntry( entry: { username: string; password: string }, actorUserId: number ) { - const list = getAccessList(accessListId); + const list = await prisma.accessList.findUnique({ + where: { id: accessListId } + }); if (!list) { throw new Error("Access list not found"); } - const now = nowIso(); + const now = new Date(nowIso()); const hash = bcrypt.hashSync(entry.password, 10); - db.prepare( - `INSERT INTO access_list_entries (access_list_id, username, password_hash, created_at, updated_at) - VALUES (?, ?, ?, ?, ?)` - ).run(accessListId, entry.username, hash, now, now); + await prisma.accessListEntry.create({ + data: { + accessListId, + username: entry.username, + passwordHash: hash, + createdAt: now, + updatedAt: now + } + }); logAuditEvent({ userId: actorUserId, action: "create", @@ -157,15 +188,19 @@ export async function addAccessListEntry( summary: `Added user ${entry.username} to access list ${list.name}` }); await applyCaddyConfig(); - return getAccessList(accessListId)!; + return (await getAccessList(accessListId))!; } export async function removeAccessListEntry(accessListId: number, entryId: number, actorUserId: number) { - const list = getAccessList(accessListId); + const list = await prisma.accessList.findUnique({ + where: { id: accessListId } + }); if (!list) { throw new Error("Access list not found"); } - db.prepare("DELETE FROM access_list_entries WHERE id = ?").run(entryId); + await prisma.accessListEntry.delete({ + where: { id: entryId } + }); logAuditEvent({ userId: actorUserId, action: "delete", @@ -174,15 +209,19 @@ export async function removeAccessListEntry(accessListId: number, entryId: numbe summary: `Removed entry from access list ${list.name}` }); await applyCaddyConfig(); - return getAccessList(accessListId)!; + return (await getAccessList(accessListId))!; } export async function deleteAccessList(id: number, actorUserId: number) { - const existing = getAccessList(id); + const existing = await prisma.accessList.findUnique({ + where: { id } + }); if (!existing) { throw new Error("Access list not found"); } - db.prepare("DELETE FROM access_lists WHERE id = ?").run(id); + await prisma.accessList.delete({ + where: { id } + }); logAuditEvent({ userId: actorUserId, action: "delete", diff --git a/src/lib/models/audit.ts b/src/lib/models/audit.ts index 0c85dfc6..a4ffe0fd 100644 --- a/src/lib/models/audit.ts +++ b/src/lib/models/audit.ts @@ -1,4 +1,4 @@ -import db from "../db"; +import prisma from "../db"; export type AuditEvent = { id: number; @@ -10,14 +10,19 @@ export type AuditEvent = { created_at: string; }; -export function listAuditEvents(limit = 100): AuditEvent[] { - const rows = db - .prepare( - `SELECT id, user_id, action, entity_type, entity_id, summary, created_at - FROM audit_events - ORDER BY created_at DESC - LIMIT ?` - ) - .all(limit) as AuditEvent[]; - return rows; +export async function listAuditEvents(limit = 100): Promise { + const events = await prisma.auditEvent.findMany({ + orderBy: { createdAt: "desc" }, + take: limit + }); + + return events.map((event: typeof events[0]) => ({ + id: event.id, + user_id: event.userId, + action: event.action, + entity_type: event.entityType, + entity_id: event.entityId, + summary: event.summary, + created_at: event.createdAt.toISOString() + })); } diff --git a/src/lib/models/certificates.ts b/src/lib/models/certificates.ts index 0bbc4b40..ed5987f0 100644 --- a/src/lib/models/certificates.ts +++ b/src/lib/models/certificates.ts @@ -1,4 +1,4 @@ -import db, { nowIso } from "../db"; +import prisma, { nowIso } from "../db"; import { logAuditEvent } from "../audit"; import { applyCaddyConfig } from "../caddy"; @@ -27,41 +27,44 @@ export type CertificateInput = { private_key_pem?: string | null; }; -function parseCertificate(row: any): Certificate { +function parseCertificate(row: { + id: number; + name: string; + type: string; + domainNames: string; + autoRenew: boolean; + providerOptions: string | null; + certificatePem: string | null; + privateKeyPem: string | null; + createdAt: Date; + updatedAt: Date; +}): Certificate { return { id: row.id, name: row.name, - type: row.type, - domain_names: JSON.parse(row.domain_names), - auto_renew: Boolean(row.auto_renew), - provider_options: row.provider_options ? JSON.parse(row.provider_options) : null, - certificate_pem: row.certificate_pem, - private_key_pem: row.private_key_pem, - created_at: row.created_at, - updated_at: row.updated_at + type: row.type as CertificateType, + domain_names: JSON.parse(row.domainNames), + auto_renew: row.autoRenew, + provider_options: row.providerOptions ? JSON.parse(row.providerOptions) : null, + certificate_pem: row.certificatePem, + private_key_pem: row.privateKeyPem, + created_at: row.createdAt.toISOString(), + updated_at: row.updatedAt.toISOString() }; } -export function listCertificates(): Certificate[] { - const rows = db - .prepare( - `SELECT id, name, type, domain_names, auto_renew, provider_options, certificate_pem, private_key_pem, - created_at, updated_at - FROM certificates ORDER BY created_at DESC` - ) - .all(); - return rows.map(parseCertificate); +export async function listCertificates(): Promise { + const certificates = await prisma.certificate.findMany({ + orderBy: { createdAt: "desc" } + }); + return certificates.map(parseCertificate); } -export function getCertificate(id: number): Certificate | null { - const row = db - .prepare( - `SELECT id, name, type, domain_names, auto_renew, provider_options, certificate_pem, private_key_pem, - created_at, updated_at - FROM certificates WHERE id = ?` - ) - .get(id); - return row ? parseCertificate(row) : null; +export async function getCertificate(id: number): Promise { + const cert = await prisma.certificate.findUnique({ + where: { id } + }); + return cert ? parseCertificate(cert) : null; } function validateCertificateInput(input: CertificateInput) { @@ -77,39 +80,36 @@ function validateCertificateInput(input: CertificateInput) { export async function createCertificate(input: CertificateInput, actorUserId: number) { validateCertificateInput(input); - const now = nowIso(); - const result = db - .prepare( - `INSERT INTO certificates (name, type, domain_names, auto_renew, provider_options, certificate_pem, private_key_pem, - created_at, updated_at, created_by) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)` - ) - .run( - input.name.trim(), - input.type, - JSON.stringify(Array.from(new Set(input.domain_names.map((domain) => domain.trim().toLowerCase())))), - (input.auto_renew ?? true) ? 1 : 0, - input.provider_options ? JSON.stringify(input.provider_options) : null, - input.certificate_pem ?? null, - input.private_key_pem ?? null, - now, - now, - actorUserId - ); - const id = Number(result.lastInsertRowid); + const now = new Date(nowIso()); + const record = await prisma.certificate.create({ + data: { + name: input.name.trim(), + type: input.type, + domainNames: JSON.stringify( + Array.from(new Set(input.domain_names.map((domain) => domain.trim().toLowerCase()))) + ), + autoRenew: input.auto_renew ?? true, + providerOptions: input.provider_options ? JSON.stringify(input.provider_options) : null, + certificatePem: input.certificate_pem ?? null, + privateKeyPem: input.private_key_pem ?? null, + createdAt: now, + updatedAt: now, + createdBy: actorUserId + } + }); logAuditEvent({ userId: actorUserId, action: "create", entityType: "certificate", - entityId: id, + entityId: record.id, summary: `Created certificate ${input.name}` }); await applyCaddyConfig(); - return getCertificate(id)!; + return (await getCertificate(record.id))!; } export async function updateCertificate(id: number, input: Partial, actorUserId: number) { - const existing = getCertificate(id); + const existing = await getCertificate(id); if (!existing) { throw new Error("Certificate not found"); } @@ -126,22 +126,20 @@ export async function updateCertificate(id: number, input: Partial { + const hosts = await prisma.deadHost.findMany({ + orderBy: { createdAt: "desc" } + }); + return hosts.map(parse); } -export function getDeadHost(id: number): DeadHost | null { - const row = db - .prepare( - `SELECT id, name, domains, status_code, response_body, enabled, created_at, updated_at - FROM dead_hosts WHERE id = ?` - ) - .get(id); - return row ? parse(row) : null; +export async function getDeadHost(id: number): Promise { + const host = await prisma.deadHost.findUnique({ + where: { id } + }); + return host ? parse(host) : null; } export async function createDeadHost(input: DeadHostInput, actorUserId: number) { @@ -59,53 +62,47 @@ export async function createDeadHost(input: DeadHostInput, actorUserId: number) throw new Error("At least one domain is required"); } - const now = nowIso(); - const result = db - .prepare( - `INSERT INTO dead_hosts (name, domains, status_code, response_body, enabled, created_at, updated_at, created_by) - VALUES (?, ?, ?, ?, ?, ?, ?, ?)` - ) - .run( - input.name.trim(), - JSON.stringify(Array.from(new Set(input.domains.map((d) => d.trim().toLowerCase())))), - input.status_code ?? 503, - input.response_body ?? null, - (input.enabled ?? true) ? 1 : 0, - now, - now, - actorUserId - ); - const id = Number(result.lastInsertRowid); + const now = new Date(nowIso()); + const record = await prisma.deadHost.create({ + data: { + name: input.name.trim(), + domains: JSON.stringify(Array.from(new Set(input.domains.map((d) => d.trim().toLowerCase())))), + statusCode: input.status_code ?? 503, + responseBody: input.response_body ?? null, + enabled: input.enabled ?? true, + createdAt: now, + updatedAt: now, + createdBy: actorUserId + } + }); logAuditEvent({ userId: actorUserId, action: "create", entityType: "dead_host", - entityId: id, + entityId: record.id, summary: `Created dead host ${input.name}` }); await applyCaddyConfig(); - return getDeadHost(id)!; + return (await getDeadHost(record.id))!; } export async function updateDeadHost(id: number, input: Partial, actorUserId: number) { - const existing = getDeadHost(id); + const existing = await getDeadHost(id); if (!existing) { throw new Error("Dead host not found"); } - const now = nowIso(); - db.prepare( - `UPDATE dead_hosts - SET name = ?, domains = ?, status_code = ?, response_body = ?, enabled = ?, updated_at = ? - WHERE id = ?` - ).run( - input.name ?? existing.name, - JSON.stringify(input.domains ? Array.from(new Set(input.domains)) : existing.domains), - input.status_code ?? existing.status_code, - input.response_body ?? existing.response_body, - (input.enabled ?? existing.enabled) ? 1 : 0, - now, - id - ); + const now = new Date(nowIso()); + await prisma.deadHost.update({ + where: { id }, + data: { + name: input.name ?? existing.name, + domains: JSON.stringify(input.domains ? Array.from(new Set(input.domains)) : existing.domains), + statusCode: input.status_code ?? existing.status_code, + responseBody: input.response_body ?? existing.response_body, + enabled: input.enabled ?? existing.enabled, + updatedAt: now + } + }); logAuditEvent({ userId: actorUserId, action: "update", @@ -114,15 +111,17 @@ export async function updateDeadHost(id: number, input: Partial, summary: `Updated dead host ${input.name ?? existing.name}` }); await applyCaddyConfig(); - return getDeadHost(id)!; + return (await getDeadHost(id))!; } export async function deleteDeadHost(id: number, actorUserId: number) { - const existing = getDeadHost(id); + const existing = await getDeadHost(id); if (!existing) { throw new Error("Dead host not found"); } - db.prepare("DELETE FROM dead_hosts WHERE id = ?").run(id); + await prisma.deadHost.delete({ + where: { id } + }); logAuditEvent({ userId: actorUserId, action: "delete", diff --git a/src/lib/models/proxy-hosts.ts b/src/lib/models/proxy-hosts.ts index 9a1a2133..935f9bd3 100644 --- a/src/lib/models/proxy-hosts.ts +++ b/src/lib/models/proxy-hosts.ts @@ -1,7 +1,60 @@ -import db, { nowIso } from "../db"; +import prisma, { nowIso } from "../db"; import { applyCaddyConfig } from "../caddy"; import { logAuditEvent } from "../audit"; +const DEFAULT_AUTHENTIK_HEADERS = [ + "X-Authentik-Username", + "X-Authentik-Groups", + "X-Authentik-Entitlements", + "X-Authentik-Email", + "X-Authentik-Name", + "X-Authentik-Uid", + "X-Authentik-Jwt", + "X-Authentik-Meta-Jwks", + "X-Authentik-Meta-Outpost", + "X-Authentik-Meta-Provider", + "X-Authentik-Meta-App", + "X-Authentik-Meta-Version" +]; + +const DEFAULT_AUTHENTIK_TRUSTED_PROXIES = ["private_ranges"]; + +export type ProxyHostAuthentikConfig = { + enabled: boolean; + outpostDomain: string | null; + outpostUpstream: string | null; + authEndpoint: string | null; + copyHeaders: string[]; + trustedProxies: string[]; + setOutpostHostHeader: boolean; +}; + +export type ProxyHostAuthentikInput = { + enabled?: boolean; + outpostDomain?: string | null; + outpostUpstream?: string | null; + authEndpoint?: string | null; + copyHeaders?: string[] | null; + trustedProxies?: string[] | null; + setOutpostHostHeader?: boolean | null; +}; + +type ProxyHostAuthentikMeta = { + enabled?: boolean; + outpost_domain?: string; + outpost_upstream?: string; + auth_endpoint?: string; + copy_headers?: string[]; + trusted_proxies?: string[]; + set_outpost_host_header?: boolean; +}; + +type ProxyHostMeta = { + custom_reverse_proxy_json?: string; + custom_pre_handlers_json?: string; + authentik?: ProxyHostAuthentikMeta; +}; + export type ProxyHost = { id: number; name: string; @@ -18,6 +71,9 @@ export type ProxyHost = { enabled: boolean; created_at: string; updated_at: string; + custom_reverse_proxy_json: string | null; + custom_pre_handlers_json: string | null; + authentik: ProxyHostAuthentikConfig | null; }; export type ProxyHostInput = { @@ -33,39 +89,324 @@ export type ProxyHostInput = { preserve_host_header?: boolean; skip_https_hostname_validation?: boolean; enabled?: boolean; + custom_reverse_proxy_json?: string | null; + custom_pre_handlers_json?: string | null; + authentik?: ProxyHostAuthentikInput | null; }; -function parseProxyHost(row: any): ProxyHost { +type ProxyHostRow = { + id: number; + name: string; + domains: string; + upstreams: string; + certificateId: number | null; + accessListId: number | null; + ownerUserId: number | null; + sslForced: boolean; + hstsEnabled: boolean; + hstsSubdomains: boolean; + allowWebsocket: boolean; + preserveHostHeader: boolean; + meta: string | null; + skipHttpsHostnameValidation: boolean; + enabled: boolean; + createdAt: Date; + updatedAt: Date; +}; + +function normalizeMetaValue(value: string | null | undefined) { + if (!value) { + return null; + } + const trimmed = value.trim(); + return trimmed.length > 0 ? trimmed : null; +} + +function sanitizeAuthentikMeta(meta: ProxyHostAuthentikMeta | undefined): ProxyHostAuthentikMeta | undefined { + if (!meta) { + return undefined; + } + + const normalized: ProxyHostAuthentikMeta = {}; + + if (meta.enabled !== undefined) { + normalized.enabled = Boolean(meta.enabled); + } + + const domain = normalizeMetaValue(meta.outpost_domain ?? null); + if (domain) { + normalized.outpost_domain = domain; + } + + const upstream = normalizeMetaValue(meta.outpost_upstream ?? null); + if (upstream) { + normalized.outpost_upstream = upstream; + } + + const authEndpoint = normalizeMetaValue(meta.auth_endpoint ?? null); + if (authEndpoint) { + normalized.auth_endpoint = authEndpoint; + } + + if (Array.isArray(meta.copy_headers)) { + const headers = meta.copy_headers.map((header) => header?.trim()).filter((header): header is string => Boolean(header)); + if (headers.length > 0) { + normalized.copy_headers = headers; + } + } + + if (Array.isArray(meta.trusted_proxies)) { + const proxies = meta.trusted_proxies.map((proxy) => proxy?.trim()).filter((proxy): proxy is string => Boolean(proxy)); + if (proxies.length > 0) { + normalized.trusted_proxies = proxies; + } + } + + if (meta.set_outpost_host_header !== undefined) { + normalized.set_outpost_host_header = Boolean(meta.set_outpost_host_header); + } + + return Object.keys(normalized).length > 0 ? normalized : undefined; +} + +function serializeMeta(meta: ProxyHostMeta | null | undefined) { + if (!meta) { + return null; + } + const normalized: ProxyHostMeta = {}; + const reverse = normalizeMetaValue(meta.custom_reverse_proxy_json ?? null); + const preHandlers = normalizeMetaValue(meta.custom_pre_handlers_json ?? null); + + if (reverse) { + normalized.custom_reverse_proxy_json = reverse; + } + if (preHandlers) { + normalized.custom_pre_handlers_json = preHandlers; + } + + const authentik = sanitizeAuthentikMeta(meta.authentik); + if (authentik) { + normalized.authentik = authentik; + } + + return Object.keys(normalized).length > 0 ? JSON.stringify(normalized) : null; +} + +function parseMeta(value: string | null): ProxyHostMeta { + if (!value) { + return {}; + } + try { + const parsed = JSON.parse(value) as ProxyHostMeta; + return { + custom_reverse_proxy_json: normalizeMetaValue(parsed.custom_reverse_proxy_json ?? null) ?? undefined, + custom_pre_handlers_json: normalizeMetaValue(parsed.custom_pre_handlers_json ?? null) ?? undefined, + authentik: sanitizeAuthentikMeta(parsed.authentik) + }; + } catch (error) { + console.warn("Failed to parse proxy host meta", error); + return {}; + } +} + +function normalizeAuthentikInput( + input: ProxyHostAuthentikInput | null | undefined, + existing: ProxyHostAuthentikMeta | undefined +): ProxyHostAuthentikMeta | undefined { + if (input === undefined) { + return existing; + } + if (input === null) { + return undefined; + } + + const next: ProxyHostAuthentikMeta = { ...(existing ?? {}) }; + + if (input.enabled !== undefined) { + next.enabled = Boolean(input.enabled); + } + + if (input.outpostDomain !== undefined) { + const domain = normalizeMetaValue(input.outpostDomain ?? null); + if (domain) { + next.outpost_domain = domain; + } else { + delete next.outpost_domain; + } + } + + if (input.outpostUpstream !== undefined) { + const upstream = normalizeMetaValue(input.outpostUpstream ?? null); + if (upstream) { + next.outpost_upstream = upstream; + } else { + delete next.outpost_upstream; + } + } + + if (input.authEndpoint !== undefined) { + const endpoint = normalizeMetaValue(input.authEndpoint ?? null); + if (endpoint) { + next.auth_endpoint = endpoint; + } else { + delete next.auth_endpoint; + } + } + + if (input.copyHeaders !== undefined) { + const headers = (input.copyHeaders ?? []) + .map((header) => header?.trim()) + .filter((header): header is string => Boolean(header)); + if (headers.length > 0) { + next.copy_headers = headers; + } else { + delete next.copy_headers; + } + } + + if (input.trustedProxies !== undefined) { + const proxies = (input.trustedProxies ?? []) + .map((proxy) => proxy?.trim()) + .filter((proxy): proxy is string => Boolean(proxy)); + if (proxies.length > 0) { + next.trusted_proxies = proxies; + } else { + delete next.trusted_proxies; + } + } + + if (input.setOutpostHostHeader !== undefined) { + next.set_outpost_host_header = Boolean(input.setOutpostHostHeader); + } + + if ((next.enabled ?? false) && next.outpost_domain && !next.auth_endpoint) { + next.auth_endpoint = `/${next.outpost_domain}/auth/caddy`; + } + + return Object.keys(next).length > 0 ? next : undefined; +} + +function buildMeta(existing: ProxyHostMeta, input: Partial): string | null { + const next: ProxyHostMeta = { ...existing }; + + if (input.custom_reverse_proxy_json !== undefined) { + const reverse = normalizeMetaValue(input.custom_reverse_proxy_json ?? null); + if (reverse) { + next.custom_reverse_proxy_json = reverse; + } else { + delete next.custom_reverse_proxy_json; + } + } + + if (input.custom_pre_handlers_json !== undefined) { + const pre = normalizeMetaValue(input.custom_pre_handlers_json ?? null); + if (pre) { + next.custom_pre_handlers_json = pre; + } else { + delete next.custom_pre_handlers_json; + } + } + + if (input.authentik !== undefined) { + const authentik = normalizeAuthentikInput(input.authentik, existing.authentik); + if (authentik) { + next.authentik = authentik; + } else { + delete next.authentik; + } + } + + return serializeMeta(next); +} + +function hydrateAuthentik(meta: ProxyHostAuthentikMeta | undefined): ProxyHostAuthentikConfig | null { + if (!meta) { + return null; + } + + const enabled = Boolean(meta.enabled); + const outpostDomain = normalizeMetaValue(meta.outpost_domain ?? null); + const outpostUpstream = normalizeMetaValue(meta.outpost_upstream ?? null); + const authEndpoint = + normalizeMetaValue(meta.auth_endpoint ?? null) ?? (outpostDomain ? `/${outpostDomain}/auth/caddy` : null); + const copyHeaders = + Array.isArray(meta.copy_headers) && meta.copy_headers.length > 0 ? meta.copy_headers : DEFAULT_AUTHENTIK_HEADERS; + const trustedProxies = + Array.isArray(meta.trusted_proxies) && meta.trusted_proxies.length > 0 + ? meta.trusted_proxies + : DEFAULT_AUTHENTIK_TRUSTED_PROXIES; + const setOutpostHostHeader = + meta.set_outpost_host_header !== undefined ? Boolean(meta.set_outpost_host_header) : true; + + return { + enabled, + outpostDomain, + outpostUpstream, + authEndpoint, + copyHeaders, + trustedProxies, + setOutpostHostHeader + }; +} + +function dehydrateAuthentik(config: ProxyHostAuthentikConfig | null): ProxyHostAuthentikMeta | undefined { + if (!config) { + return undefined; + } + + const meta: ProxyHostAuthentikMeta = { + enabled: config.enabled + }; + + if (config.outpostDomain) { + meta.outpost_domain = config.outpostDomain; + } + if (config.outpostUpstream) { + meta.outpost_upstream = config.outpostUpstream; + } + if (config.authEndpoint) { + meta.auth_endpoint = config.authEndpoint; + } + if (config.copyHeaders.length > 0) { + meta.copy_headers = [...config.copyHeaders]; + } + if (config.trustedProxies.length > 0) { + meta.trusted_proxies = [...config.trustedProxies]; + } + meta.set_outpost_host_header = config.setOutpostHostHeader; + + return meta; +} + +function parseProxyHost(row: ProxyHostRow): ProxyHost { + const meta = parseMeta(row.meta ?? null); return { id: row.id, name: row.name, domains: JSON.parse(row.domains), upstreams: JSON.parse(row.upstreams), - certificate_id: row.certificate_id ?? null, - access_list_id: row.access_list_id ?? null, - ssl_forced: Boolean(row.ssl_forced), - hsts_enabled: Boolean(row.hsts_enabled), - hsts_subdomains: Boolean(row.hsts_subdomains), - allow_websocket: Boolean(row.allow_websocket), - preserve_host_header: Boolean(row.preserve_host_header), - skip_https_hostname_validation: Boolean(row.skip_https_hostname_validation), - enabled: Boolean(row.enabled), - created_at: row.created_at, - updated_at: row.updated_at + certificate_id: row.certificateId ?? null, + access_list_id: row.accessListId ?? null, + ssl_forced: row.sslForced, + hsts_enabled: row.hstsEnabled, + hsts_subdomains: row.hstsSubdomains, + allow_websocket: row.allowWebsocket, + preserve_host_header: row.preserveHostHeader, + skip_https_hostname_validation: row.skipHttpsHostnameValidation, + enabled: row.enabled, + created_at: row.createdAt.toISOString(), + updated_at: row.updatedAt.toISOString(), + custom_reverse_proxy_json: meta.custom_reverse_proxy_json ?? null, + custom_pre_handlers_json: meta.custom_pre_handlers_json ?? null, + authentik: hydrateAuthentik(meta.authentik) }; } -export function listProxyHosts(): ProxyHost[] { - const rows = db - .prepare( - `SELECT id, name, domains, upstreams, certificate_id, access_list_id, ssl_forced, hsts_enabled, - hsts_subdomains, allow_websocket, preserve_host_header, skip_https_hostname_validation, - enabled, created_at, updated_at - FROM proxy_hosts - ORDER BY created_at DESC` - ) - .all(); - return rows.map(parseProxyHost); +export async function listProxyHosts(): Promise { + const hosts = await prisma.proxyHost.findMany({ + orderBy: { createdAt: "desc" } + }); + return hosts.map(parseProxyHost); } export async function createProxyHost(input: ProxyHostInput, actorUserId: number) { @@ -76,99 +417,84 @@ export async function createProxyHost(input: ProxyHostInput, actorUserId: number throw new Error("At least one upstream must be specified"); } - const now = nowIso(); - const tx = db.transaction(() => { - const result = db - .prepare( - `INSERT INTO proxy_hosts - (name, domains, upstreams, certificate_id, access_list_id, ssl_forced, hsts_enabled, - hsts_subdomains, allow_websocket, preserve_host_header, skip_https_hostname_validation, - enabled, created_at, updated_at, owner_user_id) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)` - ) - .run( - input.name.trim(), - JSON.stringify(Array.from(new Set(input.domains.map((d) => d.trim().toLowerCase())))), - JSON.stringify(Array.from(new Set(input.upstreams.map((u) => u.trim())))), - input.certificate_id ?? null, - input.access_list_id ?? null, - (input.ssl_forced ?? true) ? 1 : 0, - (input.hsts_enabled ?? true) ? 1 : 0, - input.hsts_subdomains ? 1 : 0, - (input.allow_websocket ?? true) ? 1 : 0, - (input.preserve_host_header ?? true) ? 1 : 0, - input.skip_https_hostname_validation ? 1 : 0, - (input.enabled ?? true) ? 1 : 0, - now, - now, - actorUserId - ); - - const id = Number(result.lastInsertRowid); - logAuditEvent({ - userId: actorUserId, - action: "create", - entityType: "proxy_host", - entityId: id, - summary: `Created proxy host ${input.name}`, - data: input - }); - - return id; + const now = new Date(nowIso()); + const meta = buildMeta({}, input); + const record = await prisma.proxyHost.create({ + data: { + name: input.name.trim(), + domains: JSON.stringify(Array.from(new Set(input.domains.map((d) => d.trim().toLowerCase())))), + upstreams: JSON.stringify(Array.from(new Set(input.upstreams.map((u) => u.trim())))), + certificateId: input.certificate_id ?? null, + accessListId: input.access_list_id ?? null, + ownerUserId: actorUserId, + sslForced: input.ssl_forced ?? true, + hstsEnabled: input.hsts_enabled ?? true, + hstsSubdomains: input.hsts_subdomains ?? false, + allowWebsocket: input.allow_websocket ?? true, + preserveHostHeader: input.preserve_host_header ?? true, + meta, + skipHttpsHostnameValidation: input.skip_https_hostname_validation ?? false, + enabled: input.enabled ?? true, + createdAt: now, + updatedAt: now + } + }); + + logAuditEvent({ + userId: actorUserId, + action: "create", + entityType: "proxy_host", + entityId: record.id, + summary: `Created proxy host ${input.name}`, + data: input }); - const id = tx(); await applyCaddyConfig(); - return getProxyHost(id)!; + return (await getProxyHost(record.id))!; } -export function getProxyHost(id: number): ProxyHost | null { - const row = db - .prepare( - `SELECT id, name, domains, upstreams, certificate_id, access_list_id, ssl_forced, hsts_enabled, - hsts_subdomains, allow_websocket, preserve_host_header, skip_https_hostname_validation, - enabled, created_at, updated_at - FROM proxy_hosts WHERE id = ?` - ) - .get(id); - if (!row) { - return null; - } - return parseProxyHost(row); +export async function getProxyHost(id: number): Promise { + const host = await prisma.proxyHost.findUnique({ + where: { id } + }); + return host ? parseProxyHost(host) : null; } export async function updateProxyHost(id: number, input: Partial, actorUserId: number) { - const existing = getProxyHost(id); + const existing = await getProxyHost(id); if (!existing) { throw new Error("Proxy host not found"); } const domains = input.domains ? JSON.stringify(Array.from(new Set(input.domains))) : JSON.stringify(existing.domains); const upstreams = input.upstreams ? JSON.stringify(Array.from(new Set(input.upstreams))) : JSON.stringify(existing.upstreams); + const existingMeta: ProxyHostMeta = { + custom_reverse_proxy_json: existing.custom_reverse_proxy_json ?? undefined, + custom_pre_handlers_json: existing.custom_pre_handlers_json ?? undefined, + authentik: dehydrateAuthentik(existing.authentik) + }; + const meta = buildMeta(existingMeta, input); - const now = nowIso(); - db.prepare( - `UPDATE proxy_hosts - SET name = ?, domains = ?, upstreams = ?, certificate_id = ?, access_list_id = ?, ssl_forced = ?, hsts_enabled = ?, - hsts_subdomains = ?, allow_websocket = ?, preserve_host_header = ?, skip_https_hostname_validation = ?, - enabled = ?, updated_at = ? - WHERE id = ?` - ).run( - input.name ?? existing.name, - domains, - upstreams, - input.certificate_id ?? existing.certificate_id, - input.access_list_id ?? existing.access_list_id, - (input.ssl_forced ?? existing.ssl_forced) ? 1 : 0, - (input.hsts_enabled ?? existing.hsts_enabled) ? 1 : 0, - (input.hsts_subdomains ?? existing.hsts_subdomains) ? 1 : 0, - (input.allow_websocket ?? existing.allow_websocket) ? 1 : 0, - (input.preserve_host_header ?? existing.preserve_host_header) ? 1 : 0, - (input.skip_https_hostname_validation ?? existing.skip_https_hostname_validation) ? 1 : 0, - (input.enabled ?? existing.enabled) ? 1 : 0, - now, - id - ); + const now = new Date(nowIso()); + await prisma.proxyHost.update({ + where: { id }, + data: { + name: input.name ?? existing.name, + domains, + upstreams, + certificateId: input.certificate_id ?? existing.certificate_id, + accessListId: input.access_list_id ?? existing.access_list_id, + sslForced: input.ssl_forced ?? existing.ssl_forced, + hstsEnabled: input.hsts_enabled ?? existing.hsts_enabled, + hstsSubdomains: input.hsts_subdomains ?? existing.hsts_subdomains, + allowWebsocket: input.allow_websocket ?? existing.allow_websocket, + preserveHostHeader: input.preserve_host_header ?? existing.preserve_host_header, + meta, + skipHttpsHostnameValidation: input.skip_https_hostname_validation ?? existing.skip_https_hostname_validation, + enabled: input.enabled ?? existing.enabled, + updatedAt: now + } + }); logAuditEvent({ userId: actorUserId, @@ -180,16 +506,18 @@ export async function updateProxyHost(id: number, input: Partial }); await applyCaddyConfig(); - return getProxyHost(id)!; + return (await getProxyHost(id))!; } export async function deleteProxyHost(id: number, actorUserId: number) { - const existing = getProxyHost(id); + const existing = await getProxyHost(id); if (!existing) { throw new Error("Proxy host not found"); } - db.prepare("DELETE FROM proxy_hosts WHERE id = ?").run(id); + await prisma.proxyHost.delete({ + where: { id } + }); logAuditEvent({ userId: actorUserId, action: "delete", diff --git a/src/lib/models/redirect-hosts.ts b/src/lib/models/redirect-hosts.ts index fc5273ad..daede127 100644 --- a/src/lib/models/redirect-hosts.ts +++ b/src/lib/models/redirect-hosts.ts @@ -1,4 +1,4 @@ -import db, { nowIso } from "../db"; +import prisma, { nowIso } from "../db"; import { logAuditEvent } from "../audit"; import { applyCaddyConfig } from "../caddy"; @@ -23,38 +23,42 @@ export type RedirectHostInput = { enabled?: boolean; }; -function parse(row: any): RedirectHost { +function parseDbRecord(record: { + id: number; + name: string; + domains: string; + destination: string; + statusCode: number; + preserveQuery: boolean; + enabled: boolean; + createdAt: Date; + updatedAt: Date; +}): RedirectHost { return { - id: row.id, - name: row.name, - domains: JSON.parse(row.domains), - destination: row.destination, - status_code: row.status_code, - preserve_query: Boolean(row.preserve_query), - enabled: Boolean(row.enabled), - created_at: row.created_at, - updated_at: row.updated_at + id: record.id, + name: record.name, + domains: JSON.parse(record.domains), + destination: record.destination, + status_code: record.statusCode, + preserve_query: record.preserveQuery, + enabled: record.enabled, + created_at: record.createdAt.toISOString(), + updated_at: record.updatedAt.toISOString() }; } -export function listRedirectHosts(): RedirectHost[] { - const rows = db - .prepare( - `SELECT id, name, domains, destination, status_code, preserve_query, enabled, created_at, updated_at - FROM redirect_hosts ORDER BY created_at DESC` - ) - .all(); - return rows.map(parse); +export async function listRedirectHosts(): Promise { + const records = await prisma.redirectHost.findMany({ + orderBy: { createdAt: "desc" } + }); + return records.map(parseDbRecord); } -export function getRedirectHost(id: number): RedirectHost | null { - const row = db - .prepare( - `SELECT id, name, domains, destination, status_code, preserve_query, enabled, created_at, updated_at - FROM redirect_hosts WHERE id = ?` - ) - .get(id); - return row ? parse(row) : null; +export async function getRedirectHost(id: number): Promise { + const record = await prisma.redirectHost.findUnique({ + where: { id } + }); + return record ? parseDbRecord(record) : null; } export async function createRedirectHost(input: RedirectHostInput, actorUserId: number) { @@ -62,56 +66,51 @@ export async function createRedirectHost(input: RedirectHostInput, actorUserId: throw new Error("At least one domain is required"); } - const now = nowIso(); - const result = db - .prepare( - `INSERT INTO redirect_hosts (name, domains, destination, status_code, preserve_query, enabled, created_at, updated_at, created_by) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)` - ) - .run( - input.name.trim(), - JSON.stringify(Array.from(new Set(input.domains.map((d) => d.trim().toLowerCase())))), - input.destination.trim(), - input.status_code ?? 302, - input.preserve_query ? 1 : 0, - (input.enabled ?? true) ? 1 : 0, - now, - now, - actorUserId - ); - const id = Number(result.lastInsertRowid); + const now = new Date(nowIso()); + const record = await prisma.redirectHost.create({ + data: { + name: input.name.trim(), + domains: JSON.stringify(Array.from(new Set(input.domains.map((d) => d.trim().toLowerCase())))), + destination: input.destination.trim(), + statusCode: input.status_code ?? 302, + preserveQuery: input.preserve_query ?? true, + enabled: input.enabled ?? true, + createdAt: now, + updatedAt: now, + createdBy: actorUserId + } + }); + logAuditEvent({ userId: actorUserId, action: "create", entityType: "redirect_host", - entityId: id, + entityId: record.id, summary: `Created redirect ${input.name}` }); await applyCaddyConfig(); - return getRedirectHost(id)!; + return (await getRedirectHost(record.id))!; } export async function updateRedirectHost(id: number, input: Partial, actorUserId: number) { - const existing = getRedirectHost(id); + const existing = await getRedirectHost(id); if (!existing) { throw new Error("Redirect host not found"); } - const now = nowIso(); - db.prepare( - `UPDATE redirect_hosts - SET name = ?, domains = ?, destination = ?, status_code = ?, preserve_query = ?, enabled = ?, updated_at = ? - WHERE id = ?` - ).run( - input.name ?? existing.name, - JSON.stringify(input.domains ? Array.from(new Set(input.domains)) : existing.domains), - input.destination ?? existing.destination, - input.status_code ?? existing.status_code, - (input.preserve_query ?? existing.preserve_query) ? 1 : 0, - (input.enabled ?? existing.enabled) ? 1 : 0, - now, - id - ); + const now = new Date(nowIso()); + await prisma.redirectHost.update({ + where: { id }, + data: { + name: input.name ?? existing.name, + domains: input.domains ? JSON.stringify(Array.from(new Set(input.domains))) : JSON.stringify(existing.domains), + destination: input.destination ?? existing.destination, + statusCode: input.status_code ?? existing.status_code, + preserveQuery: input.preserve_query ?? existing.preserve_query, + enabled: input.enabled ?? existing.enabled, + updatedAt: now + } + }); logAuditEvent({ userId: actorUserId, @@ -121,15 +120,19 @@ export async function updateRedirectHost(id: number, input: Partial, actorUserId: number) { - const existing = getStreamHost(id); - if (!existing) { - throw new Error("Stream host not found"); - } - const protocol = input.protocol ? input.protocol.toLowerCase() : existing.protocol; - assertProtocol(protocol); - const now = nowIso(); - db.prepare( - `UPDATE stream_hosts - SET name = ?, listen_port = ?, protocol = ?, upstream = ?, enabled = ?, updated_at = ? - WHERE id = ?` - ).run( - input.name ?? existing.name, - input.listen_port ?? existing.listen_port, - protocol, - input.upstream ?? existing.upstream, - (input.enabled ?? existing.enabled) ? 1 : 0, - now, - id - ); - logAuditEvent({ - userId: actorUserId, - action: "update", - entityType: "stream_host", - entityId: id, - summary: `Updated stream ${input.name ?? existing.name}` - }); - await applyCaddyConfig(); - return getStreamHost(id)!; -} - -export async function deleteStreamHost(id: number, actorUserId: number) { - const existing = getStreamHost(id); - if (!existing) { - throw new Error("Stream host not found"); - } - db.prepare("DELETE FROM stream_hosts WHERE id = ?").run(id); - logAuditEvent({ - userId: actorUserId, - action: "delete", - entityType: "stream_host", - entityId: id, - summary: `Deleted stream ${existing.name}` - }); - await applyCaddyConfig(); -} diff --git a/src/lib/models/user.ts b/src/lib/models/user.ts index be1ec0fc..ebfdc8b8 100644 --- a/src/lib/models/user.ts +++ b/src/lib/models/user.ts @@ -1,9 +1,10 @@ -import db, { nowIso } from "../db"; +import prisma, { nowIso } from "../db"; export type User = { id: number; email: string; name: string | null; + password_hash: string | null; role: "admin" | "user" | "viewer"; provider: string; subject: string; @@ -13,107 +14,141 @@ export type User = { updated_at: string; }; -export function getUserById(userId: number): User | null { - const row = db - .prepare( - `SELECT id, email, name, role, provider, subject, avatar_url, status, created_at, updated_at - FROM users WHERE id = ?` - ) - .get(userId) as User | undefined; - return row ?? null; +function parseDbUser(user: { + id: number; + email: string; + name: string | null; + passwordHash: string | null; + role: string; + provider: string; + subject: string; + avatarUrl: string | null; + status: string; + createdAt: Date; + updatedAt: Date; +}): User { + return { + id: user.id, + email: user.email, + name: user.name, + password_hash: user.passwordHash, + role: user.role as "admin" | "user" | "viewer", + provider: user.provider, + subject: user.subject, + avatar_url: user.avatarUrl, + status: user.status, + created_at: user.createdAt.toISOString(), + updated_at: user.updatedAt.toISOString() + }; } -export function getUserCount(): number { - const row = db.prepare("SELECT COUNT(*) as count FROM users").get() as { count: number }; - return Number(row.count); +export async function getUserById(userId: number): Promise { + const user = await prisma.user.findUnique({ + where: { id: userId } + }); + return user ? parseDbUser(user) : null; } -export function findUserByProviderSubject(provider: string, subject: string): User | null { - const row = db - .prepare( - `SELECT id, email, name, role, provider, subject, avatar_url, status, created_at, updated_at - FROM users WHERE provider = ? AND subject = ?` - ) - .get(provider, subject) as User | undefined; - return row ?? null; +export async function getUserCount(): Promise { + return await prisma.user.count(); } -export function findUserByEmail(email: string): User | null { - const row = db - .prepare( - `SELECT id, email, name, role, provider, subject, avatar_url, status, created_at, updated_at - FROM users WHERE email = ?` - ) - .get(email) as User | undefined; - return row ?? null; +export async function findUserByProviderSubject(provider: string, subject: string): Promise { + const user = await prisma.user.findFirst({ + where: { + provider, + subject + } + }); + return user ? parseDbUser(user) : null; } -export function createUser(data: { +export async function findUserByEmail(email: string): Promise { + const normalizedEmail = email.trim().toLowerCase(); + const user = await prisma.user.findFirst({ + where: { + email: normalizedEmail + } + }); + return user ? parseDbUser(user) : null; +} + +export async function createUser(data: { email: string; name?: string | null; role?: User["role"]; provider: string; subject: string; avatar_url?: string | null; -}): User { - const now = nowIso(); + passwordHash?: string | null; +}): Promise { + const now = new Date(nowIso()); const role = data.role ?? "user"; - const stmt = db.prepare( - `INSERT INTO users (email, name, role, provider, subject, avatar_url, status, created_at, updated_at) - VALUES (?, ?, ?, ?, ?, ?, 'active', ?, ?)` - ); - const info = stmt.run(data.email, data.name ?? null, role, data.provider, data.subject, data.avatar_url ?? null, now, now); + const email = data.email.trim().toLowerCase(); - return { - id: Number(info.lastInsertRowid), - email: data.email, - name: data.name ?? null, - role, - provider: data.provider, - subject: data.subject, - avatar_url: data.avatar_url ?? null, - status: "active", - created_at: now, - updated_at: now - }; + const user = await prisma.user.create({ + data: { + email, + name: data.name ?? null, + passwordHash: data.passwordHash ?? null, + role, + provider: data.provider, + subject: data.subject, + avatarUrl: data.avatar_url ?? null, + status: "active", + createdAt: now, + updatedAt: now + } + }); + + return parseDbUser(user); } -export function updateUserProfile(userId: number, data: { email?: string; name?: string | null; avatar_url?: string | null }): User | null { - const current = getUserById(userId); +export async function updateUserProfile(userId: number, data: { email?: string; name?: string | null; avatar_url?: string | null }): Promise { + const current = await getUserById(userId); if (!current) { return null; } - const nextEmail = data.email ?? current.email; - const nextName = data.name ?? current.name; - const nextAvatar = data.avatar_url ?? current.avatar_url; - const now = nowIso(); - db.prepare( - `UPDATE users - SET email = ?, name = ?, avatar_url = ?, updated_at = ? - WHERE id = ?` - ).run(nextEmail, nextName, nextAvatar, now, userId); - return { - ...current, - email: nextEmail, - name: nextName, - avatar_url: nextAvatar, - updated_at: now - }; + const now = new Date(nowIso()); + const user = await prisma.user.update({ + where: { id: userId }, + data: { + email: data.email ?? current.email, + name: data.name ?? current.name, + avatarUrl: data.avatar_url ?? current.avatar_url, + updatedAt: now + } + }); + + return parseDbUser(user); } -export function listUsers(): User[] { - const rows = db - .prepare( - `SELECT id, email, name, role, provider, subject, avatar_url, status, created_at, updated_at - FROM users - ORDER BY created_at ASC` - ) - .all() as User[]; - return rows; +export async function updateUserPassword(userId: number, passwordHash: string): Promise { + const now = new Date(nowIso()); + await prisma.user.update({ + where: { id: userId }, + data: { + passwordHash, + updatedAt: now + } + }); } -export function promoteToAdmin(userId: number) { - const now = nowIso(); - db.prepare("UPDATE users SET role = 'admin', updated_at = ? WHERE id = ?").run(now, userId); +export async function listUsers(): Promise { + const users = await prisma.user.findMany({ + orderBy: { createdAt: "asc" } + }); + return users.map(parseDbUser); +} + +export async function promoteToAdmin(userId: number): Promise { + const now = new Date(nowIso()); + await prisma.user.update({ + where: { id: userId }, + data: { + role: "admin", + updatedAt: now + } + }); } diff --git a/src/lib/settings.ts b/src/lib/settings.ts index 1ba14831..c0f0596e 100644 --- a/src/lib/settings.ts +++ b/src/lib/settings.ts @@ -1,20 +1,7 @@ -import db, { nowIso } from "./db"; +import prisma, { nowIso } from "./db"; export type SettingValue = T | null; -export type OAuthSettings = { - providerType: "authentik" | "generic"; - authorizationUrl: string; - tokenUrl: string; - clientId: string; - clientSecret: string; - userInfoUrl: string; - scopes: string; - emailClaim?: string; - nameClaim?: string; - avatarClaim?: string; -}; - export type CloudflareSettings = { apiToken: string; zoneId?: string; @@ -26,49 +13,53 @@ export type GeneralSettings = { acmeEmail?: string; }; -export function getSetting(key: string): SettingValue { - const row = db - .prepare("SELECT value FROM settings WHERE key = ?") - .get(key) as { value: string } | undefined; - if (!row) { +export async function getSetting(key: string): Promise> { + const setting = await prisma.setting.findUnique({ + where: { key } + }); + + if (!setting) { return null; } + try { - return JSON.parse(row.value) as T; + return JSON.parse(setting.value) as T; } catch (error) { console.warn(`Failed to parse setting ${key}`, error); return null; } } -export function setSetting(key: string, value: T) { +export async function setSetting(key: string, value: T): Promise { const payload = JSON.stringify(value); - db.prepare( - `INSERT INTO settings (key, value, updated_at) VALUES (?, ?, ?) - ON CONFLICT(key) DO UPDATE SET value=excluded.value, updated_at=excluded.updated_at` - ).run(key, payload, nowIso()); + const now = new Date(nowIso()); + + await prisma.setting.upsert({ + where: { key }, + update: { + value: payload, + updatedAt: now + }, + create: { + key, + value: payload, + updatedAt: now + } + }); } -export function getOAuthSettings(): OAuthSettings | null { - return getSetting("oauth"); +export async function getCloudflareSettings(): Promise { + return await getSetting("cloudflare"); } -export function saveOAuthSettings(settings: OAuthSettings) { - setSetting("oauth", settings); +export async function saveCloudflareSettings(settings: CloudflareSettings): Promise { + await setSetting("cloudflare", settings); } -export function getCloudflareSettings(): CloudflareSettings | null { - return getSetting("cloudflare"); +export async function getGeneralSettings(): Promise { + return await getSetting("general"); } -export function saveCloudflareSettings(settings: CloudflareSettings) { - setSetting("cloudflare", settings); -} - -export function getGeneralSettings(): GeneralSettings | null { - return getSetting("general"); -} - -export function saveGeneralSettings(settings: GeneralSettings) { - setSetting("general", settings); +export async function saveGeneralSettings(settings: GeneralSettings): Promise { + await setSetting("general", settings); } diff --git a/tsconfig.tsbuildinfo b/tsconfig.tsbuildinfo index e9e66cb7..bb16c830 100644 --- a/tsconfig.tsbuildinfo +++ b/tsconfig.tsbuildinfo @@ -1 +1 @@ -{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/typescript/lib/lib.esnext.disposable.d.ts","./node_modules/typescript/lib/lib.esnext.float16.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/@types/react/global.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@types/react/index.d.ts","./node_modules/next/dist/styled-jsx/types/css.d.ts","./node_modules/next/dist/styled-jsx/types/macro.d.ts","./node_modules/next/dist/styled-jsx/types/style.d.ts","./node_modules/next/dist/styled-jsx/types/global.d.ts","./node_modules/next/dist/styled-jsx/types/index.d.ts","./node_modules/next/dist/server/get-page-files.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/crypto.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/events.d.ts","./node_modules/buffer/index.d.ts","./node_modules/undici-types/utility.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client-stats.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/h2c-client.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-call-history.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/snapshot-agent.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/cache-interceptor.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/web-globals/fetch.d.ts","./node_modules/@types/node/web-globals/navigator.d.ts","./node_modules/@types/node/web-globals/storage.d.ts","./node_modules/@types/node/web-globals/streams.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.d.ts","./node_modules/@types/node/inspector.generated.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/sqlite.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/index.d.ts","./node_modules/@types/react/canary.d.ts","./node_modules/@types/react/experimental.d.ts","./node_modules/@types/react-dom/index.d.ts","./node_modules/@types/react-dom/canary.d.ts","./node_modules/@types/react-dom/experimental.d.ts","./node_modules/next/dist/lib/fallback.d.ts","./node_modules/next/dist/compiled/webpack/webpack.d.ts","./node_modules/next/dist/shared/lib/modern-browserslist-target.d.ts","./node_modules/next/dist/shared/lib/entry-constants.d.ts","./node_modules/next/dist/shared/lib/constants.d.ts","./node_modules/next/dist/server/config.d.ts","./node_modules/next/dist/lib/load-custom-routes.d.ts","./node_modules/next/dist/shared/lib/image-config.d.ts","./node_modules/next/dist/build/webpack/plugins/subresource-integrity-plugin.d.ts","./node_modules/next/dist/server/body-streams.d.ts","./node_modules/next/dist/server/lib/cache-control.d.ts","./node_modules/next/dist/lib/setup-exception-listeners.d.ts","./node_modules/next/dist/lib/worker.d.ts","./node_modules/next/dist/lib/constants.d.ts","./node_modules/next/dist/lib/bundler.d.ts","./node_modules/next/dist/client/components/app-router-headers.d.ts","./node_modules/next/dist/client/components/router-reducer/router-reducer-types.d.ts","./node_modules/next/dist/client/flight-data-helpers.d.ts","./node_modules/next/dist/client/components/segment-cache-impl/navigation.d.ts","./node_modules/next/dist/client/components/segment-cache-impl/cache-key.d.ts","./node_modules/next/dist/shared/lib/segment-cache/segment-value-encoding.d.ts","./node_modules/next/dist/client/components/segment-cache-impl/scheduler.d.ts","./node_modules/next/dist/client/components/segment-cache-impl/prefetch.d.ts","./node_modules/next/dist/client/route-params.d.ts","./node_modules/next/dist/client/components/segment-cache-impl/cache-map.d.ts","./node_modules/next/dist/client/components/segment-cache-impl/cache.d.ts","./node_modules/next/dist/client/components/segment-cache.d.ts","./node_modules/next/dist/client/components/router-reducer/fetch-server-response.d.ts","./node_modules/next/dist/shared/lib/app-router-types.d.ts","./node_modules/next/dist/build/static-paths/types.d.ts","./node_modules/next/dist/build/rendering-mode.d.ts","./node_modules/next/dist/server/lib/router-utils/build-prefetch-segment-data-route.d.ts","./node_modules/next/dist/server/require-hook.d.ts","./node_modules/next/dist/server/lib/experimental/ppr.d.ts","./node_modules/next/dist/lib/page-types.d.ts","./node_modules/next/dist/build/segment-config/app/app-segment-config.d.ts","./node_modules/next/dist/build/segment-config/pages/pages-segment-config.d.ts","./node_modules/next/dist/build/analysis/get-page-static-info.d.ts","./node_modules/next/dist/build/webpack/loaders/get-module-build-info.d.ts","./node_modules/next/dist/build/webpack/plugins/middleware-plugin.d.ts","./node_modules/next/dist/server/node-polyfill-crypto.d.ts","./node_modules/next/dist/server/node-environment-baseline.d.ts","./node_modules/next/dist/server/node-environment-extensions/error-inspect.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-file.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-exit.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-dim.external.d.ts","./node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.d.ts","./node_modules/next/dist/server/node-environment-extensions/random.d.ts","./node_modules/next/dist/server/node-environment-extensions/date.d.ts","./node_modules/next/dist/server/node-environment-extensions/web-crypto.d.ts","./node_modules/next/dist/server/node-environment-extensions/node-crypto.d.ts","./node_modules/next/dist/server/node-environment.d.ts","./node_modules/next/dist/build/page-extensions-type.d.ts","./node_modules/next/dist/server/route-kind.d.ts","./node_modules/next/dist/server/route-definitions/route-definition.d.ts","./node_modules/next/dist/server/route-definitions/app-page-route-definition.d.ts","./node_modules/next/dist/server/lib/cache-handlers/types.d.ts","./node_modules/next/dist/server/response-cache/types.d.ts","./node_modules/next/dist/server/resume-data-cache/cache-store.d.ts","./node_modules/next/dist/server/resume-data-cache/resume-data-cache.d.ts","./node_modules/next/dist/server/render-result.d.ts","./node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.d.ts","./node_modules/next/dist/server/instrumentation/types.d.ts","./node_modules/next/dist/lib/coalesced-function.d.ts","./node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.d.ts","./node_modules/next/dist/server/lib/router-utils/types.d.ts","./node_modules/next/dist/trace/types.d.ts","./node_modules/next/dist/trace/trace.d.ts","./node_modules/next/dist/trace/shared.d.ts","./node_modules/next/dist/trace/index.d.ts","./node_modules/next/dist/build/load-jsconfig.d.ts","./node_modules/@next/env/dist/index.d.ts","./node_modules/next/dist/build/webpack/plugins/telemetry-plugin/use-cache-tracker-utils.d.ts","./node_modules/next/dist/build/webpack/plugins/telemetry-plugin/telemetry-plugin.d.ts","./node_modules/next/dist/telemetry/storage.d.ts","./node_modules/next/dist/build/build-context.d.ts","./node_modules/next/dist/shared/lib/bloom-filter.d.ts","./node_modules/next/dist/build/webpack-config.d.ts","./node_modules/next/dist/build/swc/generated-native.d.ts","./node_modules/next/dist/build/swc/types.d.ts","./node_modules/next/dist/server/dev/parse-version-info.d.ts","./node_modules/next/dist/next-devtools/shared/types.d.ts","./node_modules/next/dist/server/dev/dev-indicator-server-state.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/cache-indicator.d.ts","./node_modules/next/dist/server/lib/parse-stack.d.ts","./node_modules/next/dist/next-devtools/server/shared.d.ts","./node_modules/next/dist/next-devtools/shared/stack-frame.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/utils/get-error-by-type.d.ts","./node_modules/@types/react/jsx-runtime.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/container/runtime-error/render-error.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/shared.d.ts","./node_modules/next/dist/server/dev/debug-channel.d.ts","./node_modules/next/dist/server/dev/hot-reloader-types.d.ts","./node_modules/next/dist/server/lib/i18n-provider.d.ts","./node_modules/next/dist/server/web/next-url.d.ts","./node_modules/next/dist/compiled/@edge-runtime/cookies/index.d.ts","./node_modules/next/dist/server/web/spec-extension/cookies.d.ts","./node_modules/next/dist/server/web/spec-extension/request.d.ts","./node_modules/next/dist/server/after/builtin-request-context.d.ts","./node_modules/next/dist/server/web/spec-extension/fetch-event.d.ts","./node_modules/next/dist/server/web/spec-extension/response.d.ts","./node_modules/next/dist/build/segment-config/middleware/middleware-config.d.ts","./node_modules/next/dist/server/web/types.d.ts","./node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-url.d.ts","./node_modules/next/dist/server/base-http/node.d.ts","./node_modules/next/dist/build/webpack/plugins/next-font-manifest-plugin.d.ts","./node_modules/next/dist/server/route-definitions/locale-route-definition.d.ts","./node_modules/next/dist/server/route-definitions/pages-route-definition.d.ts","./node_modules/next/dist/shared/lib/mitt.d.ts","./node_modules/next/dist/client/with-router.d.ts","./node_modules/next/dist/client/router.d.ts","./node_modules/next/dist/client/route-loader.d.ts","./node_modules/next/dist/client/page-loader.d.ts","./node_modules/next/dist/shared/lib/router/router.d.ts","./node_modules/next/dist/shared/lib/router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.d.ts","./node_modules/next/dist/server/route-modules/pages/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/pages/module.compiled.d.ts","./node_modules/next/dist/build/templates/pages.d.ts","./node_modules/next/dist/server/route-modules/pages/module.d.ts","./node_modules/next/dist/shared/lib/deep-readonly.d.ts","./node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-setup.d.ts","./node_modules/next/dist/server/render.d.ts","./node_modules/next/dist/server/response-cache/index.d.ts","./node_modules/next/dist/server/route-definitions/pages-api-route-definition.d.ts","./node_modules/next/dist/server/route-matches/pages-api-route-match.d.ts","./node_modules/next/dist/server/route-matchers/route-matcher.d.ts","./node_modules/next/dist/server/route-matcher-providers/route-matcher-provider.d.ts","./node_modules/next/dist/server/route-matcher-managers/route-matcher-manager.d.ts","./node_modules/next/dist/server/normalizers/normalizer.d.ts","./node_modules/next/dist/server/normalizers/locale-route-normalizer.d.ts","./node_modules/next/dist/server/normalizers/request/pathname-normalizer.d.ts","./node_modules/next/dist/server/normalizers/request/suffix.d.ts","./node_modules/next/dist/server/normalizers/request/rsc.d.ts","./node_modules/next/dist/server/normalizers/request/prefetch-rsc.d.ts","./node_modules/next/dist/server/normalizers/request/next-data.d.ts","./node_modules/next/dist/server/normalizers/request/segment-prefix-rsc.d.ts","./node_modules/next/dist/server/base-server.d.ts","./node_modules/next/dist/server/lib/async-callback-set.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-regex.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-matcher.d.ts","./node_modules/sharp/lib/index.d.ts","./node_modules/next/dist/server/image-optimizer.d.ts","./node_modules/next/dist/server/next-server.d.ts","./node_modules/next/dist/server/lib/types.d.ts","./node_modules/next/dist/server/lib/lru-cache.d.ts","./node_modules/next/dist/server/lib/dev-bundler-service.d.ts","./node_modules/next/dist/server/use-cache/cache-life.d.ts","./node_modules/next/dist/server/dev/static-paths-worker.d.ts","./node_modules/next/dist/server/dev/next-dev-server.d.ts","./node_modules/next/dist/server/next.d.ts","./node_modules/next/dist/server/lib/render-server.d.ts","./node_modules/next/dist/server/lib/router-server.d.ts","./node_modules/next/dist/shared/lib/router/utils/path-match.d.ts","./node_modules/next/dist/server/lib/router-utils/filesystem.d.ts","./node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.d.ts","./node_modules/next/dist/server/lib/router-utils/router-server-context.d.ts","./node_modules/next/dist/server/route-modules/route-module.d.ts","./node_modules/next/dist/server/load-components.d.ts","./node_modules/next/dist/server/web/adapter.d.ts","./node_modules/next/dist/server/app-render/types.d.ts","./node_modules/next/dist/build/webpack/loaders/metadata/types.d.ts","./node_modules/next/dist/build/webpack/loaders/next-app-loader/index.d.ts","./node_modules/next/dist/server/lib/app-dir-module.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.d.ts","./node_modules/next/dist/server/async-storage/draft-mode-provider.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/headers.d.ts","./node_modules/next/dist/server/app-render/cache-signal.d.ts","./node_modules/next/dist/server/app-render/dynamic-rendering.d.ts","./node_modules/next/dist/server/request/fallback-params.d.ts","./node_modules/next/dist/server/app-render/work-unit-async-storage-instance.d.ts","./node_modules/next/dist/server/lib/lazy-result.d.ts","./node_modules/next/dist/server/lib/implicit-tags.d.ts","./node_modules/next/dist/server/app-render/staged-rendering.d.ts","./node_modules/next/dist/server/app-render/work-unit-async-storage.external.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.d.ts","./node_modules/next/dist/server/app-render/app-render.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/client/components/error-boundary.d.ts","./node_modules/next/dist/client/components/layout-router.d.ts","./node_modules/next/dist/client/components/render-from-template-context.d.ts","./node_modules/next/dist/server/app-render/action-async-storage-instance.d.ts","./node_modules/next/dist/server/app-render/action-async-storage.external.d.ts","./node_modules/next/dist/client/components/client-page.d.ts","./node_modules/next/dist/client/components/client-segment.d.ts","./node_modules/next/dist/server/request/search-params.d.ts","./node_modules/next/dist/client/components/hooks-server-context.d.ts","./node_modules/next/dist/client/components/http-access-fallback/error-boundary.d.ts","./node_modules/next/dist/lib/metadata/types/alternative-urls-types.d.ts","./node_modules/next/dist/lib/metadata/types/extra-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-types.d.ts","./node_modules/next/dist/lib/metadata/types/manifest-types.d.ts","./node_modules/next/dist/lib/metadata/types/opengraph-types.d.ts","./node_modules/next/dist/lib/metadata/types/twitter-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-interface.d.ts","./node_modules/next/dist/lib/metadata/types/resolvers.d.ts","./node_modules/next/dist/lib/metadata/types/icons.d.ts","./node_modules/next/dist/lib/metadata/resolve-metadata.d.ts","./node_modules/next/dist/lib/metadata/metadata.d.ts","./node_modules/next/dist/lib/framework/boundary-components.d.ts","./node_modules/next/dist/server/app-render/rsc/preloads.d.ts","./node_modules/next/dist/server/app-render/rsc/postpone.d.ts","./node_modules/next/dist/server/app-render/rsc/taint.d.ts","./node_modules/next/dist/server/app-render/collect-segment-data.d.ts","./node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.d.ts","./node_modules/next/dist/server/app-render/entry-base.d.ts","./node_modules/next/dist/build/templates/app-page.d.ts","./node_modules/@types/react/jsx-dev-runtime.d.ts","./node_modules/@types/react/compiler-runtime.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/rsc/entrypoints.d.ts","./node_modules/@types/react-dom/client.d.ts","./node_modules/@types/react-dom/static.d.ts","./node_modules/@types/react-dom/server.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/app-page/module.d.ts","./node_modules/next/dist/server/route-modules/app-page/module.compiled.d.ts","./node_modules/next/dist/server/route-definitions/app-route-route-definition.d.ts","./node_modules/next/dist/server/async-storage/work-store.d.ts","./node_modules/next/dist/server/web/http.d.ts","./node_modules/next/dist/server/route-modules/app-route/shared-modules.d.ts","./node_modules/next/dist/client/components/redirect-status-code.d.ts","./node_modules/next/dist/client/components/redirect-error.d.ts","./node_modules/next/dist/build/templates/app-route.d.ts","./node_modules/next/dist/server/route-modules/app-route/module.d.ts","./node_modules/next/dist/server/route-modules/app-route/module.compiled.d.ts","./node_modules/next/dist/build/segment-config/app/app-segments.d.ts","./node_modules/next/dist/build/utils.d.ts","./node_modules/next/dist/build/turborepo-access-trace/types.d.ts","./node_modules/next/dist/build/turborepo-access-trace/result.d.ts","./node_modules/next/dist/build/turborepo-access-trace/helpers.d.ts","./node_modules/next/dist/build/turborepo-access-trace/index.d.ts","./node_modules/next/dist/export/routes/types.d.ts","./node_modules/next/dist/export/types.d.ts","./node_modules/next/dist/export/worker.d.ts","./node_modules/next/dist/build/worker.d.ts","./node_modules/next/dist/build/index.d.ts","./node_modules/next/dist/server/lib/incremental-cache/index.d.ts","./node_modules/next/dist/server/after/after.d.ts","./node_modules/next/dist/server/after/after-context.d.ts","./node_modules/next/dist/server/app-render/work-async-storage-instance.d.ts","./node_modules/next/dist/server/app-render/work-async-storage.external.d.ts","./node_modules/next/dist/server/request/params.d.ts","./node_modules/next/dist/server/route-matches/route-match.d.ts","./node_modules/next/dist/server/request-meta.d.ts","./node_modules/next/dist/cli/next-test.d.ts","./node_modules/next/dist/server/config-shared.d.ts","./node_modules/next/dist/server/base-http/index.d.ts","./node_modules/next/dist/server/api-utils/index.d.ts","./node_modules/next/dist/build/adapter/build-complete.d.ts","./node_modules/next/dist/types.d.ts","./node_modules/next/dist/shared/lib/html-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/utils.d.ts","./node_modules/next/dist/pages/_app.d.ts","./node_modules/next/app.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-cache.d.ts","./node_modules/next/dist/server/web/spec-extension/revalidate.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-no-store.d.ts","./node_modules/next/dist/server/use-cache/cache-tag.d.ts","./node_modules/next/cache.d.ts","./node_modules/next/dist/pages/_document.d.ts","./node_modules/next/document.d.ts","./node_modules/next/dist/shared/lib/dynamic.d.ts","./node_modules/next/dynamic.d.ts","./node_modules/next/dist/pages/_error.d.ts","./node_modules/next/error.d.ts","./node_modules/next/dist/shared/lib/head.d.ts","./node_modules/next/head.d.ts","./node_modules/next/dist/server/request/cookies.d.ts","./node_modules/next/dist/server/request/headers.d.ts","./node_modules/next/dist/server/request/draft-mode.d.ts","./node_modules/next/headers.d.ts","./node_modules/next/dist/shared/lib/get-img-props.d.ts","./node_modules/next/dist/client/image-component.d.ts","./node_modules/next/dist/shared/lib/image-external.d.ts","./node_modules/next/image.d.ts","./node_modules/next/dist/client/link.d.ts","./node_modules/next/link.d.ts","./node_modules/next/dist/client/components/readonly-url-search-params.d.ts","./node_modules/next/dist/client/components/unrecognized-action-error.d.ts","./node_modules/next/dist/client/components/redirect.d.ts","./node_modules/next/dist/client/components/not-found.d.ts","./node_modules/next/dist/client/components/forbidden.d.ts","./node_modules/next/dist/client/components/unauthorized.d.ts","./node_modules/next/dist/client/components/unstable-rethrow.server.d.ts","./node_modules/next/dist/client/components/unstable-rethrow.d.ts","./node_modules/next/dist/client/components/navigation.react-server.d.ts","./node_modules/next/dist/client/components/navigation.d.ts","./node_modules/next/navigation.d.ts","./node_modules/next/router.d.ts","./node_modules/next/dist/client/script.d.ts","./node_modules/next/script.d.ts","./node_modules/next/dist/server/web/spec-extension/user-agent.d.ts","./node_modules/next/dist/compiled/@edge-runtime/primitives/url.d.ts","./node_modules/next/dist/server/web/spec-extension/image-response.d.ts","./node_modules/next/dist/compiled/@vercel/og/satori/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/emoji/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/types.d.ts","./node_modules/next/dist/server/after/index.d.ts","./node_modules/next/dist/server/request/connection.d.ts","./node_modules/next/server.d.ts","./node_modules/next/types/global.d.ts","./node_modules/next/types/compiled.d.ts","./node_modules/next/types.d.ts","./node_modules/next/index.d.ts","./node_modules/next/image-types/global.d.ts","./.next/dev/types/routes.d.ts","./next-env.d.ts","./node_modules/@auth/core/lib/symbols.d.ts","./node_modules/@auth/core/lib/index.d.ts","./node_modules/@auth/core/lib/vendored/cookie.d.ts","./node_modules/oauth4webapi/build/index.d.ts","./node_modules/@auth/core/lib/utils/cookie.d.ts","./node_modules/@auth/core/warnings.d.ts","./node_modules/@auth/core/lib/utils/logger.d.ts","./node_modules/preact/src/jsx.d.ts","./node_modules/preact/src/index.d.ts","./node_modules/@auth/core/providers/credentials.d.ts","./node_modules/@auth/core/providers/provider-types.d.ts","./node_modules/@auth/core/providers/nodemailer.d.ts","./node_modules/@auth/core/providers/email.d.ts","./node_modules/@auth/core/providers/oauth.d.ts","./node_modules/@auth/core/providers/webauthn.d.ts","./node_modules/@auth/core/providers/index.d.ts","./node_modules/@auth/core/adapters.d.ts","./node_modules/@auth/core/lib/utils/webauthn-utils.d.ts","./node_modules/@auth/core/types.d.ts","./node_modules/@auth/core/lib/utils/env.d.ts","./node_modules/@auth/core/jwt.d.ts","./node_modules/@auth/core/lib/utils/actions.d.ts","./node_modules/@auth/core/index.d.ts","./node_modules/next-auth/lib/types.d.ts","./node_modules/next-auth/lib/index.d.ts","./node_modules/@auth/core/errors.d.ts","./node_modules/next-auth/index.d.ts","./node_modules/next-auth/providers/index.d.ts","./src/lib/migrations.ts","./src/lib/db.ts","./src/lib/auth/adapter.ts","./src/lib/settings.ts","./src/lib/config.ts","./src/lib/auth/session.ts","./src/lib/auth.ts","./node_modules/bcryptjs/types.d.ts","./node_modules/bcryptjs/index.d.ts","./src/lib/audit.ts","./src/lib/caddy.ts","./src/lib/models/access-lists.ts","./app/(dashboard)/access-lists/actions.ts","./src/lib/models/certificates.ts","./app/(dashboard)/certificates/actions.ts","./src/lib/models/dead-hosts.ts","./app/(dashboard)/dead-hosts/actions.ts","./src/lib/models/proxy-hosts.ts","./app/(dashboard)/proxy-hosts/actions.ts","./src/lib/models/redirect-hosts.ts","./app/(dashboard)/redirects/actions.ts","./app/(dashboard)/settings/actions.ts","./src/lib/models/stream-hosts.ts","./app/(dashboard)/streams/actions.ts","./app/api/auth/[...nextauth]/route.ts","./app/api/auth/logout/route.ts","./src/lib/models/user.ts","./app/setup/oauth/actions.ts","./src/lib/auth/oauth.ts","./src/lib/models/audit.ts","./node_modules/@mui/material/esm/colors/amber.d.ts","./node_modules/@mui/material/esm/colors/blue.d.ts","./node_modules/@mui/material/esm/colors/bluegrey.d.ts","./node_modules/@mui/material/esm/colors/brown.d.ts","./node_modules/@mui/material/esm/colors/common.d.ts","./node_modules/@mui/material/esm/colors/cyan.d.ts","./node_modules/@mui/material/esm/colors/deeporange.d.ts","./node_modules/@mui/material/esm/colors/deeppurple.d.ts","./node_modules/@mui/material/esm/colors/green.d.ts","./node_modules/@mui/material/esm/colors/grey.d.ts","./node_modules/@mui/material/esm/colors/indigo.d.ts","./node_modules/@mui/material/esm/colors/lightblue.d.ts","./node_modules/@mui/material/esm/colors/lightgreen.d.ts","./node_modules/@mui/material/esm/colors/lime.d.ts","./node_modules/@mui/material/esm/colors/orange.d.ts","./node_modules/@mui/material/esm/colors/pink.d.ts","./node_modules/@mui/material/esm/colors/purple.d.ts","./node_modules/@mui/material/esm/colors/red.d.ts","./node_modules/@mui/material/esm/colors/teal.d.ts","./node_modules/@mui/material/esm/colors/yellow.d.ts","./node_modules/@mui/material/esm/colors/index.d.ts","./node_modules/@mui/types/esm/index.d.ts","./node_modules/@mui/material/esm/styles/identifier.d.ts","./node_modules/@mui/material/esm/styles/createpalette.d.ts","./node_modules/@emotion/sheet/dist/declarations/src/index.d.ts","./node_modules/@emotion/sheet/dist/emotion-sheet.cjs.d.mts","./node_modules/@emotion/utils/dist/declarations/src/types.d.ts","./node_modules/@emotion/utils/dist/declarations/src/index.d.ts","./node_modules/@emotion/utils/dist/emotion-utils.cjs.d.mts","./node_modules/@emotion/cache/dist/declarations/src/types.d.ts","./node_modules/@emotion/cache/dist/declarations/src/index.d.ts","./node_modules/@emotion/cache/dist/emotion-cache.cjs.default.d.ts","./node_modules/@emotion/cache/dist/emotion-cache.cjs.d.mts","./node_modules/@emotion/serialize/dist/declarations/src/index.d.ts","./node_modules/@emotion/serialize/dist/emotion-serialize.cjs.d.mts","./node_modules/@emotion/react/dist/declarations/src/context.d.ts","./node_modules/@emotion/react/dist/declarations/src/types.d.ts","./node_modules/@emotion/react/dist/declarations/src/theming.d.ts","./node_modules/@emotion/react/dist/declarations/src/jsx-namespace.d.ts","./node_modules/@emotion/react/dist/declarations/src/jsx.d.ts","./node_modules/@emotion/react/dist/declarations/src/global.d.ts","./node_modules/@emotion/react/dist/declarations/src/keyframes.d.ts","./node_modules/@emotion/react/dist/declarations/src/class-names.d.ts","./node_modules/@emotion/react/dist/declarations/src/css.d.ts","./node_modules/@emotion/react/dist/declarations/src/index.d.ts","./node_modules/@emotion/react/dist/emotion-react.cjs.d.mts","./node_modules/@emotion/styled/dist/declarations/src/jsx-namespace.d.ts","./node_modules/@emotion/styled/dist/declarations/src/types.d.ts","./node_modules/@emotion/styled/dist/declarations/src/index.d.ts","./node_modules/@emotion/styled/dist/emotion-styled.cjs.default.d.ts","./node_modules/@emotion/styled/dist/emotion-styled.cjs.d.mts","./node_modules/@mui/styled-engine/esm/styledengineprovider/styledengineprovider.d.ts","./node_modules/@mui/styled-engine/esm/styledengineprovider/index.d.ts","./node_modules/@mui/styled-engine/esm/globalstyles/globalstyles.d.ts","./node_modules/@mui/styled-engine/esm/globalstyles/index.d.ts","./node_modules/@mui/styled-engine/esm/index.d.ts","./node_modules/@mui/system/esm/style/style.d.ts","./node_modules/@mui/system/esm/style/index.d.ts","./node_modules/@mui/system/esm/borders/borders.d.ts","./node_modules/@mui/system/esm/borders/index.d.ts","./node_modules/@mui/system/esm/createbreakpoints/createbreakpoints.d.ts","./node_modules/@mui/system/esm/createtheme/shape.d.ts","./node_modules/@mui/system/esm/createtheme/createspacing.d.ts","./node_modules/@mui/system/esm/stylefunctionsx/standardcssproperties.d.ts","./node_modules/@mui/system/esm/stylefunctionsx/aliasescssproperties.d.ts","./node_modules/@mui/system/esm/stylefunctionsx/overwritecssproperties.d.ts","./node_modules/@mui/system/esm/stylefunctionsx/stylefunctionsx.d.ts","./node_modules/@mui/system/esm/stylefunctionsx/extendsxprop.d.ts","./node_modules/@mui/system/esm/stylefunctionsx/defaultsxconfig.d.ts","./node_modules/@mui/system/esm/stylefunctionsx/index.d.ts","./node_modules/@mui/system/esm/createtheme/applystyles.d.ts","./node_modules/@mui/system/esm/csscontainerqueries/csscontainerqueries.d.ts","./node_modules/@mui/system/esm/csscontainerqueries/index.d.ts","./node_modules/@mui/system/esm/createtheme/createtheme.d.ts","./node_modules/@mui/system/esm/createtheme/index.d.ts","./node_modules/@mui/system/esm/breakpoints/breakpoints.d.ts","./node_modules/@mui/system/esm/breakpoints/index.d.ts","./node_modules/@mui/system/esm/compose/compose.d.ts","./node_modules/@mui/system/esm/compose/index.d.ts","./node_modules/@mui/system/esm/display/display.d.ts","./node_modules/@mui/system/esm/display/index.d.ts","./node_modules/@mui/system/esm/flexbox/flexbox.d.ts","./node_modules/@mui/system/esm/flexbox/index.d.ts","./node_modules/@mui/system/esm/cssgrid/cssgrid.d.ts","./node_modules/@mui/system/esm/cssgrid/index.d.ts","./node_modules/@mui/system/esm/palette/palette.d.ts","./node_modules/@mui/system/esm/palette/index.d.ts","./node_modules/@mui/system/esm/positions/positions.d.ts","./node_modules/@mui/system/esm/positions/index.d.ts","./node_modules/@mui/system/esm/shadows/shadows.d.ts","./node_modules/@mui/system/esm/shadows/index.d.ts","./node_modules/@mui/system/esm/sizing/sizing.d.ts","./node_modules/@mui/system/esm/sizing/index.d.ts","./node_modules/@mui/system/esm/typography/typography.d.ts","./node_modules/@mui/system/esm/typography/index.d.ts","./node_modules/@mui/system/esm/getthemevalue/getthemevalue.d.ts","./node_modules/@mui/system/esm/getthemevalue/index.d.ts","./node_modules/@mui/private-theming/esm/defaulttheme/index.d.ts","./node_modules/@mui/private-theming/esm/themeprovider/themeprovider.d.ts","./node_modules/@mui/private-theming/esm/themeprovider/index.d.ts","./node_modules/@mui/private-theming/esm/usetheme/usetheme.d.ts","./node_modules/@mui/private-theming/esm/usetheme/index.d.ts","./node_modules/@mui/private-theming/esm/index.d.ts","./node_modules/@mui/system/esm/globalstyles/globalstyles.d.ts","./node_modules/@mui/system/esm/globalstyles/index.d.ts","./node_modules/@mui/system/esm/spacing/spacing.d.ts","./node_modules/@mui/system/esm/spacing/index.d.ts","./node_modules/@mui/system/esm/box/box.d.ts","./node_modules/@mui/system/esm/box/boxclasses.d.ts","./node_modules/@mui/system/esm/box/index.d.ts","./node_modules/@mui/system/esm/createbox/createbox.d.ts","./node_modules/@mui/system/esm/createbox/index.d.ts","./node_modules/@mui/system/esm/createstyled/createstyled.d.ts","./node_modules/@mui/system/esm/createstyled/index.d.ts","./node_modules/@mui/system/esm/styled/styled.d.ts","./node_modules/@mui/system/esm/styled/index.d.ts","./node_modules/@mui/system/esm/usethemeprops/usethemeprops.d.ts","./node_modules/@mui/system/esm/usethemeprops/getthemeprops.d.ts","./node_modules/@mui/system/esm/usethemeprops/index.d.ts","./node_modules/@mui/system/esm/usetheme/usetheme.d.ts","./node_modules/@mui/system/esm/usetheme/index.d.ts","./node_modules/@mui/system/esm/usethemewithoutdefault/usethemewithoutdefault.d.ts","./node_modules/@mui/system/esm/usethemewithoutdefault/index.d.ts","./node_modules/@mui/system/esm/usemediaquery/usemediaquery.d.ts","./node_modules/@mui/system/esm/usemediaquery/index.d.ts","./node_modules/@mui/system/esm/colormanipulator/colormanipulator.d.ts","./node_modules/@mui/system/esm/colormanipulator/index.d.ts","./node_modules/@mui/system/esm/themeprovider/themeprovider.d.ts","./node_modules/@mui/system/esm/themeprovider/index.d.ts","./node_modules/@mui/system/esm/memotheme.d.ts","./node_modules/@mui/system/esm/initcolorschemescript/initcolorschemescript.d.ts","./node_modules/@mui/system/esm/initcolorschemescript/index.d.ts","./node_modules/@mui/system/esm/cssvars/localstoragemanager.d.ts","./node_modules/@mui/system/esm/cssvars/usecurrentcolorscheme.d.ts","./node_modules/@mui/system/esm/cssvars/createcssvarsprovider.d.ts","./node_modules/@mui/system/esm/cssvars/preparecssvars.d.ts","./node_modules/@mui/system/esm/cssvars/preparetypographyvars.d.ts","./node_modules/@mui/system/esm/cssvars/createcssvarstheme.d.ts","./node_modules/@mui/system/esm/cssvars/getcolorschemeselector.d.ts","./node_modules/@mui/system/esm/cssvars/index.d.ts","./node_modules/@mui/system/esm/cssvars/creategetcssvar.d.ts","./node_modules/@mui/system/esm/cssvars/cssvarsparser.d.ts","./node_modules/@mui/system/esm/responsiveproptype/responsiveproptype.d.ts","./node_modules/@mui/system/esm/responsiveproptype/index.d.ts","./node_modules/@mui/system/esm/container/containerclasses.d.ts","./node_modules/@mui/system/esm/container/containerprops.d.ts","./node_modules/@mui/system/esm/container/createcontainer.d.ts","./node_modules/@mui/system/esm/container/container.d.ts","./node_modules/@mui/system/esm/container/index.d.ts","./node_modules/@mui/system/esm/grid/gridprops.d.ts","./node_modules/@mui/system/esm/grid/grid.d.ts","./node_modules/@mui/system/esm/grid/creategrid.d.ts","./node_modules/@mui/system/esm/grid/gridclasses.d.ts","./node_modules/@mui/system/esm/grid/traversebreakpoints.d.ts","./node_modules/@mui/system/esm/grid/gridgenerator.d.ts","./node_modules/@mui/system/esm/grid/index.d.ts","./node_modules/@mui/system/esm/stack/stackprops.d.ts","./node_modules/@mui/system/esm/stack/stack.d.ts","./node_modules/@mui/system/esm/stack/createstack.d.ts","./node_modules/@mui/system/esm/stack/stackclasses.d.ts","./node_modules/@mui/system/esm/stack/index.d.ts","./node_modules/@mui/system/esm/version/index.d.ts","./node_modules/@mui/system/esm/index.d.ts","./node_modules/@mui/material/esm/styles/shadows.d.ts","./node_modules/@mui/material/esm/styles/createtransitions.d.ts","./node_modules/@mui/material/esm/styles/createmixins.d.ts","./node_modules/@mui/material/esm/styles/createtypography.d.ts","./node_modules/@mui/material/esm/styles/zindex.d.ts","./node_modules/@mui/material/esm/styles/createthemefoundation.d.ts","./node_modules/@mui/material/esm/overridablecomponent/index.d.ts","./node_modules/@mui/material/esm/svgicon/svgiconclasses.d.ts","./node_modules/@mui/material/esm/svgicon/svgicon.d.ts","./node_modules/@mui/material/esm/svgicon/index.d.ts","./node_modules/@mui/material/esm/internal/index.d.ts","./node_modules/@mui/material/esm/buttonbase/touchrippleclasses.d.ts","./node_modules/@mui/material/esm/buttonbase/touchripple.d.ts","./node_modules/@mui/material/esm/buttonbase/buttonbaseclasses.d.ts","./node_modules/@mui/material/esm/buttonbase/buttonbase.d.ts","./node_modules/@mui/material/esm/buttonbase/index.d.ts","./node_modules/@mui/material/esm/iconbutton/iconbuttonclasses.d.ts","./node_modules/@mui/material/esm/iconbutton/iconbutton.d.ts","./node_modules/@mui/material/esm/iconbutton/index.d.ts","./node_modules/@mui/material/esm/paper/paperclasses.d.ts","./node_modules/@mui/material/esm/paper/paper.d.ts","./node_modules/@mui/material/esm/paper/index.d.ts","./node_modules/@mui/material/esm/alert/alertclasses.d.ts","./node_modules/@mui/utils/esm/types/index.d.ts","./node_modules/@mui/material/esm/utils/types.d.ts","./node_modules/@mui/material/esm/alert/alert.d.ts","./node_modules/@mui/material/esm/alert/index.d.ts","./node_modules/@mui/material/esm/typography/typographyclasses.d.ts","./node_modules/@mui/material/esm/typography/typography.d.ts","./node_modules/@mui/material/esm/typography/index.d.ts","./node_modules/@mui/material/esm/alerttitle/alerttitleclasses.d.ts","./node_modules/@mui/material/esm/alerttitle/alerttitle.d.ts","./node_modules/@mui/material/esm/alerttitle/index.d.ts","./node_modules/@mui/material/esm/appbar/appbarclasses.d.ts","./node_modules/@mui/material/esm/appbar/appbar.d.ts","./node_modules/@mui/material/esm/appbar/index.d.ts","./node_modules/@mui/material/esm/chip/chipclasses.d.ts","./node_modules/@mui/material/esm/chip/chip.d.ts","./node_modules/@mui/material/esm/chip/index.d.ts","./node_modules/@popperjs/core/lib/enums.d.ts","./node_modules/@popperjs/core/lib/modifiers/popperoffsets.d.ts","./node_modules/@popperjs/core/lib/modifiers/flip.d.ts","./node_modules/@popperjs/core/lib/modifiers/hide.d.ts","./node_modules/@popperjs/core/lib/modifiers/offset.d.ts","./node_modules/@popperjs/core/lib/modifiers/eventlisteners.d.ts","./node_modules/@popperjs/core/lib/modifiers/computestyles.d.ts","./node_modules/@popperjs/core/lib/modifiers/arrow.d.ts","./node_modules/@popperjs/core/lib/modifiers/preventoverflow.d.ts","./node_modules/@popperjs/core/lib/modifiers/applystyles.d.ts","./node_modules/@popperjs/core/lib/types.d.ts","./node_modules/@popperjs/core/lib/modifiers/index.d.ts","./node_modules/@popperjs/core/lib/utils/detectoverflow.d.ts","./node_modules/@popperjs/core/lib/createpopper.d.ts","./node_modules/@popperjs/core/lib/popper-lite.d.ts","./node_modules/@popperjs/core/lib/popper.d.ts","./node_modules/@popperjs/core/lib/index.d.ts","./node_modules/@popperjs/core/index.d.ts","./node_modules/@mui/material/esm/portal/portal.types.d.ts","./node_modules/@mui/material/esm/portal/portal.d.ts","./node_modules/@mui/material/esm/portal/index.d.ts","./node_modules/@mui/material/esm/utils/polymorphiccomponent.d.ts","./node_modules/@mui/material/esm/popper/basepopper.types.d.ts","./node_modules/@mui/material/esm/popper/popper.d.ts","./node_modules/@mui/material/esm/popper/popperclasses.d.ts","./node_modules/@mui/material/esm/popper/index.d.ts","./node_modules/@mui/material/esm/useautocomplete/useautocomplete.d.ts","./node_modules/@mui/material/esm/useautocomplete/index.d.ts","./node_modules/@mui/material/esm/autocomplete/autocompleteclasses.d.ts","./node_modules/@mui/material/esm/autocomplete/autocomplete.d.ts","./node_modules/@mui/material/esm/autocomplete/index.d.ts","./node_modules/@mui/material/esm/avatar/avatarclasses.d.ts","./node_modules/@mui/material/esm/avatar/avatar.d.ts","./node_modules/@mui/material/esm/avatar/index.d.ts","./node_modules/@mui/material/esm/avatargroup/avatargroupclasses.d.ts","./node_modules/@mui/material/esm/avatargroup/avatargroup.d.ts","./node_modules/@mui/material/esm/avatargroup/index.d.ts","./node_modules/@types/react-transition-group/transition.d.ts","./node_modules/@mui/material/esm/transitions/transition.d.ts","./node_modules/@mui/material/esm/fade/fade.d.ts","./node_modules/@mui/material/esm/fade/index.d.ts","./node_modules/@mui/material/esm/backdrop/backdropclasses.d.ts","./node_modules/@mui/material/esm/backdrop/backdrop.d.ts","./node_modules/@mui/material/esm/backdrop/index.d.ts","./node_modules/@mui/material/esm/badge/badgeclasses.d.ts","./node_modules/@mui/material/esm/badge/badge.d.ts","./node_modules/@mui/material/esm/badge/index.d.ts","./node_modules/@mui/material/esm/bottomnavigationaction/bottomnavigationactionclasses.d.ts","./node_modules/@mui/material/esm/bottomnavigationaction/bottomnavigationaction.d.ts","./node_modules/@mui/material/esm/bottomnavigationaction/index.d.ts","./node_modules/@mui/material/esm/bottomnavigation/bottomnavigationclasses.d.ts","./node_modules/@mui/material/esm/bottomnavigation/bottomnavigation.d.ts","./node_modules/@mui/material/esm/bottomnavigation/index.d.ts","./node_modules/@mui/material/esm/breadcrumbs/breadcrumbsclasses.d.ts","./node_modules/@mui/material/esm/breadcrumbs/breadcrumbs.d.ts","./node_modules/@mui/material/esm/breadcrumbs/index.d.ts","./node_modules/@mui/material/esm/buttongroup/buttongroupclasses.d.ts","./node_modules/@mui/material/esm/buttongroup/buttongroup.d.ts","./node_modules/@mui/material/esm/buttongroup/buttongroupcontext.d.ts","./node_modules/@mui/material/esm/buttongroup/buttongroupbuttoncontext.d.ts","./node_modules/@mui/material/esm/buttongroup/index.d.ts","./node_modules/@mui/material/esm/button/buttonclasses.d.ts","./node_modules/@mui/material/esm/button/button.d.ts","./node_modules/@mui/material/esm/button/index.d.ts","./node_modules/@mui/material/esm/cardactionarea/cardactionareaclasses.d.ts","./node_modules/@mui/material/esm/cardactionarea/cardactionarea.d.ts","./node_modules/@mui/material/esm/cardactionarea/index.d.ts","./node_modules/@mui/material/esm/cardactions/cardactionsclasses.d.ts","./node_modules/@mui/material/esm/cardactions/cardactions.d.ts","./node_modules/@mui/material/esm/cardactions/index.d.ts","./node_modules/@mui/material/esm/cardcontent/cardcontentclasses.d.ts","./node_modules/@mui/material/esm/cardcontent/cardcontent.d.ts","./node_modules/@mui/material/esm/cardcontent/index.d.ts","./node_modules/@mui/material/esm/cardheader/cardheaderclasses.d.ts","./node_modules/@mui/material/esm/cardheader/cardheader.d.ts","./node_modules/@mui/material/esm/cardheader/index.d.ts","./node_modules/@mui/material/esm/cardmedia/cardmediaclasses.d.ts","./node_modules/@mui/material/esm/cardmedia/cardmedia.d.ts","./node_modules/@mui/material/esm/cardmedia/index.d.ts","./node_modules/@mui/material/esm/card/cardclasses.d.ts","./node_modules/@mui/material/esm/card/card.d.ts","./node_modules/@mui/material/esm/card/index.d.ts","./node_modules/@mui/material/esm/internal/switchbaseclasses.d.ts","./node_modules/@mui/material/esm/internal/switchbase.d.ts","./node_modules/@mui/material/esm/checkbox/checkboxclasses.d.ts","./node_modules/@mui/material/esm/checkbox/checkbox.d.ts","./node_modules/@mui/material/esm/checkbox/index.d.ts","./node_modules/@mui/material/esm/circularprogress/circularprogressclasses.d.ts","./node_modules/@mui/material/esm/circularprogress/circularprogress.d.ts","./node_modules/@mui/material/esm/circularprogress/index.d.ts","./node_modules/@mui/material/esm/collapse/collapseclasses.d.ts","./node_modules/@mui/material/esm/collapse/collapse.d.ts","./node_modules/@mui/material/esm/collapse/index.d.ts","./node_modules/@mui/material/esm/container/containerclasses.d.ts","./node_modules/@mui/material/esm/container/container.d.ts","./node_modules/@mui/material/esm/container/index.d.ts","./node_modules/@mui/material/esm/cssbaseline/cssbaseline.d.ts","./node_modules/@mui/material/esm/cssbaseline/index.d.ts","./node_modules/@mui/material/esm/dialogactions/dialogactionsclasses.d.ts","./node_modules/@mui/material/esm/dialogactions/dialogactions.d.ts","./node_modules/@mui/material/esm/dialogactions/index.d.ts","./node_modules/@mui/material/esm/dialogcontent/dialogcontentclasses.d.ts","./node_modules/@mui/material/esm/dialogcontent/dialogcontent.d.ts","./node_modules/@mui/material/esm/dialogcontent/index.d.ts","./node_modules/@mui/material/esm/dialogcontenttext/dialogcontenttextclasses.d.ts","./node_modules/@mui/material/esm/dialogcontenttext/dialogcontenttext.d.ts","./node_modules/@mui/material/esm/dialogcontenttext/index.d.ts","./node_modules/@mui/material/esm/modal/modalmanager.d.ts","./node_modules/@mui/material/esm/modal/modalclasses.d.ts","./node_modules/@mui/material/esm/modal/modal.d.ts","./node_modules/@mui/material/esm/modal/index.d.ts","./node_modules/@mui/material/esm/dialog/dialogclasses.d.ts","./node_modules/@mui/material/esm/dialog/dialog.d.ts","./node_modules/@mui/material/esm/dialog/index.d.ts","./node_modules/@mui/material/esm/dialogtitle/dialogtitleclasses.d.ts","./node_modules/@mui/material/esm/dialogtitle/dialogtitle.d.ts","./node_modules/@mui/material/esm/dialogtitle/index.d.ts","./node_modules/@mui/material/esm/divider/dividerclasses.d.ts","./node_modules/@mui/material/esm/divider/divider.d.ts","./node_modules/@mui/material/esm/divider/index.d.ts","./node_modules/@mui/material/esm/slide/slide.d.ts","./node_modules/@mui/material/esm/slide/index.d.ts","./node_modules/@mui/material/esm/drawer/drawerclasses.d.ts","./node_modules/@mui/material/esm/drawer/drawer.d.ts","./node_modules/@mui/material/esm/drawer/index.d.ts","./node_modules/@mui/material/esm/accordionactions/accordionactionsclasses.d.ts","./node_modules/@mui/material/esm/accordionactions/accordionactions.d.ts","./node_modules/@mui/material/esm/accordionactions/index.d.ts","./node_modules/@mui/material/esm/accordiondetails/accordiondetailsclasses.d.ts","./node_modules/@mui/material/esm/accordiondetails/accordiondetails.d.ts","./node_modules/@mui/material/esm/accordiondetails/index.d.ts","./node_modules/@mui/material/esm/accordion/accordionclasses.d.ts","./node_modules/@mui/material/esm/accordion/accordion.d.ts","./node_modules/@mui/material/esm/accordion/index.d.ts","./node_modules/@mui/material/esm/accordionsummary/accordionsummaryclasses.d.ts","./node_modules/@mui/material/esm/accordionsummary/accordionsummary.d.ts","./node_modules/@mui/material/esm/accordionsummary/index.d.ts","./node_modules/@mui/material/esm/fab/fabclasses.d.ts","./node_modules/@mui/material/esm/fab/fab.d.ts","./node_modules/@mui/material/esm/fab/index.d.ts","./node_modules/@mui/material/esm/inputbase/inputbaseclasses.d.ts","./node_modules/@mui/material/esm/inputbase/inputbase.d.ts","./node_modules/@mui/material/esm/inputbase/index.d.ts","./node_modules/@mui/material/esm/filledinput/filledinputclasses.d.ts","./node_modules/@mui/material/esm/filledinput/filledinput.d.ts","./node_modules/@mui/material/esm/filledinput/index.d.ts","./node_modules/@mui/material/esm/formcontrollabel/formcontrollabelclasses.d.ts","./node_modules/@mui/material/esm/formcontrollabel/formcontrollabel.d.ts","./node_modules/@mui/material/esm/formcontrollabel/index.d.ts","./node_modules/@mui/material/esm/formcontrol/formcontrolclasses.d.ts","./node_modules/@mui/material/esm/formcontrol/formcontrol.d.ts","./node_modules/@mui/material/esm/formcontrol/formcontrolcontext.d.ts","./node_modules/@mui/material/esm/formcontrol/useformcontrol.d.ts","./node_modules/@mui/material/esm/formcontrol/index.d.ts","./node_modules/@mui/material/esm/formgroup/formgroupclasses.d.ts","./node_modules/@mui/material/esm/formgroup/formgroup.d.ts","./node_modules/@mui/material/esm/formgroup/index.d.ts","./node_modules/@mui/material/esm/formhelpertext/formhelpertextclasses.d.ts","./node_modules/@mui/material/esm/formhelpertext/formhelpertext.d.ts","./node_modules/@mui/material/esm/formhelpertext/index.d.ts","./node_modules/@mui/material/esm/formlabel/formlabelclasses.d.ts","./node_modules/@mui/material/esm/formlabel/formlabel.d.ts","./node_modules/@mui/material/esm/formlabel/index.d.ts","./node_modules/@mui/material/esm/gridlegacy/gridlegacyclasses.d.ts","./node_modules/@mui/material/esm/gridlegacy/gridlegacy.d.ts","./node_modules/@mui/material/esm/gridlegacy/index.d.ts","./node_modules/@mui/material/esm/grid/grid.d.ts","./node_modules/@mui/material/esm/grid/gridclasses.d.ts","./node_modules/@mui/material/esm/grid/index.d.ts","./node_modules/@mui/material/esm/icon/iconclasses.d.ts","./node_modules/@mui/material/esm/icon/icon.d.ts","./node_modules/@mui/material/esm/icon/index.d.ts","./node_modules/@mui/material/esm/imagelist/imagelistclasses.d.ts","./node_modules/@mui/material/esm/imagelist/imagelist.d.ts","./node_modules/@mui/material/esm/imagelist/index.d.ts","./node_modules/@mui/material/esm/imagelistitembar/imagelistitembarclasses.d.ts","./node_modules/@mui/material/esm/imagelistitembar/imagelistitembar.d.ts","./node_modules/@mui/material/esm/imagelistitembar/index.d.ts","./node_modules/@mui/material/esm/imagelistitem/imagelistitemclasses.d.ts","./node_modules/@mui/material/esm/imagelistitem/imagelistitem.d.ts","./node_modules/@mui/material/esm/imagelistitem/index.d.ts","./node_modules/@mui/material/esm/inputadornment/inputadornmentclasses.d.ts","./node_modules/@mui/material/esm/inputadornment/inputadornment.d.ts","./node_modules/@mui/material/esm/inputadornment/index.d.ts","./node_modules/@mui/material/esm/inputlabel/inputlabelclasses.d.ts","./node_modules/@mui/material/esm/inputlabel/inputlabel.d.ts","./node_modules/@mui/material/esm/inputlabel/index.d.ts","./node_modules/@mui/material/esm/input/inputclasses.d.ts","./node_modules/@mui/material/esm/input/input.d.ts","./node_modules/@mui/material/esm/input/index.d.ts","./node_modules/@mui/material/esm/linearprogress/linearprogressclasses.d.ts","./node_modules/@mui/material/esm/linearprogress/linearprogress.d.ts","./node_modules/@mui/material/esm/linearprogress/index.d.ts","./node_modules/@mui/material/esm/link/linkclasses.d.ts","./node_modules/@mui/material/esm/link/link.d.ts","./node_modules/@mui/material/esm/link/index.d.ts","./node_modules/@mui/material/esm/listitemavatar/listitemavatarclasses.d.ts","./node_modules/@mui/material/esm/listitemavatar/listitemavatar.d.ts","./node_modules/@mui/material/esm/listitemavatar/index.d.ts","./node_modules/@mui/material/esm/listitemicon/listitemiconclasses.d.ts","./node_modules/@mui/material/esm/listitemicon/listitemicon.d.ts","./node_modules/@mui/material/esm/listitemicon/index.d.ts","./node_modules/@mui/material/esm/listitem/listitemclasses.d.ts","./node_modules/@mui/material/esm/listitem/listitem.d.ts","./node_modules/@mui/material/esm/listitem/index.d.ts","./node_modules/@mui/material/esm/listitembutton/listitembuttonclasses.d.ts","./node_modules/@mui/material/esm/listitembutton/listitembutton.d.ts","./node_modules/@mui/material/esm/listitembutton/index.d.ts","./node_modules/@mui/material/esm/listitemsecondaryaction/listitemsecondaryactionclasses.d.ts","./node_modules/@mui/material/esm/listitemsecondaryaction/listitemsecondaryaction.d.ts","./node_modules/@mui/material/esm/listitemsecondaryaction/index.d.ts","./node_modules/@mui/material/esm/listitemtext/listitemtextclasses.d.ts","./node_modules/@mui/material/esm/listitemtext/listitemtext.d.ts","./node_modules/@mui/material/esm/listitemtext/index.d.ts","./node_modules/@mui/material/esm/list/listclasses.d.ts","./node_modules/@mui/material/esm/list/list.d.ts","./node_modules/@mui/material/esm/list/index.d.ts","./node_modules/@mui/material/esm/listsubheader/listsubheaderclasses.d.ts","./node_modules/@mui/material/esm/listsubheader/listsubheader.d.ts","./node_modules/@mui/material/esm/listsubheader/index.d.ts","./node_modules/@mui/material/esm/menuitem/menuitemclasses.d.ts","./node_modules/@mui/material/esm/menuitem/menuitem.d.ts","./node_modules/@mui/material/esm/menuitem/index.d.ts","./node_modules/@mui/material/esm/menulist/menulist.d.ts","./node_modules/@mui/material/esm/menulist/index.d.ts","./node_modules/@mui/material/esm/popover/popoverclasses.d.ts","./node_modules/@mui/material/esm/popover/popover.d.ts","./node_modules/@mui/material/esm/popover/index.d.ts","./node_modules/@mui/material/esm/menu/menuclasses.d.ts","./node_modules/@mui/material/esm/menu/menu.d.ts","./node_modules/@mui/material/esm/menu/index.d.ts","./node_modules/@mui/material/esm/mobilestepper/mobilestepperclasses.d.ts","./node_modules/@mui/material/esm/mobilestepper/mobilestepper.d.ts","./node_modules/@mui/material/esm/mobilestepper/index.d.ts","./node_modules/@mui/material/esm/nativeselect/nativeselectinput.d.ts","./node_modules/@mui/material/esm/nativeselect/nativeselectclasses.d.ts","./node_modules/@mui/material/esm/nativeselect/nativeselect.d.ts","./node_modules/@mui/material/esm/nativeselect/index.d.ts","./node_modules/@mui/material/esm/usemediaquery/index.d.ts","./node_modules/@mui/material/esm/outlinedinput/outlinedinputclasses.d.ts","./node_modules/@mui/material/esm/outlinedinput/outlinedinput.d.ts","./node_modules/@mui/material/esm/outlinedinput/index.d.ts","./node_modules/@mui/material/esm/usepagination/usepagination.d.ts","./node_modules/@mui/material/esm/pagination/paginationclasses.d.ts","./node_modules/@mui/material/esm/pagination/pagination.d.ts","./node_modules/@mui/material/esm/pagination/index.d.ts","./node_modules/@mui/material/esm/paginationitem/paginationitemclasses.d.ts","./node_modules/@mui/material/esm/paginationitem/paginationitem.d.ts","./node_modules/@mui/material/esm/paginationitem/index.d.ts","./node_modules/@mui/material/esm/radiogroup/radiogroup.d.ts","./node_modules/@mui/material/esm/radiogroup/radiogroupcontext.d.ts","./node_modules/@mui/material/esm/radiogroup/useradiogroup.d.ts","./node_modules/@mui/material/esm/radiogroup/radiogroupclasses.d.ts","./node_modules/@mui/material/esm/radiogroup/index.d.ts","./node_modules/@mui/material/esm/radio/radioclasses.d.ts","./node_modules/@mui/material/esm/radio/radio.d.ts","./node_modules/@mui/material/esm/radio/index.d.ts","./node_modules/@mui/material/esm/rating/ratingclasses.d.ts","./node_modules/@mui/material/esm/rating/rating.d.ts","./node_modules/@mui/material/esm/rating/index.d.ts","./node_modules/@mui/material/esm/scopedcssbaseline/scopedcssbaselineclasses.d.ts","./node_modules/@mui/material/esm/scopedcssbaseline/scopedcssbaseline.d.ts","./node_modules/@mui/material/esm/scopedcssbaseline/index.d.ts","./node_modules/@mui/material/esm/select/selectinput.d.ts","./node_modules/@mui/material/esm/select/selectclasses.d.ts","./node_modules/@mui/material/esm/select/select.d.ts","./node_modules/@mui/material/esm/select/index.d.ts","./node_modules/@mui/material/esm/skeleton/skeletonclasses.d.ts","./node_modules/@mui/material/esm/skeleton/skeleton.d.ts","./node_modules/@mui/material/esm/skeleton/index.d.ts","./node_modules/@mui/material/esm/slider/useslider.types.d.ts","./node_modules/@mui/material/esm/slider/slidervaluelabel.types.d.ts","./node_modules/@mui/material/esm/slider/slidervaluelabel.d.ts","./node_modules/@mui/material/esm/slider/sliderclasses.d.ts","./node_modules/@mui/material/esm/slider/slider.d.ts","./node_modules/@mui/material/esm/slider/index.d.ts","./node_modules/@mui/material/esm/snackbarcontent/snackbarcontentclasses.d.ts","./node_modules/@mui/material/esm/snackbarcontent/snackbarcontent.d.ts","./node_modules/@mui/material/esm/snackbarcontent/index.d.ts","./node_modules/@mui/material/esm/clickawaylistener/clickawaylistener.d.ts","./node_modules/@mui/material/esm/clickawaylistener/index.d.ts","./node_modules/@mui/material/esm/snackbar/snackbarclasses.d.ts","./node_modules/@mui/material/esm/snackbar/snackbar.d.ts","./node_modules/@mui/material/esm/snackbar/index.d.ts","./node_modules/@mui/material/esm/transitions/index.d.ts","./node_modules/@mui/material/esm/speeddial/speeddialclasses.d.ts","./node_modules/@mui/material/esm/speeddial/speeddial.d.ts","./node_modules/@mui/material/esm/speeddial/index.d.ts","./node_modules/@mui/material/esm/tooltip/tooltipclasses.d.ts","./node_modules/@mui/material/esm/tooltip/tooltip.d.ts","./node_modules/@mui/material/esm/tooltip/index.d.ts","./node_modules/@mui/material/esm/speeddialaction/speeddialactionclasses.d.ts","./node_modules/@mui/material/esm/speeddialaction/speeddialaction.d.ts","./node_modules/@mui/material/esm/speeddialaction/index.d.ts","./node_modules/@mui/material/esm/speeddialicon/speeddialiconclasses.d.ts","./node_modules/@mui/material/esm/speeddialicon/speeddialicon.d.ts","./node_modules/@mui/material/esm/speeddialicon/index.d.ts","./node_modules/@mui/material/esm/stack/stack.d.ts","./node_modules/@mui/material/esm/stack/stackclasses.d.ts","./node_modules/@mui/material/esm/stack/index.d.ts","./node_modules/@mui/material/esm/stepbutton/stepbuttonclasses.d.ts","./node_modules/@mui/material/esm/stepbutton/stepbutton.d.ts","./node_modules/@mui/material/esm/stepbutton/index.d.ts","./node_modules/@mui/material/esm/stepconnector/stepconnectorclasses.d.ts","./node_modules/@mui/material/esm/stepconnector/stepconnector.d.ts","./node_modules/@mui/material/esm/stepconnector/index.d.ts","./node_modules/@mui/material/esm/stepcontent/stepcontentclasses.d.ts","./node_modules/@mui/material/esm/stepcontent/stepcontent.d.ts","./node_modules/@mui/material/esm/stepcontent/index.d.ts","./node_modules/@mui/material/esm/stepicon/stepiconclasses.d.ts","./node_modules/@mui/material/esm/stepicon/stepicon.d.ts","./node_modules/@mui/material/esm/stepicon/index.d.ts","./node_modules/@mui/material/esm/steplabel/steplabelclasses.d.ts","./node_modules/@mui/material/esm/steplabel/steplabel.d.ts","./node_modules/@mui/material/esm/steplabel/index.d.ts","./node_modules/@mui/material/esm/stepper/stepperclasses.d.ts","./node_modules/@mui/material/esm/stepper/stepper.d.ts","./node_modules/@mui/material/esm/stepper/steppercontext.d.ts","./node_modules/@mui/material/esm/stepper/index.d.ts","./node_modules/@mui/material/esm/step/stepclasses.d.ts","./node_modules/@mui/material/esm/step/step.d.ts","./node_modules/@mui/material/esm/step/stepcontext.d.ts","./node_modules/@mui/material/esm/step/index.d.ts","./node_modules/@mui/material/esm/swipeabledrawer/swipeabledrawer.d.ts","./node_modules/@mui/material/esm/swipeabledrawer/index.d.ts","./node_modules/@mui/material/esm/switch/switchclasses.d.ts","./node_modules/@mui/material/esm/switch/switch.d.ts","./node_modules/@mui/material/esm/switch/index.d.ts","./node_modules/@mui/material/esm/tablebody/tablebodyclasses.d.ts","./node_modules/@mui/material/esm/tablebody/tablebody.d.ts","./node_modules/@mui/material/esm/tablebody/index.d.ts","./node_modules/@mui/material/esm/tablecell/tablecellclasses.d.ts","./node_modules/@mui/material/esm/tablecell/tablecell.d.ts","./node_modules/@mui/material/esm/tablecell/index.d.ts","./node_modules/@mui/material/esm/tablecontainer/tablecontainerclasses.d.ts","./node_modules/@mui/material/esm/tablecontainer/tablecontainer.d.ts","./node_modules/@mui/material/esm/tablecontainer/index.d.ts","./node_modules/@mui/material/esm/tablehead/tableheadclasses.d.ts","./node_modules/@mui/material/esm/tablehead/tablehead.d.ts","./node_modules/@mui/material/esm/tablehead/index.d.ts","./node_modules/@mui/material/esm/tablepaginationactions/tablepaginationactions.d.ts","./node_modules/@mui/material/esm/tablepaginationactions/tablepaginationactionsclasses.d.ts","./node_modules/@mui/material/esm/tablepaginationactions/index.d.ts","./node_modules/@mui/material/esm/tablepagination/tablepaginationclasses.d.ts","./node_modules/@mui/material/esm/toolbar/toolbarclasses.d.ts","./node_modules/@mui/material/esm/toolbar/toolbar.d.ts","./node_modules/@mui/material/esm/toolbar/index.d.ts","./node_modules/@mui/material/esm/tablepagination/tablepagination.d.ts","./node_modules/@mui/material/esm/tablepagination/index.d.ts","./node_modules/@mui/material/esm/table/tableclasses.d.ts","./node_modules/@mui/material/esm/table/table.d.ts","./node_modules/@mui/material/esm/table/index.d.ts","./node_modules/@mui/material/esm/tablerow/tablerowclasses.d.ts","./node_modules/@mui/material/esm/tablerow/tablerow.d.ts","./node_modules/@mui/material/esm/tablerow/index.d.ts","./node_modules/@mui/material/esm/tablesortlabel/tablesortlabelclasses.d.ts","./node_modules/@mui/material/esm/tablesortlabel/tablesortlabel.d.ts","./node_modules/@mui/material/esm/tablesortlabel/index.d.ts","./node_modules/@mui/material/esm/tablefooter/tablefooterclasses.d.ts","./node_modules/@mui/material/esm/tablefooter/tablefooter.d.ts","./node_modules/@mui/material/esm/tablefooter/index.d.ts","./node_modules/@mui/material/esm/tab/tabclasses.d.ts","./node_modules/@mui/material/esm/tab/tab.d.ts","./node_modules/@mui/material/esm/tab/index.d.ts","./node_modules/@mui/material/esm/tabscrollbutton/tabscrollbuttonclasses.d.ts","./node_modules/@mui/material/esm/tabscrollbutton/tabscrollbutton.d.ts","./node_modules/@mui/material/esm/tabscrollbutton/index.d.ts","./node_modules/@mui/material/esm/tabs/tabsclasses.d.ts","./node_modules/@mui/material/esm/tabs/tabs.d.ts","./node_modules/@mui/material/esm/tabs/index.d.ts","./node_modules/@mui/material/esm/textfield/textfieldclasses.d.ts","./node_modules/@mui/material/esm/textfield/textfield.d.ts","./node_modules/@mui/material/esm/textfield/index.d.ts","./node_modules/@mui/material/esm/togglebutton/togglebuttonclasses.d.ts","./node_modules/@mui/material/esm/togglebutton/togglebutton.d.ts","./node_modules/@mui/material/esm/togglebutton/index.d.ts","./node_modules/@mui/material/esm/togglebuttongroup/togglebuttongroupclasses.d.ts","./node_modules/@mui/material/esm/togglebuttongroup/togglebuttongroup.d.ts","./node_modules/@mui/material/esm/togglebuttongroup/index.d.ts","./node_modules/@mui/material/esm/styles/props.d.ts","./node_modules/@mui/material/esm/styles/overrides.d.ts","./node_modules/@mui/material/esm/styles/variants.d.ts","./node_modules/@mui/material/esm/styles/components.d.ts","./node_modules/@mui/material/esm/styles/createthemenovars.d.ts","./node_modules/@mui/material/esm/styles/createthemewithvars.d.ts","./node_modules/@mui/material/esm/styles/createtheme.d.ts","./node_modules/@mui/material/esm/styles/adaptv4theme.d.ts","./node_modules/@mui/material/esm/styles/createcolorscheme.d.ts","./node_modules/@mui/material/esm/styles/createstyles.d.ts","./node_modules/@mui/material/esm/styles/responsivefontsizes.d.ts","./node_modules/@mui/system/esm/createbreakpoints/index.d.ts","./node_modules/@mui/material/esm/styles/usetheme.d.ts","./node_modules/@mui/material/esm/styles/usethemeprops.d.ts","./node_modules/@mui/material/esm/styles/slotshouldforwardprop.d.ts","./node_modules/@mui/material/esm/styles/rootshouldforwardprop.d.ts","./node_modules/@mui/material/esm/styles/styled.d.ts","./node_modules/@mui/material/esm/styles/themeprovider.d.ts","./node_modules/@mui/material/esm/styles/cssutils.d.ts","./node_modules/@mui/material/esm/styles/makestyles.d.ts","./node_modules/@mui/material/esm/styles/withstyles.d.ts","./node_modules/@mui/material/esm/styles/withtheme.d.ts","./node_modules/@mui/material/esm/styles/themeproviderwithvars.d.ts","./node_modules/@mui/material/esm/styles/getoverlayalpha.d.ts","./node_modules/@mui/material/esm/styles/shouldskipgeneratingvar.d.ts","./node_modules/@mui/material/esm/styles/excludevariablesfromroot.d.ts","./node_modules/@mui/material/esm/styles/index.d.ts","./node_modules/@mui/utils/esm/classnamegenerator/classnamegenerator.d.ts","./node_modules/@mui/utils/esm/classnamegenerator/index.d.ts","./node_modules/@mui/utils/esm/capitalize/capitalize.d.ts","./node_modules/@mui/utils/esm/capitalize/index.d.ts","./node_modules/@mui/material/esm/utils/capitalize.d.ts","./node_modules/@mui/utils/esm/createchainedfunction/createchainedfunction.d.ts","./node_modules/@mui/utils/esm/createchainedfunction/index.d.ts","./node_modules/@mui/material/esm/utils/createchainedfunction.d.ts","./node_modules/@mui/material/esm/utils/createsvgicon.d.ts","./node_modules/@mui/utils/esm/debounce/debounce.d.ts","./node_modules/@mui/utils/esm/debounce/index.d.ts","./node_modules/@mui/material/esm/utils/debounce.d.ts","./node_modules/@types/prop-types/index.d.ts","./node_modules/@mui/utils/esm/deprecatedproptype/deprecatedproptype.d.ts","./node_modules/@mui/utils/esm/deprecatedproptype/index.d.ts","./node_modules/@mui/material/esm/utils/deprecatedproptype.d.ts","./node_modules/@mui/utils/esm/ismuielement/ismuielement.d.ts","./node_modules/@mui/utils/esm/ismuielement/index.d.ts","./node_modules/@mui/material/esm/utils/ismuielement.d.ts","./node_modules/@mui/material/esm/utils/memotheme.d.ts","./node_modules/@mui/utils/esm/ownerdocument/ownerdocument.d.ts","./node_modules/@mui/utils/esm/ownerdocument/index.d.ts","./node_modules/@mui/material/esm/utils/ownerdocument.d.ts","./node_modules/@mui/utils/esm/ownerwindow/ownerwindow.d.ts","./node_modules/@mui/utils/esm/ownerwindow/index.d.ts","./node_modules/@mui/material/esm/utils/ownerwindow.d.ts","./node_modules/@mui/utils/esm/requirepropfactory/requirepropfactory.d.ts","./node_modules/@mui/utils/esm/requirepropfactory/index.d.ts","./node_modules/@mui/material/esm/utils/requirepropfactory.d.ts","./node_modules/@mui/utils/esm/setref/setref.d.ts","./node_modules/@mui/utils/esm/setref/index.d.ts","./node_modules/@mui/material/esm/utils/setref.d.ts","./node_modules/@mui/utils/esm/useenhancedeffect/useenhancedeffect.d.ts","./node_modules/@mui/utils/esm/useenhancedeffect/index.d.ts","./node_modules/@mui/material/esm/utils/useenhancedeffect.d.ts","./node_modules/@mui/utils/esm/useid/useid.d.ts","./node_modules/@mui/utils/esm/useid/index.d.ts","./node_modules/@mui/material/esm/utils/useid.d.ts","./node_modules/@mui/utils/esm/unsupportedprop/unsupportedprop.d.ts","./node_modules/@mui/utils/esm/unsupportedprop/index.d.ts","./node_modules/@mui/material/esm/utils/unsupportedprop.d.ts","./node_modules/@mui/utils/esm/usecontrolled/usecontrolled.d.ts","./node_modules/@mui/utils/esm/usecontrolled/index.d.ts","./node_modules/@mui/material/esm/utils/usecontrolled.d.ts","./node_modules/@mui/utils/esm/useeventcallback/useeventcallback.d.ts","./node_modules/@mui/utils/esm/useeventcallback/index.d.ts","./node_modules/@mui/material/esm/utils/useeventcallback.d.ts","./node_modules/@mui/utils/esm/useforkref/useforkref.d.ts","./node_modules/@mui/utils/esm/useforkref/index.d.ts","./node_modules/@mui/material/esm/utils/useforkref.d.ts","./node_modules/@mui/material/esm/utils/mergeslotprops.d.ts","./node_modules/@mui/material/esm/utils/index.d.ts","./node_modules/@mui/material/esm/box/box.d.ts","./node_modules/@mui/material/esm/box/boxclasses.d.ts","./node_modules/@mui/material/esm/box/index.d.ts","./node_modules/@mui/material/esm/darkscrollbar/index.d.ts","./node_modules/@mui/material/esm/grow/grow.d.ts","./node_modules/@mui/material/esm/grow/index.d.ts","./node_modules/@mui/material/esm/nossr/nossr.types.d.ts","./node_modules/@mui/material/esm/nossr/nossr.d.ts","./node_modules/@mui/material/esm/nossr/index.d.ts","./node_modules/@mui/material/esm/textareaautosize/textareaautosize.types.d.ts","./node_modules/@mui/material/esm/textareaautosize/textareaautosize.d.ts","./node_modules/@mui/material/esm/textareaautosize/index.d.ts","./node_modules/@mui/material/esm/usescrolltrigger/usescrolltrigger.d.ts","./node_modules/@mui/material/esm/usescrolltrigger/index.d.ts","./node_modules/@mui/material/esm/zoom/zoom.d.ts","./node_modules/@mui/material/esm/zoom/index.d.ts","./node_modules/@mui/material/esm/globalstyles/globalstyles.d.ts","./node_modules/@mui/material/esm/globalstyles/index.d.ts","./node_modules/@mui/material/esm/version/index.d.ts","./node_modules/@mui/utils/esm/composeclasses/composeclasses.d.ts","./node_modules/@mui/utils/esm/composeclasses/index.d.ts","./node_modules/@mui/utils/esm/generateutilityclass/generateutilityclass.d.ts","./node_modules/@mui/utils/esm/generateutilityclass/index.d.ts","./node_modules/@mui/material/esm/generateutilityclass/index.d.ts","./node_modules/@mui/utils/esm/generateutilityclasses/generateutilityclasses.d.ts","./node_modules/@mui/utils/esm/generateutilityclasses/index.d.ts","./node_modules/@mui/material/esm/generateutilityclasses/index.d.ts","./node_modules/@mui/material/esm/unstable_trapfocus/focustrap.types.d.ts","./node_modules/@mui/material/esm/unstable_trapfocus/focustrap.d.ts","./node_modules/@mui/material/esm/unstable_trapfocus/index.d.ts","./node_modules/@mui/material/esm/initcolorschemescript/initcolorschemescript.d.ts","./node_modules/@mui/material/esm/initcolorschemescript/index.d.ts","./node_modules/@mui/material/esm/index.d.ts","./app/providers.tsx","./app/layout.tsx","./app/(auth)/login/loginclient.tsx","./app/(auth)/login/page.tsx","./app/(dashboard)/dashboardlayoutclient.tsx","./app/(dashboard)/overviewclient.tsx","./app/(dashboard)/layout.tsx","./app/(dashboard)/page.tsx","./node_modules/@mui/icons-material/esm/delete.d.ts","./app/(dashboard)/access-lists/accesslistsclient.tsx","./app/(dashboard)/access-lists/page.tsx","./app/(dashboard)/audit-log/auditlogclient.tsx","./app/(dashboard)/audit-log/page.tsx","./node_modules/@mui/icons-material/esm/expandmore.d.ts","./app/(dashboard)/certificates/certificatesclient.tsx","./app/(dashboard)/certificates/page.tsx","./app/(dashboard)/dead-hosts/deadhostsclient.tsx","./app/(dashboard)/dead-hosts/page.tsx","./app/(dashboard)/proxy-hosts/proxyhostsclient.tsx","./app/(dashboard)/proxy-hosts/page.tsx","./app/(dashboard)/redirects/redirectsclient.tsx","./app/(dashboard)/redirects/page.tsx","./app/(dashboard)/settings/settingsclient.tsx","./app/(dashboard)/settings/page.tsx","./app/(dashboard)/streams/streamsclient.tsx","./app/(dashboard)/streams/page.tsx","./app/setup/oauth/setupclient.tsx","./app/setup/oauth/page.tsx","./.next/types/cache-life.d.ts","./.next/types/routes.d.ts","./.next/types/validator.ts","./.next/dev/types/validator.ts"],"fileIdsList":[[73,128,145,146],[73,128,145,146,272,490,493,496,550,551,1250,1252,1255,1256,1259,1261,1264,1266,1268,1270,1272,1274,1276],[73,128,145,146,445,446,447,448],[73,128,145,146,272,490,493,551,1250,1252,1255,1256,1259,1261,1264,1266,1268,1270,1272,1274,1276,1278],[73,128,145,146,272,467,1248],[73,128,145,146,272,478,529,532,1251],[73,128,145,146,272,537,538,1248,1257],[73,128,145,146,272,532,537,1277],[73,128,145,146,272,537,1258],[73,128,145,146,272,1248],[73,128,145,146,272,552,555,1260],[73,128,145,146,272,532,539,1277],[73,128,145,146,272,539,540,1248,1262],[73,128,145,146,272,539,1263],[64,73,128,145,146,272,467,478,531,1248],[73,128,145,146,272,532,541,1277],[73,128,145,146,272,541,542,1248,1262],[73,128,145,146,272,541,1265],[64,73,128,145,146,272,532,1253],[73,128,145,146,272,527,532,1254],[73,128,145,146,272,532,543,1277],[73,128,145,146,272,537,539,543,1267],[73,128,145,146,272,537,539,543,544,1248,1262],[73,128,145,146,272,532,545,1277],[73,128,145,146,272,545,1269],[73,128,145,146,272,545,546,1248,1262],[73,128,145,146,272,529,532,536,1277],[73,128,145,146,272,529,1271],[73,128,145,146,272,529,547,1248],[73,128,145,146,272,532,548,1277],[73,128,145,146,272,548,1273],[73,128,145,146,272,548,549,1248,1262],[73,128,145,146,272,532],[64,73,128,145,146,272,1249],[64,73,128,145,146,272,1248],[73,128,145,146,272,478,529,552],[73,128,145,146,272,478,529,552,553,1275],[73,128,145,146,494,495,496],[73,128,145,146,513,516],[73,128,145,146,498,499,504,513,514,516,517,518,519],[73,128,145,146,504,516],[73,128,145,146,498],[73,128,145,146,516],[73,128,145,146,516,520],[73,128,145,146,503,520],[73,128,145,146,502,512,514,516],[73,128,145,146,506,513,516],[73,128,145,146,508,509,513,516],[73,128,145,146,507,510,511,512,516],[73,128,145,146,510,516],[73,128,145,146,498,501,508,513,516,520],[73,128,145,146,500,501,502,503,504,513,515,520],[73,128,145,146,584,585],[73,128,145,146,586,587],[73,128,145,146,586],[64,73,128,145,146,590,593],[64,73,128,145,146,588],[73,128,145,146,584,590],[73,128,145,146,588,590,591,592,593,595,596,597,598,599],[64,73,128,145,146,594],[73,128,145,146,590],[64,73,128,145,146,592],[73,128,145,146,594],[73,128,145,146,600],[63,73,128,145,146,584],[73,128,145,146,589],[73,128,145,146,580],[73,128,145,146,590,601,602,603],[64,73,128,145,146],[73,128,145,146,590,601,602],[73,128,145,146,604,605],[73,128,145,146,604],[73,128,145,146,582],[73,128,145,146,581],[73,128,145,146,583],[73,128,145,146,728],[64,73,128,145,146,718,725,739,743,796,889,1163],[73,128,145,146,889,890],[64,73,128,145,146,718,729,883,1163],[73,128,145,146,883,884],[64,73,128,145,146,718,729,886,1163],[73,128,145,146,886,887],[64,73,128,145,146,718,725,734,743,892,1163],[73,128,145,146,892,893],[64,73,128,145,146,577,718,728,729,737,740,741,743,1163],[73,128,145,146,741,744],[64,73,128,145,146,718,748,749,1163],[73,128,145,146,749,750],[64,73,128,145,146,577,718,725,739,752,1163],[73,128,145,146,752,753],[64,73,128,145,146,577,718,729,737,740,743,757,783,785,786,1163],[73,128,145,146,786,787],[64,73,128,145,146,577,718,725,728,743,789,1163],[73,128,145,146,789,790],[64,73,128,145,146,577,718,743,791,792,1163],[73,128,145,146,792,793],[64,73,128,145,146,718,725,743,796,798,799,1163],[73,128,145,146,799,800],[64,73,128,145,146,577,718,725,743,802,1163],[73,128,145,146,802,803],[64,73,128,145,146,718,725,808,1163],[73,128,145,146,808,809],[64,73,128,145,146,718,725,734,743,805,1163],[73,128,145,146,805,806],[73,128,145,146,577,718,725,1163],[73,128,145,146,1216,1217],[64,73,128,145,146,718,725,728,743,811,1163],[73,128,145,146,811,812],[64,73,128,145,146,577,718,725,734,819,1163],[73,128,145,146,819,820],[64,73,128,145,146,718,725,731,732,1163],[73,128,145,146,730,732,733],[64,73,128,145,146,729,730],[64,73,128,145,146,577,718,725,814,1163],[64,73,128,145,146,815],[73,128,145,146,814,815,816,817],[64,73,128,145,146,577,718,725,740,837,1163],[73,128,145,146,837,838],[64,73,128,145,146,718,725,734,743,822,1163],[73,128,145,146,822,823],[64,73,128,145,146,718,729,825,1163],[73,128,145,146,825,826],[64,73,128,145,146,718,725,828,1163],[73,128,145,146,828,829],[64,73,128,145,146,718,725,743,748,831,1163],[73,128,145,146,831,832],[64,73,128,145,146,718,725,834,1163],[73,128,145,146,834,835],[64,73,128,145,146,577,718,729,743,841,842,1163],[73,128,145,146,842,843],[64,73,128,145,146,577,718,725,743,755,1163],[73,128,145,146,755,756],[64,73,128,145,146,577,718,729,845,1163],[73,128,145,146,845,846],[73,128,145,146,1037],[64,73,128,145,146,718,729,796,848,1163],[73,128,145,146,848,849],[73,128,145,146,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575],[64,73,128,145,146,718,725,851,1163],[73,128,145,146,718],[73,128,145,146,851,852],[64,73,128,145,146,1163],[73,128,145,146,854],[64,73,128,145,146,718,729,740,743,796,801,868,869,1163],[73,128,145,146,869,870],[64,73,128,145,146,718,729,856,1163],[73,128,145,146,856,857],[64,73,128,145,146,718,729,859,1163],[73,128,145,146,859,860],[64,73,128,145,146,718,725,748,862,1163],[73,128,145,146,862,863],[64,73,128,145,146,718,725,748,872,1163],[73,128,145,146,872,873],[64,73,128,145,146,577,718,725,875,1163],[73,128,145,146,875,876],[64,73,128,145,146,718,729,740,743,796,801,868,879,880,1163],[73,128,145,146,880,881],[64,73,128,145,146,577,718,725,734,895,1163],[73,128,145,146,895,896],[64,73,128,145,146,796],[73,128,145,146,797],[73,128,145,146,718,729,900,901,1163],[73,128,145,146,901,902],[64,73,128,145,146,577,718,725,907,1163],[64,73,128,145,146,908],[73,128,145,146,907,908,909,910],[73,128,145,146,909],[64,73,128,145,146,718,729,743,748,904,1163],[73,128,145,146,904,905],[64,73,128,145,146,718,729,912,1163],[73,128,145,146,912,913],[64,73,128,145,146,577,718,725,915,1163],[73,128,145,146,915,916],[64,73,128,145,146,577,718,725,918,1163],[73,128,145,146,918,919],[73,128,145,146,1238],[73,128,145,146,1241],[73,128,145,146,718,1163],[73,128,145,146,1232],[73,128,145,146,577,718,1163],[73,128,145,146,924,925],[64,73,128,145,146,577,718,725,921,1163],[73,128,145,146,921,922],[73,128,145,146,1220],[64,73,128,145,146,577,718,725,927,1163],[73,128,145,146,927,928],[64,73,128,145,146,577,718,725,734,735,1163],[73,128,145,146,735,736],[64,73,128,145,146,577,718,725,930,1163],[73,128,145,146,930,931],[64,73,128,145,146,718,725,936,1163],[73,128,145,146,936,937],[64,73,128,145,146,718,729,933,1163],[73,128,145,146,933,934],[73,128,145,146,576,728,734,737,740,745,748,751,754,757,778,783,785,788,791,794,798,801,804,807,810,813,818,821,824,827,830,833,836,839,844,847,850,853,855,858,861,864,868,871,874,877,879,882,885,888,891,894,897,900,903,906,911,914,917,920,923,926,929,932,935,938,941,944,947,950,953,956,959,962,965,968,971,974,977,980,982,985,988,991,995,996,999,1003,1006,1011,1014,1017,1020,1024,1027,1033,1036,1038,1041,1045,1048,1051,1054,1057,1060,1063,1066,1069,1072,1076,1080,1082,1085,1088,1091,1094,1097,1100,1104,1106,1109,1112,1115,1118,1121,1124,1127,1130,1133,1136,1163,1215,1218,1219,1221,1224,1227,1229,1231,1233,1234,1236,1239,1242,1245,1247],[73,128,145,146,1246],[73,128,145,146,945,946],[73,128,145,146,718,729,900,945,1163],[73,128,145,146,939,940],[64,73,128,145,146,718,725,939,1163],[73,128,145,146,898,899],[64,73,128,145,146,577,718,729,898,1163],[73,128,145,146,942,943],[64,73,128,145,146,577,718,725,920,942,1163],[73,128,145,146,577,1163],[64,73,128,145,146,729,734,743,840],[73,128,145,146,948,949],[64,73,128,145,146,577,718,729,948,1163],[73,128,145,146,951,952],[64,73,128,145,146,577,718,725,748,951,1163],[73,128,145,146,972,973],[64,73,128,145,146,718,725,972,1163],[73,128,145,146,960,961],[64,73,128,145,146,718,725,960,1163],[73,128,145,146,954,955],[73,128,145,146,718,729,954,1163],[73,128,145,146,963,964],[64,73,128,145,146,718,725,734,963,1163],[73,128,145,146,957,958],[64,73,128,145,146,718,729,957,1163],[73,128,145,146,966,967],[64,73,128,145,146,718,729,966,1163],[73,128,145,146,969,970],[64,73,128,145,146,718,729,743,748,969,1163],[73,128,145,146,975,976],[64,73,128,145,146,718,725,975,1163],[73,128,145,146,986,987],[64,73,128,145,146,718,729,740,743,796,801,868,982,985,986,1163],[73,128,145,146,978,979],[64,73,128,145,146,718,725,734,978,1163],[73,128,145,146,981],[64,73,128,145,146,725,974],[73,128,145,146,989,990],[64,73,128,145,146,718,729,740,743,950,989,1163],[73,128,145,146,865,866,867],[64,73,128,145,146,577,718,725,743,778,801,866,1163],[73,128,145,146,993,994],[64,73,128,145,146,718,729,947,992,993,1163],[64,73,128,145,146,718,1163],[73,128,145,146,1222,1223],[64,73,128,145,146,1222],[73,128,145,146,997,998],[64,73,128,145,146,718,729,743,900,997,1163],[64,73,128,145,146,577,1163],[73,128,145,146,1001,1002],[64,73,128,145,146,577,718,729,1000,1001,1163],[73,128,145,146,1004,1005],[64,73,128,145,146,577,718,725,743,1000,1004,1163],[73,128,145,146,738,739],[64,73,128,145,146,577,718,725,738,1163],[73,128,145,146,983,984],[64,73,128,145,146,718,729,740,742,743,796,801,868,983,1163],[64,73,128,145,146,743,775,778,779],[73,128,145,146,780,781,782],[64,73,128,145,146,718,780,1163],[73,128,145,146,776,777],[64,73,128,145,146,776],[73,128,145,146,1012,1013],[64,73,128,145,146,577,718,729,743,841,1012,1163],[73,128,145,146,1007,1009,1010],[64,73,128,145,146,914],[73,128,145,146,914],[73,128,145,146,1008],[73,128,145,146,1015,1016],[64,73,128,145,146,577,718,725,743,1015,1163],[73,128,145,146,1018,1019],[64,73,128,145,146,718,725,1018,1163],[73,128,145,146,1022,1023],[64,73,128,145,146,718,729,903,947,988,999,1021,1022,1163],[64,73,128,145,146,718,988,1163],[73,128,145,146,1025,1026],[64,73,128,145,146,577,718,725,1025,1163],[73,128,145,146,878],[73,128,145,146,1031,1032],[64,73,128,145,146,577,718,725,743,1028,1030,1031,1163],[64,73,128,145,146,1029],[73,128,145,146,1039,1040],[64,73,128,145,146,718,729,743,796,1036,1038,1039,1163],[73,128,145,146,1034,1035],[64,73,128,145,146,718,729,740,1034,1163],[73,128,145,146,1043,1044],[64,73,128,145,146,718,729,743,897,1042,1043,1163],[73,128,145,146,1049,1050],[64,73,128,145,146,718,729,743,897,1048,1049,1163],[73,128,145,146,1052,1053],[64,73,128,145,146,718,729,1052,1163],[73,128,145,146,1055,1056],[64,73,128,145,146,718,725,1143],[73,128,145,146,1077,1078,1079],[64,73,128,145,146,718,725,1077,1163],[73,128,145,146,1058,1059],[64,73,128,145,146,718,725,734,1058,1163],[73,128,145,146,1061,1062],[64,73,128,145,146,718,729,1061,1163],[73,128,145,146,1064,1065],[64,73,128,145,146,718,729,743,796,850,1064,1163],[73,128,145,146,1067,1068],[64,73,128,145,146,718,728,729,1067,1163],[73,128,145,146,1070,1071],[64,73,128,145,146,718,729,743,1069,1070,1163],[73,128,145,146,1073,1074,1075],[64,73,128,145,146,718,725,740,1073,1163],[73,128,145,146,579,718,719,720,721,722,723,1137,1138,1139,1143],[73,128,145,146,1137,1138,1139],[73,128,145,146,1142],[63,73,128,145,146,718],[73,128,145,146,579,724,1141,1142],[73,128,145,146,577,579,695,718,719,720,721,722,723],[73,128,145,146,579,718,719,720,721,722,723,724,1140],[73,128,145,146,724,1140,1141],[64,73,128,145,146,579,721],[73,128,145,146,721],[73,128,145,146,577,578,579,695,718,719,720,721,722,723,1137,1138,1139,1140,1142,1143,1144,1145,1146,1147,1148,1149,1150,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162],[73,128,145,146,718,728,731,734,737,740,745,748,751,754,757,783,788,791,794,801,804,807,810,813,818,821,824,827,830,833,836,839,844,847,850,853,858,861,864,868,871,874,877,882,885,888,891,894,897,900,903,906,911,914,917,920,923,926,929,932,935,938,941,944,947,950,953,956,959,962,965,968,971,974,977,980,982,985,988,991,995,999,1003,1006,1011,1014,1017,1020,1024,1027,1033,1036,1041,1045,1048,1051,1054,1057,1060,1063,1066,1069,1072,1076,1080,1085,1088,1091,1094,1097,1100,1104,1106,1109,1112,1115,1118,1121,1127,1130,1133,1136,1137],[73,128,145,146,728,731,734,737,740,745,748,751,754,757,783,788,791,794,801,804,807,810,813,818,821,824,827,830,833,836,839,844,847,850,853,855,858,861,864,868,871,874,877,882,885,888,891,894,897,900,903,906,911,914,917,920,923,926,929,932,935,938,941,944,947,950,953,956,959,962,965,968,971,974,977,980,982,985,988,991,995,996,999,1003,1006,1011,1014,1017,1020,1024,1027,1033,1036,1041,1045,1048,1051,1054,1057,1060,1063,1066,1069,1072,1076,1080,1082,1085,1088,1091,1094,1097,1100,1104,1106,1109,1112,1115,1118,1121,1127,1130,1133,1136],[73,128,145,146,718,722],[73,128,145,146,718,1143,1151,1152],[64,73,128,145,146,695,718,1141],[64,73,128,145,146,687,718,1142],[73,128,145,146,1143],[73,128,145,146,1140,1143],[73,128,145,146,718,1137],[73,128,145,146,726,727],[64,73,128,145,146,577,718,725,726,1163],[73,128,145,146,1081],[64,73,128,145,146,743,882],[73,128,145,146,1083,1084],[64,73,128,145,146,577,718,729,743,841,1083,1163],[73,128,145,146,1119,1120],[64,73,128,145,146,718,725,734,1119,1163],[73,128,145,146,1107,1108],[64,73,128,145,146,577,718,725,1107,1163],[73,128,145,146,1086,1087],[64,73,128,145,146,718,725,1086,1163],[73,128,145,146,1089,1090],[64,73,128,145,146,577,718,729,1089,1163],[73,128,145,146,1092,1093],[64,73,128,145,146,718,725,1092,1163],[73,128,145,146,1116,1117],[64,73,128,145,146,718,725,1116,1163],[73,128,145,146,1095,1096],[64,73,128,145,146,718,725,1095,1163],[73,128,145,146,1101,1105],[64,73,128,145,146,718,725,737,743,980,1024,1091,1100,1101,1104,1163],[73,128,145,146,1098,1099],[64,73,128,145,146,728,736],[73,128,145,146,1110,1111],[64,73,128,145,146,718,725,1110,1163],[73,128,145,146,1113,1114],[64,73,128,145,146,718,725,734,743,1113,1163],[73,128,145,146,1125,1126],[64,73,128,145,146,577,718,725,728,743,1124,1125,1163],[73,128,145,146,1122,1123],[64,73,128,145,146,718,728,734,743,1122,1163],[73,128,145,146,1225,1226],[64,73,128,145,146,1225],[73,128,145,146,1128,1129],[64,73,128,145,146,577,718,729,743,900,903,911,917,944,947,999,1024,1128,1163],[73,128,145,146,1131,1132],[64,73,128,145,146,577,718,725,734,1131,1163],[73,128,145,146,1134,1135],[64,73,128,145,146,577,718,729,1134,1163],[73,128,145,146,1102,1103],[64,73,128,145,146,577,718,725,1102,1163],[73,128,145,146,1046,1047],[64,73,128,145,146,718,729,743,783,796,1046,1163],[73,128,145,146,796],[64,73,128,145,146,795],[73,128,145,146,746,747],[64,73,128,145,146,577,718,722,725,746,1163],[64,73,128,145,146,1243],[73,128,145,146,1243,1244],[73,128,145,146,784],[64,73,128,145,146,577],[73,128,145,146,680,1143],[73,128,145,146,1228],[73,128,145,146,1167],[73,128,145,146,1170],[73,128,145,146,1174],[73,128,145,146,1178],[73,128,145,146,743,1165,1168,1171,1172,1175,1179,1182,1183,1186,1189,1192,1195,1198,1201,1204,1207,1210,1213,1214],[73,128,145,146,1181],[73,128,145,146,611,1143],[73,128,145,146,742],[73,128,145,146,1185],[73,128,145,146,1188],[73,128,145,146,1191],[73,128,145,146,1194],[73,128,145,146,718,742,1163],[73,128,145,146,1203],[73,128,145,146,1206],[73,128,145,146,1197],[73,128,145,146,1209],[73,128,145,146,1212],[73,128,145,146,1200],[73,128,145,146,1230],[73,128,145,146,653,655,657],[73,128,145,146,654],[73,128,145,146,653],[73,128,145,146,656],[64,73,128,145,146,601],[73,128,145,146,609],[63,73,128,145,146,601,606,608,610],[73,128,145,146,607],[73,128,145,146,613],[73,128,145,146,614],[64,73,128,145,146,577,613,615,625,630,634,636,638,640,642,644,646,648,650,662],[73,128,145,146,663,664],[73,128,145,146,611,613,616,625,630],[73,128,145,146,631],[73,128,145,146,681],[73,128,145,146,633],[73,128,145,146,577,701],[64,73,128,145,146,577,625,630,700],[64,73,128,145,146,577,611,630,701],[73,128,145,146,700,701,703],[73,128,145,146,577,630,665],[73,128,145,146,666],[73,128,145,146,577],[73,128,145,146,616],[64,73,128,145,146,611,625,630],[73,128,145,146,668],[73,128,145,146,611],[73,128,145,146,611,616,617,618,625,626,628],[73,128,145,146,626,629],[73,128,145,146,627],[73,128,145,146,639],[64,73,128,145,146,687,688,689],[73,128,145,146,691],[73,128,145,146,688,690,691,692,693,694],[73,128,145,146,688],[73,128,145,146,635],[73,128,145,146,637],[73,128,145,146,651],[64,73,128,145,146,611,630],[73,128,145,146,659],[64,73,128,145,146,577,611,676,705,718],[73,128,145,146,577,705],[73,128,145,146,616,618,625,705],[64,73,128,145,146,577,625,630,665],[73,128,145,146,705,706,707,708,709,710],[73,128,145,146,611,613,615,616,617,618,625,628,630,632,634,636,638,640,642,644,646,648,650,652,658,660,662,665,667,669,671,674,676,678,680,682,684,685,691,693,695,696,697,699,702,704,711,716,717],[73,128,145,146,686],[73,128,145,146,641],[73,128,145,146,643],[73,128,145,146,698],[73,128,145,146,645],[73,128,145,146,647],[73,128,145,146,661],[64,73,128,145,146,577,611,616,618,712,718],[73,128,145,146,712,713,714,715],[73,128,145,146,577,712],[73,128,145,146,612],[73,128,145,146,670],[73,128,145,146,669],[73,128,145,146,619],[73,128,145,146,622],[73,128,145,146,619,620,621,622,623,624],[63,73,128,145,146],[63,73,128,145,146,611,619,620,621],[73,128,145,146,683],[73,128,145,146,658],[73,128,145,146,649],[73,128,145,146,679],[73,128,145,146,675],[73,128,145,146,630],[73,128,145,146,672,673],[73,128,145,146,677],[73,128,145,146,1166],[73,128,145,146,1164],[73,128,145,146,1235],[73,128,145,146,1169],[73,128,145,146,1173],[73,128,145,146,1176],[73,128,145,146,1177],[73,128,145,146,1237],[73,128,145,146,1240],[73,128,145,146,1180],[73,128,145,146,1184],[73,128,145,146,1187],[73,128,145,146,1190],[64,73,128,145,146,1176],[73,128,145,146,1193],[73,128,145,146,1202],[73,128,145,146,1205],[73,128,145,146,1196],[73,128,145,146,1208],[73,128,145,146,1211],[73,128,145,146,1199],[73,128,145,146,774],[73,128,145,146,768,770],[73,128,145,146,758,768,769,771,772,773],[73,128,145,146,768],[73,128,145,146,758,768],[73,128,145,146,759,760,761,762,763,764,765,766,767],[73,128,145,146,759,763,764,767,768,771],[73,128,145,146,759,760,761,762,763,764,765,766,767,768,769,771,772],[73,128,145,146,758,759,760,761,762,763,764,765,766,767],[73,125,126,128,145,146],[73,127,128,145,146],[128,145,146],[73,128,133,145,146,163],[73,128,129,134,139,145,146,148,160,171],[73,128,129,130,139,145,146,148],[73,128,131,145,146,172],[73,128,132,133,140,145,146,149],[73,128,133,145,146,160,168],[73,128,134,136,139,145,146,148],[73,127,128,135,145,146],[73,128,136,137,145,146],[73,128,138,139,145,146],[73,127,128,139,145,146],[73,128,139,140,141,145,146,160,171],[73,128,139,140,141,145,146,155,160,163],[73,120,128,136,139,142,145,146,148,160,171],[73,128,139,140,142,143,145,146,148,160,168,171],[73,128,142,144,145,146,160,168,171],[71,72,73,74,75,76,77,78,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],[73,128,139,145,146],[73,128,145,146,147,171],[73,128,136,139,145,146,148,160],[73,128,145,146,149],[73,128,145,146,150],[73,127,128,145,146,151],[73,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],[73,128,145,146,153],[73,128,145,146,154],[73,128,139,145,146,155,156],[73,128,145,146,155,157,172,174],[73,128,140,145,146],[73,128,139,145,146,160,161,163],[73,128,145,146,162,163],[73,128,145,146,160,161],[73,128,145,146,163],[73,128,145,146,164],[73,125,128,145,146,160,165],[73,128,139,145,146,166,167],[73,128,145,146,166,167],[73,128,133,145,146,148,160,168],[73,128,145,146,169],[73,128,145,146,148,170],[73,128,142,145,146,154,171],[73,128,133,145,146,172],[73,128,145,146,160,173],[73,128,145,146,147,174],[73,128,145,146,175],[73,128,133,145,146],[73,120,128,145,146],[73,128,145,146,176],[73,120,128,139,141,145,146,151,160,163,171,173,174,176],[73,128,145,146,160,177],[64,68,73,128,145,146,179,180,181,183,440,487],[64,68,73,128,145,146,179,180,181,182,401,440,487],[64,68,73,128,145,146,179,180,182,183,440,487],[64,73,128,145,146,183,401,402],[64,73,128,145,146,183,401],[64,68,73,128,145,146,180,181,182,183,440,487],[64,68,73,128,145,146,179,181,182,183,440,487],[62,63,73,128,145,146],[73,128,145,146,533],[73,128,145,146,490,494,513,516,520,521,522,523],[73,128,145,146,490,494,516,520,521],[73,128,145,146,490],[73,128,145,146,513],[73,128,145,146,443],[73,128,145,146,188,190,194,214,223,426,436],[73,128,145,146,190,218,219,220,222,436],[73,128,145,146,190,253,255,257,258,261,436,438],[73,128,145,146,190,194,196,197,198,199,213,214,215,425,436,438],[73,128,145,146,436],[73,128,145,146,212,213,219,406,415,432],[73,128,145,146,190],[73,128,145,146,184,212,432],[73,128,145,146,263],[73,128,145,146,262,436,438],[73,128,142,145,146,396,406,492],[73,128,142,145,146,365,377,415,431],[73,128,142,145,146,308],[73,128,145,146,419],[73,128,145,146,418,419,420],[73,128,145,146,418],[70,73,128,142,145,146,184,190,194,197,213,216,217,219,223,235,236,263,338,416,436,440],[73,128,145,146,188,190,221,253,254,259,260,436,492],[73,128,145,146,221,492],[73,128,145,146,188,236,352,436,492],[73,128,145,146,492],[73,128,145,146,190,221,222,492],[73,128,145,146,256,492],[73,128,145,146,216,417,424],[73,128,145,146,154,272,432],[73,128,145,146,272,432],[64,73,128,145,146,272],[64,73,128,145,146,369],[73,128,145,146,305,306,432,468,469,476],[73,128,145,146,412,468,470,471,472,473,475],[73,128,145,146,411],[73,128,145,146,411,412],[73,128,145,146,199,200,201,210,212],[73,128,145,146,211,212],[73,128,145,146,203,204,205,207,208,210,212],[73,128,145,146,210,212],[73,128,145,146,203,204,210,212],[73,128,145,146,202,203,205,206,209],[73,128,145,146,474],[73,128,145,146,212],[64,73,128,145,146,191,462],[64,73,128,145,146,171],[64,73,128,145,146,221,296],[64,73,128,145,146,221],[73,128,145,146,154,210,211,212],[73,128,145,146,294,298],[64,73,128,145,146,295,442],[64,68,73,128,142,145,146,178,179,180,181,182,183,440,485,486],[73,128,142,145,146],[73,128,142,145,146,194,243,313,328,349,351,421,422,436,437],[73,128,145,146,235,423],[73,128,145,146,440],[73,128,145,146,189],[64,73,128,145,146,354,367,376,386,388,431],[73,128,145,146,154,354,367,385,386,387,431,491],[73,128,145,146,379,380,381,382,383,384],[73,128,145,146,381],[73,128,145,146,385],[73,128,145,146,270,271,272,274],[64,73,128,145,146,264,265,266,267,273],[73,128,145,146,270,273],[73,128,145,146,268],[73,128,145,146,269],[64,73,128,145,146,272,295,442],[64,73,128,145,146,272,441,442],[64,73,128,145,146,272,442],[73,128,145,146,328,428],[73,128,145,146,428],[73,128,142,145,146,437,442],[73,128,145,146,373],[73,127,128,145,146,372],[73,128,145,146,212,244,245,311,314,351,360,363,365,366,405,431,434,437],[73,128,145,146,204,212,245],[73,128,145,146,365,431],[64,73,128,145,146,365,370,371,373,374,375,376,377,378,389,390,391,392,393,394,395,431,432,492],[73,128,145,146,359],[73,128,142,145,146,154,191,243,245,246,267,290,311,328,338,349,350,405,427,436,437,438,440,492],[73,128,145,146,431],[73,127,128,145,146,219,311,338,362,427,429,430,437],[73,128,145,146,365],[73,127,128,145,146,243,280,314,355,356,357,358,359,360,361,363,364,431,432],[73,128,142,145,146,280,281,355,437,438],[73,128,145,146,219,328,338,351,427,431,437],[73,128,142,145,146,436,438],[73,128,142,145,146,160,434,437,438],[73,128,142,145,146,154,171,184,194,213,221,244,245,246,248,277,282,287,290,311,313,314,316,319,321,324,325,326,327,349,351,426,427,432,434,436,437,438],[73,128,142,145,146,160],[73,128,145,146,190,191,192,217,434,435,440,442,492],[73,128,145,146,188,436],[73,128,145,146,276],[73,128,142,145,146,160,171,238,261,263,264,265,266,267,274,275,492],[73,128,145,146,154,171,184,213,238,253,286,287,288,289,314,319,328,334,337,339,349,351,427,432,434],[73,128,145,146,213,216,217,235,338,427,436],[73,128,142,145,146,171,191,194,314,332,434,436],[73,128,145,146,353],[73,128,142,145,146,267,275,335,336,346],[73,128,145,146,434,436],[73,128,145,146,360,362],[73,128,145,146,311,314,426,442],[73,128,142,145,146,154,249,253,289,319,334,337,341,434],[73,128,142,145,146,216,235,253,342],[73,128,145,146,190,248,344,426,436],[73,128,142,145,146,171,267,436],[73,128,142,145,146,221,247,248,249,258,276,343,345,426,436],[70,73,128,145,146,245,311,348,440,442],[73,128,142,145,146,154,171,194,216,223,235,244,246,282,286,287,288,289,290,314,316,328,329,331,333,349,351,426,427,432,433,434,442],[73,128,142,145,146,160,216,334,340,346,434],[73,128,145,146,226,227,228,229,230,231,232,233,234],[73,128,145,146,277,320],[73,128,145,146,322],[73,128,145,146,320],[73,128,145,146,322,323],[73,128,142,145,146,194,197,199,243,437],[73,128,142,145,146,154,189,191,244,245,290,310,311,312,349,434,438,440,442],[73,128,142,145,146,154,171,193,199,312,314,360,427,433,437],[73,128,145,146,355],[73,128,145,146,356],[73,128,145,146,212,213,405],[73,128,145,146,357],[73,128,145,146,237,241],[73,128,142,145,146,194,237,244],[73,128,145,146,240,241],[73,128,145,146,242],[73,128,145,146,237,238],[73,128,145,146,237,291],[73,128,145,146,237],[73,128,145,146,277,318,433],[73,128,145,146,317],[73,128,145,146,238,432,433],[73,128,145,146,315,433],[73,128,145,146,238,432],[73,128,145,146,405],[73,128,145,146,194,212,214,239,244,311,314,348,351,354,360,367,368,397,400,404,426,434,437],[73,128,145,146,299,302,303,304,305,306],[64,73,128,145,146,181,183,272,398,399],[64,73,128,145,146,181,183,272,398,399,403],[73,128,145,146,414],[73,128,145,146,219,281,311,348,351,365,373,377,407,408,409,410,412,413,416,426,431,436],[73,128,145,146,305],[73,128,145,146,310],[73,128,142,145,146,244,292,307,309,313,348,434,440,442],[73,128,145,146,299,300,301,302,303,304,305,306,441],[70,73,128,142,145,146,154,171,237,238,246,290,311,314,346,347,349,426,427,436,437,440],[73,128,145,146,281,283,286,427],[73,128,142,145,146,277,436],[73,128,145,146,280,365],[73,128,145,146,279],[73,128,145,146,281,282],[73,128,145,146,278,280,436],[73,128,142,145,146,193,281,283,284,285,436,437],[64,73,128,145,146,200,212,432],[64,73,128,145,146,211],[73,128,145,146,186,187],[64,73,128,145,146,191],[64,73,128,145,146,432],[64,70,73,128,145,146,290,311,440,442],[73,128,145,146,191,462,463],[64,73,128,145,146,298],[64,73,128,145,146,154,171,189,260,293,295,297,442],[73,128,145,146,221,432,437],[73,128,145,146,330,432],[64,73,128,140,142,145,146,154,188,189,255,298,440,441],[64,73,128,145,146,179,180,181,182,183,440,487],[64,65,66,67,68,73,128,145,146],[73,128,145,146,250,251,252],[73,128,145,146,250],[64,68,73,128,142,144,145,146,154,178,179,180,181,182,183,184,189,246,341,385,438,439,442,487],[73,128,145,146,450],[73,128,145,146,452],[73,128,145,146,454],[73,128,145,146,456],[73,128,145,146,458,459,460],[73,128,145,146,464],[69,73,128,145,146,444,449,451,453,455,457,461,465,467,478,479,481,490,491,492,493],[73,128,145,146,466],[73,128,145,146,477],[73,128,145,146,295],[73,128,145,146,480],[73,127,128,145,146,281,283,284,286,482,483,484,487,488,489],[73,128,145,146,178],[73,128,145,146,505],[73,128,145,146,506],[73,128,145,146,160,178],[73,86,89,92,93,128,145,146,171],[73,89,128,145,146,160,171],[73,89,93,128,145,146,171],[73,128,145,146,160],[73,83,128,145,146],[73,87,128,145,146],[73,85,86,89,128,145,146,171],[73,128,145,146,148,168],[73,83,128,145,146,178],[73,85,89,128,145,146,148,171],[73,80,81,82,84,88,128,139,145,146,160,171],[73,89,97,105,128,145,146],[73,81,87,128,145,146],[73,89,114,115,128,145,146],[73,81,84,89,128,145,146,163,171,178],[73,89,128,145,146],[73,85,89,128,145,146,171],[73,80,128,145,146],[73,83,84,85,87,88,89,90,91,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,115,116,117,118,119,128,145,146],[73,89,107,110,128,136,145,146],[73,89,97,98,99,128,145,146],[73,87,89,98,100,128,145,146],[73,88,128,145,146],[73,81,83,89,128,145,146],[73,89,93,98,100,128,145,146],[73,93,128,145,146],[73,87,89,92,128,145,146,171],[73,81,85,89,97,128,145,146],[73,89,107,128,145,146],[73,100,128,145,146],[73,83,89,114,128,145,146,163,176,178],[73,128,145,146,272,527],[73,128,145,146,272,478,524,525,527,528,529,530,531,532],[73,128,133,145,146,272,514,527],[73,128,133,145,146,272,478,527,529,530,552],[73,128,133,145,146,272,461,478,527,530],[73,128,133,140,145,146,150,272,527,529,530],[73,128,133,145,146,272],[73,128,140,145,146,150,272,526],[73,128,145,146,272],[73,128,145,146,272,527,534,535,536],[73,128,145,146,272,527,535,536]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"170d4db14678c68178ee8a3d5a990d5afb759ecb6ec44dbd885c50f6da6204f6","affectsGlobalScope":true,"impliedFormat":1},{"version":"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","impliedFormat":1},{"version":"0ff1b165090b491f5e1407ae680b9a0bc3806dc56827ec85f93c57390491e732","impliedFormat":1},{"version":"acd8fd5090ac73902278889c38336ff3f48af6ba03aa665eb34a75e7ba1dccc4","impliedFormat":1},{"version":"d6258883868fb2680d2ca96bc8b1352cab69874581493e6d52680c5ffecdb6cc","impliedFormat":1},{"version":"1b61d259de5350f8b1e5db06290d31eaebebc6baafd5f79d314b5af9256d7153","impliedFormat":1},{"version":"f258e3960f324a956fc76a3d3d9e964fff2244ff5859dcc6ce5951e5413ca826","impliedFormat":1},{"version":"643f7232d07bf75e15bd8f658f664d6183a0efaca5eb84b48201c7671a266979","impliedFormat":1},{"version":"21da358700a3893281ce0c517a7a30cbd46be020d9f0c3f2834d0a8ad1f5fc75","impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"378281aa35786c27d5811af7e6bcaa492eebd0c7013d48137c35bbc69a2b9751","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"1b2dd1cbeb0cc6ae20795958ba5950395ebb2849b7c8326853dd15530c77ab0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"387a023d363f755eb63450a66c28b14cdd7bc30a104565e2dbf0a8988bb4a56c","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"487b694c3de27ddf4ad107d4007ad304d29effccf9800c8ae23c2093638d906a","impliedFormat":1},{"version":"3a80bc85f38526ca3b08007ee80712e7bb0601df178b23fbf0bf87036fce40ce","impliedFormat":1},{"version":"ccf4552357ce3c159ef75f0f0114e80401702228f1898bdc9402214c9499e8c0","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"2931540c47ee0ff8a62860e61782eb17b155615db61e36986e54645ec67f67c2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"f6faf5f74e4c4cc309a6c6a6c4da02dbb840be5d3e92905a23dcd7b2b0bd1986","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"33e981bf6376e939f99bd7f89abec757c64897d33c005036b9a10d9587d80187","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"b41767d372275c154c7ea6c9d5449d9a741b8ce080f640155cc88ba1763e35b3","impliedFormat":1},{"version":"3bacf516d686d08682751a3bd2519ea3b8041a164bfb4f1d35728993e70a2426","impliedFormat":1},{"version":"7fb266686238369442bd1719bc0d7edd0199da4fb8540354e1ff7f16669b4323","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"54c3e2371e3d016469ad959697fd257e5621e16296fa67082c2575d0bf8eced0","impliedFormat":1},{"version":"beb8233b2c220cfa0feea31fbe9218d89fa02faa81ef744be8dce5acb89bb1fd","impliedFormat":1},{"version":"c183b931b68ad184bc8e8372bf663f3d33304772fb482f29fb91b3c391031f3e","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"48cc3ec153b50985fb95153258a710782b25975b10dd4ac8a4f3920632d10790","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"e1528ca65ac90f6fa0e4a247eb656b4263c470bb22d9033e466463e13395e599","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"866078923a56d026e39243b4392e282c1c63159723996fa89243140e1388a98d","impliedFormat":1},{"version":"830171b27c5fdf9bcbe4cf7d428fcf3ae2c67780fb7fbdccdf70d1623d938bc4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d97fb21da858fb18b8ae72c314e9743fd52f73ebe2764e12af1db32fc03f853f","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ea15fd99b2e34cb25fe8346c955000bb70c8b423ae4377a972ef46bfb37f595","impliedFormat":1},{"version":"7cf69dd5502c41644c9e5106210b5da7144800670cbe861f66726fa209e231c4","impliedFormat":1},{"version":"72c1f5e0a28e473026074817561d1bc9647909cf253c8d56c41d1df8d95b85f7","impliedFormat":1},{"version":"f9b4137a0d285bd77dba2e6e895530112264310ae47e07bf311feae428fb8b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b21e13ed07d0df176ae31d6b7f01f7b17d66dbeb489c0d31d00de2ca14883da","impliedFormat":1},{"version":"51aecd2df90a3cffea1eb4696b33b2d78594ea2aa2138e6b9471ec4841c6c2ee","impliedFormat":1},{"version":"2c91d8366ff2506296191c26fd97cc1990bab3ee22576275d28b654a21261a44","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"f929f0b6b3421a2d34344b0f421f45aeb2c84ad365ebf29d04312023b3accc58","impliedFormat":1},{"version":"db9ada976f9e52e13f7ae8b9a320f4b67b87685938c5879187d8864b2fbe97f3","impliedFormat":1},{"version":"9f39e70a354d0fba29ac3cdf6eca00b7f9e96f64b2b2780c432e8ea27f133743","impliedFormat":1},{"version":"0dace96cc0f7bc6d0ee2044921bdf19fe42d16284dbcc8ae200800d1c9579335","impliedFormat":1},{"version":"a2e2bbde231b65c53c764c12313897ffdfb6c49183dd31823ee2405f2f7b5378","impliedFormat":1},{"version":"ad1cc0ed328f3f708771272021be61ab146b32ecf2b78f3224959ff1e2cd2a5c","impliedFormat":1},{"version":"c64e1888baaa3253ca4405b455e4bf44f76357868a1bd0a52998ade9a092ad78","affectsGlobalScope":true,"impliedFormat":1},{"version":"d8cf132379078d0974a59df26069689a2d33c7dc826b5be56231841cb2f32e58","impliedFormat":1},{"version":"fbf413fc617837453c878a9174a1f1b383616857a3f8366bc41cf30df4aea7d5","impliedFormat":1},{"version":"148c73ec11318850f571172ceae3e55ce479d850fe18ec8eae0abd99d9f6c319","impliedFormat":1},{"version":"230bdc111d7578276e4a3bb9d075d85c78c6b68f428c3a9935e2eaa10f4ae1f5","impliedFormat":1},{"version":"e8aabbee5e7b9101b03bb4222607d57f38859b8115a8050a4eb91b4ee43a3a73","impliedFormat":1},{"version":"bbf42f98a5819f4f06e18c8b669a994afe9a17fe520ae3454a195e6eabf7700d","impliedFormat":1},{"version":"c0bb1b65757c72bbf8ddf7eaa532223bacf58041ff16c883e76f45506596e925","impliedFormat":1},{"version":"c8b85f7aed29f8f52b813f800611406b0bfe5cf3224d20a4bdda7c7f73ce368e","affectsGlobalScope":true,"impliedFormat":1},{"version":"145dcf25fd4967c610c53d93d7bc4dce8fbb1b6dd7935362472d4ae49363c7ba","impliedFormat":1},{"version":"ff65b8a8bd380c6d129becc35de02f7c29ad7ce03300331ca91311fb4044d1a9","impliedFormat":1},{"version":"76957a6d92b94b9e2852cf527fea32ad2dc0ef50f67fe2b14bd027c9ceef2d86","impliedFormat":1},{"version":"9043daec15206650fa119bad6b8d70136021ea7d52673a71f79a87a42ee38d44","affectsGlobalScope":true,"impliedFormat":1},{"version":"8ba0db41ed773e152647a78e9053e36a747891db41d6a51c7030a0d0f01babb2","affectsGlobalScope":true,"impliedFormat":1},{"version":"a58a15da4c5ba3df60c910a043281256fa52d36a0fcdef9b9100c646282e88dd","impliedFormat":1},{"version":"b36beffbf8acdc3ebc58c8bb4b75574b31a2169869c70fc03f82895b93950a12","impliedFormat":1},{"version":"de263f0089aefbfd73c89562fb7254a7468b1f33b61839aafc3f035d60766cb4","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"8c81fd4a110490c43d7c578e8c6f69b3af01717189196899a6a44f93daa57a3a","impliedFormat":1},{"version":"5fb39858b2459864b139950a09adae4f38dad87c25bf572ce414f10e4bd7baab","impliedFormat":1},{"version":"28e3631087ecef78fef8efdb21d4d2509f776ef6f0d660ff605b5ee6a22ebb8c","impliedFormat":1},{"version":"b33b74b97952d9bf4fbd2951dcfbb5136656ddb310ce1c84518aaa77dbca9992","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"6b306cd4282bbb54d4a6bb23cfb7a271160983dfc38c67b5a132504cfcc34896","affectsGlobalScope":true,"impliedFormat":1},{"version":"c119835edf36415081dfd9ed15fc0cd37aaa28d232be029ad073f15f3d88c323","impliedFormat":1},{"version":"450172a56b944c2d83f45cc11c9a388ea967cd301a21202aa0a23c34c7506a18","impliedFormat":1},{"version":"9705cd157ffbb91c5cab48bdd2de5a437a372e63f870f8a8472e72ff634d47c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ae86f30d5d10e4f75ce8dcb6e1bd3a12ecec3d071a21e8f462c5c85c678efb41","impliedFormat":1},{"version":"72f8936aebf0c4a1adab767b97d34ba7d3a308afcf76de4417b9c16fb92ed548","impliedFormat":1},{"version":"e03460fe72b259f6d25ad029f085e4bedc3f90477da4401d8fbc1efa9793230e","impliedFormat":1},{"version":"4286a3a6619514fca656089aee160bb6f2e77f4dd53dc5a96b26a0b4fc778055","impliedFormat":1},{"version":"04aa8fb012abeecf5666b013c59ba01dca5aa0c28173cb5385bc88d4adeb8d64","affectsGlobalScope":true,"impliedFormat":1},{"version":"3585d6891e9ea18e07d0755a6d90d71331558ba5dc5561933553209f886db106","affectsGlobalScope":true,"impliedFormat":1},{"version":"86be71cbb0593468644932a6eb96d527cfa600cecfc0b698af5f52e51804451d","impliedFormat":1},{"version":"84dd6b0fd2505135692935599d6606f50a421389e8d4535194bcded307ee5cf2","impliedFormat":1},{"version":"0d5b085f36e6dc55bc6332ecb9c733be3a534958c238fb8d8d18d4a2b6f2a15a","impliedFormat":1},{"version":"db19ea066fdc5f97df3f769e582ae3000380ab7942e266654bdb1a4650d19eaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"2a034894bf28c220a331c7a0229d33564803abe2ac1b9a5feee91b6b9b6e88ea","impliedFormat":1},{"version":"d7e9ab1b0996639047c61c1e62f85c620e4382206b3abb430d9a21fb7bc23c77","impliedFormat":1},{"version":"24259d3dae14de55d22f8b3d3e96954e5175a925ab6a830dc05a1993d4794eda","impliedFormat":1},{"version":"05069916ab9175271d15f9315a41ab28401561fe0e5f85f295c43538a38bd62e","impliedFormat":1},{"version":"be1cc4d94ea60cbe567bc29ed479d42587bf1e6cba490f123d329976b0fe4ee5","impliedFormat":1},{"version":"42bc0e1a903408137c3df2b06dfd7e402cdab5bbfa5fcfb871b22ebfdb30bd0b","impliedFormat":1},{"version":"9894dafe342b976d251aac58e616ac6df8db91fb9d98934ff9dd103e9e82578f","impliedFormat":1},{"version":"413df52d4ea14472c2fa5bee62f7a40abd1eb49be0b9722ee01ee4e52e63beb2","impliedFormat":1},{"version":"db6d2d9daad8a6d83f281af12ce4355a20b9a3e71b82b9f57cddcca0a8964a96","impliedFormat":1},{"version":"446a50749b24d14deac6f8843e057a6355dd6437d1fac4f9e5ce4a5071f34bff","impliedFormat":1},{"version":"182e9fcbe08ac7c012e0a6e2b5798b4352470be29a64fdc114d23c2bab7d5106","impliedFormat":1},{"version":"14109b34dc927e3b872c0f954a8d2536c245e38062bc47e8f97ba27f922fc9bd","impliedFormat":1},{"version":"1214c8bb321e2376f9dfc174a97b06c6e7bef05a61a1c50f094617d99fc4c9dd","impliedFormat":1},{"version":"96ffa70b486207241c0fcedb5d9553684f7fa6746bc2b04c519e7ebf41a51205","impliedFormat":1},{"version":"5c24c66b3ba29ce9f2a79c719967e6e944131352a117a0bc43fa5b346b5562b3","impliedFormat":1},{"version":"a86f82d646a739041d6702101afa82dcb935c416dd93cbca7fd754fd0282ce1f","impliedFormat":1},{"version":"ad0d1d75d129b1c80f911be438d6b61bfa8703930a8ff2be2f0e1f8a91841c64","impliedFormat":1},{"version":"ce75b1aebb33d510ff28af960a9221410a3eaf7f18fc5f21f9404075fba77256","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"496bbf339f3838c41f164238543e9fe5f1f10659cb30b68903851618464b98ba","impliedFormat":1},{"version":"099f915371bf0f8fd812d48a088531397f9edaf2ebfefe422cbe774c274a1621","impliedFormat":1},{"version":"78a2869ad0cbf3f9045dda08c0d4562b7e1b2bfe07b19e0db072f5c3c56e9584","impliedFormat":1},{"version":"f0a1bd6ad77f98dd7ed0d3207fcbcb5dd109ba144799cf41b8ea4dacb4e3e009","impliedFormat":1},{"version":"197efda3bbcdd3f1bc5379cd0534f1ab740f3be957efb17b320da8e7dcb2743b","impliedFormat":1},{"version":"0c05e9842ec4f8b7bfebfd3ca61604bb8c914ba8da9b5337c4f25da427a005f2","impliedFormat":1},{"version":"6b078c751b5d5e6b6c413be9d5b4dfc19429415f68b332fe2a39e9f1542b7d8b","impliedFormat":1},{"version":"faed7a5153215dbd6ebe76dfdcc0af0cfe760f7362bed43284be544308b114cf","impliedFormat":1},{"version":"2821b2fa5851e13a32c60ee34bcc77e9dcc49a1c11e9b90b4bce66e9bc33cd77","impliedFormat":1},{"version":"202490d447095d89dd86dd60afb8a4e444181c38ad3af29564f3fe1fd5850b8e","impliedFormat":1},{"version":"d3a0843edb8ee75a797f6e646c34b2a865f44719048244666dd1f191d2204bc7","impliedFormat":1},{"version":"9346288f949b2b88527b173a7c8bf85aca37be087d0ca4e56df8f84421bcd721","impliedFormat":1},{"version":"ed27e451ce2425f7cc032d16d15621600d4599d308c2f0da8fd9e4548a90fbe4","impliedFormat":1},{"version":"a7907a713895fe2b67001b10870649ecc286f102d21fb1b07a09eb7f86684f81","impliedFormat":1},{"version":"c327002046cc4dd450cff982d36e64e020838dae04eafb06d8d6f2dc1333237a","impliedFormat":1},{"version":"808b5d89d2ee266eb5552a053c1dd9633e6fb313f6c24c1788034a755c790552","impliedFormat":1},{"version":"df3c987836720acdc5d116ca3cafed0b7999d1d6d1001bcb7f4e95d08be143e8","impliedFormat":1},{"version":"b06d68a692d3c1dd12bed02eaa3b4c06cfc2a3e9560b0cecd2014bba480c4e8e","impliedFormat":1},{"version":"9e2739b32f741859263fdba0244c194ca8e96da49b430377930b8f721d77c000","impliedFormat":1},{"version":"fb1d8e814a3eeb5101ca13515e0548e112bd1ff3fb358ece535b93e94adf5a3a","impliedFormat":1},{"version":"ffa495b17a5ef1d0399586b590bd281056cee6ce3583e34f39926f8dcc6ecdb5","impliedFormat":1},{"version":"f8d5ff8eafd37499f2b6a98659dd9b45a321de186b8db6b6142faed0fea3de77","impliedFormat":1},{"version":"c86fe861cf1b4c46a0fb7d74dffe596cf679a2e5e8b1456881313170f092e3fa","impliedFormat":1},{"version":"6975047b49da82197056852c16534c41e7faff71d5048ec5c41cc943ebcf8ca4","impliedFormat":1},{"version":"540cc83ab772a2c6bc509fe1354f314825b5dba3669efdfbe4693ecd3048e34f","impliedFormat":1},{"version":"121b0696021ab885c570bbeb331be8ad82c6efe2f3b93a6e63874901bebc13e3","impliedFormat":1},{"version":"4e01846df98d478a2a626ec3641524964b38acaac13945c2db198bf9f3df22ee","impliedFormat":1},{"version":"678d6d4c43e5728bf66e92fc2269da9fa709cb60510fed988a27161473c3853f","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"aa14cee20aa0db79f8df101fc027d929aec10feb5b8a8da3b9af3895d05b7ba2","impliedFormat":1},{"version":"f9358de24a0b2592b856b7497181294314885a54b5339ac1878937311e320597","impliedFormat":1},{"version":"aeb554d876c6b8c818da2e118d8b11e1e559adbe6bf606cc9a611c1b6c09f670","impliedFormat":1},{"version":"acf5a2ac47b59ca07afa9abbd2b31d001bf7448b041927befae2ea5b1951d9f9","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"d71291eff1e19d8762a908ba947e891af44749f3a2cbc5bd2ec4b72f72ea795f","impliedFormat":1},{"version":"c0480e03db4b816dff2682b347c95f2177699525c54e7e6f6aa8ded890b76be7","impliedFormat":1},{"version":"892258709c8fc69cc1711d3554503f35101381df7e33eec344356bdc443ba07b","impliedFormat":1},{"version":"b620391fe8060cf9bedc176a4d01366e6574d7a71e0ac0ab344a4e76576fcbb8","impliedFormat":1},{"version":"3e7efde639c6a6c3edb9847b3f61e308bf7a69685b92f665048c45132f51c218","impliedFormat":1},{"version":"df45ca1176e6ac211eae7ddf51336dc075c5314bc5c253651bae639defd5eec5","impliedFormat":1},{"version":"106c6025f1d99fd468fd8bf6e5bda724e11e5905a4076c5d29790b6c3745e50c","impliedFormat":1},{"version":"ee8df1cb8d0faaca4013a1b442e99130769ce06f438d18d510fed95890067563","impliedFormat":1},{"version":"bfb7f8475428637bee12bdd31bd9968c1c8a1cc2c3e426c959e2f3a307f8936f","impliedFormat":1},{"version":"6f491d0108927478d3247bbbc489c78c2da7ef552fd5277f1ab6819986fdf0b1","impliedFormat":1},{"version":"0d8f2b8781c721170b87a6b662b3cb038fd1a721165ecca390352c818d425872","impliedFormat":1},{"version":"15a234e5031b19c48a69ccc1607522d6e4b50f57d308ecb7fe863d44cd9f9eb3","impliedFormat":1},{"version":"380647d8f3b7f852cca6d154a376dbf8ac620a2f12b936594504a8a852e71d2f","impliedFormat":1},{"version":"148679c6d0f449210a96e7d2e562d589e56fcde87f843a92808b3ff103f1a774","impliedFormat":1},{"version":"6459054aabb306821a043e02b89d54da508e3a6966601a41e71c166e4ea1474f","impliedFormat":1},{"version":"2f9c89cbb29d362290531b48880a4024f258c6033aaeb7e59fbc62db26819650","impliedFormat":1},{"version":"bb37588926aba35c9283fe8d46ebf4e79ffe976343105f5c6d45f282793352b2","impliedFormat":1},{"version":"05c97cddbaf99978f83d96de2d8af86aded9332592f08ce4a284d72d0952c391","impliedFormat":1},{"version":"72179f9dd22a86deaad4cc3490eb0fe69ee084d503b686985965654013f1391b","impliedFormat":1},{"version":"2e6114a7dd6feeef85b2c80120fdbfb59a5529c0dcc5bfa8447b6996c97a69f5","impliedFormat":1},{"version":"7b6ff760c8a240b40dab6e4419b989f06a5b782f4710d2967e67c695ef3e93c4","impliedFormat":1},{"version":"c8f004e6036aa1c764ad4ec543cf89a5c1893a9535c80ef3f2b653e370de45e6","impliedFormat":1},{"version":"dd80b1e600d00f5c6a6ba23f455b84a7db121219e68f89f10552c54ba46e4dc9","impliedFormat":1},{"version":"b064c36f35de7387d71c599bfcf28875849a1dbc733e82bd26cae3d1cd060521","impliedFormat":1},{"version":"05c7280d72f3ed26f346cbe7cbbbb002fb7f15739197cbbee6ab3fd1a6cb9347","impliedFormat":1},{"version":"8de9fe97fa9e00ec00666fa77ab6e91b35d25af8ca75dabcb01e14ad3299b150","impliedFormat":1},{"version":"f63ab283a1c8f5c79fabe7ca4ef85f9633339c4f0e822fce6a767f9d59282af2","impliedFormat":1},{"version":"dba114fb6a32b355a9cfc26ca2276834d72fe0e94cd2c3494005547025015369","impliedFormat":1},{"version":"7ab12b2f1249187223d11a589f5789c75177a0b597b9eb7f8e2e42d045393347","impliedFormat":1},{"version":"11c90ce55a33b4b3542d4eddaba4cf5305121ec0e97f9ab900d2c29ee0d1ab19","impliedFormat":1},{"version":"3996be00e03a6ad70bf746a62015cd8f530fd9c99166d7551f0b1434f6a5a4bb","impliedFormat":1},{"version":"f974e4a06953682a2c15d5bd5114c0284d5abf8bc0fe4da25cb9159427b70072","impliedFormat":1},{"version":"50256e9c31318487f3752b7ac12ff365c8949953e04568009c8705db802776fb","impliedFormat":1},{"version":"7d73b24e7bf31dfb8a931ca6c4245f6bb0814dfae17e4b60c9e194a631fe5f7b","impliedFormat":1},{"version":"d130c5f73768de51402351d5dc7d1b36eaec980ca697846e53156e4ea9911476","impliedFormat":1},{"version":"413586add0cfe7369b64979d4ec2ed56c3f771c0667fbde1bf1f10063ede0b08","impliedFormat":1},{"version":"06472528e998d152375ad3bd8ebcb69ff4694fd8d2effaf60a9d9f25a37a097a","impliedFormat":1},{"version":"50b5bc34ce6b12eccb76214b51aadfa56572aa6cc79c2b9455cdbb3d6c76af1d","impliedFormat":1},{"version":"b7e16ef7f646a50991119b205794ebfd3a4d8f8e0f314981ebbe991639023d0e","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"a401617604fa1f6ce437b81689563dfdc377069e4c58465dbd8d16069aede0a5","impliedFormat":1},{"version":"6e9082e91370de5040e415cd9f24e595b490382e8c7402c4e938a8ce4bccc99f","impliedFormat":1},{"version":"97307708b8350a98d82c8201f755d8bcb62ef00d7861e5b57ccbd4aa54aedb05","impliedFormat":1},{"version":"dd30e671d9d907727dd28fbc06a2811da6e092dba46967b0643eff22ca74b877","impliedFormat":1},{"version":"d682336018141807fb602709e2d95a192828fcb8d5ba06dda3833a8ea98f69e3","impliedFormat":1},{"version":"6124e973eab8c52cabf3c07575204efc1784aca6b0a30c79eb85fe240a857efa","impliedFormat":1},{"version":"0d891735a21edc75df51f3eb995e18149e119d1ce22fd40db2b260c5960b914e","impliedFormat":1},{"version":"3b414b99a73171e1c4b7b7714e26b87d6c5cb03d200352da5342ab4088a54c85","impliedFormat":1},{"version":"4fbd3116e00ed3a6410499924b6403cc9367fdca303e34838129b328058ede40","impliedFormat":1},{"version":"b01bd582a6e41457bc56e6f0f9de4cb17f33f5f3843a7cf8210ac9c18472fb0f","impliedFormat":1},{"version":"0a437ae178f999b46b6153d79095b60c42c996bc0458c04955f1c996dc68b971","impliedFormat":1},{"version":"74b2a5e5197bd0f2e0077a1ea7c07455bbea67b87b0869d9786d55104006784f","impliedFormat":1},{"version":"4a7baeb6325920044f66c0f8e5e6f1f52e06e6d87588d837bdf44feb6f35c664","impliedFormat":1},{"version":"12d218a49dbe5655b911e6cc3c13b2c655e4c783471c3b0432137769c79e1b3c","impliedFormat":1},{"version":"7274fbffbd7c9589d8d0ffba68157237afd5cecff1e99881ea3399127e60572f","impliedFormat":1},{"version":"6b0fc04121360f752d196ba35b6567192f422d04a97b2840d7d85f8b79921c92","impliedFormat":1},{"version":"1a82deef4c1d39f6882f28d275cad4c01f907b9b39be9cbc472fcf2cf051e05b","impliedFormat":1},{"version":"c5426dbfc1cf90532f66965a7aa8c1136a78d4d0f96d8180ecbfc11d7722f1a5","impliedFormat":1},{"version":"65a15fc47900787c0bd18b603afb98d33ede930bed1798fc984d5ebb78b26cf9","impliedFormat":1},{"version":"9d202701f6e0744adb6314d03d2eb8fc994798fc83d91b691b75b07626a69801","impliedFormat":1},{"version":"de9d2df7663e64e3a91bf495f315a7577e23ba088f2949d5ce9ec96f44fba37d","impliedFormat":1},{"version":"c7af78a2ea7cb1cd009cfb5bdb48cd0b03dad3b54f6da7aab615c2e9e9d570c5","impliedFormat":1},{"version":"1ee45496b5f8bdee6f7abc233355898e5bf9bd51255db65f5ff7ede617ca0027","impliedFormat":1},{"version":"42189cd810c0bf1247da0742d5744bb7c1486de6fd62269d5c25833b7ec38732","affectsGlobalScope":true,"impliedFormat":1},{"version":"3fbdd025f9d4d820414417eeb4107ffa0078d454a033b506e22d3a23bc3d9c41","affectsGlobalScope":true,"impliedFormat":1},{"version":"a8f8e6ab2fa07b45251f403548b78eaf2022f3c2254df3dc186cb2671fe4996d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa6c12a7c0f6b84d512f200690bfc74819e99efae69e4c95c4cd30f6884c526e","impliedFormat":1},{"version":"f1c32f9ce9c497da4dc215c3bc84b722ea02497d35f9134db3bb40a8d918b92b","impliedFormat":1},{"version":"b73c319af2cc3ef8f6421308a250f328836531ea3761823b4cabbd133047aefa","affectsGlobalScope":true,"impliedFormat":1},{"version":"e433b0337b8106909e7953015e8fa3f2d30797cea27141d1c5b135365bb975a6","impliedFormat":1},{"version":"40436e992021afc07b61da5f488e9671729a3c5b5e6665b99b1fb43a39081ee3","impliedFormat":1},{"version":"ddff7fc6edbdc5163a09e22bf8df7bef75f75369ebd7ecea95ba55c4386e2441","impliedFormat":1},{"version":"3a788c7fb7b1b1153d69a4d1d9e1d0dfbcf1127e703bdb02b6d12698e683d1fb","impliedFormat":1},{"version":"2e4f37ffe8862b14d8e24ae8763daaa8340c0df0b859d9a9733def0eee7562d9","impliedFormat":1},{"version":"d38530db0601215d6d767f280e3a3c54b2a83b709e8d9001acb6f61c67e965fc","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"4805f6161c2c8cefb8d3b8bd96a080c0fe8dbc9315f6ad2e53238f9a79e528a6","impliedFormat":1},{"version":"b83cb14474fa60c5f3ec660146b97d122f0735627f80d82dd03e8caa39b4388c","impliedFormat":1},{"version":"9c82171d836c47486074e4ca8e059735bf97b205e70b196535b5efd40cbe1bc5","impliedFormat":1},{"version":"f374cb24e93e7798c4d9e83ff872fa52d2cdb36306392b840a6ddf46cb925cb6","impliedFormat":1},{"version":"42b81043b00ff27c6bd955aea0f6e741545f2265978bf364b614702b72a027ab","impliedFormat":1},{"version":"162e071992b34bc36ca257d629547f93cb43728d6fe073ad18a237e4f7c52d7d","impliedFormat":1},{"version":"b73cbf0a72c8800cf8f96a9acfe94f3ad32ca71342a8908b8ae484d61113f647","impliedFormat":1},{"version":"bae6dd176832f6423966647382c0d7ba9e63f8c167522f09a982f086cd4e8b23","impliedFormat":1},{"version":"20865ac316b8893c1a0cc383ccfc1801443fbcc2a7255be166cf90d03fac88c9","impliedFormat":1},{"version":"c9958eb32126a3843deedda8c22fb97024aa5d6dd588b90af2d7f2bfac540f23","impliedFormat":1},{"version":"461d0ad8ae5f2ff981778af912ba71b37a8426a33301daa00f21c6ccb27f8156","impliedFormat":1},{"version":"e927c2c13c4eaf0a7f17e6022eee8519eb29ef42c4c13a31e81a611ab8c95577","impliedFormat":1},{"version":"fcafff163ca5e66d3b87126e756e1b6dfa8c526aa9cd2a2b0a9da837d81bbd72","impliedFormat":1},{"version":"70246ad95ad8a22bdfe806cb5d383a26c0c6e58e7207ab9c431f1cb175aca657","impliedFormat":1},{"version":"f00f3aa5d64ff46e600648b55a79dcd1333458f7a10da2ed594d9f0a44b76d0b","impliedFormat":1},{"version":"772d8d5eb158b6c92412c03228bd9902ccb1457d7a705b8129814a5d1a6308fc","impliedFormat":1},{"version":"45490817629431853543adcb91c0673c25af52a456479588b6486daba34f68bb","impliedFormat":1},{"version":"802e797bcab5663b2c9f63f51bdf67eff7c41bc64c0fd65e6da3e7941359e2f7","impliedFormat":1},{"version":"8b4327413e5af38cd8cb97c59f48c3c866015d5d642f28518e3a891c469f240e","impliedFormat":1},{"version":"a85397e1b7fc6ee7ea6fe7e040a94331c961f207687827e33ee0c5591e90874e","impliedFormat":1},{"version":"4b20fcf10a5413680e39f5666464859fc56b1003e7dfe2405ced82371ebd49b6","impliedFormat":1},{"version":"c06ef3b2569b1c1ad99fcd7fe5fba8d466e2619da5375dfa940a94e0feea899b","impliedFormat":1},{"version":"f7d628893c9fa52ba3ab01bcb5e79191636c4331ee5667ecc6373cbccff8ae12","impliedFormat":1},{"version":"5b2323ca2d1bd97e1f32f09452908e015b012e0e4f958f649cbe0c8989a3fb4f","impliedFormat":1},{"version":"8c50ee1fcb97de2860d9ebd76561614ab6d365ac8390ef4a02bb4e76929705d1","impliedFormat":1},{"version":"cff125b5bbb8b819d7835c6b78809416d08da8b00e66611bfe368e0964be7b83","impliedFormat":1},{"version":"d663134457d8d669ae0df34eabd57028bddc04fc444c4bc04bc5215afc91e1f4","impliedFormat":1},{"version":"985153f0deb9b4391110331a2f0c114019dbea90cba5ca68a4107700796e0d75","impliedFormat":1},{"version":"30fe85f1312ab83e45dab3fc3f63b566e0486b64abb6986805a4613560dc7a78","impliedFormat":1},{"version":"43e96a3d5d1411ab40ba2f61d6a3192e58177bcf3b133a80ad2a16591611726d","impliedFormat":1},{"version":"58659b06d33fa430bee1105b75cf876c0a35b2567207487c8578aec51ca2d977","impliedFormat":1},{"version":"d8cdd9477b9c5d1a8fbf2fa58e2eb6723969e7201b3549f998e0d2661dfec9d8","impliedFormat":1},{"version":"cfa846a7b7847a1d973605fbb8c91f47f3a0f0643c18ac05c47077ebc72e71c7","impliedFormat":1},{"version":"20e1c8beced348a9bf7864dd2b3ca7efa9ea6675dde8ecae6109b1a3f7248cd2","impliedFormat":1},{"version":"6c800b281b9e89e69165fd11536195488de3ff53004e55905e6c0059a2d8591e","impliedFormat":1},{"version":"7d4254b4c6c67a29d5e7f65e67d72540480ac2cfb041ca484847f5ae70480b62","impliedFormat":1},{"version":"19c3d6db2020cee6f9d8d79e13c15e546e05b6db2020a3ee63789ec74a9990b3","impliedFormat":1},{"version":"41eeb453ccb75c5b2c3abef97adbbd741bd7e9112a2510e12f03f646dc9ad13d","impliedFormat":1},{"version":"4c9894b4900bc407719c258656b6c34a7888833f0424403b803023c4ada4763f","impliedFormat":1},{"version":"301cf1d98bce8b1666184888c7aaacd6c9dfed9185510f4317ed623596e38d2c","impliedFormat":1},{"version":"6c66d5cf284a56109703f941c92b9a22f2472c14645f80a2dbb8e4ef2128d67c","impliedFormat":1},{"version":"a3e7d932dc9c09daa99141a8e4800fc6c58c625af0d4bbb017773dc36da75426","impliedFormat":1},{"version":"3c06285ec67f1dd3d6829584b6088204d43830f498671fbe69d099049a9b6f91","impliedFormat":1},{"version":"a57b1802794433adec9ff3fed12aa79d671faed86c49b09e02e1ac41b4f1d33a","impliedFormat":1},{"version":"ad10d4f0517599cdeca7755b930f148804e3e0e5b5a3847adce0f1f71bbccd74","impliedFormat":1},{"version":"1042064ece5bb47d6aba91648fbe0635c17c600ebdf567588b4ca715602f0a9d","impliedFormat":1},{"version":"c49469a5349b3cc1965710b5b0f98ed6c028686aa8450bcb3796728873eb923e","impliedFormat":1},{"version":"4a889f2c763edb4d55cb624257272ac10d04a1cad2ed2948b10ed4a7fda2a428","impliedFormat":1},{"version":"7bb79aa2fead87d9d56294ef71e056487e848d7b550c9a367523ee5416c44cfa","impliedFormat":1},{"version":"d88ea80a6447d7391f52352ec97e56b52ebec934a4a4af6e2464cfd8b39c3ba8","impliedFormat":1},{"version":"d3c8b73132efa48e9399d63e8946a57ed4a7176e2f26d2f144bb14c89fcdefc1","impliedFormat":1},{"version":"96171c03c2e7f314d66d38acd581f9667439845865b7f85da8df598ff9617476","impliedFormat":1},{"version":"27ff4196654e6373c9af16b6165120e2dd2169f9ad6abb5c935af5abd8c7938c","impliedFormat":1},{"version":"8c030e515014c10a2b98f9f48408e3ba18023dfd3f56e3312c6c2f3ae1f55a16","impliedFormat":1},{"version":"d193c8a86144b3a87b22bc1f5534b9c3e0f5a187873ec337c289a183973a58fe","impliedFormat":1},{"version":"d2aa1580a899bcec04c29b1c37f2a60f62e2f03acb731534d4e210307c982da8","impliedFormat":1},{"version":"47bdec88bb6708e8dfde9e97343fd3ea4bc8e5c4674ccdd7b73611caea205bb8","impliedFormat":1},{"version":"f56bdc6884648806d34bc66d31cdb787c4718d04105ce2cd88535db214631f82","impliedFormat":1},{"version":"68ab1530f0ddf7475425917b0e04068afdc1aee2db033bed9aa9b60a914c512e","impliedFormat":1},{"version":"01479d9d5a5dda16d529b91811375187f61a06e74be294a35ecce77e0b9e8d6c","impliedFormat":1},{"version":"49f95e989b4632c6c2a578cc0078ee19a5831832d79cc59abecf5160ea71abad","impliedFormat":1},{"version":"9666533332f26e8995e4d6fe472bdeec9f15d405693723e6497bf94120c566c8","impliedFormat":1},{"version":"ce0df82a9ae6f914ba08409d4d883983cc08e6d59eb2df02d8e4d68309e7848b","impliedFormat":1},{"version":"796273b2edc72e78a04e86d7c58ae94d370ab93a0ddf40b1aa85a37a1c29ecd7","impliedFormat":1},{"version":"5df15a69187d737d6d8d066e189ae4f97e41f4d53712a46b2710ff9f8563ec9f","impliedFormat":1},{"version":"1a4dc28334a926d90ba6a2d811ba0ff6c22775fcc13679521f034c124269fd40","impliedFormat":1},{"version":"f05315ff85714f0b87cc0b54bcd3dde2716e5a6b99aedcc19cad02bf2403e08c","impliedFormat":1},{"version":"8a8c64dafaba11c806efa56f5c69f611276471bef80a1db1f71316ec4168acef","impliedFormat":1},{"version":"43ba4f2fa8c698f5c304d21a3ef596741e8e85a810b7c1f9b692653791d8d97a","impliedFormat":1},{"version":"5fad3b31fc17a5bc58095118a8b160f5260964787c52e7eb51e3d4fcf5d4a6f0","impliedFormat":1},{"version":"72105519d0390262cf0abe84cf41c926ade0ff475d35eb21307b2f94de985778","impliedFormat":1},{"version":"d0a4cac61fa080f2be5ebb68b82726be835689b35994ba0e22e3ed4d2bc45e3b","impliedFormat":1},{"version":"c857e0aae3f5f444abd791ec81206020fbcc1223e187316677e026d1c1d6fe08","impliedFormat":1},{"version":"ccf6dd45b708fb74ba9ed0f2478d4eb9195c9dfef0ff83a6092fa3cf2ff53b4f","impliedFormat":1},{"version":"2d7db1d73456e8c5075387d4240c29a2a900847f9c1bff106a2e490da8fbd457","impliedFormat":1},{"version":"2b15c805f48e4e970f8ec0b1915f22d13ca6212375e8987663e2ef5f0205e832","impliedFormat":1},{"version":"205a31b31beb7be73b8df18fcc43109cbc31f398950190a0967afc7a12cb478c","impliedFormat":1},{"version":"8fca3039857709484e5893c05c1f9126ab7451fa6c29e19bb8c2411a2e937345","impliedFormat":1},{"version":"35069c2c417bd7443ae7c7cafd1de02f665bf015479fec998985ffbbf500628c","impliedFormat":1},{"version":"dba6c7006e14a98ec82999c6f89fbbbfd1c642f41db148535f3b77b8018829b8","impliedFormat":1},{"version":"7f897b285f22a57a5c4dc14a27da2747c01084a542b4d90d33897216dceeea2e","impliedFormat":1},{"version":"7e0b7f91c5ab6e33f511efc640d36e6f933510b11be24f98836a20a2dc914c2d","impliedFormat":1},{"version":"045b752f44bf9bbdcaffd882424ab0e15cb8d11fa94e1448942e338c8ef19fba","impliedFormat":1},{"version":"2894c56cad581928bb37607810af011764a2f511f575d28c9f4af0f2ef02d1ab","impliedFormat":1},{"version":"0a72186f94215d020cb386f7dca81d7495ab6c17066eb07d0f44a5bf33c1b21a","impliedFormat":1},{"version":"05c20b01929a2386831b27903b2b1a1c624205b24123bab8ec3931ba00115b34","impliedFormat":1},{"version":"0aedb02516baf3e66b2c1db9fef50666d6ed257edac0f866ea32f1aa05aa474f","impliedFormat":1},{"version":"ca0f4d9068d652bad47e326cf6ba424ac71ab866e44b24ddb6c2bd82d129586a","affectsGlobalScope":true,"impliedFormat":1},{"version":"04d36005fcbeac741ac50c421181f4e0316d57d148d37cc321a8ea285472462b","impliedFormat":1},{"version":"56ccb49443bfb72e5952f7012f0de1a8679f9f75fc93a5c1ac0bafb28725fc5f","impliedFormat":1},{"version":"20fa37b636fdcc1746ea0738f733d0aed17890d1cd7cb1b2f37010222c23f13e","impliedFormat":1},{"version":"d90b9f1520366d713a73bd30c5a9eb0040d0fb6076aff370796bc776fd705943","impliedFormat":1},{"version":"88e9caa9c5d2ba629240b5913842e7c57c5c0315383b8dc9d436ef2b60f1c391","impliedFormat":1},{"version":"19df3488557c2fc9b4d8f0bac0fd20fb59aa19dec67c81f93813951a81a867f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"a15cf91ab29d3667801562a95730c5f0d96e1d87dffa00a8a91da0002e89fd2d","affectsGlobalScope":true,"impliedFormat":1},{"version":"bef86adb77316505c6b471da1d9b8c9e428867c2566270e8894d4d773a1c4dc2","impliedFormat":1},{"version":"1b239954e46191b95913d20771cf4283f63c3ebac79d7e30736a8d40b094fdaf","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"2652448ac55a2010a1f71dd141f828b682298d39728f9871e1cdf8696ef443fd","impliedFormat":1},{"version":"02c4fc9e6bb27545fa021f6056e88ff5fdf10d9d9f1467f1d10536c6e749ac50","impliedFormat":1},{"version":"120599fd965257b1f4d0ff794bc696162832d9d8467224f4665f713a3119078b","impliedFormat":1},{"version":"5433f33b0a20300cca35d2f229a7fc20b0e8477c44be2affeb21cb464af60c76","impliedFormat":1},{"version":"db036c56f79186da50af66511d37d9fe77fa6793381927292d17f81f787bb195","impliedFormat":1},{"version":"bd4131091b773973ca5d2326c60b789ab1f5e02d8843b3587effe6e1ea7c9d86","impliedFormat":1},{"version":"c7f6485931085bf010fbaf46880a9b9ec1a285ad9dc8c695a9e936f5a48f34b4","impliedFormat":1},{"version":"14f6b927888a1112d662877a5966b05ac1bf7ed25d6c84386db4c23c95a5363b","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"b5189fd031ef3232ec66817df5a8e7b23b079fdf3cd29a0c100eff1e98b2ce8e","impliedFormat":1},{"version":"8d0cbb73a990e0107ac60bccea2b06b1eeaa425350be95f5e318fedba1a19a07","impliedFormat":1},{"version":"49c346823ba6d4b12278c12c977fb3a31c06b9ca719015978cb145eb86da1c61","impliedFormat":1},{"version":"bfac6e50eaa7e73bb66b7e052c38fdc8ccfc8dbde2777648642af33cf349f7f1","impliedFormat":1},{"version":"92f7c1a4da7fbfd67a2228d1687d5c2e1faa0ba865a94d3550a3941d7527a45d","impliedFormat":1},{"version":"f53b120213a9289d9a26f5af90c4c686dd71d91487a0aa5451a38366c70dc64b","impliedFormat":1},{"version":"83fe880c090afe485a5c02262c0b7cdd76a299a50c48d9bde02be8e908fb4ae6","impliedFormat":1},{"version":"946a709579b7868a92a70ad70906444f32803fa6e6ce3739b6594c17691837ce","impliedFormat":1},{"version":"57d67b72e06059adc5e9454de26bbfe567d412b962a501d263c75c2db430f40e","impliedFormat":1},{"version":"6511e4503cf74c469c60aafd6589e4d14d5eb0a25f9bf043dcbecdf65f261972","impliedFormat":1},{"version":"3174d4a29957cdcff56d28f64edba4678f1b6cc9faf7c1a9c59a88f6746fe91a","impliedFormat":1},{"version":"8c70ddc0c22d85e56011d49fddfaae3405eb53d47b59327b9dd589e82df672e7","impliedFormat":1},{"version":"a67b87d0281c97dfc1197ef28dfe397fc2c865ccd41f7e32b53f647184cc7307","impliedFormat":1},{"version":"771ffb773f1ddd562492a6b9aaca648192ac3f056f0e1d997678ff97dbb6bf9b","impliedFormat":1},{"version":"232f70c0cf2b432f3a6e56a8dc3417103eb162292a9fd376d51a3a9ea5fbbf6f","impliedFormat":1},{"version":"4162ae9d4c1b8a7ab7f9ef287d98e9000b57062db1eb1ae735c4814845c2cb5d","impliedFormat":1},{"version":"a0ba218ac1baa3da0d5d9c1ec1a7c2f8676c284e6f5b920d6d049b13fa267377","impliedFormat":1},{"version":"8a0e762ceb20c7e72504feef83d709468a70af4abccb304f32d6b9bac1129b2c","impliedFormat":1},{"version":"e8a68cafbba564f74b7b737b0c831f57c6223f87affc1b71c672b21e24e08329","impliedFormat":1},{"version":"9252d498a77517aab5d8d4b5eb9d71e4b225bbc7123df9713e08181de63180f6","impliedFormat":1},{"version":"9353792eaa8271bc0e6e70e37ce06455c58056f4cf1b868feaed76b17b8449d0","impliedFormat":1},{"version":"35e6379c3f7cb27b111ad4c1aa69538fd8e788ab737b8ff7596a1b40e96f4f90","impliedFormat":1},{"version":"1fffe726740f9787f15b532e1dc870af3cd964dbe29e191e76121aa3dd8693f2","impliedFormat":1},{"version":"371bf6127c1d427836de95197155132501cb6b69ef8709176ce6e0b85d059264","impliedFormat":1},{"version":"2bafd700e617d3693d568e972d02b92224b514781f542f70d497a8fdf92d52a2","affectsGlobalScope":true,"impliedFormat":1},{"version":"5542d8a7ea13168cb573be0d1ba0d29460d59430fb12bb7bf4674efd5604e14c","impliedFormat":1},{"version":"af48e58339188d5737b608d41411a9c054685413d8ae88b8c1d0d9bfabdf6e7e","impliedFormat":1},{"version":"616775f16134fa9d01fc677ad3f76e68c051a056c22ab552c64cc281a9686790","impliedFormat":1},{"version":"65c24a8baa2cca1de069a0ba9fba82a173690f52d7e2d0f1f7542d59d5eb4db0","impliedFormat":1},{"version":"f9fe6af238339a0e5f7563acee3178f51db37f32a2e7c09f85273098cee7ec49","impliedFormat":1},{"version":"22f3e5ec72c82809784e4b9ea68920c5096f71e3cffbbd4a6e2b4bc7db05a49a","impliedFormat":1},{"version":"77e71242e71ebf8528c5802993697878f0533db8f2299b4d36aa015bae08a79c","impliedFormat":1},{"version":"98a787be42bd92f8c2a37d7df5f13e5992da0d967fab794adbb7ee18370f9849","impliedFormat":1},{"version":"332248ee37cca52903572e66c11bef755ccc6e235835e63d3c3e60ddda3e9b93","impliedFormat":1},{"version":"94e8cc88ae2ef3d920bb3bdc369f48436db123aa2dc07f683309ad8c9968a1e1","impliedFormat":1},{"version":"4545c1a1ceca170d5d83452dd7c4994644c35cf676a671412601689d9a62da35","impliedFormat":1},{"version":"320f4091e33548b554d2214ce5fc31c96631b513dffa806e2e3a60766c8c49d9","impliedFormat":1},{"version":"a2d648d333cf67b9aeac5d81a1a379d563a8ffa91ddd61c6179f68de724260ff","impliedFormat":1},{"version":"d90d5f524de38889d1e1dbc2aeef00060d779f8688c02766ddb9ca195e4a713d","impliedFormat":1},{"version":"a3f41ed1b4f2fc3049394b945a68ae4fdefd49fa1739c32f149d32c0545d67f5","impliedFormat":1},{"version":"b0309e1eda99a9e76f87c18992d9c3689b0938266242835dd4611f2b69efe456","impliedFormat":1},{"version":"47699512e6d8bebf7be488182427189f999affe3addc1c87c882d36b7f2d0b0e","impliedFormat":1},{"version":"6ceb10ca57943be87ff9debe978f4ab73593c0c85ee802c051a93fc96aaf7a20","impliedFormat":1},{"version":"1de3ffe0cc28a9fe2ac761ece075826836b5a02f340b412510a59ba1d41a505a","impliedFormat":1},{"version":"e46d6cc08d243d8d0d83986f609d830991f00450fb234f5b2f861648c42dc0d8","impliedFormat":1},{"version":"1c0a98de1323051010ce5b958ad47bc1c007f7921973123c999300e2b7b0ecc0","impliedFormat":1},{"version":"ff863d17c6c659440f7c5c536e4db7762d8c2565547b2608f36b798a743606ca","impliedFormat":1},{"version":"5412ad0043cd60d1f1406fc12cb4fb987e9a734decbdd4db6f6acf71791e36fe","impliedFormat":1},{"version":"ad036a85efcd9e5b4f7dd5c1a7362c8478f9a3b6c3554654ca24a29aa850a9c5","impliedFormat":1},{"version":"fedebeae32c5cdd1a85b4e0504a01996e4a8adf3dfa72876920d3dd6e42978e7","impliedFormat":1},{"version":"b6c1f64158da02580f55e8a2728eda6805f79419aed46a930f43e68ad66a38fc","impliedFormat":1},{"version":"cdf21eee8007e339b1b9945abf4a7b44930b1d695cc528459e68a3adc39a622e","impliedFormat":1},{"version":"9f9bb6755a8ce32d656ffa4763a8144aa4f274d6b69b59d7c32811031467216e","impliedFormat":1},{"version":"bc9ee0192f056b3d5527bcd78dc3f9e527a9ba2bdc0a2c296fbc9027147df4b2","impliedFormat":1},{"version":"330896c1a2b9693edd617be24fbf9e5895d6e18c7955d6c08f028f272b37314d","impliedFormat":1},{"version":"1d9c0a9a6df4e8f29dc84c25c5aa0bb1da5456ebede7a03e03df08bb8b27bae6","impliedFormat":1},{"version":"84380af21da938a567c65ef95aefb5354f676368ee1a1cbb4cae81604a4c7d17","impliedFormat":1},{"version":"1af3e1f2a5d1332e136f8b0b95c0e6c0a02aaabd5092b36b64f3042a03debf28","impliedFormat":1},{"version":"30d8da250766efa99490fc02801047c2c6d72dd0da1bba6581c7e80d1d8842a4","impliedFormat":1},{"version":"03566202f5553bd2d9de22dfab0c61aa163cabb64f0223c08431fb3fc8f70280","impliedFormat":1},{"version":"4c0a1233155afb94bd4d7518c75c84f98567cd5f13fc215d258de196cdb40d91","impliedFormat":1},{"version":"f9ceb394e029da0392ebd49564002b01fb4517cef0d14b238f2a8e7362a833e1","impliedFormat":1},{"version":"1de80059b8078ea5749941c9f863aa970b4735bdbb003be4925c853a8b6b4450","impliedFormat":1},{"version":"1d079c37fa53e3c21ed3fa214a27507bda9991f2a41458705b19ed8c2b61173d","impliedFormat":1},{"version":"5bf5c7a44e779790d1eb54c234b668b15e34affa95e78eada73e5757f61ed76a","impliedFormat":1},{"version":"5835a6e0d7cd2738e56b671af0e561e7c1b4fb77751383672f4b009f4e161d70","impliedFormat":1},{"version":"5c634644d45a1b6bc7b05e71e05e52ec04f3d73d9ac85d5927f647a5f965181a","impliedFormat":1},{"version":"4b7f74b772140395e7af67c4841be1ab867c11b3b82a51b1aeb692822b76c872","impliedFormat":1},{"version":"27be6622e2922a1b412eb057faa854831b95db9db5035c3f6d4b677b902ab3b7","impliedFormat":1},{"version":"a68d4b3182e8d776cdede7ac9630c209a7bfbb59191f99a52479151816ef9f9e","impliedFormat":99},{"version":"39644b343e4e3d748344af8182111e3bbc594930fff0170256567e13bbdbebb0","impliedFormat":99},{"version":"ed7fd5160b47b0de3b1571c5c5578e8e7e3314e33ae0b8ea85a895774ee64749","impliedFormat":99},{"version":"63a7595a5015e65262557f883463f934904959da563b4f788306f699411e9bac","impliedFormat":1},{"version":"4ba137d6553965703b6b55fd2000b4e07ba365f8caeb0359162ad7247f9707a6","impliedFormat":1},{"version":"6de125ea94866c736c6d58d68eb15272cf7d1020a5b459fea1c660027eca9a90","affectsGlobalScope":true,"impliedFormat":1},{"version":"8fac4a15690b27612d8474fb2fc7cc00388df52d169791b78d1a3645d60b4c8b","affectsGlobalScope":true,"impliedFormat":1},{"version":"064ac1c2ac4b2867c2ceaa74bbdce0cb6a4c16e7c31a6497097159c18f74aa7c","impliedFormat":1},{"version":"3dc14e1ab45e497e5d5e4295271d54ff689aeae00b4277979fdd10fa563540ae","impliedFormat":1},{"version":"d3b315763d91265d6b0e7e7fa93cfdb8a80ce7cdd2d9f55ba0f37a22db00bdb8","impliedFormat":1},{"version":"b789bf89eb19c777ed1e956dbad0925ca795701552d22e68fd130a032008b9f9","impliedFormat":1},{"version":"d488cf1d9a3b556d37ec375874adea95d146955aaeeac39a0891fbaab0af3a20","affectsGlobalScope":true},"7ad303e40d4fddf44f156129e397511953a71481c5cfd86b1862649aaaf240cc",{"version":"cc2958d8abd86edcdf05542bb1b40ba659db5bc5a2560720cde08e8950e63bc1","impliedFormat":99},{"version":"e44e0ea195d68c0aea951809bda325322085008c0622fc4ee44db5359f37b747","impliedFormat":99},{"version":"fa2c48fd724dd8f0e11dfb04f20d727a2595890bfa95419c83b21ed575ed77d1","impliedFormat":99},{"version":"ffe2bdab10cc9bb3121784020df2d2449b9344c965a5d96857f9d7e6fc984322","impliedFormat":99},{"version":"20be44c04e883d5fe7840d630a8d0656e95b00c2d6eebab9ab253275e7170534","impliedFormat":99},{"version":"3b674288fbdc0ff0ed2b7fc2839014c2ff209c84999fd06b6339347d0f976a85","impliedFormat":99},{"version":"87561cc8a2d7444adf4eed4b3f15bef8c6098cceb0e7617fba1cc45d187ac8c8","impliedFormat":99},{"version":"fd40c454d56e1d14e60ce13f3bc60c7fdb9bc70c6ef9c7bfafec1f0eb5d8075b","impliedFormat":1},{"version":"155ced96d70533d95c481061e2691802fae7cfb96869d7c85ac8622f53b51cb7","impliedFormat":1},{"version":"3689b6f599705380d2ceaccb4e58eec5c9439a7a5635d6e37c1ba66ed7c34b35","impliedFormat":99},{"version":"6cf0d3cc668cdbb01358ef7c2e41bbcc14d8d8e4ca424a1b6d2838d9a1cae8ce","impliedFormat":99},{"version":"b7bd70307671536c735389e0a1748555c438c392dfceb6f2ac3aa0a50ca82530","impliedFormat":99},{"version":"661c403f4c5bbf259e03f4fdc3a9e3f51ad562684f702e1b842e6c5336de0752","impliedFormat":99},{"version":"415dd92247ca21db682f75ba7e6289ab2d093cd34c6f471c6c789afd047ad4f3","impliedFormat":99},{"version":"b52f7568bb9b00bcee6c4929938226541c09d86b849b8ba8db2fe2a8bba46f49","impliedFormat":99},{"version":"39d80ec3c018d7ffe7c99ddd3a7b6844b3376c15e52937a7687d2c2828830fd0","impliedFormat":99},{"version":"828f8b38dff4e5c47b0112cb437da379c720f0360d40d392457c9775f30c8ae8","impliedFormat":99},{"version":"d42e1872d53ebb213e7bbe15e5fecdcaa9a490d2f2a2b035ee9cf4a6d3f1e44e","impliedFormat":99},{"version":"2262d96c02073dcb17a31ae8c738651ebff75f102522eae686f5462658b687a8","impliedFormat":99},{"version":"21053659ad72fe51b9dfbde4fa14dbbac0912359fa37c9a5aa75f188782b2ee8","impliedFormat":99},{"version":"e297bdcb7db008d8d7d0481f2c935a9f7f0a338f41b7e5d1cec6a7744140a4ff","impliedFormat":99},{"version":"ef816ad6735a271c4c8035a1914c3a9beaaa90b3c174da312d26bce8736e56ec","impliedFormat":99},{"version":"7202026e24c5e5b7b6e5fe6b99455a91058ef82e74a5cdf6a3a4136b7ae9c080","impliedFormat":99},{"version":"69dbe5d61d2f298046513598f55bd1e719c50dfd6af2f9feea6fc84f8aa3c4bf","impliedFormat":99},{"version":"6a78643fbbf1b0bd954a53d4edfa217b6a5f92d357fa9cdf8d2ee430f96b9472","impliedFormat":99},{"version":"2ebe2f0255b6f301ba7bc0e10c3dda289c6cf1876f289f7a8f6444613d988e5e","impliedFormat":99},{"version":"012b5083a47ccbe050763f8df2be89daa50c1606e9a0bb31f64276d508c02d78","impliedFormat":99},{"version":"2f9f84bb868b62b03ce9fda9e9f3351d9b6bdd652df7722979a389295d8f03ba","impliedFormat":99},{"version":"ee95d0c324ce03b93f545aa9c064bfe2418c2cbd1e952ba4e65b54020fc23993","signature":"f5be40c8b3d80baa4b9356fe5aae8cef12d76e90f076242f4f3fd610b56e35cc"},{"version":"afc8493413c26482e768df8feb95a452db6f5c913168e308d4528a1546807b65","signature":"00a7b5a6e7b8eff6ce2543523c59f0d1e09c779c70203c5fb65e0d8ba136d4f3"},{"version":"18124c93ecabcd14d6e74de278d11ff31e7676fdb4be6dd96c50176155c41ae3","signature":"77541a6043bee260ab156a69f4451406cab2d18cc9a1ffb016cef6cf819a8f43"},{"version":"12feff539518c7454a4e87be3138c5a36f9e35e96e5c417f103783e43e870d7d","signature":"66ac40ee4cab901a3286b01b718ae5e41733bbc1754663c137e8c1247b95d851"},{"version":"c420b2a18a670bfd26eb48bcbae5caff04e118aaf4c821c4b22bb98f68f6ebb7","signature":"e8671c0f85162a63a65dd1fe7817addddd79587f1083a67021da34fbdf7c6e88"},{"version":"a3002a92f1234464267eeb1eb19819bd207b150325d56c9440cee72af97ddd36","signature":"3224bed20f659077d1a640dfcfd20a27fef8f4639aed05f5933a5ba6d407240c"},{"version":"b225821fb4cec0cb841e9a7a8325f3217b835e5a0f0bc53bc096250572b3ab47","signature":"e8c6366670c72735574e680dbb0a09dd7cd07193d1044482b84f0f10754398f0"},{"version":"07fcc9be98e12bd2f0f71a501a9bfbe2e53d38c50e8a5e84223fdd05bd8749c5","impliedFormat":99},{"version":"b887a4575db46263f82d7bde681bdc14526e4a2618a1172fef4206c467752d8f","impliedFormat":99},{"version":"85726d05dca1500e0a7ad5641000f780cd99ef0a467bdfc8a1bbc20b3f9fa0ed","signature":"66d42e0a79131b09732b689ea48bcea69707fd8a04d8841ae94c6c6b9f6053ff"},{"version":"fd4293b7fcfb4084e41f48361a78985873f03d6304912b55d2b9e01aeb6c103c","signature":"eb98f98dcc154d161b148d7c5177f7433a853c4facf17f71e473c7574f436e23"},{"version":"77ba09dc9998040a97244c33a9557dfa27d44cb635b6060aa446290988d22639","signature":"e0dedf7bfc4fac76e3af47ae31ba1390d97682457b728d73d6c1c48e5be4e434"},"13de1a3232ec788561621a8a48ef8091acc756d07c60671a47080245952a81d8",{"version":"c16e0635ab29aa51c858da8cc882b48945e390ecf4b0117ca4221a40c528f802","signature":"590361162bdc0e1247f7be536043ebba8a2af36ef339b7a1e61e16b306458308"},"dbfa9e9181299ba7abf3f0cc8ff684e9d4c18f68805c29c9c512e01380d05078",{"version":"1423c0e983d42c62f8873c82fcf2d8ad0cb860e6063cd69e80728c84c536de2f","signature":"84d2e93a9205d575d49870a135cae4d188db8a8bb82752a7a79adbe17be677fb"},"47812cd4c2af15cf501d8fe5dbdd86dd59575013394448feac14fb22bd077f78",{"version":"f65c08010ba1726d9d0b90f44149f3d4203d486cbaf1c614be61522b0878bf48","signature":"d12aa79ad827ea9deac3cad4f6ff2f229ee0c0c8284b66b13b041880d8f2b66a"},"2419c85c191c7137776b59a603cdf5ee900ae5ed6a8684ad6889b09793ecb12f",{"version":"94568080d5bb24bb60cfd0798a853effdb9d0a949ac654b392afd1cf2656b6a6","signature":"6eeed2e587f873b70038979f375c9228dc51623423772f949ac92f83175f9611"},"d7ddff4ecfa755041d3ce32912ea01a075bb7340a82cb659c60d0a6ac79d5941","472e31a95bd2f2b7748545a6d24f91bc2bc23e0325d7f0dd01d6281c64eff903",{"version":"ad00dfa3cefc59589acd312ca35346fb5106a2c6b57caa2916a53b6c527dde7e","signature":"0ddfb5daa9589cc28ebac9b5aabcc5d8179ba7e7b0d7089013dfb17e5cd9221e"},"643cdfee9718d65c307c406858a5626fe82068249a26d85d388a02896f4c6173","635ecc2c5693dbf079aa24bfa9308a35b093ca06bdf254fa188e79a3ec6768a8","e7d655fb35efa61150245d655ea1b111de57ce5660d5feaaa47635fe400c594f",{"version":"e9f301e05c3ca0c91e0695afedb5e631704a9f162a4ef9386ab0b1241e0a9e3d","signature":"908060c8b8e52085a7d0513a1d8ceda2f24d25dbdbcc14d3503b47d49ad4b574"},{"version":"bcdabcd49ad4f3f6a30f4035fd49da95d3ec2673346d0d118e73cc49c6c7de47","signature":"a0f5e102744fabb1de7e6e2f6add35c3e846b2f4726a5f8023eda68f379324c6"},{"version":"c930af6b7b08ddee0c0f6e903bef8aef1a8167050c93e35d9fbc1d6cd19dbf38","signature":"9608486adb25a764e02dfdb6276f660d9b2dd6d34f3f2c31277fef1b2ba33e1e"},{"version":"b3c1df420c233c85111510aa9f964c6a82290ead3ac43d02b776d5dd1cdf571b","signature":"9f10fd1c5b2eb5ce711032b32b2cc2c1d5e6d5c23e6be64d019848b57c3fd1e9"},{"version":"deb685eea280337580ecdc1f59ba64df19b8a0a5b26737c152a492d372d75738","impliedFormat":99},{"version":"e8f18d8914599c6b788ab6549287ecf89bd1a9a173e9eb81659edd61f041fc3c","impliedFormat":99},{"version":"6a89c8b199e69d0fa67aa02481d672c80c1077f1668446d995243efd2fc37225","impliedFormat":99},{"version":"e00fc542e2d58412c06217830a0650bc201c706c8eee2d8d27d5ba6b804c6035","impliedFormat":99},{"version":"b46555207d3dbb03ab62585b52a396f48b48a3c40e96723c3ddab672b66ccf2a","impliedFormat":99},{"version":"37b768bac5fe7881c1823e8b8f372b73f2bb4f619e4ed14432df2030f0fd42ae","impliedFormat":99},{"version":"006047b00455c1b865fa1df0ddae8db818bb39a321f3ddda2c2701f893f81aa4","impliedFormat":99},{"version":"537bed5a5d8b5885ebc6f33a2a27bf6af7231a5119410a7c19ca49ece077b985","impliedFormat":99},{"version":"38ef428d44eec84100a2c3d9409607b7d5d79b611b2e9e3b5bf55787fb3cf01a","impliedFormat":99},{"version":"a082dc47e7a81b2075d1be0e1c84abeef96b90f5c4b0df67c882ea36e9b5198a","impliedFormat":99},{"version":"2eb9b16c811eb2e4cc7c088ecafe3dd58d381cb7bcd43c6378f59d6b62343f82","impliedFormat":99},{"version":"0d99404df5e7375c3af5b29e421e971e4d9497f757e08f6d71c55abe12fb4775","impliedFormat":99},{"version":"2ad8375a297254a151082eca24de4880709e22af2b90b5c0a1527a5c34fdfdd8","impliedFormat":99},{"version":"fb1c107b6e709fa8d8183dcb5513a88ef43037b8dfdb148945bb5de406ced872","impliedFormat":99},{"version":"1c6477a91023bd6c797a298f14926e90756eb2d1eddcf04399d003afc3b8c874","impliedFormat":99},{"version":"31881b2ef14f4a800abb5a2e901a380a60890d3e53481f43820e5677e6731071","impliedFormat":99},{"version":"b1ca55067b6f268f36321ef2bcc284d5bd8f728aeb2be639385d9f62bf4a0b3e","impliedFormat":99},{"version":"08415f0037d74b8126615514833ce44bf9e946ee77390b8f68e93df26a905297","impliedFormat":99},{"version":"56c63ffa519c6f7f237f8d4f2475260a32938bf3e0c2287670bce0c5008854cd","impliedFormat":99},{"version":"01a19462afb14049348a4437ca23d8ea8216f2c5a49e2a05bfaaec0acc4987e7","impliedFormat":99},{"version":"18d4f7640b5e7f959234f0226842f5aac95df07414e66afbe0a86624c0317f72","impliedFormat":99},{"version":"c19012befc7fa0dca216cd574620b15da1cf4ad2b62957d835ba6ccdbb1a9c27","impliedFormat":99},{"version":"cc0048f62d66e974d5c563bcc0b94476e8a005406ed07ef41e8693316b2e31bd","impliedFormat":99},{"version":"da84ac2614990bb98cc8921995af5c6e99cdea1eae3d92692ef6d4a152e9df68","impliedFormat":99},{"version":"4dcdbdbc992d114e52247e2f960b05cf9d65d3142114bf08552b18938cb3d56b","impliedFormat":1},{"version":"b75d56703daaffcb31a7cdebf190856e07739a9481f01c2919f95bde99be9424","impliedFormat":99},{"version":"ddb5454371b8da3a72ec536ad319f9f4e0a9851ffa961ae174484296a88a70db","impliedFormat":1},{"version":"fb7c8a2d7e2b50ada1e15b223d3bb83690bd34fd764aa0e009918549e440db1d","impliedFormat":1},{"version":"b75d56703daaffcb31a7cdebf190856e07739a9481f01c2919f95bde99be9424","impliedFormat":99},{"version":"9c909c17f69f125976e5c320eded3e693890d21b18cbc4caa246ec4fda260dcd","impliedFormat":1},{"version":"7915d50018073244a9bcb3621e79b8e0ad4eedfb6b053fc945cad60c983bb11b","impliedFormat":1},{"version":"ea7b47bc357858506e6161065b1a8997cfbc5d1dcdf233966da9d01d74721ef8","impliedFormat":1},{"version":"50444daaee4bf4ad85ad8eb52e3ad5c6bba420aad9e2a800043a78f4d8bc436c","impliedFormat":99},{"version":"1fa33d8db2a9d2a7dbfb7a24718cccbcde8364d10cce29b1a7eea4cf3a530cbb","impliedFormat":1},{"version":"b75d56703daaffcb31a7cdebf190856e07739a9481f01c2919f95bde99be9424","impliedFormat":99},{"version":"90300bef1c0e2523c97fdd178b9d50e3f39646ade67faab69be4e445937c862a","impliedFormat":1},{"version":"381437930df37907c030519b23ffea4d8113f46e4431a70bfe008a0c43c63648","impliedFormat":1},{"version":"695cbb89013bc9e87fb24b0df020fe605c54f0ab5c267b5bf0490ed097044197","impliedFormat":1},{"version":"f43780383543bfcdc0a2ee850375e1f03d94bdb1b85091d5b11bb8b2023c8b49","impliedFormat":1},{"version":"303638e9e9378e3cce14c10a276251b2b6baea811f882b0adb6d8b7e44a8245e","impliedFormat":1},{"version":"93fc1a008c4786aa9970b7a4c56295bef4d39c243af63cbfcbd5548ca4fdd535","impliedFormat":1},{"version":"6b91aca1948fd92e4fb32e91e94955e7b7c12fb8cbc0a40eb55f1808886e53e8","impliedFormat":1},{"version":"1e197b6e669b8ece0a68c684af9a4394d8c47e58eaa040391cbdadcc1b5020a0","impliedFormat":1},{"version":"fccfc90c19498513d5c4b9c705706660eba9eb493bc38cdc16a11e9d384cd086","impliedFormat":1},{"version":"b288bbe96ea05e353f008a4d445fb8589a82f2a1c4d4d0bdfc283a19020dc96f","impliedFormat":1},{"version":"b75d56703daaffcb31a7cdebf190856e07739a9481f01c2919f95bde99be9424","impliedFormat":99},{"version":"cf32b34fb9148d541c100a83fd3d204ced00c76871b4811d53b710ff15a948a1","impliedFormat":1},{"version":"6940a178bd12acca76e270f0b0c4d907b9cc469d28833bd59a3276f11668591e","impliedFormat":1},{"version":"22165b22578a128275b69d52c0cacc6ab19e36eb95e10da18f1bca58cd6ac887","impliedFormat":1},{"version":"ea7b47bc357858506e6161065b1a8997cfbc5d1dcdf233966da9d01d74721ef8","impliedFormat":1},{"version":"9dc9c7a268e5b2caa79a5a5040a86ba5ddf1cba20d8715ceaf2b76f79ee444fc","impliedFormat":99},{"version":"84920f743c6fe02da67c1aeab9bd4e2d377ad96197e9960cb0e7738b8584ad0c","impliedFormat":99},{"version":"c048b081418f530417dd4193b47890bc734711378df819f0ff217144f6775afa","impliedFormat":99},{"version":"e6332e193ef43377d724d8f6efa5e2b36b5ea70389cad57e8a5176e8035ceac8","impliedFormat":99},{"version":"bf0b1e6c1bb4930244203a593c6db7aed456e635c31aba73ee2102c55998861f","impliedFormat":99},{"version":"5c21ec7196196aa797c5bcaa3bbd55f80091b4f793438947e9802376b3538927","impliedFormat":99},{"version":"1f653a61528e5e86b4f6e754134fee266e67a1a63b951baccc4a7f138321e7e6","impliedFormat":99},{"version":"76e3666a9f4495c6d15035095a9bb678a4c3e20014dc8eb9c8df8dc091ec8981","impliedFormat":99},{"version":"055bc641ca1f1eed76df9bc84ec55aaff34e65d364fea6ae7f274ba301726768","impliedFormat":99},{"version":"22ebe7ce1ddc8ee5e70f28c41930c63401e178c637d628b9af9f7a9c456e86b0","impliedFormat":99},{"version":"041c4afbee0a17614e9d4a8aa4385ffbbbfa1a5d5148c9aab0dce964be1af0d6","impliedFormat":99},{"version":"00d259e465df20202e848bf8d192056919e460a3de20aa14f59d523d3af38b29","impliedFormat":99},{"version":"9cbb746b8d46880874f6a8f8c64dfa925ec0cf70412d4ad5e00a8756c82edf3c","impliedFormat":99},{"version":"fd23901347e68e39f7043fc6787b2af6c7094d6c7ef6038ee909cfe26da625c1","impliedFormat":99},{"version":"818a39ff71deaab13a1aa427802c76d3976c365302ddd862810da9e428c8ebb1","impliedFormat":99},{"version":"ef3a6a6b54ff97244df620aa06d7df4d5474d0274617e265e041246c1b7d05c9","impliedFormat":99},{"version":"881c9f22c8d6ffc25b57cc4cf60cc27576d979a8d54ce85dd740d83b0571a088","impliedFormat":99},{"version":"3be840cd66eea7fddebcbc83265943f7f0029a8bff513919fb78450400054dba","impliedFormat":99},{"version":"4904ff0e4bda91f1b7e50a3738c91f393345de5f7e5d0fea9da581e42ec92fb3","impliedFormat":99},{"version":"5f6442d0a9bbb961b58f45d09690a034734aeea01f2875cb0e7ec31aa3676ef7","impliedFormat":99},{"version":"6511839e63105744b3bb8b340791218b253bdae80c7d57c288dcc85bc6f91317","impliedFormat":99},{"version":"a361409ddb9ecedc609eac1cc6f752383b1a667be212846927b660727e346d85","impliedFormat":99},{"version":"3f01edcdc9641acfb6689126d9506248d3a3afe3e4a23e2f7588988ba693f349","impliedFormat":99},{"version":"a12f75a9a3aefb304abb528b2898c085356d4876e77ccd2dd1c708bd660041cd","impliedFormat":99},{"version":"6ac1b4401d51471ae0d6b6bcce637e550eb78d75b1cfe993b6eaca9898d74976","impliedFormat":99},{"version":"aaba5744f8794b7cebab915aa45ca71d322bb2086d7c7aec6e858c313bf6cc69","impliedFormat":99},{"version":"894395299a4761cd4e38c20bf17bfce27a3cbdc2650054e5fc28e692fddc4b4c","impliedFormat":99},{"version":"7568f6aaaf6b62b7f3f72ebd07bbabd95749a0f969dfb15e7789d4a3c8e080a1","impliedFormat":99},{"version":"039d7ce09e9246c255c7acc1c00ba3afe7e98b4767547ccb6b77274109f8a5c1","impliedFormat":99},{"version":"b4b9514c90add4b59499251f760f01aa7fdaacb02894ff0d885286094cef8c2a","impliedFormat":99},{"version":"f670e23ac2377ed32187f39d02be707c9c0cd61e95786a6ba49ea7f860baa50d","impliedFormat":99},{"version":"25f27d8da6c42f1622b0b01fc5c78f48c79c645e10c4849fc8c5521faa9ace29","impliedFormat":99},{"version":"54e17510b0440980e3bc8ce141c9b922adb6c8e77ee81c443870bf684679255a","impliedFormat":99},{"version":"3e9e2f295358fa46f10faa524be6e99a42114752b0e195ae997f550968ea481f","impliedFormat":99},{"version":"74cf1308a1f0de094f0e8567541b0a0e126426ec2eb4ef68c9cd97fa4d0d9272","impliedFormat":99},{"version":"dcd1e783bde43c7d570ce309cc21e9d9d7b3110491aef9c5c5ce87c6a53f7e5d","impliedFormat":99},{"version":"08bc14542d8d34fd138945413e31ecf65668e029f966b5aab5b25e8e421efead","impliedFormat":99},{"version":"17648a898be56a6a9c4a6305e84ba220bc76d4355f0f55696726f1eb1fcd6d4d","impliedFormat":99},{"version":"cc6c1ade000cc9b7f8c79d8bdddb145950bbe7d404e5b3b938537a0bbfba73bd","impliedFormat":99},{"version":"eb97def43c2617552f76eb367e7f5531127fa03fdf991ef12cf5ae8fcc52c7ed","impliedFormat":99},{"version":"f49bde1443de7aaf05371f049ee0710619bde1b7bb7042192512e5cab672b3fc","impliedFormat":99},{"version":"a704c8b701194cc47d333b093f87db332694b124e304fb0167be09ff3304d353","impliedFormat":99},{"version":"358f8d33b436d21a7c313f02e900b805eb1c6abda3d675f703ada38eea3b92d5","impliedFormat":99},{"version":"dbcf8b1a2d94e9a1f0fa3fd5152114a14f83d8dba8d3f8dd773be476adac937f","impliedFormat":99},{"version":"ee63e60be6f56e08cf8d7b5ab750078fc6d08f69cdf70ee43fd0693d10c65d2f","impliedFormat":99},{"version":"4807b8b139747bd82ef181b5eaf8676c1f9012be0ad91feb1173bd57f08aaac8","impliedFormat":99},{"version":"ceee442c1035bd941c9fbddbab08fce2e34d1e23d79d56a48c0444bb45d705b7","impliedFormat":99},{"version":"fb9bcb4ee14feca03c05eaff9f1eb826bb1e75bade5e64f98c65ecc79b910949","impliedFormat":99},{"version":"f8ee6c9ecf3a39cb551db7d6f0aea157cd272ac477c561331efd734a13b34134","impliedFormat":99},{"version":"f72af7f1a38a5b8ae564be5eb68a8c25e5cf9cf4c567ddfa471a481425369c79","impliedFormat":99},{"version":"aef37af42cec810a643f24ba90f2f7d55c3e05ec5e31adca4c3318e578822aa6","impliedFormat":99},{"version":"ce35f35a8d59172dbf5cd945c253512114d6020e7dd30d399d372e473eff2515","impliedFormat":99},{"version":"e9e8a6bbb3819df983667e1bbf9c993e954c009f575c1f5d2063d55c1af47d1a","impliedFormat":99},{"version":"fc1eda40a6dc0e283ac8d75cec0082f6cc49c517ae608d2413e872ef2f5c2e84","impliedFormat":99},{"version":"bf0b1e6c1bb4930244203a593c6db7aed456e635c31aba73ee2102c55998861f","impliedFormat":99},{"version":"44993fcc19de9502ac3f58734809acbe0b7af3f5cca12761dc33d9a77cf02d1b","impliedFormat":99},{"version":"d172b164580892e56129985557aaf73b4e45279e4e0774e1df53282e6fd89427","impliedFormat":99},{"version":"1e1e240fa12ec7975ee7c9803e2e3751399820b4435f476ecfe22656809916f9","impliedFormat":99},{"version":"68f1a4ec2937052ae0dd18407eb8d1b579708970ced79c6e7cfe4a93d0a00385","impliedFormat":99},{"version":"efe0fabfc89403ce6a4a8b1fe3a7633f1161b7e10d9824299560f2d15e4e606e","impliedFormat":99},{"version":"64c4a5d1bb65e93416fb1ca1d08210dcce25d6d8d1208039a58e4379a647bd76","impliedFormat":99},{"version":"e84f2065c605965fd1d44de2cddf0509dce060b4d9e79c01a884a0899fe877db","impliedFormat":99},{"version":"b0df9d1b07f9ffc72ac128e5a05da99af0e3a8a19a08d8defc26678c0e30c25c","impliedFormat":99},{"version":"16725a633f5f5c1cd82e2baf4b0ae521da7f6055339f837bf2695bc3fd44373f","impliedFormat":99},{"version":"664104ab990ca5d100a69e159f9f8874551d94a187db834309af14fee2d64f4e","impliedFormat":99},{"version":"542e50c2dca6d24f5cb9cb2b7a5c07d450850af21ef253838bb2bbfb175a3e8c","impliedFormat":99},{"version":"6ee3000708f3add1fe74964fd6ea6b1f5abf82151481babb96f7905a763ad5d8","impliedFormat":99},{"version":"93640558bd78d5f98d7bf455d07e79f700efbe2f9826958d4b2acdcafbb5ba89","impliedFormat":99},{"version":"fd8b58b771380655281dca6ed40019cd8ecd639ef6ec74baa91662ca0e0ae458","impliedFormat":99},{"version":"6a73dc1806928e57c21fc51d00f40e4e92f17dc6b31ddfa95365a837651587c0","impliedFormat":99},{"version":"ce35f35a8d59172dbf5cd945c253512114d6020e7dd30d399d372e473eff2515","impliedFormat":99},{"version":"97912ca64fedc028914d9f1585e30d98a1e1e46a426a06f2190024067b8a534f","impliedFormat":99},{"version":"a9b65aa46a4613eef2bef431366d8f5f166e8226c6fae3688c67ca102c3d6a79","impliedFormat":99},{"version":"5fbfad634244c213e44e6b3e8e7936ccfb74bf163750dfbd1464140d8230497e","impliedFormat":99},{"version":"0caecd57de90295669dd561bf9f0e4c4478434e14e0741c2b0fbed44e38563eb","impliedFormat":99},{"version":"bb125cb4f8a3155a5dec027913e615c6b7f1000f0c600de19798ac4f0c8a6c5b","impliedFormat":99},{"version":"78c0f55d5519d39233daf5562c5704a0322dd7abcc1e72afb015cac550be32d3","impliedFormat":99},{"version":"95f1e94151a3a45c139a9efb748888d1af359521f6c96e7e644e070913fafc31","impliedFormat":99},{"version":"f72af7f1a38a5b8ae564be5eb68a8c25e5cf9cf4c567ddfa471a481425369c79","impliedFormat":99},{"version":"205d330174cc427f3002517bae08e2cf8b8e134cfe086cc80fe18a07efeca799","impliedFormat":99},{"version":"93d7cf0d29aa72f51299e10d738149a77bb92d42473d3145428cdfedcaf8efa3","impliedFormat":99},{"version":"03535e283a156874e32846037dc86e32c53995db4e077d392a8b17c6f26e4f8d","impliedFormat":99},{"version":"d8f104b12bb1e0ee5690c50f3d6100f71c24145687190a5f2d5ba7b52538d57e","impliedFormat":99},{"version":"aff2d01dbf009d2dc7c5aa71d32930d4783463a08527775e834e2e37bbed5b4a","impliedFormat":99},{"version":"c63356e770e4fa3fd4d6cff5e804e557fafaef2bad6f5b81291d15b1ff21da8e","impliedFormat":99},{"version":"5b2bc65ff0bd22d2ab336f592e4e3f6697516f0160b3b495b319a18903d91f3e","impliedFormat":99},{"version":"87621a249f7a938e9d270b70e560b78b55552eafd08ddf71d2fbd80913699488","impliedFormat":99},{"version":"8c40fdc32e3fab434b704c3bd731a12d479a061fdc72f42f665f4b0c287ad7e4","impliedFormat":99},{"version":"400402da2b06f5acd7940db2ee5507784fdab53354062fcddfe4934f3ac04340","impliedFormat":99},{"version":"3e80aeb2dad64ce73bb62a404e1db152fd73bd5849b1777d444939d0c1cfc287","impliedFormat":99},{"version":"61f825380b5ff41a275f6d0cedd145a073524cc24b4963f82c4348574325768c","impliedFormat":99},{"version":"d457f5d460966fee473f543e400f8e0784ca9875ce6aecd48b7ff0f6351a04d1","impliedFormat":99},{"version":"b41d3caa8c0839223be817bfedea85bfcf1e682182d51414fd11d9ccaf83792f","impliedFormat":99},{"version":"2b5637680ce53987f0335180e79a9dd639ccfa8f20d46332195dcf11c02e9bb7","impliedFormat":99},{"version":"08bee5ad21bf8bf6d1e66f9bcbcf1c790c1873ae5d63068c02567c357ae619fc","impliedFormat":99},{"version":"2e76803b80712451178add529e574c5b6acfa0ef4ff169dc5f8a4dfabb43704a","impliedFormat":99},{"version":"931c8729cf2295582ad36e56947aa4253a554135800a5ae3c719e2937061319f","impliedFormat":99},{"version":"949ccc4add0506d70be23ded8fe17702ce7ecad3f6b9b2948d12be7b7621c008","impliedFormat":99},{"version":"8b5aa4aceca84ffb115eaa92eb511db532a380715fbe40e0f2691399f59779c4","impliedFormat":99},{"version":"fa161dc810c98f507b7c8fe8d1cc978ef6cecfd05a91a0897b272ff3d424f53e","impliedFormat":99},{"version":"04498bab7aa04819b6f85e0a833cac9a90d2c225449e62a500e0d969a980a0f5","impliedFormat":99},{"version":"2f8c3df976ef62d1f2aecb54514354e582688693981c9afbeaa8d6369962ad8f","impliedFormat":99},{"version":"953be5c29962c02b750c81742c6c8e3ec88f0dca93b490ae0c25d06ec09a336b","impliedFormat":99},{"version":"93c47ea71b8ac6043e85e16a7f5a12fdf28283e0c3e64818b24ef77339dde953","impliedFormat":99},{"version":"d0ebe2f759e4811f5157b9a1e1920458dbc5d4566fce7af6c6a777abcc31d7d0","impliedFormat":99},{"version":"0a5c9fcea7d8dfde5b22c26763cf7c8822a99ba7774b87d4faa63fe165f371d3","impliedFormat":99},{"version":"79e012a9efce1afb73f1d04c643326f3a90ecad76274b8b099711300f475c561","impliedFormat":99},{"version":"cd80c1f39858c9aaf24cb6cf109d90b16470b4c4af5b712b350e6e18b08c1d7e","impliedFormat":99},{"version":"864d41aebd6e0f4a5e0fbf1f4de66517439fd9e342f7397362bf4bb0c285dc46","impliedFormat":99},{"version":"ef0a3e581b336ec4522badc01575daa324a63e76b7317ceda2ef887a5168e2e2","impliedFormat":99},{"version":"5a3458dfcbd3d376e91a57ff64ae747c34f8ca1b503b1be1a84f490b56da1638","impliedFormat":99},{"version":"684fed66904651fd676b78ec044da251651f4dfaedb163df74b2280013d5cd5f","impliedFormat":99},{"version":"78156ec80b86cc8f8651968051ed8f9eb4b2f02559500365ee12c689c2febd9e","impliedFormat":99},{"version":"e463bccc0c9e8e19113e8f5684fa1e0d357fd66cbc7a495a3c4854442268ab0b","impliedFormat":99},{"version":"01104176c1be6e4db2f152e17202e2752e01dd7dce8bf1fbfcbc85a54acd25f0","impliedFormat":99},{"version":"0383ff8743bc48551085aa9b40fa96327e857764fc0b8e4657b06db1b0068f79","impliedFormat":99},{"version":"df9ca548acc13813971b2a578514bfb3383fffc0f3d88cc2b49150accf4cf090","impliedFormat":99},{"version":"2e415d3626693f39e40f19ad427f6ad173dc4bde2a7c4ef6a655f30d052b61b0","impliedFormat":99},{"version":"237e9704d0e1474ebf693ea358488397b86f287ba2fdc4c0349353585904fd1c","impliedFormat":99},{"version":"496b4dd6da860c392c036aab07f706f623902707e0af1cef271eb9a6a827aa44","impliedFormat":99},{"version":"c98069496e78eba403f51c1a7d582ae0e0f338e2d63b6417e561c9f56cbe88c6","impliedFormat":99},{"version":"89e6832e87186cf2f1924ccbbdf510db4ed9d45271b332a1cb1ed659eaa0c874","impliedFormat":99},{"version":"4b0e0173e248db6eab5b9402044f2f1a2d086e99d9d8af6c4a7f46f52cb6d787","impliedFormat":99},{"version":"8d56ae9f7cac9011b44edb4905ad58cb57d12199ca56fd23a16c5714b15d368b","impliedFormat":99},{"version":"a39d68209be7cdeb86ea872366f7c9f3578e657dde3eb1489012833c87028ff3","impliedFormat":99},{"version":"8fc83926d2b5737ff691660774a9ab5829b5fb77d9a382eb97bb2786b8b2a661","impliedFormat":99},{"version":"c5e59270f3237a2bf344ac83ab3095f30c0ad8f3f07e41f266e662ce544520c5","impliedFormat":99},{"version":"63d8897302acaf122123a675c9e4875a1fc7d82bbc62a54949d595119b1ad049","impliedFormat":99},{"version":"1bfb743c928bfe9fbf9ce88bdfaf8235edb1d3ea0b5ab446603d71c4ac87d802","impliedFormat":99},{"version":"b6e92e897f1bd0dab01bb0f64bd70956f574c7752f7bbdc7f107460a074b707d","impliedFormat":99},{"version":"6841d50aae775f444751e244f756085d8fcf34f94ff6647aafe8041b63fc89fe","impliedFormat":99},{"version":"a3c33f57bb6ce04191478ea23a17293d382cddb7aee7b56bb5aed3ca49c7fa60","impliedFormat":99},{"version":"c9bfc8572556f746686beb2ac476f999356253c4b3fcba189327b25b30c47801","impliedFormat":99},{"version":"2d0bedabb6ca97235d746f5e1dd974c4975e8833985f6efb82a995afa06fea38","impliedFormat":99},{"version":"6af214e64dbf7c599257f7f0851cb57b267c6eef97dbca04b1f2d204ac571fdb","impliedFormat":99},{"version":"58617876087d1660ff295d2d76c325e50a42e5fd9bb7dfd9d02963ef80c8fced","impliedFormat":99},{"version":"ac84c9b0786abb646dfce8480f6ebf83370a47a45d8bd7e2bc705f1069bc71b5","impliedFormat":99},{"version":"d0fa8bcd9d99495de67ccbc3124de850e514f3eea0dc0c40f927ea8511bf8e8b","impliedFormat":99},{"version":"b4a722a1b575060673d2b0d9c24c37dfaab0304193ff1746ee6faea07e68e852","impliedFormat":99},{"version":"98c33da6fd946601b36415c760e677c1faed100c361fee8c45565d8d6a00aca1","impliedFormat":99},{"version":"afabd37daf4bc1b2604caedd796ec9deb277d7f3f1927ecea80cc9eeda678518","impliedFormat":99},{"version":"1cd9c44575b349148a044fb300d2dade101e663dc7556b7c0b9aa4494dc88de7","impliedFormat":99},{"version":"c59eee5e50312900effee1403fa07d9386e95dfaf20411a854729acdf6787629","impliedFormat":99},{"version":"8c8b35b1251978c2156c04db23ce6b842f48db71d39b42dd3c537dfa099e5ef9","impliedFormat":99},{"version":"0001579790ad5940cb4f59fbdf96b540a867b3d2c36624426aaa4fbcea1a4a1f","impliedFormat":99},{"version":"9b571fa31a14b8e1e8e7412743e6000be66b7d350358938c1e42bcd18701c31f","impliedFormat":99},{"version":"9a14a6f51a079956ce0a7ee0826c7898825dea24be60e10802e18b46f142efc3","impliedFormat":99},{"version":"f2f1772f08149a999525bb78ffa3d504a851162d8dfbc7e9b8039baf42eb20bd","impliedFormat":99},{"version":"f0410c617e9f6d332d7b860a1c3a679f7fa3e00e89699dfbc6b4f563b12b350c","impliedFormat":99},{"version":"ace1cb8ad5d6a8cec49a1d4c26757bea48fb6612e0f6ca99581253b5893eaae2","impliedFormat":99},{"version":"bec03add72a64113fd0cccabed802eb5bdc8b104ff94e092be66c9720eb499e1","impliedFormat":99},{"version":"b6b726231178cb2695b8a83519d4fa50a03e800fa9b2dd75193a56bf6cb58a08","impliedFormat":99},{"version":"70a29119482d358ab4f28d28ee2dcd05d6cbf8e678068855d016e10a9256ec12","impliedFormat":1},{"version":"869ac759ae8f304536d609082732cb025a08dcc38237fe619caf3fcdd41dde6f","impliedFormat":1},{"version":"0ea900fe6565f9133e06bce92e3e9a4b5a69234e83d40b7df2e1752b8d2b5002","impliedFormat":1},{"version":"e5408f95ca9ac5997c0fea772d68b1bf390e16c2a8cad62858553409f2b12412","impliedFormat":1},{"version":"3c1332a48695617fc5c8a1aead8f09758c2e73018bd139882283fb5a5b8536a6","impliedFormat":1},{"version":"9260b03453970e98ce9b1ad851275acd9c7d213c26c7d86bae096e8e9db4e62b","impliedFormat":1},{"version":"083838d2f5fea0c28f02ce67087101f43bd6e8697c51fd48029261653095080c","impliedFormat":1},{"version":"969132719f0f5822e669f6da7bd58ea0eb47f7899c1db854f8f06379f753b365","impliedFormat":1},{"version":"94ca5d43ff6f9dc8b1812b0770b761392e6eac1948d99d2da443dc63c32b2ec1","impliedFormat":1},{"version":"2cbc88cf54c50e74ee5642c12217e6fd5415e1b35232d5666d53418bae210b3b","impliedFormat":1},{"version":"ccb226557417c606f8b1bba85d178f4bcea3f8ae67b0e86292709a634a1d389d","impliedFormat":1},{"version":"5ea98f44cc9de1fe05d037afe4813f3dcd3a8c5de43bdd7db24624a364fad8e6","impliedFormat":1},{"version":"5260a62a7d326565c7b42293ed427e4186b9d43d6f160f50e134a18385970d02","impliedFormat":1},{"version":"0b3fc2d2d41ad187962c43cb38117d0aee0d3d515c8a6750aaea467da76b42aa","impliedFormat":1},{"version":"ed219f328224100dad91505388453a8c24a97367d1bc13dcec82c72ab13012b7","impliedFormat":1},{"version":"6847b17c96eb44634daa112849db0c9ade344fe23e6ced190b7eeb862beca9f4","impliedFormat":1},{"version":"d479a5128f27f63b58d57a61e062bd68fa43b684271449a73a4d3e3666a599a7","impliedFormat":1},{"version":"6f308b141358ac799edc3e83e887441852205dc1348310d30b62c69438b93ca0","impliedFormat":1},{"version":"64f588374cff45a495d9da0722e88fa7c4a77b7024ea17750a7c947fb8f08e98","impliedFormat":99},{"version":"5ca32089fa4a40b1369f085635aadc4bf853bc4ea4dd49eac0779bf9f62423a3","impliedFormat":99},{"version":"5a46f69508e086a0f63d8fb15717422e9ea54d1813be3798c2220bbd9c8ef43c","impliedFormat":99},{"version":"21e29420bf5da1147cf6ebcd8cd85afa21dc3cbf04aee331a042ae6f94c1fa63","impliedFormat":99},{"version":"71e67299f77ff5da289ee428bb85157485f4a1d335c1b311288262ca04736b85","impliedFormat":99},{"version":"5df08c4af12b3ec3b3e6afeadd08eaaadcdc2825f50335de914b505ee3252964","impliedFormat":99},{"version":"9bab9e8d65ff83bceec753685598d1d522ca1735a2983eb8c881dc8389b6c008","impliedFormat":99},{"version":"0356b906e53157425c8beb4e5673c71fa80d88e1cd32759d4bd57e59698ef88f","impliedFormat":99},{"version":"d8967e23ae7aed52ef845d75ccb56e5917fc9d6686786e875de3016d2b8e1f49","impliedFormat":99},{"version":"edca1f05d978d3c2feae191a82e34710dd8fedb83a24c2fab15373be5be8a378","impliedFormat":99},{"version":"36ac04ebfefc210ab3c0148cbfc451f3434e9ca7048b19827a98247875923176","impliedFormat":99},{"version":"4e152e1b7f2d588e6279ed5ee1815770a12e32913f06a9191f0f3cd60b01aaac","impliedFormat":99},{"version":"d44ad42a40c4e84bcccc9a5db198f86afa6196d42e152cedbe09d513bff01fb5","impliedFormat":99},{"version":"4f20bc9c75b4515c25c3de1cc6c5391972991a25136b796f8c6601a809e80796","impliedFormat":99},{"version":"38edf1b0be2ed5239574a4592d186f200083648350845c46cc7846f43e409036","impliedFormat":99},{"version":"2670ba717e7b90210f244401d5fe6f729cf879cb2938b6536c9c118371ef24a2","impliedFormat":99},{"version":"2e86a352fce1cf1df7be54b242d65c5efa3d66a445a60b2a0f7c33a60ed76eeb","impliedFormat":99},{"version":"9b3abc22bb11e450c1c77674d11719e4eeebf980315470587cfd461d1d407606","impliedFormat":99},{"version":"02e6668da999217b040e0d8d6e41daa96d7f59eda7bd9dc9156378584116b296","impliedFormat":99},{"version":"7c52a6d05a6e68269e63bc63fad6e869368a141ad23a20e2350c831dc499c5f2","impliedFormat":1},{"version":"556261268d31864a619459b9bfece0058e468456ff0ce569fbea916e6b543910","impliedFormat":99},{"version":"827508bd5aee3a424eb2e91965c5ef78e2ec95585b4074399179b70d8f66524c","impliedFormat":99},{"version":"97bc3fd65336434e6330e0a9141807cbde8ba4045989809632f70ba93f70f6d3","impliedFormat":99},{"version":"d5bcc410b5ab12693f89a3c477f8dba724d881d87498adfa8ed292869b393c7e","impliedFormat":99},{"version":"642ed2138fdab566b42e41f6ce85bb2f70b29d238549fa2160b0c4f808fd7868","impliedFormat":99},{"version":"9f313a2d30d03a9954269fa7c7f5cca86ffe2ae6c1ea14741c3e2794aa805806","impliedFormat":99},{"version":"2c4945c48f529153672e10dc7b67f414ac7e7678bfcd5d6b79842ae28a330002","impliedFormat":99},{"version":"590e67f69dd7dd135b235746827ed2ff8bdf892dda69334f83bd89cee0adb8b9","impliedFormat":99},{"version":"ef83f22620073b4b9e666191044faad4f2b3a5b4bb87e8487b8200bcc75102df","impliedFormat":99},{"version":"99cec35e19fac2229b5c6ba317476fd2694f15a0e9a9d38f146c5f5edfe3ada3","impliedFormat":99},{"version":"5393b11e04a8b72951905bb5d76c4bc540c695886bd81c7af8167717b875a555","impliedFormat":99},{"version":"98ab624c4bb847ffac693acecf770154c9763eeb7228e28b873aa2d2ec9eacc4","impliedFormat":99},{"version":"6d26c9ddd47ab86552f4d06e7bf051661237856cc0e5cf75d634853bbd562166","impliedFormat":99},{"version":"136769a51b1415d74b8c03b74e9bf38e629177447065b897694072606bb26f92","impliedFormat":99},{"version":"0a202409812f7dd20d61ded10a6984b79882fe264c76364dc53dca951a28c737","impliedFormat":99},{"version":"06d5971c8b4a3bc00bf57f4332d3bfd92636dd4abda4fa0357c7c1dd496b1407","impliedFormat":99},{"version":"ee67a800e8ec7418a1aac731c3e54759ece60a5aaa4c61a3daaaffea3360dd76","impliedFormat":99},{"version":"719f559f65d32823f1db11af17b4ee08fbb19d5acd4b6feb7b6610ccc83af179","impliedFormat":99},{"version":"432d66aa77c1e6059106ae63b5609793c1aeadc644282bf39d552afc83ee2ac6","impliedFormat":99},{"version":"4c36226ba094c4b73a1ac45ca38815698eb2089101fc707de511bbe51dc0e6e5","impliedFormat":99},{"version":"458a584e7898e910be8bb52341daf8466ed1d363a967f240bc082e549cfcbb69","impliedFormat":99},{"version":"218daa4b2d1f8f6d3c4f022acce45b10b65d04086a1ab74ea7a135814521627d","impliedFormat":99},{"version":"7f7b3faa89da29e2f52f73f7f2dd37b40c7d1e6dd8b820be1f9603bbd37080a0","impliedFormat":99},{"version":"30d4591edcd78009f16185869f1a832b6ff00b42927d16892ede106f7b03081a","impliedFormat":99},{"version":"6c80a54d4b2be32868d3dee7c69cbba3243d7150da9e0f3820a86f988047c9da","impliedFormat":99},{"version":"8a50a838343a8ee7318f5a4a33defa84d325cb035ff67d4cef3f04cc3dbd7c72","impliedFormat":99},{"version":"93f0399b89384f652cb73f597865e287b69db239dbb52c044a6844cb44a45b1b","impliedFormat":99},{"version":"68d83130bc9e211f85ba2a3aaba7a27f25b368e257ce559d7def6b20aa935240","impliedFormat":99},{"version":"9553bb2ddc97cadf255d6056236f335fb3d0b34cd3ff34ef7dc170d0004d8f05","impliedFormat":99},{"version":"522651983601a3d0a24eb8104086714d8e9a958810503275e45cd6ff263cf416","impliedFormat":99},{"version":"a8f9fed7dba6d9a5c6ed93b7c8e02c892c184c8153639a6ab3ce30ffe30c43c2","impliedFormat":99},{"version":"ddec04cd05ab7614a2d51c3fbafa772b47cec4d7d6be80c1de8d37e4366692d1","impliedFormat":99},{"version":"a28d089808860737ef08c33c36db5e3db57ec5c5fd41acdbeb0f0d1d8f7a1519","impliedFormat":99},{"version":"c921f5db48373afab4577ce6dbd5dcff50c41a0f34aaf4529808affc733f75a2","impliedFormat":99},{"version":"51b1dce48fa5bde70b49e5586d0bf7ba3371e172df994fd6401bba8b436fb852","impliedFormat":99},{"version":"09a2cc054e9070ff418f718c410e0065a56447a91e4770d619b58142b7ca7800","impliedFormat":99},{"version":"dcd55333d4d8b92fcf250652f65c88826be6ac472183aff5ca58c3e886db7b38","impliedFormat":99},{"version":"aec5756720255bd7045409db869db09031ce31003dc654175f552d59b196313f","impliedFormat":99},{"version":"86892d5bcae518db21850a892aa682878f77bc6ff1fe096f5f706c91e547cde3","impliedFormat":99},{"version":"6852847a05178fce73d3c8b6388e0b5cb23bac202845c426387762b9fcf8970e","impliedFormat":99},{"version":"d22c80b0d938d2a571dbe1707606222fb97bd1d4bbb46fe42e326bdee6545ca3","impliedFormat":99},{"version":"4053a0866f10634083ba91f2166420b1c29a2509b64803bd192f50baeb221265","impliedFormat":99},{"version":"74941adf0115a098f810cc363996a95da17e6847267bc29c9d519bf8b0838b98","impliedFormat":99},{"version":"8b5762f3138b2894db972d51cb539f1ff2bf6b231129667cb89962d4711f9c70","impliedFormat":99},{"version":"ffa366f1f2b7ccf00d170f120836a57cc74e8548e3e72b41bd0cee00dab9dd2a","impliedFormat":99},{"version":"17df8cd347878e24d165a9c06b86714762243650d50950f651b8d011bca6ccf5","impliedFormat":99},{"version":"aa94cdb0dbaac5ab520157f991bdcdc953c2fbb0436cb4ef6252bba926429a34","impliedFormat":99},{"version":"771d0002db8c8e153963f4f11a34dfa9bc45eb0cb07c99d711645d9496f07b41","impliedFormat":99},{"version":"664ea2d1a61cbe738cf3a4cbe619f775868a97d06398cfe2867173356786988a","impliedFormat":99},{"version":"88cddcb22330359bd1ffe0cf4f02b4ec0f54e07e6e25e47d6a33968a0209fe4e","impliedFormat":99},{"version":"3a0fce6a9982d55de28a62fb390f80b998f55ffe7aefadb9bec15c1f3801d3c8","impliedFormat":99},{"version":"060bc6464f23a8cfe35ff7b91a3ca4ad918b4f760a96e666453ea093b412a336","impliedFormat":99},{"version":"057a6bc4d8d4ebc4817ad261915f898cf589b62194058913ed9eb4c25f14544f","impliedFormat":99},{"version":"a458726e9fbf25d67d7eb9dbba3909f2654a475f162a97227e592b79b1e6cf68","impliedFormat":99},{"version":"90eb37365f7f73460de47970a44dbf4760990badf21b3223e8ce0207ed874903","impliedFormat":99},{"version":"3127a03a881f78c9145d7db821295531e8c577a8a0738847e70af2b6ad9778f3","impliedFormat":99},{"version":"cefe8670acf41bb5cc2726613785261a6b912c729b0423ed5daadd48a268e7d8","impliedFormat":99},{"version":"1a35bd51a28387166ff9069b79c5b1b45d917efc33381368083a645c78aa5006","impliedFormat":99},{"version":"17e18b0edde7e814a13e0208d2db3f5a6fbe189671b57caef288e39f1f1b9602","impliedFormat":99},{"version":"57afd9ed037a00dd2715e6128c9f305f287c9b29d9c7f556e4daa074d35a90e5","impliedFormat":99},{"version":"221c6bb2c1152e37f7254d5a167f11ffd57f12c734e970ea15cdc59a97f2038e","impliedFormat":99},{"version":"4220b6bb9febf019e09d875d52fe611225de4c5574412a4c1a62c324e4a82401","impliedFormat":99},{"version":"5b6c6c22a039478fa3bc034d6d91d10c0e4d20af1829d986b78a85232cbe0d2f","impliedFormat":99},{"version":"ac67258368872db1e2d5a8fd53fa649fe31c5abe6f62786fd4bc6e6ad51ccb9d","impliedFormat":99},{"version":"a2568a7262a7c222ffdbe3b9296fe725a3aa6037d3792815af50923bb669b7fe","impliedFormat":99},{"version":"1397759591619d547cbcaea8d94cca1ed29e9f6f13beffaffe9f9307e5955861","impliedFormat":99},{"version":"77381f3914dde6135f903652e311c5bb8053dae28607f519a3716ead90429f85","impliedFormat":99},{"version":"761bfb2da76dd72beaa61c09770aa2d4e90fd2a8c8e38f79203cde259d4ed4c6","impliedFormat":99},{"version":"788ec71568d441083686e3c32d5238de15aab63b59481f9b91174d8b4fb71100","impliedFormat":99},{"version":"d77ee71e3052258d3b9afcc8e921ca84f96d460bab31ac752e6237454c5d5cc3","impliedFormat":99},{"version":"6d9b1602e3d14e16b782dec30666f2e42d287d6a5345fb7ae52111f9a1e1f92d","impliedFormat":99},{"version":"e537ea67b8894b0ebb941bce267e16f9eb0719ab8ff37f0653d12f200339f2ea","impliedFormat":99},{"version":"07c9867e04c1628c47fde22389e075d615795c6b7c66ea90af6c281810699d0a","impliedFormat":99},{"version":"f5349612ec61213715349174adb060d1361fa1713a3d8d23dd1630dacd942b11","impliedFormat":99},{"version":"0aace45ac5ed670f576a4b81cd039a6640b5adf81437996f110f7d55c196b802","impliedFormat":99},{"version":"23abf55ba0b7a59b9bfd17491675b818fc178c581686840a7aef27e45205383c","impliedFormat":99},{"version":"06d3015b06f1f22899905d74207c52e54c051f0466975156de9067ceb884ee47","impliedFormat":99},{"version":"21714b0d8f7fdd7be1e233d4eb2daa87d2f4ee3e41a363362276fefcc2bd45aa","impliedFormat":99},{"version":"3ecd423076cd6107967e1b9187f38919490d790b258df54e8a6572a93ded5f96","impliedFormat":99},{"version":"015edc4dd049b299c563701125cd50d16d9605e9927824f8371a428993c25def","impliedFormat":99},{"version":"f84ebeaa3d5b14a9fb6b8349330e371f706f48317b1524e3968ca13c8eab2ff6","impliedFormat":99},{"version":"242258092f0ed6960f328b9d7a455c6559c7253c6b57b08883a2fb859c4cfdbb","impliedFormat":99},{"version":"d3002aa3f7fcaf5921ebf891a2556ff5a95885d20f0f169b12f0428e4bf80bb1","impliedFormat":99},{"version":"848ac64950a137510b1f47d87cb0f1fe15c7eb06c8e1c2823ae63f413430653c","impliedFormat":99},{"version":"cbd768cb4e86fa0057ca6db0359749dde395eacf2eb9dafc86b903ff1477d213","impliedFormat":99},{"version":"fea682940516e26202c6c8f274865555881b5ea171b1b7c262c5336512d938dd","impliedFormat":99},{"version":"31f800e9c3607ff0e370bd5a2b73501567dfcf03b7c7c9c9e8927c10a0467efd","impliedFormat":99},{"version":"75624353ffcf91bb2b7911b44075d19a7b9283670f2a78938c17e82e50d1c0f3","impliedFormat":99},{"version":"c43841a8e135fc3a96ae46e5403a46a3ed686ba983f4f0ef142b1f776269147c","impliedFormat":99},{"version":"f54bb4e54d36037ae537835edc7d64caff0e33b34fac0a2c3e035a418258ab62","impliedFormat":99},{"version":"725e63c5518a0ca69dc44c12dc4cde29218e4bfd8088368ec67836f394cfc7a4","impliedFormat":99},{"version":"a0231312762c8f9446ccb79c88227acdd9d2ee4f8cb3a459eda57029562470e5","impliedFormat":99},{"version":"a6c16d7e6060828143259e5ce1ad0228e3a34e2ff2cf35d2300adc78b6fcb130","impliedFormat":99},{"version":"de9ff289e55588add27a015cc023023660d6b8a21da1a64baa237d0f448b2e96","impliedFormat":99},{"version":"0e04533196527dd4ad14822b18bfcd7f0f701de029ef67da0813df3465651757","impliedFormat":99},{"version":"2f7d6f80dd8dd07edff2652926a4b8eeaedafb51775bea7c889afbc795d40b4f","impliedFormat":99},{"version":"1a84b7fc795e6812ce4d63d7066dfd5292bfd2ccf52364b1fed7f599efa896d2","impliedFormat":99},{"version":"c7501754d2236f6c5c2b03d8689d218805c77f231aea2965faaaf002bc992ee3","impliedFormat":99},{"version":"0528549bceed39a3d94c2bbefde7eab0778460dae5eef4ff71f04fcb8c8ec6f0","impliedFormat":99},{"version":"17d424fb44cd45655049d153d11a71cb236155abb50d605e1d91c3736799004b","impliedFormat":99},{"version":"96ebc724425e9aae600472cd4af10a11b0573a82cecd6c53581bcd235c869b37","impliedFormat":99},{"version":"03ceff4db920e1831332a5a40c2eaf8056f221b9e3e672bc294ebc89537c9ff8","impliedFormat":99},{"version":"ad030e8f3bae5badcd0e18837a3b637bf411c06ba3aa38c9b89bc6e016c67a35","impliedFormat":99},{"version":"e7f31cf8377bd6a1779922371bd84d2427a6df910b3333a93f0c5168299cdece","impliedFormat":99},{"version":"377862d812238033feb16a3174f3eca5449b5786727572fc546cb6f1e973adef","impliedFormat":99},{"version":"e362bee8c7c56dad6c0f52b2d83316ed53c6aca843ccc4c1a88b7e55382e0b52","impliedFormat":99},{"version":"2784077307c50f1342422e95f1a67f5cb9870ea04ad1a80ed4d99e9cec829980","impliedFormat":99},{"version":"eb7e19c5a59896a08776f58b63212ebf6b4c52c24cb6f0574c8ad2e462fc1277","impliedFormat":99},{"version":"c5676e6ff4ed5b0069a3dea05479e3a5abd938dedd4f5ca813f744728066fae8","impliedFormat":99},{"version":"3b30055d700e379329817ad8469e061cfffb79dd0b6e66cdc3cabc5fe03da7d3","impliedFormat":99},{"version":"7944d3987fda085b3b5a9325ec52f998d0172d4138fcdcbbff60e34b562656cc","impliedFormat":99},{"version":"b944764dcffb404b05669dede7b7008e62b21a8f7c0cc1c021294490a99e555f","impliedFormat":99},{"version":"e887a7a29bd7525556302dd1dae062cbc66ceced3565609b59920fe166910086","impliedFormat":99},{"version":"503a8ac885749cc70864c0dfff99302888a41964e4a9fcaf83ab8d01eef3e458","impliedFormat":99},{"version":"015b9884efeea4f3ffbf092e1c1d6eb69ade71d7d79833468e9c18e36545e142","impliedFormat":99},{"version":"8637312eb67001e93cee29113dfcab695b3e12332a5f4d2fba22471d01978b3d","impliedFormat":99},{"version":"8dfeb90bd8f28f690c724ee3c00d2d32ad633884e159fcfb5ce4e82ee5589c5c","impliedFormat":99},{"version":"f21c7e7ba380996bc52cfbd4e23f037edc90b073fc4b34395c4f8167752da7f2","impliedFormat":99},{"version":"f5df5c1a71732a42fdf23542b344d7069a4e0a68adbec151982b93571442b068","impliedFormat":99},{"version":"b532dd989593d814d9bfcb3131b4331de4b35ade064427001676d1fff001ddd9","impliedFormat":99},{"version":"49ebb1610637e76da9500d2def8f15c96c77b1bdc3560091d5d07ceb86c6be70","impliedFormat":99},{"version":"3dad5f9d2442b6a1ee26187724f0a1ebdf9f89b5dff0fb3b8ba1eea11db6d7ba","impliedFormat":99},{"version":"5fca4b593907fc70848e8590d14dba0cf0410e6c061e39c177835e700ad089bf","impliedFormat":99},{"version":"aa76dec64917d5cb480593cd443b229f9ac8c3a983b88962bbc5afd89d0963ef","impliedFormat":99},{"version":"4876014affafb8fe03898c335c396ec29ff29ec8ae3b50ad5ea5ff98c9323c8d","impliedFormat":99},{"version":"255cfcfd791b6f0dfd44f17f8bf6d4dfd733b4a8fec6c15efed8013d794016c2","impliedFormat":99},{"version":"420139e540c3461ff3a03158ba1a1d52e956aaf083c1a4b04069a8482e8978be","impliedFormat":99},{"version":"d15d43b6b19a969858befe90f60009952298120dcaab7110cff78a388a50f7a0","impliedFormat":99},{"version":"0cade822c5888722f9398f9e29781cfccb603d8844cb0273fd4ac8aa9a184193","impliedFormat":99},{"version":"37b5ab7dcd9f3954013a12e1e873953d8be801cc3f97b4e5d9c4dc895d8fc4ac","impliedFormat":99},{"version":"1277bf682a6d071861d20d2df102d950dedc15e49a96f211b1a4d2c87c83a912","impliedFormat":99},{"version":"8cfe0fafb887fb38150159834ac34b3e91d883b250ba4e1154ce88ed057d9fe2","impliedFormat":99},{"version":"ec69be923cb78bb128ea6fbf86555974d0f172a1f65b866d9bbbbc8e4dab82e5","impliedFormat":99},{"version":"da5d2ad94cbe6ead090c5dabeb266eb81a958354e487442dfe8313beb467f99c","impliedFormat":99},{"version":"1656706a594b924adfc45a7e9088c63caafb5c2ba689fce0d757d1ee5f016b17","impliedFormat":99},{"version":"d274837eed0e7d29bfd55aaeb65147107ff57060c70cc977ec83868830fffe51","impliedFormat":99},{"version":"a050ee6f9c5833d18643f86c0618ffe791cc15e7dd758f21738e305749e9b002","impliedFormat":99},{"version":"baa0b19d4b1f69101d22cf17b011d4544343df50572a2ff7a56fa51a1182c299","impliedFormat":99},{"version":"15e6e5a7d194e6a1d4852f2582c0b0f174e805c445cbd758fc9d2279374d5ae5","impliedFormat":99},{"version":"bcaf57053cdd116527f18f99ed70085db39bed9a251510fcd6903e99df6910d2","impliedFormat":99},{"version":"522ff1756b55a8c06ccc949b09b4cafe6fe922fbb1e2d780dc04e992673f6375","impliedFormat":99},{"version":"6c583ae286739f214987efbbc2bc3222870c03a83b8af01fbb4e951c78a19cd6","impliedFormat":99},{"version":"04ea39e4b3e1d6e56bc1f0bd0c7b19aeb4d35b678937b3ad54c63d44b44900c9","impliedFormat":99},{"version":"7a54a284c5fb690b97ce715f0e7d861c3b150765751cb6bffd6c479c8d5b0313","impliedFormat":99},{"version":"65ad93db7608fa525e362be30971ab55076ddae12db11d04a8e3ea4633ba7738","impliedFormat":99},{"version":"d7fbd0ea7793a151d792f6ad7d7c9a9ab7dbc69d970d0d0e57b408cba59ab91c","impliedFormat":99},{"version":"c59df2ff58c6adc907ed95ae1e0ddc2f6a123ca1189926dbafa3fae1fe8f40b5","impliedFormat":99},{"version":"3e85dc80eee865fee0b9aed7bbe2707c38e2b36b0f9192f9202566a9be7c404e","impliedFormat":99},{"version":"717c55229509a89e25c3c3a83a1de364e4db51be5002a738800f76f0ac168868","impliedFormat":99},{"version":"84a9a4f587a288376db1f1905fad7ad37a600b17ff85a4e33676acc607089873","impliedFormat":99},{"version":"e7165093ba33bad2ca7ee2865de7a0e7ca3b0480101c0cb75be7b024167d9e59","impliedFormat":99},{"version":"ec4ec119f797f71ee6d8110930dad93c689a1683484171621a2702b873d8af1f","impliedFormat":99},{"version":"1390e4de40d868b8e1d2619f6d0e95d0524b7ccdbf9a90c660e0b7230bd5ed19","impliedFormat":99},{"version":"707a37c179d6ff79844ffe41d72350c775de3fe1a1e2ce2ff458cda9595cc75e","impliedFormat":99},{"version":"09c6639e5622dc1693276f4c7684b0f0f4992d5c4e5c0769dd576e95c50635f7","impliedFormat":99},{"version":"0af521e519e48440bd69f5683fd26542d478c8110c1bde2815a732ea790d5448","impliedFormat":99},{"version":"af40e667287d9d2e79aec9af683744075a87c85424f518a70230af7aa8825844","impliedFormat":99},{"version":"49062a955da1d4880135873f5c08988c920429c3785349ed1b4e112b9269d8f7","impliedFormat":99},{"version":"334bc494ebf7f62684a30a916455dc63c6895784a74b07b835d28d0297785496","impliedFormat":99},{"version":"de20f1cce0ab86efc45d9d7bdc100999fec7f369613d57cd8d44cdaec8e12958","impliedFormat":99},{"version":"907467198cc07e6eac62f7eb2bcc7afc31e3ee433ae60000eca62213de971e6d","impliedFormat":99},{"version":"4263e62ba6e779cd26752ab3fcfb42249d009efcf110bf7a69412c1f33582e22","impliedFormat":99},{"version":"0afb4e75b4e9dfb1e331b026346fa429c72b3f76c2838ce448b5281b8d89eb9f","impliedFormat":99},{"version":"a723cf11acbb7f1d9b620b90a5cdc50f60f9ac8c2ec7bb6f69751729093180b6","impliedFormat":99},{"version":"019bfea6e0ea6051fe1d51f3d0671fccd704731d54ab218d9a8a42afcde54a41","impliedFormat":99},{"version":"63646b3d3e6071e59c2ae0a3012529910593f6f55b0285c028798b700df1eaad","impliedFormat":99},{"version":"3f854a9e492f56ef132efbc1bdc155896b97618a2c15eb06248bd88478303be2","impliedFormat":99},{"version":"984d0fd8112e3cdde9bc9cf0875f69676cd5a150caabb228cf067741e1241add","impliedFormat":99},{"version":"8235beb430cdab1e2c5244364de7f28ac109b3fac5e3b6def3bc9aa0fb7d1360","impliedFormat":99},{"version":"6b95bc34efdbe1082609ab0a1522f30f4b79a906e479af1295d4aba7fa887f58","impliedFormat":99},{"version":"c81e7a416c0e77487b511c0f345797d6323214968009b52dc8c2aa5c9faf7210","impliedFormat":99},{"version":"f1f7004e9aadb6803b238c03a27971c5e1effdaf1c5d6dd9b3d688767f5563b2","impliedFormat":99},{"version":"0d8ab497f53d6142282bacf32f1538fc607e267e058074286528126fd1c2db6c","impliedFormat":99},{"version":"5b81a34a60401dac6213a45e2bbde3e57060ff06f847cb005337816ff2015189","impliedFormat":99},{"version":"6b847067d0fd98ff82fdf0f0abf69b9ddfa87c01ab09dad9576af17fed68f254","impliedFormat":99},{"version":"8ae43e29b6a1b72cec9bd415afd180de9a9d83423c7d7c8f4d61e090f85ad572","impliedFormat":99},{"version":"f8449256f5c820606e9da9e5dcffd574d48981b8b6520c234b15f8a6bc3dfa70","impliedFormat":99},{"version":"a61e72002ae43b8230b720eac472b287c2d6e492adaaeb7546570e1ede58c3ca","impliedFormat":99},{"version":"3de403593b664a953f7b10950653129a6b70e97fbdbcc79ad8292cebd6602274","impliedFormat":99},{"version":"35c011c44b69e88a5798bb61158c26e35ce74df571c095c029b29d182924c2f8","impliedFormat":99},{"version":"14cb4ab32e33b9a279f3b62ef3ae69938583fcdb276b219d74d149e9106b7aeb","impliedFormat":99},{"version":"c9bf49c427e33b552a03b20084624635957dc8468eca2a3d461f0582a011c5b8","impliedFormat":99},{"version":"f4d2c3633596eb54d2bb659bc1c60da3d4157c74c6b6e19f8d27965da2b46bf4","impliedFormat":99},{"version":"4a6091ca49cf40b7933e287a233de2c4666c4ac22c80aab2a0bf4a52b467c743","impliedFormat":99},{"version":"53b2c7304bea0d35da3f158365ecd0794a49cbd8882ff2f7122f99a737854993","impliedFormat":99},{"version":"d51c6abeb24e22093f26441b97eff90378ec9bd13979d0d59f5034a2296ef884","impliedFormat":99},{"version":"6f40ad7380099493513c35be209c0b10a531c4e3bf3acf27d5400d030c59971a","impliedFormat":99},{"version":"d2f0d9d92558f5e5406a561675e6437524bee447f554a8ba6f4dbdd627d0b2e5","impliedFormat":99},{"version":"c1b32c621d2a714cca1106ca3f40bbc3a0a1099e14743a67023bbf5092add641","impliedFormat":99},{"version":"ef74f47c63b7a4d7a022c1f569f3ca9c14e3277e0385b037587665d69b96be7d","impliedFormat":99},{"version":"4198bc4505f06500bd9b7db780972b9a301cc946896287e0c9da7d140849ea46","impliedFormat":99},{"version":"d1102e99d80c4f24da7a3c9e5b830a41a2039c289bea81f5121b3bc6c2ed2abd","impliedFormat":99},{"version":"b4b440d99a10cbfd6272aac5bfd9aa9622b9c1f9c43f7d5cf79cb43825614958","impliedFormat":99},{"version":"741587fb86739542002fd67fed070c07e34dbfd9bbfde95ca955144b861d00f3","impliedFormat":99},{"version":"808deb409b1514ef7d438394db0b3c5a9397267abe7eac6053165151e7423232","impliedFormat":99},{"version":"6989d42d669be40f6591a8fdb8e705df5fec8968a38206f5a0047f47c230d1b2","impliedFormat":99},{"version":"20b1db9c33a81af48e43140a540d51c87b6b20f608489fbbf7486c8f56ef0c87","impliedFormat":99},{"version":"a534aae35e31df8c5dfae7d984612adca9d5641b59b49ead295066dee45b4dfe","impliedFormat":99},{"version":"4960805d11b85af4fcff7d549c97447b2294d67d4ee2bbf00695184d5eb6b21e","impliedFormat":99},{"version":"d0b1cdaa14a443a383bfe147dc579b4a836b73f8dfe2b3289e58e871fcad0bf8","impliedFormat":99},{"version":"2546d813c0fcb88951aeeb0c59d42fcc188ca463a6b64045cc091cbe01737664","impliedFormat":99},{"version":"3a629b2c09c54c79c0bb45cd7800b57bce05640427ad222f9ed0e5329bddde48","impliedFormat":99},{"version":"fda15a21c72487186d6e08d90b6d2554eda631c7bfa71c8805bde1d409f04c4f","impliedFormat":99},{"version":"aad34743471540dc34740144e1dccc42c9b4a1522a8f60ea6f8bece95f226aa5","impliedFormat":99},{"version":"c4feb5adb299f304513b63720b3caadca698d20eb5f2ba53f540609576399ed4","impliedFormat":99},{"version":"3f6ff7fa12f7ae9e51fb3335767a23feb2042397ff6dd78836ab8380ce06b760","impliedFormat":99},{"version":"e379f2cc178fbdfe06bd7575ed0c3019f06307503753d2e3833fa08cccdf765b","impliedFormat":99},{"version":"05e7d52d0f13fc255dae1568da631c3b31ae36097bf4fa7fafa5d4fc0a902d2f","impliedFormat":99},{"version":"b911ec34b809d0cc9bd3392c04f5fc4b7d29fc43635330ec94ddcb64aad6c32f","impliedFormat":99},{"version":"4f9692533302f9ffbb665538ef05ad184b334076c381f443716ac818a0016940","impliedFormat":99},{"version":"035cdb01dc859990cc531611dd6c7bb0144f5c02a911b06e7dfbf3232ee0bc73","impliedFormat":99},{"version":"15f23c7f87961ef45889ccb37db664270db9c7ceb127a4d3938521ed095504d2","impliedFormat":99},{"version":"cce8976bec1dfccb5e48ed58df797a393e3c894397b40986884a173e3ef8fb51","impliedFormat":99},{"version":"d1dfa8127d21751115a0a6ae3e0e0e41f70eabf45e23787ba2d327a14669e518","impliedFormat":99},{"version":"ef87c5b95fbe2151e96c89e6c80ad7dcfa895a7001ea9c0cc258eca3eb84ae49","impliedFormat":99},{"version":"2433129fe6d3d67b8268ba54abd4ab1c7c2f7a32444d4c6a68a9a10be06cc617","impliedFormat":99},{"version":"e969d9b9fd9ca2e023ef701519ccd75e207dd52b92f9af22e15c04fea8e719c4","impliedFormat":99},{"version":"112fae55d6c0f317fab229ee28d756ed163afc3ce4b0cf0c948736f6442abb42","impliedFormat":99},{"version":"dd429b03ce8ba91ab6f204d6c2c7ca00fb3cff07b956da1ac8c60360da28d866","impliedFormat":99},{"version":"b7a63ff548e03c363de65f81f7c31bf98f77b73f13054ece8ee2bc1c1ed9cf6b","impliedFormat":99},{"version":"89ac2289cf83ef63f0f869aa225afa006fc066bb8a5cb81f690a0ff8b6b27419","impliedFormat":99},{"version":"5f49779e856a15a93dbc55628c6dd22787c4729a6ecd4a3ef0226ce3efa54d6a","impliedFormat":99},{"version":"bb836f3e3bb9cff93ea6cd392b5fcb88aae3d664d7c09171e6ffacc2f0a44759","impliedFormat":99},{"version":"612f919817f17d0a4ab4dc0bb83f1af7b6fd3a810ab8265f3ba247619c90118a","impliedFormat":99},{"version":"02d5344b11cf703ffd698f1874f5298d855ae6a91c3a2d42c3d95b70c2f4e6f7","impliedFormat":99},{"version":"f6a02ec242fe847abb54511123ee93c58ff13d7b660bfb8a01eaf5edc39e8856","impliedFormat":99},{"version":"4ed57726726e281f991b7419a8df5536aa8c1189bac3a0386ff590c8f16b7bc0","impliedFormat":99},{"version":"8ead572121be169161fbafe5293a189110c391b15670753f1be62d6298a316da","impliedFormat":99},{"version":"3801017d48638edbf32c445143b804711d2bc1a2ef51f0dceb25fe8a5b591bd5","impliedFormat":99},{"version":"2d5537810389a683449de9b0896ca4b130b93a339d8d72836649f08cebd17f1d","impliedFormat":99},{"version":"773f4ca58611a16eae2143575c1a01d738de48378dd2d11fc400be42ef2daca3","impliedFormat":99},{"version":"558d19d1b6743e92b564bfbf3edf3501ed8bdb2d090181b4fe5003b884694c38","impliedFormat":99},{"version":"9f74f3a8cb86c7035df458ac1964b046e71d75e156ca30e46b7237ccb5c88352","impliedFormat":99},{"version":"bb4a8d5ccc79c02fd91468a00a6a60094b5faf91c69e510fbc4b84ce1f1a44e9","impliedFormat":99},{"version":"a68d52626a14a314e2f910dc7e279bc087f066e60a78b259c3ab78a4cc1b2e4a","impliedFormat":99},{"version":"c796c30eea1275679550236b6f00139fad4be671f5df058fc908156949d91e32","impliedFormat":99},{"version":"405533464641522eab7fbdc2c249729514750d679d5905a84ad94b790787df9f","impliedFormat":99},{"version":"ee2f8c4790ef349e7777b3faaf599823e82e3e59a4bfc2c67c3e1775d3bee50c","impliedFormat":99},{"version":"8effb19bf88f12addeb45df0c5d05e0f6464612d3d6b34f1da8ca8c2c1c5cc12","impliedFormat":99},{"version":"1e013d9eb6ae0803a2aca856d30da9cfc48c6448500544d8600cd1ef8549d311","impliedFormat":99},{"version":"bec1c0e444418bd6b168ffb15b76b9441c761bb2d243c089fa6ea378b2cc72ef","impliedFormat":99},{"version":"c5a21f137c70fdc46c5d643218989ae7d71199f3d6a30af86441dea65a458d5e","impliedFormat":99},{"version":"5c7d1b8744a3c63cb23db59258fcee28ef638307c6862f51572805162a851b51","impliedFormat":99},{"version":"448a88c8e7eda3d8999b7022cfe4dbd1cf586e71e21e999bdbbcdd436ac58b8d","impliedFormat":99},{"version":"1fd21de5ef3cedcf80d2b5478c2b040dc0e9284cc129f491fe72dea690c16976","impliedFormat":99},{"version":"ceec50190a9d3d13a8500a8e1d1b6f8f5a3f6be45dc8e9f983530d84dbd69cd7","impliedFormat":99},{"version":"42b9d795a3152c6bb0f641da28297b91d5424cdbe936952ad18c20f501bed1f0","impliedFormat":99},{"version":"37488fdc6ffd2d40cb049ddab8ba198c8e887dfe77510c6c83efb6de34e2fe68","impliedFormat":99},{"version":"c261f2749392eceff6ac17efdcf38dce0d8e6d8b15cded165f834b40dd65f93c","impliedFormat":99},{"version":"661b89ea587a659596859486a0123a631c34b5057993284d60ef9b87c015797f","impliedFormat":99},{"version":"0e6f5d456e1b73ad322c4b0bdcf10b0f9a8a0b75414d5b9e00d9f561a43874df","impliedFormat":99},{"version":"4461b8cf1fb26fa159072330c41c2b52d80c8ab3d2e4093abf74ba9dbf840259","impliedFormat":99},{"version":"e72931e0fd3c01a2153527880a56b53a2fbbe198421809dc2a7c3a93ea74997f","impliedFormat":99},{"version":"b70eb8f22c1217715e2c34d1a83a75d5fa024c32b1aef4b7c4db3f98645cb395","impliedFormat":99},{"version":"3f955b3cce7f95f2fe1bed6fbb5d41c864bb89b0aa11bc4b0154da332f136be9","impliedFormat":99},{"version":"3a5b6c07dd61016f03d7d4b9b8714fc10e0ecfb2f358783449a6385b930409fd","impliedFormat":99},{"version":"0b70dc15cd46f0b2f0d705744aa3dc4798b87f5113589ca5e1a7053af8edc756","impliedFormat":99},{"version":"7687d8298fbd5d0859b84ec89fbd43fa591970639447cc7b0156670b2a4740f8","impliedFormat":99},{"version":"ae1fc7ed3c72167972acd4f771883d14dd13d635c3b585606218ea4f9f5662c9","impliedFormat":99},{"version":"69204d6d8f37d8ef16ef681b185c5aafc81d81afd5432a25912560f9909ed2bb","impliedFormat":99},{"version":"3608e6f20899db55d817ab7a76390aea19b8e3bf7cb4becb5f3b70b833db038f","impliedFormat":99},{"version":"434af61f55bf25916aba2d8abcec57ceeef35571daff914fe7b54aba771312c1","impliedFormat":99},{"version":"3f31fbb79cd50033ef517ce3296f511ba8654758609015026227740f4892e187","impliedFormat":99},{"version":"b6cbb9a7507ddfb4658eb5fc04835b24abdb18f9b1dcfc821ea8cb220c6b4a24","impliedFormat":99},{"version":"590a91fe582b89a9bad5b5b4d1a6d9747c5287f6e1b23a2a57d1aa60c1a23180","impliedFormat":99},{"version":"5aa8cb7c1bc385a9938b872f6b857ffd91a17cebe05c86a44f12666a37cdf1ce","impliedFormat":99},{"version":"8867ef533f3a1b2d7e77051ee1c764c1942861544873ffd8773d52005a7b30e1","impliedFormat":99},{"version":"157a1f916813abf3e1faadae34279ee65110d7dc8146711240196ce0e46cbcec","impliedFormat":99},{"version":"7d0101529b77bd85692b2a831308a7534a478c60b95a1798c07e14d3a14e4b21","impliedFormat":99},{"version":"4683b8b99421fd9229d15a80d66cbd5ee1d67ff19ff86ae7d6b449b29ad304a3","impliedFormat":99},{"version":"19ea1b64d140b3fb5d1b699b09f1aaa60ebf32014f6dee279b96d92ca662d871","impliedFormat":99},{"version":"b2d2ab3ab26f446cad62cc23ded652641a44deb9d19280550c74cc81c7cd4263","impliedFormat":99},{"version":"1b7f1fee5d0df0a2a9e5c4e0f685561d75fed9820679f0eb1f87757a050b7bf6","impliedFormat":99},{"version":"9afee2d40467087a6aed46b5fef0548c2a1351d533f2aafc68cb47694a81f7c2","impliedFormat":99},{"version":"372c39fd10f96d006497fc2bf9d56d0a602119244ed46d087a2bd5bb037821d9","impliedFormat":99},{"version":"eda319a4faefc5335172ac0c5ab2d6530580e71f55b53a68de5cec96a106bcb3","impliedFormat":99},{"version":"d9e8f082189fbcd24d1c13275aaffebaf48c9222d20654d61ad7082f6f2df101","impliedFormat":99},{"version":"8f2350543fe05a8d34952c3dae8f9781594751f5ef130384446a729e3dac7bff","impliedFormat":99},{"version":"fc71808cf3e82c4b815b17870970038be40a83c23ea77a47c88bebd7a8a0d431","impliedFormat":99},{"version":"87622b9b115ff00fdcb1ad2e5c0f6064249dd577cd94140d2429aed76218195d","impliedFormat":99},{"version":"987a12239021ad858813841f22475f2a225d3333a2dfd9beb32222c9e2dc2505","impliedFormat":99},{"version":"ed3f6a7fbdb2e7d6bc2636b3f56c08ed34d2ba80ad3c4d30f03a8b12298ba100","impliedFormat":99},{"version":"097d4c89e60fa539682315762384d83801b9c8bc0f24f57a63d62319b6cb88f6","impliedFormat":99},{"version":"ae868f126890affa478b4628684db9c084b00eaea3ac884ece0184e8f9b4041c","impliedFormat":99},{"version":"0aa2fc9a3936aaed64b486dc8efcbd6c62e0afad81ffd72be408cb97867c0b16","impliedFormat":99},{"version":"03b6d8653fe0ad8c0b09eacd38d002780fc03b77ef06858abe4fee879cb82f85","impliedFormat":99},{"version":"1caad517833757199ab3830587bca968433d3e1e485c518989e10a3b77f85b24","impliedFormat":99},{"version":"9087d62992fb955a421851106b0e8c815f3e24120b95c56e8373d384e273e0e5","impliedFormat":99},{"version":"1952baf9e86d0538fc675388f66f5aa215514034ed4be848d2f59e926780c4d3","impliedFormat":99},{"version":"ebdb84450ad6efa9a70dbb78f4c0f9a16888bd798eefc37f6cd04d2572206242","impliedFormat":99},{"version":"f93d43b0832bc9f5e6a3ec0358bfee8dc2f44f748278f3e6a073220844e78c78","impliedFormat":99},{"version":"a15b1957c98e891ab28b838335bb1deb557343bb4124a9975df71d3e523a8a46","impliedFormat":99},{"version":"30d463e7ce174f7a529d3a832711f424c984cf517c08f59dbcd2ccd5b16bb6ea","impliedFormat":99},{"version":"6767ab11a8cda8c0ac2ac7e2252bf7be2299410752049237a48d93c62a4a7195","impliedFormat":99},{"version":"556ec31b542b318f82f9fbcbcea81d9c139ab820d4e32df8327b81843dc32234","impliedFormat":99},{"version":"256cde5dd5a4f0ed7516ef587efd4bef006317e8daffc232974fac0efe47ecee","impliedFormat":99},{"version":"53c4229dc8cd2aa22a2c58537514818d429b6972555241f821cd7e1701c42d38","impliedFormat":99},{"version":"dbfcc3a90669180c15e0817815c5a9ac090b9473998ec0bedbfc3dc98fdafe12","impliedFormat":99},{"version":"6745a82126e61c30cb5a8db54d35886159c53ac5a28f5a61d31fee282598f7c2","impliedFormat":99},{"version":"be768a2f53e62d96a980aa56e02861472f7e974862730dd12fa26cb4bc50e348","impliedFormat":99},{"version":"1ba993dfeec6dca5b138bc0370f561e5a220a367b7fc015a935e015ecc865aa4","impliedFormat":99},{"version":"1bc5d66f065f14c9c6290f6fe09492e60d30901737b68a1e344f2d61ed001e96","impliedFormat":99},{"version":"e7e21ce3d17c8c107f99522eb0c9d2e7e98823a873024efbebf93db436812363","impliedFormat":99},{"version":"fe896af05f06c4c6257fdc8e8cad8a278c90d4b38ff6b70efc5b5e3ecc880bb4","impliedFormat":99},{"version":"362db1b55e2006226b53ac79a8ddd5a12976bdd4531badad0ddff27b49817de2","impliedFormat":99},{"version":"c3ff132ac57ce2706280f9e145befc0e7ee6060caebb32ff3022e9c154575876","impliedFormat":99},{"version":"8c1e7fe0b90aeba2f3eab5fe6e5fd66e70ddb6cd998a1eda1c5cfdd6336ba94c","impliedFormat":99},{"version":"a0f0701ce0a5be197aa18a41feea179f1e21a2991918ca26320753fd3cbc17d0","impliedFormat":99},{"version":"89af4f75c1f204d678637102d01382e0b8b167e0b213a42a6fab2a64826e815d","impliedFormat":99},{"version":"372c4938c22abcb5635c40958f040b4f7ee794922cd2dec038844ed0a825711f","impliedFormat":99},{"version":"50d2f4d075114bd15852e0ae28244f897e8fb7109fdb4bb980cd0d3071ffa87e","impliedFormat":99},{"version":"fb29fb3a2e3247167f4e699f19b47cbbe02e3137794c48d08ef6140c13a82a13","impliedFormat":99},{"version":"b8b338b2581fe913b51078571e66b93f60e27089753bfcf0124cd0727684571c","impliedFormat":99},{"version":"00287f47a7a9ab63f5e218d1db19923519e6761a3ae2ba9222d2c38a21a4bb35","impliedFormat":99},{"version":"17f1776b27b2c29bebba486721f5d9319dd9b651b6e3be83de3fa216085e948e","impliedFormat":99},{"version":"97fe89bab2cbd68a825b749e69b091cc01cdcbce11ea81dd9292b41a0067fb2c","impliedFormat":99},{"version":"7468715152819058c1a2a27ea8688a7ae51f9800f1273e0815a60b53a0c023ac","impliedFormat":99},{"version":"f253619c22ea40bf7cbe77923e570714f74ba32e33fd3af620a623867d94561f","impliedFormat":99},{"version":"a9615353b037dab7ed7a5ba67807a7daa8c15cd433f627170360135ae30f7913","impliedFormat":99},{"version":"9ddf47eb87c7613d5a5bbb577fe6ce87dd34f2c7681dede0ab9fa1d6bcaa7242","impliedFormat":99},{"version":"57b00b8088284b7178fda7be8f5987d5edcdddfa10bd2f777c9910bbb7ac7e97","impliedFormat":99},{"version":"eeca86e723c4dd548eaf507190e849b925fdc0788734afe84a4e5ad29ea518b6","impliedFormat":99},{"version":"cf03afdf519792b0f8bcc22c984a5521c5d192c3f46b1caee9d645dc02cc076c","impliedFormat":99},{"version":"8ef260aeed7f688a8c40f0a3480e8e4ff4c1406b0afc44544a8d0087c9f80cd2","impliedFormat":99},{"version":"1074bad4ea7a4cd8088f39ebf5169e355510089d28ee7b775ba1ee5ddbd67a2b","impliedFormat":99},{"version":"500265f07d0faf96f8b04ee1c9e0a77a8e5e1ae07b075adf58105c05db2687ac","impliedFormat":99},{"version":"5eafb802b8483ae0fda85920af0802e633178c701f631ad85db80156054a3840","impliedFormat":99},{"version":"d4326b0dc272b46b1ce13fce5b29331a705b1aaaf79c67dcd883fea74c713b81","impliedFormat":99},{"version":"41edc9dcb80ada08b64177bd4405650842e2e17f86f2ba905e5a7395b660c1f6","impliedFormat":99},{"version":"282c37fb44ceeb5bcfcf070f383314a1bc33b1c1f089f682f53e79b0bd90ce7b","impliedFormat":99},{"version":"4ecb8009aa0813b67a7c0c5994f5549b264dee7c46ed973ad5c39bcc0a26f362","impliedFormat":99},{"version":"57d5f16d751884e0a2e97ef772d1a24f256dd1b82b35397041d91baa85e4bd93","impliedFormat":99},{"version":"d5851073cd5047ff38938d853a37c2d709d68a74017bd4df1010187f44541fa2","impliedFormat":99},{"version":"af3769df4fbcac3d41dfc066a33a4b8836c6de72e7da550fc8f9a07ed5ab5ddc","impliedFormat":99},{"version":"979fa80f9aa7e1f015e0a019a28baed03f69924db612889d1899b62b4439f8b7","impliedFormat":99},{"version":"67cfa42620d86ad53914cfec05a9d8f90e43fb28fef9323275d25f6dde1d7790","impliedFormat":99},{"version":"ec5c726ce278b542cff27f8c2a507166eefcb9ae2130ba3785b1c7e168a8f2a0","impliedFormat":99},{"version":"08b4120029f17693ae31a695121c2a37fa1b7f98769aeaf4582ec7a7b25bb352","impliedFormat":99},{"version":"cc5354e745ad65d3a07f67586f85565d332db8f83ab6119616d5dcd5e57bc3fe","impliedFormat":99},{"version":"0be25ceb7bdfe3fa2597861b1c579897370ab1c936494ddb68fe55c85a07be73","impliedFormat":99},{"version":"7a1f228faa5fa5b29b96c1ad04293e310a20c22ec1b83b5adbd1ee306625ddb1","impliedFormat":99},{"version":"22d5c827159162dd95e53a3a67e0d84b61f08d549589ce83dc650ba2446e4055","impliedFormat":99},{"version":"57ab97e8e4bfe6a726c44fa4982c63713e21ebaf407c314afd4e48c235ffb96c","impliedFormat":99},{"version":"54ee6720ce787300bf050b24224405696295d9e2f3f42da366a0b62758835451","impliedFormat":99},{"version":"07c5c5f7501a8d1f5f2ec59e599420e61f8ed871c89cae97494f1b12ee3bd061","impliedFormat":99},{"version":"0d6fe3b966117b53aa6c6a32a8af28285119143a0e89782fdd2fdb0cdd324dfe","impliedFormat":99},{"version":"370004a0e6351ec211d8d18137fe40dc86a9b242fdb53e158f0e585ee434cb68","impliedFormat":99},{"version":"8aef1f2bd94f2409cc6f7f26e31648f39409ba5623032654d0e80cadfcc864cb","impliedFormat":99},{"version":"83eb2cbb1913c3adb9cbf391eacac9bb6ea2627737e4a3c0350d78bc8e1c040a","impliedFormat":99},{"version":"4401d9e598f79416073ca11228aa611d769c212f2815c97ea11f045408e1583b","impliedFormat":99},{"version":"697929cc709ce1a14bfa22637796c90de5a7deac1afc32d703aed10cd148230b","impliedFormat":99},{"version":"a96c285e78d88334d074cc966ceadc5ed67608dfac9c6626a0f800288b692ccc","impliedFormat":99},{"version":"c2bff621d611a1cc7e0cbf6f8bb2e5fd99930b159d80bfc721bd6e2f3ac1af50","impliedFormat":99},{"version":"56e9483c87ffd60f3811152a21d9704384c6539b13fef717ddbf99c5d944c330","impliedFormat":99},{"version":"5c06912ea08265c5b0b46e34ccb3c2082cd608bce26e80d9d810af2cc47fc990","impliedFormat":99},{"version":"32f816bc6d64a56503bb2398846ba92f6e058d93a57ca8dba27790b8214fc88c","impliedFormat":99},{"version":"99c9b803342e29e16248f6d03fccbc88f202c57852c4ef2f8f37407965cfbb6a","impliedFormat":99},{"version":"9057244241137ab9d0f8e7b2419d26d6b5794c063ff2a390047ab733e17a84f6","impliedFormat":99},{"version":"68a5d0c31d7f136af350c10d778043fabe5c94407495d9417fdf8e543ac277de","impliedFormat":99},{"version":"afe62de8880caa0ca0cf59e8bb37d93f6d4d19d7ee887ec9b88cc5b79c2e2cad","impliedFormat":99},{"version":"0c46d7c267ba59b302512de340f4c92b97764eafd086c5b13477fedfa953385d","impliedFormat":99},{"version":"0f2e941fbb7fa25b52f407745686b2e905ec03225af1de5285dc8113cf9f38cc","impliedFormat":99},{"version":"a12f3295a92f365c2919a9b128984c35486282b7de8f3ff81fc360b8f137aaa5","impliedFormat":99},{"version":"80b3f9c2b731626233662c38a5c4ca60a1ae28775a031d59b105672ef1a3f934","impliedFormat":99},{"version":"c326bb72f933aa18f366a29a27dfd4193749c4c077b0464bb31054134a84aa8b","impliedFormat":99},{"version":"0222992caad46191f90e9a5987e0c92ca95c5bb631f8f953e4c92b700411321e","impliedFormat":99},{"version":"fbb281974839d3fcc1fc0eb70b71f68688d9d2e3c719f7956f02ada2d03b0e2a","impliedFormat":99},{"version":"f9c21a69d044828e19f2b9e202b4fb1a1de1927fdd7e7ff0c40d4f63ebcc9b42","impliedFormat":99},{"version":"df38839fca3589013d3cd76564185ab4d19ce938593a27602cfd3e50f42424ab","impliedFormat":99},{"version":"c44f3421179cfb7ac73a38b1b9e1d5d229228327e0ede465d9d9a21c5039203d","impliedFormat":99},{"version":"b4d6ec77adcdc6728c52f2739954c7f5ae1c9598c5f0a6b8e3ae73989590e9d5","impliedFormat":99},{"version":"05718aee3a6d1193f2a4b1772a3ef60f1ebc0228a293b94c84a602fbec0ec5e0","impliedFormat":99},{"version":"b62e58a89eb8b818d7422360e5ef6f69038be1cdac57ae5fabe6f1060aa880dd","impliedFormat":99},{"version":"eb4c841c0bf793dd919904718220df9623006e90628e7e332b708239a5cd3c42","impliedFormat":99},{"version":"0dea1946e1a188dcefc1a78bd3e8d206b482bb0e34205c8bee073bcf9e9a81a8","impliedFormat":99},{"version":"57f207358f2409974d35d0c62cb39b0e2122d87f74314ac36f362a591b0eb02e","impliedFormat":99},{"version":"c9d4c7b66b4f74273a4cb6fff0b42833916c043a4cfa450a13a71ab3a261ad6c","impliedFormat":99},{"version":"943e697697e9e73676b145c331f114e733753cb920d08882f8db5faa841e0f41","impliedFormat":99},{"version":"3dc164317289da2ec08166baca1c10ca42b29fa2ea51d4b1769748c3c06d4da1","impliedFormat":99},{"version":"ca92a9ee21c608133d7c5d16e16936e072b6d48b5a7258736eacc19f76beac38","impliedFormat":99},{"version":"87d9d29dbc745f182683f63187bf3d53fd8673e5fca38ad5eaab69798ed29fbc","impliedFormat":1},{"version":"db6d9a3de83202ef18f6cabbb064362b6ec796fa5499e18e89cbbd1f22f81902","impliedFormat":99},{"version":"1bc55655e0c89b5d02451cdfd1d11595aa3b4c55ee829fe502ab352218ef6d1c","impliedFormat":99},{"version":"f8c341677219569376d0eb374bc9c8483c7d13a7d9ba7820ddd68aa188e641b6","impliedFormat":99},{"version":"6e8a8d10c8e40378dc5aa955218c5b4f374465eebc313adc4bafb69b9ad4d77d","impliedFormat":99},{"version":"51eb031a7f09d002181adb6a235a49b25995ab954e9f319b9edab0a8dc3f6e8e","impliedFormat":99},{"version":"3bc01a0f49b6a90662942f70139d9d44b8eaf2527ab95bdaf3a1a7d0383e65c2","impliedFormat":99},{"version":"1fc08a76433c326036f4b07b8eabb370f0e4b66429a17a940b2eadf82e4cd0c0","impliedFormat":99},{"version":"9d71b80f4dd663e7be4960a4b4fc48bdff4f1db34ffc9a3c01b3fa7de1ed2330","impliedFormat":99},{"version":"42670fd2d98fce7eaa84ddb1ba6a2bb6015df92db527913f869eb545d94e60f6","impliedFormat":99},{"version":"dcc306d9e63904256ba262f23cfa59fbfcef86f4caeb88835146164ca2a19bc3","impliedFormat":99},{"version":"18cee427b1962391970a74a31bbd4c150ab4bea0118dfa0ce9722fa276f1530b","impliedFormat":99},{"version":"d53ce1daa4010a2195a1710b2da24e464afc8f8b8dbe976ef3626a5a53e3042c","impliedFormat":99},{"version":"1ce643fded91c3a62f16ba0c7f5e607f68d5792a0282c57019aa64ce61df5c05","impliedFormat":99},{"version":"08b9b1b7f590e2b9dce12e29ef7cc0b0257a1aaea8d0fc2cd88233e36f716d5f","impliedFormat":99},{"version":"1e9201bf6f6968b3a2e05fa337b2d824a9de4f8a4fabb43d3a39def1bacc40b9","impliedFormat":99},{"version":"6a2b97a8d4f8d77bfde0ad800d2ca49f274fa0e25036645345168f033a8b559e","impliedFormat":99},{"version":"676ecc05abaf7e2a33686da7f5a998a8812fde2b4b42cb756b8ee63ef22dad55","impliedFormat":99},{"version":"cca1205cd000d7a9a19dda43d3bd5079ed8d70f81ad1f7d3912d2c4d68c19bcc","impliedFormat":99},{"version":"e98020ecd0cca8549262c22e1e566e35232e038650ab9dec76c4d9c343cd22c0","impliedFormat":99},{"version":"ca747835676df2aa94222860024b77a548e1c1507c3c4fafc25f2d92973f1c19","impliedFormat":99},{"version":"c024e4c849cbd9492e428f6f686d5d47c13f8b1978856abc0b11b758d26469d2","impliedFormat":99},{"version":"c392ac93c5e068db0465a6657921c5e7f191abd0b437b4a9c2adc36da94b0c74","impliedFormat":99},{"version":"479d563dabfecd2b14d7ec2537d3511c20d2a3440296fef7196edbb8b494d3dd","impliedFormat":99},{"version":"322131ab9e1654f5213c906962bc32778f54e7d535e82e2230b852d319ae8621","impliedFormat":99},{"version":"6f7065ce4d734d131e3d2c01210d511cff0e5fae015c31482b320a834825c448","impliedFormat":99},{"version":"247b3b8c56f8371ada220c9a9f6add3dfc4fdd2b9071bedb5ed419ea10940452","impliedFormat":99},{"version":"4a76d4e462ed14f907f9481cefebe4ceab9ac5c5b3aa4385c345d8a9f4cda619","impliedFormat":99},{"version":"b1f0deff4fe7bf2f0cb9c21e20be987cbb795315dcadac0b68d9e76c95966ca9","impliedFormat":99},{"version":"0215e7d5a64add35e3b4299938382992b0fc30dd2831ff5ecbb8921a292c0bcc","impliedFormat":99},{"version":"eb97b7250139e59ed75255aef10fc86db69cd581bde7e22e6489b0b040f4c6e4","impliedFormat":99},{"version":"8b2c52cb91dcde62bbfa05daf76ba4da979808cd0e689320fc9762376b4ac6c3","impliedFormat":99},{"version":"9eb7631a1e210d6b0909ffc776eade0f1a70008574cbf9c3649168028bc563f1","impliedFormat":99},{"version":"6b88fe55b86bc79c7520b2679c7986923c71a5bc33854175955e31b5b9e6038b","impliedFormat":99},{"version":"069e31ae523cb318e9aae15f78260447ccd27bffa5f319f56489c0a416490eb0","impliedFormat":99},{"version":"1ff0faca356af9440189026e7ead9f4461af4109fff62c9508b8c0ed9a49ce68","impliedFormat":99},{"version":"0bcf85264f800550fdc97d3cb0ff2f8f7d75a943e01c6c15ec377f4b51bb5f02","impliedFormat":99},{"version":"b4f4fc24849f8b8f21fd31bc16d4057ef33af97e8e3cd57b247399ca506152cc","impliedFormat":99},{"version":"dcf64894451cde209d632119dec1e8fce24e4904b284b940d90435a92a2c6385","impliedFormat":99},{"version":"5aeb99822fa7426946e3a084fe3b60cf8d62b9a22399e3991be0826bf8928b8d","impliedFormat":99},{"version":"780b7574ff647f7592572ac6bebe44d9e44eeae680224a72c83f6df38ba57bbb","impliedFormat":99},{"version":"68f1a4ec2937052ae0dd18407eb8d1b579708970ced79c6e7cfe4a93d0a00385","impliedFormat":99},{"version":"efe0fabfc89403ce6a4a8b1fe3a7633f1161b7e10d9824299560f2d15e4e606e","impliedFormat":99},{"version":"7967fa7a9f6773b95983f48e97e7035febdf1d68e9d6d076e21ea2616c206356","impliedFormat":99},{"version":"d66c9477be46879e98232cd61bbc6f9b7f34d21c57d252b3c6ce626c3497386a","impliedFormat":99},{"version":"39fdb2b6872a2169add72f5d44f397ea69374ea938c5343229e108f007253bf8","impliedFormat":99},{"version":"e765f9158b9a795c34082f712bf8f3f2889b70ffdcf28fb99337a3d00a106d75","impliedFormat":99},{"version":"4c4cd7a14fe65ee08a34e47c43850496cc8ae8e7cc89ec8a2c8458ac4038ee4a","impliedFormat":99},{"version":"5d5e263808e7c276dd788f1a6ad27f227fd41741346dfa56c70dbe38f9fe6151","impliedFormat":99},{"version":"8fe0e21455b63cfd4d5450b7e62b6d6c6f89898fa061bb5984b80cd23efd6926","impliedFormat":99},{"version":"ef7c9468b5a48fa6b69b344224a00b9208ee59133e201e1e97a16c77863ab9af","impliedFormat":99},{"version":"6328ab8645c1d5bb6e8a6842d7948b10f2f3f604a3bb9d3a128323dcb6488d27","impliedFormat":99},{"version":"5939c650a5699e4c1b3afa330ada69d3e34ecf0217f2b4e75af7cee9077a2060","impliedFormat":99},{"version":"8f2dd4412647aea2f4051ec8b633ab31d777c9b818fc13ddb2b4bd3f14c6ab15","impliedFormat":99},{"version":"064565a078082e3aa9e5a010b02965db3dce768e6bd125fa86d51eafd8af6b37","impliedFormat":99},{"version":"5dda0fdf62bcaa5710d1ccd97adea53f875e01e854995e55488256ecba4f84a8","impliedFormat":99},{"version":"57c99c92a7d6b1874c36afbfc38f0a69f40821cb8e5a4c1fc949ab2d0ed9dc48","impliedFormat":99},{"version":"bf0b1e6c1bb4930244203a593c6db7aed456e635c31aba73ee2102c55998861f","impliedFormat":99},{"version":"684fed66904651fd676b78ec044da251651f4dfaedb163df74b2280013d5cd5f","impliedFormat":99},{"version":"1cad8abbc5f25133dea041deb44aa979498ee0b66e1ddc3d00f299e3629d4d6f","impliedFormat":99},{"version":"54dfbe6b81ce997409cc2c0bc37f492eeca1130ad5025e5b9148e857a8e34478","impliedFormat":99},{"version":"4bb6f54e837a952382d05afe37f3fea393c3908b14223cef578b882b00e9b31a","impliedFormat":99},{"version":"f7b3b183e6fbd30930c3e6bf7ce1953433c5cfce3142e1f0247fc4c6c26c5535","impliedFormat":99},{"version":"53c0d5e4b66e6f7fec9b79c3f776b85cd6be1e1d5d62bf57c63ecfde794ec6a5","impliedFormat":99},{"version":"7764e57eda6746e2ddab9b085a0fcb35d2c8ecee5d36759ae21c29038014a824","impliedFormat":99},{"version":"c3bd90fd93652ea125e8ba975bbd68d17f88ccacd0abd408fc2c64d1331a19cc","impliedFormat":99},{"version":"80e2f6580bb45d179d283cfac2863e94ad87c2ddce90e33dfab141ac4115379a","impliedFormat":99},{"version":"ba4896bb93b1a967f9a9797c3d91fd2b771c448f09249757fc0f1dab95277c3d","impliedFormat":99},{"version":"c3ce2db820d63c84554c94c5f929ef7786a4e4a7d61db6fac09bf2e85243e51a","impliedFormat":99},{"version":"8dfeb49bc8ac66938f09bc428ad4285975421bd18558604f0e098932dce8f9da","impliedFormat":99},{"version":"2a0a0bf2a808db87282cb77ff6a339d483dae129a64389ddb389cf0bb85c9f74","impliedFormat":99},{"version":"5d27a5d59ac05633bb38b263a713c2a2b15050dd6037f57efe7b897968778fb8","impliedFormat":99},{"version":"e61ec63942cec5365c27d711a3e47f0189aa2e8dff000f806a91e0a77aa36c10","impliedFormat":99},{"version":"4a4a35f55462e4a6f63a3e7d3264d19af4dc3a1ebc4110dab0dfc38470502ec5","signature":"379b9c1b11d5deb1dceb75f6e77645ee55030af49f711285a6776af42073d1a9"},{"version":"ca842ee17e1574ca9291a751548e5cac18d902cd22626a634f2d4a6db86ccf63","signature":"12e21893ba6e93e9e7b943afdf0055fa73d468d757d59dedf08fc841173c5549"},{"version":"d21066d873144edfe9fb3bf5d97ebe8c8583b5770538cd006af1cfab5e961c4c","signature":"e0b3d0a003400fe67562155a2e36752cbd772d118d4c8c497ee180af735eed1f"},"116053a6044e369ce18afbc09c109aed580de514a441bd2f8096b3be8a810da2",{"version":"f292696d5e92e170dd0faff441fb471cd19d99ddde3906a8fa9c35dc0f623d04","signature":"71e016224f9c0bdc8b73ef694878e06e26226b3e158a1d3720041bcae3a00299"},{"version":"afc82a413b8fdc7e73a9b0179e6902077f3c9f946b3d65425b839693deebeddb","signature":"7e462f9cb43fce4fcd962322c25d06be821c527ffbfd339e556b65dda15bfd52"},"32652391f3e4352cd87c835d270e23e45726899dc92b08fdfda10fedf2c600d0","304a06066d7bbacae40a80f212d350179b8e67ef1b9c53df3eefb486552b9a72",{"version":"8b6824a01148a5f0b9bac41612d43495cb082b3a8cc2b1f14ea33298d6ac00b8","impliedFormat":99},"4908557bd4f7cd90434fe34442f72796506336555a30cc9d3bb3e979a0027295","a1118a63503b42a9064e2f800aa015a6cf4e64096dd04eb64a4acfa330f5bc06",{"version":"e8c62c39c8d15b481db93945b0a559d585858da05e3c5777e05bcf906e25dceb","signature":"63c85adf04dc886f22f2ac162dc6178d3f82066d481f8fd0d3cc94430644d8ef"},{"version":"fe19eba98f46861a630b16349816d352d05e7f860a7cbc4aadad2a41e27c0593","signature":"84e7a673a84e81371e13cd0fbd3a5a6a277aa16d589f2619f08801f80d91a732"},{"version":"8b6824a01148a5f0b9bac41612d43495cb082b3a8cc2b1f14ea33298d6ac00b8","impliedFormat":99},"12cc03a5209f532ba93c00092bc5786556bfd84753469762e791504699092215","711c8a93e47fd95fe319ebe0f8f2ecda8dcdc597737f2a7c475614dcc22b88d8","3f1411bfc3ca1b5e15653741109a3bbc1ba475b71617a38105f45a857b04d201","62ad7f4bcfd092df2882c68cebe981cf0faca9c74a96dc4d92634b38b22aba4a","0762be2f1df66e160dbf3ebe1a7d12a12b339d5aab21a0a1779b95b012028502","c691c822c0d13a63185fc55767761ac6e815de23dc34d51efba51d9910d321d2","630c9ad81802dbdb728bbec11bfd7ccf2cd01c685bf488b0401066d0f7adfbe9","4ceb30ee1a8b74352e6dc7a942a7205ff1797b4117377898f69e82d3901b70f7","ae383940399255914e17903c65605309b68911b38adb630d6e2d3cfdf443feac","5634a6182d01068603f15c9bc035d9a1551dfcd278d4faff591db6ed76b2dead","3980384c2af8c1861f2d8a79df6b0c5a37071538dc836a798f91c28dcdbaad9f","3232115d62932184e3a90afbd09c29a1386adc063c8a1db0824db3ecd28d5c9f",{"version":"70de03ed67389405b413f7832c226e4246dc12391c3b3018c5cec625c0ae7544","signature":"69bb77c74b53e864fb2f9af46222380675a5f020fd677c3d52e1b2b9acdec07f"},{"version":"98fec176e3e3c442256113a906146fb4779e21261ae079d52ade617cef20e15c","signature":"a9ce27dfb7f098794503dc72abe0c2b80dbde41b3f8801387aa4e650ae3ab768"},"2552a31fad45a9ed1bde87e51b038dc0e786cd364b597162263abbf57018949b",{"version":"e8934d21443bb6b31d5710e4dc3c832a9c2c942b81aafd0a95e5efd7dd2ce1ad","affectsGlobalScope":true},"4ad134ab631dff1def977babfa9347c77a4d2dbd64304f33b90a3759e7038519","f0c3e43d0f8651d4ae76699b33751b2724f2789cb0b5dee4b33d07560b99a693"],"root":[496,497,[526,532],[535,555],[1249,1256],[1258,1261],[1263,1280]],"options":{"allowJs":false,"esModuleInterop":true,"jsx":4,"module":99,"skipLibCheck":true,"strict":true,"target":7},"referencedMap":[[496,1],[1280,2],[1277,3],[1278,1],[1279,4],[1251,5],[1252,6],[1258,7],[538,8],[1259,9],[1260,10],[1261,11],[540,12],[1263,13],[1264,14],[1253,15],[542,16],[1265,17],[1266,18],[1255,19],[1254,5],[1256,20],[544,21],[1268,22],[1267,23],[546,24],[1270,25],[1269,26],[547,27],[1272,28],[1271,29],[549,30],[1274,31],[1273,32],[550,33],[551,33],[1250,34],[1249,35],[553,36],[1276,37],[1275,10],[497,38],[514,39],[523,1],[520,40],[518,41],[499,42],[498,1],[519,43],[502,43],[517,44],[504,45],[515,46],[500,1],[507,47],[510,48],[513,49],[509,50],[511,51],[508,1],[512,39],[516,52],[503,1],[586,53],[585,1],[588,54],[587,55],[598,56],[591,57],[599,58],[596,56],[600,59],[594,56],[595,60],[597,61],[593,62],[592,63],[601,64],[589,65],[590,66],[580,1],[581,67],[604,68],[602,69],[603,70],[606,71],[605,72],[583,73],[582,74],[584,75],[1257,76],[1262,76],[890,77],[889,1],[891,78],[884,79],[883,1],[885,80],[887,81],[886,1],[888,82],[893,83],[892,1],[894,84],[744,85],[741,1],[745,86],[750,87],[749,1],[751,88],[753,89],[752,1],[754,90],[787,91],[786,1],[788,92],[790,93],[789,1],[791,94],[793,95],[792,1],[794,96],[800,97],[799,1],[801,98],[803,99],[802,1],[804,100],[809,101],[808,1],[810,102],[806,103],[805,1],[807,104],[1216,105],[1217,1],[1218,106],[812,107],[811,1],[813,108],[820,109],[819,1],[821,110],[733,111],[732,1],[734,112],[731,113],[730,1],[815,114],[817,69],[814,1],[816,115],[818,116],[838,117],[837,1],[839,118],[823,119],[822,1],[824,120],[826,121],[825,1],[827,122],[829,123],[828,1],[830,124],[832,125],[831,1],[833,126],[835,127],[834,1],[836,128],[843,129],[842,1],[844,130],[756,131],[755,1],[757,132],[846,133],[845,1],[847,134],[1037,69],[1038,135],[849,136],[848,1],[850,137],[556,1],[557,1],[558,1],[559,1],[560,1],[561,1],[562,1],[563,1],[564,1],[565,1],[576,138],[566,1],[567,1],[568,1],[569,1],[570,1],[571,1],[572,1],[573,1],[574,1],[575,1],[852,139],[851,140],[853,141],[854,142],[855,143],[1219,1],[870,144],[869,1],[871,145],[857,146],[856,1],[858,147],[860,148],[859,1],[861,149],[863,150],[862,1],[864,151],[873,152],[872,1],[874,153],[876,154],[875,1],[877,155],[881,156],[880,1],[882,157],[896,158],[895,1],[897,159],[797,160],[798,161],[902,162],[901,1],[903,163],[908,164],[907,1],[909,165],[911,166],[910,167],[905,168],[904,1],[906,169],[913,170],[912,1],[914,171],[916,172],[915,1],[917,173],[919,174],[918,1],[920,175],[1239,176],[1242,177],[1232,178],[1233,179],[924,180],[925,1],[926,181],[922,182],[921,1],[923,183],[1220,160],[1221,184],[928,185],[927,1],[929,186],[736,187],[735,1],[737,188],[931,189],[930,1],[932,190],[937,191],[936,1],[938,192],[934,193],[933,1],[935,194],[1248,195],[1247,196],[1246,69],[947,197],[946,198],[945,1],[941,199],[940,200],[939,1],[900,201],[899,202],[898,1],[944,203],[943,204],[942,1],[729,205],[841,206],[840,1],[950,207],[949,208],[948,1],[953,209],[952,210],[951,1],[974,211],[973,212],[972,1],[962,213],[961,214],[960,1],[956,215],[955,216],[954,1],[965,217],[964,218],[963,1],[959,219],[958,220],[957,1],[968,221],[967,222],[966,1],[971,223],[970,224],[969,1],[977,225],[976,226],[975,1],[988,227],[987,228],[986,1],[980,229],[979,230],[978,1],[982,231],[981,232],[991,233],[990,234],[989,1],[868,235],[867,236],[866,1],[865,1],[995,237],[994,238],[993,1],[992,239],[1224,240],[1223,241],[1222,69],[999,242],[998,243],[997,1],[725,244],[1003,245],[1002,246],[1001,1],[1006,247],[1005,248],[1004,1],[740,249],[739,250],[738,1],[985,251],[984,252],[983,1],[780,253],[783,254],[781,255],[782,1],[778,256],[777,257],[776,69],[1014,258],[1013,259],[1012,1],[1011,260],[1007,261],[1010,262],[1008,69],[1009,263],[1017,264],[1016,265],[1015,1],[1020,266],[1019,267],[1018,1],[1024,268],[1023,269],[1022,1],[1021,270],[1027,271],[1026,272],[1025,1],[879,273],[878,160],[1033,274],[1032,275],[1031,1],[1030,276],[1029,1],[1028,69],[1041,277],[1040,278],[1039,1],[1036,279],[1035,280],[1034,1],[1045,281],[1044,282],[1043,1],[1051,283],[1050,284],[1049,1],[1054,285],[1053,286],[1052,1],[1057,287],[1055,288],[1056,140],[1080,289],[1078,290],[1077,1],[1079,69],[1060,291],[1059,292],[1058,1],[1063,293],[1062,294],[1061,1],[1066,295],[1065,296],[1064,1],[1069,297],[1068,298],[1067,1],[1072,299],[1071,300],[1070,1],[1076,301],[1074,302],[1073,1],[1075,69],[1144,303],[1140,304],[1145,305],[721,306],[579,1],[1146,1],[1143,307],[724,308],[1141,309],[1142,310],[720,1],[722,311],[1155,312],[1162,1],[1160,1],[578,1],[1163,313],[1156,1],[1138,314],[1137,315],[1147,316],[1152,1],[719,1],[1161,1],[1151,1],[1153,317],[1154,318],[1159,319],[1149,320],[1150,321],[1139,322],[1157,1],[1158,1],[723,1],[728,323],[727,324],[726,1],[1082,325],[1081,326],[1085,327],[1084,328],[1083,1],[1121,329],[1120,330],[1119,1],[1109,331],[1108,332],[1107,1],[1088,333],[1087,334],[1086,1],[1091,335],[1090,336],[1089,1],[1094,337],[1093,338],[1092,1],[1118,339],[1117,340],[1116,1],[1097,341],[1096,342],[1095,1],[1106,343],[1105,344],[1101,1],[1100,345],[1098,346],[1099,1],[1112,347],[1111,348],[1110,1],[1115,349],[1114,350],[1113,1],[1127,351],[1126,352],[1125,1],[1124,353],[1123,354],[1122,1],[1227,355],[1226,356],[1225,69],[1130,357],[1129,358],[1128,1],[1133,359],[1132,360],[1131,1],[1136,361],[1135,362],[1134,1],[1104,363],[1103,364],[1102,1],[1048,365],[1047,366],[1046,1],[1042,367],[796,368],[748,369],[747,370],[746,1],[1244,371],[1243,69],[1245,372],[785,373],[784,374],[996,375],[1000,69],[1229,376],[1228,1],[1168,377],[1171,378],[1172,76],[1175,379],[1179,380],[1215,381],[1182,382],[1183,383],[1214,384],[1186,385],[1189,386],[779,374],[1192,387],[1195,388],[743,389],[1204,390],[1207,391],[1198,392],[1210,393],[1213,394],[1201,395],[1234,1],[1231,396],[1230,160],[653,1],[658,397],[655,398],[654,399],[657,400],[656,399],[609,401],[610,402],[611,403],[608,404],[607,69],[614,405],[615,406],[663,407],[664,1],[665,408],[631,409],[632,410],[681,1],[682,411],[633,405],[634,412],[703,413],[700,1],[701,414],[702,415],[704,416],[666,417],[667,418],[616,419],[1148,420],[668,421],[669,422],[626,423],[618,1],[629,424],[630,425],[617,1],[627,420],[628,426],[639,405],[640,427],[690,428],[693,429],[696,1],[697,1],[694,1],[695,430],[688,1],[691,1],[692,1],[689,431],[635,405],[636,432],[637,405],[638,433],[651,1],[652,434],[659,435],[660,436],[707,437],[706,438],[708,1],[710,439],[705,440],[711,441],[709,420],[718,442],[687,443],[686,69],[685,423],[642,444],[641,405],[644,445],[643,405],[699,446],[698,1],[646,447],[645,405],[648,448],[647,405],[662,449],[661,405],[714,450],[716,451],[713,452],[715,1],[712,440],[613,453],[612,423],[671,454],[670,455],[620,456],[624,405],[623,457],[625,458],[621,459],[619,459],[622,460],[684,461],[683,462],[650,463],[649,405],[680,464],[679,1],[676,465],[675,466],[673,1],[674,467],[672,1],[678,468],[677,1],[717,1],[577,69],[1166,1],[1167,469],[1164,1],[1165,470],[1235,1],[1236,471],[1169,1],[1170,472],[1173,1],[1174,473],[1177,474],[1178,475],[1237,1],[1238,476],[1240,1],[1241,477],[1181,478],[1180,1],[1185,479],[1184,1],[1188,480],[1187,1],[1191,481],[1190,482],[1194,483],[1193,69],[742,69],[1203,484],[1202,1],[1206,485],[1205,69],[1197,486],[1196,69],[1209,487],[1208,1],[1212,488],[1211,69],[1200,489],[1199,1],[255,1],[775,490],[771,491],[758,1],[774,492],[767,493],[765,494],[764,494],[763,493],[760,494],[761,493],[769,495],[762,494],[759,493],[766,494],[772,496],[773,497],[768,498],[770,494],[125,499],[126,499],[127,500],[73,501],[128,502],[129,503],[130,504],[71,1],[131,505],[132,506],[133,507],[134,508],[135,509],[136,510],[137,510],[138,511],[139,512],[140,513],[141,514],[74,1],[72,1],[142,515],[143,516],[144,517],[178,518],[145,519],[146,1],[147,520],[148,521],[149,522],[150,523],[151,524],[152,525],[153,526],[154,527],[155,528],[156,528],[157,529],[158,1],[159,530],[160,531],[162,532],[161,533],[163,534],[164,535],[165,536],[166,537],[167,538],[168,539],[169,540],[170,541],[171,542],[172,543],[173,544],[174,545],[175,546],[75,1],[76,547],[77,1],[78,1],[121,548],[122,549],[123,1],[124,534],[176,550],[177,551],[1176,1],[182,552],[401,69],[183,553],[181,554],[403,555],[402,556],[795,69],[179,557],[399,1],[180,558],[62,1],[64,559],[398,69],[272,69],[534,560],[533,1],[79,1],[63,1],[524,561],[522,562],[521,563],[525,564],[444,565],[449,3],[439,566],[221,567],[259,568],[426,569],[254,570],[236,1],[214,1],[219,1],[416,571],[285,572],[220,1],[213,573],[262,574],[263,575],[397,576],[413,577],[309,578],[420,579],[421,580],[419,581],[418,1],[417,582],[261,583],[222,584],[352,1],[353,585],[245,586],[223,587],[290,586],[287,586],[192,586],[257,588],[256,1],[425,589],[435,1],[199,1],[374,590],[375,591],[369,69],[472,1],[377,1],[378,592],[370,593],[477,594],[476,595],[471,1],[468,1],[412,596],[411,1],[470,597],[371,69],[211,598],[200,599],[203,1],[208,1],[209,600],[202,601],[206,601],[205,602],[210,603],[473,1],[469,1],[475,604],[474,1],[201,605],[463,606],[466,607],[297,608],[296,609],[207,610],[295,611],[480,69],[294,612],[279,1],[483,1],[486,1],[485,69],[487,613],[185,1],[422,614],[423,615],[424,616],[198,1],[247,1],[197,617],[184,1],[390,69],[190,618],[389,619],[388,620],[379,1],[380,1],[387,1],[382,1],[385,621],[381,1],[383,622],[386,623],[384,622],[218,1],[195,1],[196,586],[267,1],[273,624],[274,625],[271,626],[269,627],[270,628],[265,1],[395,592],[312,592],[443,629],[450,630],[454,631],[429,632],[428,1],[282,1],[488,633],[438,634],[372,635],[373,636],[367,637],[358,1],[394,638],[359,639],[396,640],[392,641],[391,1],[393,1],[364,1],[351,642],[430,643],[431,644],[361,645],[365,646],[356,647],[408,648],[437,649],[289,650],[328,651],[193,652],[436,653],[189,654],[275,655],[266,1],[276,656],[340,657],[264,1],[339,658],[70,1],[333,659],[246,1],[354,660],[329,1],[194,1],[240,1],[337,661],[217,1],[277,662],[363,663],[427,664],[362,1],[336,1],[268,1],[342,665],[343,666],[215,1],[345,667],[347,668],[346,669],[249,1],[335,652],[349,670],[334,671],[341,672],[225,1],[229,1],[228,1],[227,1],[232,1],[226,1],[234,1],[231,1],[230,1],[233,1],[235,673],[224,1],[321,674],[320,1],[326,675],[322,676],[325,677],[324,677],[327,675],[323,676],[244,678],[313,679],[434,680],[489,1],[458,681],[460,682],[360,683],[459,684],[432,643],[376,643],[216,1],[314,685],[241,686],[242,687],[243,688],[239,689],[407,689],[291,689],[315,690],[292,690],[238,691],[237,1],[319,692],[318,693],[317,694],[316,695],[433,696],[406,697],[405,698],[368,699],[400,700],[404,701],[415,702],[414,703],[410,704],[308,705],[310,706],[307,707],[348,708],[338,1],[448,1],[350,709],[409,1],[278,710],[357,614],[355,711],[280,712],[283,713],[484,1],[281,714],[284,714],[446,1],[445,1],[447,1],[482,1],[286,715],[305,716],[212,717],[260,1],[188,718],[311,1],[452,69],[187,1],[462,719],[304,69],[456,592],[303,720],[441,721],[302,719],[191,1],[464,722],[300,69],[301,69],[293,1],[186,1],[299,723],[298,724],[248,725],[366,527],[288,527],[344,1],[331,726],[330,1],[204,605],[306,69],[442,727],[65,69],[68,728],[69,729],[66,69],[67,1],[258,547],[253,730],[252,1],[251,731],[250,1],[440,732],[451,733],[453,734],[455,735],[457,736],[461,737],[495,738],[465,738],[494,739],[467,740],[478,741],[479,742],[481,743],[490,744],[493,617],[492,1],[491,745],[501,1],[506,746],[505,747],[332,748],[60,1],[61,1],[10,1],[11,1],[13,1],[12,1],[2,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[3,1],[22,1],[23,1],[4,1],[24,1],[28,1],[25,1],[26,1],[27,1],[29,1],[30,1],[31,1],[5,1],[32,1],[33,1],[34,1],[35,1],[6,1],[39,1],[36,1],[37,1],[38,1],[40,1],[7,1],[41,1],[46,1],[47,1],[42,1],[43,1],[44,1],[45,1],[8,1],[51,1],[48,1],[49,1],[50,1],[52,1],[9,1],[53,1],[54,1],[55,1],[57,1],[56,1],[1,1],[58,1],[59,1],[97,749],[109,750],[95,751],[110,752],[119,753],[86,754],[87,755],[85,756],[118,745],[113,757],[117,758],[89,759],[106,760],[88,761],[116,762],[83,763],[84,757],[90,764],[91,1],[96,765],[94,764],[81,766],[120,767],[111,768],[100,769],[99,764],[101,770],[104,771],[98,772],[102,773],[114,745],[92,774],[93,775],[105,776],[82,752],[108,777],[107,764],[103,778],[112,1],[80,1],[115,779],[535,780],[532,781],[528,782],[554,783],[531,784],[536,785],[530,786],[527,787],[526,788],[537,789],[555,780],[539,790],[541,790],[543,790],[545,790],[548,790],[552,780],[529,780]],"semanticDiagnosticsPerFile":[[526,[{"start":21,"length":16,"code":7016,"category":1,"messageText":{"messageText":"Could not find a declaration file for module 'better-sqlite3'. '/Users/fuomag9/Documents/Dev/caddy-proxy-manager/node_modules/better-sqlite3/lib/index.js' implicitly has an 'any' type.","category":1,"code":7016,"next":[{"info":{"moduleReference":"better-sqlite3","mode":99}}]}}]],[527,[{"start":21,"length":16,"code":7016,"category":1,"messageText":{"messageText":"Could not find a declaration file for module 'better-sqlite3'. '/Users/fuomag9/Documents/Dev/caddy-proxy-manager/node_modules/better-sqlite3/lib/index.js' implicitly has an 'any' type.","category":1,"code":7016,"next":[{"info":{"moduleReference":"better-sqlite3","mode":99}}]}}]],[532,[{"start":4904,"length":6,"code":2322,"category":1,"messageText":{"messageText":"Type 'SessionContext | null' is not assignable to type 'SessionContext'.","category":1,"code":2322,"next":[{"messageText":"Type 'null' is not assignable to type 'SessionContext'.","category":1,"code":2322}]}}]],[1254,[{"start":879,"length":4,"code":2769,"category":1,"messageText":{"messageText":"No overload matches this call.","category":1,"code":2769,"next":[{"messageText":"Overload 1 of 2, '(props: { component: ElementType; } & GridBaseProps & { sx?: SxProps | undefined; } & SystemProps<...> & Omit<...>): Element | null', gave the following error.","category":1,"code":2772,"next":[{"messageText":"Property 'component' is missing in type '{ children: Element; item: true; xs: number; sm: number; md: number; lg: number; key: string; }' but required in type '{ component: ElementType; }'.","category":1,"code":2741,"canonicalHead":{"code":2322,"messageText":"Type '{ children: Element; item: true; xs: number; sm: number; md: number; lg: number; key: string; }' is not assignable to type '{ component: ElementType; }'."}}]},{"messageText":"Overload 2 of 2, '(props: DefaultComponentProps>): Element | null', gave the following error.","category":1,"code":2772,"next":[{"messageText":"Type '{ children: Element; item: true; xs: number; sm: number; md: number; lg: number; key: string; }' is not assignable to type 'IntrinsicAttributes & GridBaseProps & { sx?: SxProps | undefined; } & SystemProps & Omit<...>'.","category":1,"code":2322,"next":[{"messageText":"Property 'item' does not exist on type 'IntrinsicAttributes & GridBaseProps & { sx?: SxProps | undefined; } & SystemProps & Omit<...>'.","category":1,"code":2339}]}]}]},"relatedInformation":[{"file":"./node_modules/@mui/types/esm/index.d.ts","start":2849,"length":9,"messageText":"'component' is declared here.","category":3,"code":2728}]}]],[1267,[{"start":1228,"length":4,"code":2769,"category":1,"messageText":{"messageText":"No overload matches this call.","category":1,"code":2769,"next":[{"messageText":"Overload 1 of 2, '(props: { component: ElementType; } & GridBaseProps & { sx?: SxProps | undefined; } & SystemProps<...> & Omit<...>): Element | null', gave the following error.","category":1,"code":2772,"next":[{"messageText":"Property 'component' is missing in type '{ children: Element; item: true; xs: number; md: number; key: number; }' but required in type '{ component: ElementType; }'.","category":1,"code":2741,"canonicalHead":{"code":2322,"messageText":"Type '{ children: Element; item: true; xs: number; md: number; key: number; }' is not assignable to type '{ component: ElementType; }'."}}]},{"messageText":"Overload 2 of 2, '(props: DefaultComponentProps>): Element | null', gave the following error.","category":1,"code":2772,"next":[{"messageText":"Type '{ children: Element; item: true; xs: number; md: number; key: number; }' is not assignable to type 'IntrinsicAttributes & GridBaseProps & { sx?: SxProps | undefined; } & SystemProps & Omit<...>'.","category":1,"code":2322,"next":[{"messageText":"Property 'item' does not exist on type 'IntrinsicAttributes & GridBaseProps & { sx?: SxProps | undefined; } & SystemProps & Omit<...>'.","category":1,"code":2339}]}]}]},"relatedInformation":[{"file":"./node_modules/@mui/types/esm/index.d.ts","start":2849,"length":9,"messageText":"'component' is declared here.","category":3,"code":2728}]}]],[1275,[{"start":1995,"length":4,"code":2769,"category":1,"messageText":{"messageText":"No overload matches this call.","category":1,"code":2769,"next":[{"messageText":"Overload 1 of 2, '(props: { component: ElementType; } & GridBaseProps & { sx?: SxProps | undefined; } & SystemProps<...> & Omit<...>): Element | null', gave the following error.","category":1,"code":2772,"next":[{"messageText":"Property 'component' is missing in type '{ children: Element; item: true; xs: number; sm: number; }' but required in type '{ component: ElementType; }'.","category":1,"code":2741,"canonicalHead":{"code":2322,"messageText":"Type '{ children: Element; item: true; xs: number; sm: number; }' is not assignable to type '{ component: ElementType; }'."}}]},{"messageText":"Overload 2 of 2, '(props: DefaultComponentProps>): Element | null', gave the following error.","category":1,"code":2772,"next":[{"messageText":"Type '{ children: Element; item: true; xs: number; sm: number; }' is not assignable to type 'IntrinsicAttributes & GridBaseProps & { sx?: SxProps | undefined; } & SystemProps & Omit<...>'.","category":1,"code":2322,"next":[{"messageText":"Property 'item' does not exist on type 'IntrinsicAttributes & GridBaseProps & { sx?: SxProps | undefined; } & SystemProps & Omit<...>'.","category":1,"code":2339}]}]}]},"relatedInformation":[{"file":"./node_modules/@mui/types/esm/index.d.ts","start":2849,"length":9,"messageText":"'component' is declared here.","category":3,"code":2728}]},{"start":2163,"length":4,"code":2769,"category":1,"messageText":{"messageText":"No overload matches this call.","category":1,"code":2769,"next":[{"messageText":"Overload 1 of 2, '(props: { component: ElementType; } & GridBaseProps & { sx?: SxProps | undefined; } & SystemProps<...> & Omit<...>): Element | null', gave the following error.","category":1,"code":2772,"next":[{"messageText":"Property 'component' is missing in type '{ children: Element; item: true; xs: number; sm: number; }' but required in type '{ component: ElementType; }'.","category":1,"code":2741,"canonicalHead":{"code":2322,"messageText":"Type '{ children: Element; item: true; xs: number; sm: number; }' is not assignable to type '{ component: ElementType; }'."}}]},{"messageText":"Overload 2 of 2, '(props: DefaultComponentProps>): Element | null', gave the following error.","category":1,"code":2772,"next":[{"messageText":"Type '{ children: Element; item: true; xs: number; sm: number; }' is not assignable to type 'IntrinsicAttributes & GridBaseProps & { sx?: SxProps | undefined; } & SystemProps & Omit<...>'.","category":1,"code":2322,"next":[{"messageText":"Property 'item' does not exist on type 'IntrinsicAttributes & GridBaseProps & { sx?: SxProps | undefined; } & SystemProps & Omit<...>'.","category":1,"code":2339}]}]}]},"relatedInformation":[{"file":"./node_modules/@mui/types/esm/index.d.ts","start":2849,"length":9,"messageText":"'component' is declared here.","category":3,"code":2728}]},{"start":2328,"length":4,"code":2769,"category":1,"messageText":{"messageText":"No overload matches this call.","category":1,"code":2769,"next":[{"messageText":"Overload 1 of 2, '(props: { component: ElementType; } & GridBaseProps & { sx?: SxProps | undefined; } & SystemProps<...> & Omit<...>): Element | null', gave the following error.","category":1,"code":2772,"next":[{"messageText":"Property 'component' is missing in type '{ children: Element; item: true; xs: number; sm: number; }' but required in type '{ component: ElementType; }'.","category":1,"code":2741,"canonicalHead":{"code":2322,"messageText":"Type '{ children: Element; item: true; xs: number; sm: number; }' is not assignable to type '{ component: ElementType; }'."}}]},{"messageText":"Overload 2 of 2, '(props: DefaultComponentProps>): Element | null', gave the following error.","category":1,"code":2772,"next":[{"messageText":"Type '{ children: Element; item: true; xs: number; sm: number; }' is not assignable to type 'IntrinsicAttributes & GridBaseProps & { sx?: SxProps | undefined; } & SystemProps & Omit<...>'.","category":1,"code":2322,"next":[{"messageText":"Property 'item' does not exist on type 'IntrinsicAttributes & GridBaseProps & { sx?: SxProps | undefined; } & SystemProps & Omit<...>'.","category":1,"code":2339}]}]}]},"relatedInformation":[{"file":"./node_modules/@mui/types/esm/index.d.ts","start":2849,"length":9,"messageText":"'component' is declared here.","category":3,"code":2728}]}]],[1279,[{"start":6101,"length":38,"messageText":"Cannot find module '../../app/api/auth/callback/route.js' or its corresponding type declarations.","category":1,"code":2307}]]],"affectedFilesPendingEmit":[1280,1279,1251,1252,1258,538,1259,1260,1261,540,1263,1264,1253,542,1265,1266,1255,1254,1256,544,1268,1267,546,1270,1269,547,1272,1271,549,1274,1273,550,551,1250,1249,553,1276,1275,535,532,528,554,531,536,530,527,526,537,555,539,541,543,545,548,552,529],"version":"5.9.3"} \ No newline at end of file +{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/typescript/lib/lib.esnext.disposable.d.ts","./node_modules/typescript/lib/lib.esnext.float16.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/@types/react/global.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@types/react/index.d.ts","./node_modules/next/dist/styled-jsx/types/css.d.ts","./node_modules/next/dist/styled-jsx/types/macro.d.ts","./node_modules/next/dist/styled-jsx/types/style.d.ts","./node_modules/next/dist/styled-jsx/types/global.d.ts","./node_modules/next/dist/styled-jsx/types/index.d.ts","./node_modules/next/dist/server/get-page-files.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/crypto.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/events.d.ts","./node_modules/buffer/index.d.ts","./node_modules/undici-types/utility.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client-stats.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/h2c-client.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-call-history.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/snapshot-agent.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/cache-interceptor.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/web-globals/fetch.d.ts","./node_modules/@types/node/web-globals/navigator.d.ts","./node_modules/@types/node/web-globals/storage.d.ts","./node_modules/@types/node/web-globals/streams.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.d.ts","./node_modules/@types/node/inspector.generated.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/sqlite.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/index.d.ts","./node_modules/@types/react/canary.d.ts","./node_modules/@types/react/experimental.d.ts","./node_modules/@types/react-dom/index.d.ts","./node_modules/@types/react-dom/canary.d.ts","./node_modules/@types/react-dom/experimental.d.ts","./node_modules/next/dist/lib/fallback.d.ts","./node_modules/next/dist/compiled/webpack/webpack.d.ts","./node_modules/next/dist/shared/lib/modern-browserslist-target.d.ts","./node_modules/next/dist/shared/lib/entry-constants.d.ts","./node_modules/next/dist/shared/lib/constants.d.ts","./node_modules/next/dist/server/config.d.ts","./node_modules/next/dist/lib/load-custom-routes.d.ts","./node_modules/next/dist/shared/lib/image-config.d.ts","./node_modules/next/dist/build/webpack/plugins/subresource-integrity-plugin.d.ts","./node_modules/next/dist/server/body-streams.d.ts","./node_modules/next/dist/server/lib/cache-control.d.ts","./node_modules/next/dist/lib/setup-exception-listeners.d.ts","./node_modules/next/dist/lib/worker.d.ts","./node_modules/next/dist/lib/constants.d.ts","./node_modules/next/dist/lib/bundler.d.ts","./node_modules/next/dist/client/components/app-router-headers.d.ts","./node_modules/next/dist/client/components/router-reducer/router-reducer-types.d.ts","./node_modules/next/dist/client/flight-data-helpers.d.ts","./node_modules/next/dist/client/components/segment-cache-impl/navigation.d.ts","./node_modules/next/dist/client/components/segment-cache-impl/cache-key.d.ts","./node_modules/next/dist/shared/lib/segment-cache/segment-value-encoding.d.ts","./node_modules/next/dist/client/components/segment-cache-impl/scheduler.d.ts","./node_modules/next/dist/client/components/segment-cache-impl/prefetch.d.ts","./node_modules/next/dist/client/route-params.d.ts","./node_modules/next/dist/client/components/segment-cache-impl/cache-map.d.ts","./node_modules/next/dist/client/components/segment-cache-impl/cache.d.ts","./node_modules/next/dist/client/components/segment-cache.d.ts","./node_modules/next/dist/client/components/router-reducer/fetch-server-response.d.ts","./node_modules/next/dist/shared/lib/app-router-types.d.ts","./node_modules/next/dist/build/static-paths/types.d.ts","./node_modules/next/dist/build/rendering-mode.d.ts","./node_modules/next/dist/server/lib/router-utils/build-prefetch-segment-data-route.d.ts","./node_modules/next/dist/server/require-hook.d.ts","./node_modules/next/dist/server/lib/experimental/ppr.d.ts","./node_modules/next/dist/lib/page-types.d.ts","./node_modules/next/dist/build/segment-config/app/app-segment-config.d.ts","./node_modules/next/dist/build/segment-config/pages/pages-segment-config.d.ts","./node_modules/next/dist/build/analysis/get-page-static-info.d.ts","./node_modules/next/dist/build/webpack/loaders/get-module-build-info.d.ts","./node_modules/next/dist/build/webpack/plugins/middleware-plugin.d.ts","./node_modules/next/dist/server/node-polyfill-crypto.d.ts","./node_modules/next/dist/server/node-environment-baseline.d.ts","./node_modules/next/dist/server/node-environment-extensions/error-inspect.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-file.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-exit.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-dim.external.d.ts","./node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.d.ts","./node_modules/next/dist/server/node-environment-extensions/random.d.ts","./node_modules/next/dist/server/node-environment-extensions/date.d.ts","./node_modules/next/dist/server/node-environment-extensions/web-crypto.d.ts","./node_modules/next/dist/server/node-environment-extensions/node-crypto.d.ts","./node_modules/next/dist/server/node-environment.d.ts","./node_modules/next/dist/build/page-extensions-type.d.ts","./node_modules/next/dist/server/route-kind.d.ts","./node_modules/next/dist/server/route-definitions/route-definition.d.ts","./node_modules/next/dist/server/route-definitions/app-page-route-definition.d.ts","./node_modules/next/dist/server/lib/cache-handlers/types.d.ts","./node_modules/next/dist/server/response-cache/types.d.ts","./node_modules/next/dist/server/resume-data-cache/cache-store.d.ts","./node_modules/next/dist/server/resume-data-cache/resume-data-cache.d.ts","./node_modules/next/dist/server/render-result.d.ts","./node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.d.ts","./node_modules/next/dist/server/instrumentation/types.d.ts","./node_modules/next/dist/lib/coalesced-function.d.ts","./node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.d.ts","./node_modules/next/dist/server/lib/router-utils/types.d.ts","./node_modules/next/dist/trace/types.d.ts","./node_modules/next/dist/trace/trace.d.ts","./node_modules/next/dist/trace/shared.d.ts","./node_modules/next/dist/trace/index.d.ts","./node_modules/next/dist/build/load-jsconfig.d.ts","./node_modules/@next/env/dist/index.d.ts","./node_modules/next/dist/build/webpack/plugins/telemetry-plugin/use-cache-tracker-utils.d.ts","./node_modules/next/dist/build/webpack/plugins/telemetry-plugin/telemetry-plugin.d.ts","./node_modules/next/dist/telemetry/storage.d.ts","./node_modules/next/dist/build/build-context.d.ts","./node_modules/next/dist/shared/lib/bloom-filter.d.ts","./node_modules/next/dist/build/webpack-config.d.ts","./node_modules/next/dist/build/swc/generated-native.d.ts","./node_modules/next/dist/build/swc/types.d.ts","./node_modules/next/dist/server/dev/parse-version-info.d.ts","./node_modules/next/dist/next-devtools/shared/types.d.ts","./node_modules/next/dist/server/dev/dev-indicator-server-state.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/cache-indicator.d.ts","./node_modules/next/dist/server/lib/parse-stack.d.ts","./node_modules/next/dist/next-devtools/server/shared.d.ts","./node_modules/next/dist/next-devtools/shared/stack-frame.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/utils/get-error-by-type.d.ts","./node_modules/@types/react/jsx-runtime.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/container/runtime-error/render-error.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/shared.d.ts","./node_modules/next/dist/server/dev/debug-channel.d.ts","./node_modules/next/dist/server/dev/hot-reloader-types.d.ts","./node_modules/next/dist/server/lib/i18n-provider.d.ts","./node_modules/next/dist/server/web/next-url.d.ts","./node_modules/next/dist/compiled/@edge-runtime/cookies/index.d.ts","./node_modules/next/dist/server/web/spec-extension/cookies.d.ts","./node_modules/next/dist/server/web/spec-extension/request.d.ts","./node_modules/next/dist/server/after/builtin-request-context.d.ts","./node_modules/next/dist/server/web/spec-extension/fetch-event.d.ts","./node_modules/next/dist/server/web/spec-extension/response.d.ts","./node_modules/next/dist/build/segment-config/middleware/middleware-config.d.ts","./node_modules/next/dist/server/web/types.d.ts","./node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-url.d.ts","./node_modules/next/dist/server/base-http/node.d.ts","./node_modules/next/dist/build/webpack/plugins/next-font-manifest-plugin.d.ts","./node_modules/next/dist/server/route-definitions/locale-route-definition.d.ts","./node_modules/next/dist/server/route-definitions/pages-route-definition.d.ts","./node_modules/next/dist/shared/lib/mitt.d.ts","./node_modules/next/dist/client/with-router.d.ts","./node_modules/next/dist/client/router.d.ts","./node_modules/next/dist/client/route-loader.d.ts","./node_modules/next/dist/client/page-loader.d.ts","./node_modules/next/dist/shared/lib/router/router.d.ts","./node_modules/next/dist/shared/lib/router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.d.ts","./node_modules/next/dist/server/route-modules/pages/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/pages/module.compiled.d.ts","./node_modules/next/dist/build/templates/pages.d.ts","./node_modules/next/dist/server/route-modules/pages/module.d.ts","./node_modules/next/dist/shared/lib/deep-readonly.d.ts","./node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-setup.d.ts","./node_modules/next/dist/server/render.d.ts","./node_modules/next/dist/server/response-cache/index.d.ts","./node_modules/next/dist/server/route-definitions/pages-api-route-definition.d.ts","./node_modules/next/dist/server/route-matches/pages-api-route-match.d.ts","./node_modules/next/dist/server/route-matchers/route-matcher.d.ts","./node_modules/next/dist/server/route-matcher-providers/route-matcher-provider.d.ts","./node_modules/next/dist/server/route-matcher-managers/route-matcher-manager.d.ts","./node_modules/next/dist/server/normalizers/normalizer.d.ts","./node_modules/next/dist/server/normalizers/locale-route-normalizer.d.ts","./node_modules/next/dist/server/normalizers/request/pathname-normalizer.d.ts","./node_modules/next/dist/server/normalizers/request/suffix.d.ts","./node_modules/next/dist/server/normalizers/request/rsc.d.ts","./node_modules/next/dist/server/normalizers/request/prefetch-rsc.d.ts","./node_modules/next/dist/server/normalizers/request/next-data.d.ts","./node_modules/next/dist/server/normalizers/request/segment-prefix-rsc.d.ts","./node_modules/next/dist/server/base-server.d.ts","./node_modules/next/dist/server/lib/async-callback-set.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-regex.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-matcher.d.ts","./node_modules/sharp/lib/index.d.ts","./node_modules/next/dist/server/image-optimizer.d.ts","./node_modules/next/dist/server/next-server.d.ts","./node_modules/next/dist/server/lib/types.d.ts","./node_modules/next/dist/server/lib/lru-cache.d.ts","./node_modules/next/dist/server/lib/dev-bundler-service.d.ts","./node_modules/next/dist/server/use-cache/cache-life.d.ts","./node_modules/next/dist/server/dev/static-paths-worker.d.ts","./node_modules/next/dist/server/dev/next-dev-server.d.ts","./node_modules/next/dist/server/next.d.ts","./node_modules/next/dist/server/lib/render-server.d.ts","./node_modules/next/dist/server/lib/router-server.d.ts","./node_modules/next/dist/shared/lib/router/utils/path-match.d.ts","./node_modules/next/dist/server/lib/router-utils/filesystem.d.ts","./node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.d.ts","./node_modules/next/dist/server/lib/router-utils/router-server-context.d.ts","./node_modules/next/dist/server/route-modules/route-module.d.ts","./node_modules/next/dist/server/load-components.d.ts","./node_modules/next/dist/server/web/adapter.d.ts","./node_modules/next/dist/server/app-render/types.d.ts","./node_modules/next/dist/build/webpack/loaders/metadata/types.d.ts","./node_modules/next/dist/build/webpack/loaders/next-app-loader/index.d.ts","./node_modules/next/dist/server/lib/app-dir-module.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.d.ts","./node_modules/next/dist/server/async-storage/draft-mode-provider.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/headers.d.ts","./node_modules/next/dist/server/app-render/cache-signal.d.ts","./node_modules/next/dist/server/app-render/dynamic-rendering.d.ts","./node_modules/next/dist/server/request/fallback-params.d.ts","./node_modules/next/dist/server/app-render/work-unit-async-storage-instance.d.ts","./node_modules/next/dist/server/lib/lazy-result.d.ts","./node_modules/next/dist/server/lib/implicit-tags.d.ts","./node_modules/next/dist/server/app-render/staged-rendering.d.ts","./node_modules/next/dist/server/app-render/work-unit-async-storage.external.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.d.ts","./node_modules/next/dist/server/app-render/app-render.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/client/components/error-boundary.d.ts","./node_modules/next/dist/client/components/layout-router.d.ts","./node_modules/next/dist/client/components/render-from-template-context.d.ts","./node_modules/next/dist/server/app-render/action-async-storage-instance.d.ts","./node_modules/next/dist/server/app-render/action-async-storage.external.d.ts","./node_modules/next/dist/client/components/client-page.d.ts","./node_modules/next/dist/client/components/client-segment.d.ts","./node_modules/next/dist/server/request/search-params.d.ts","./node_modules/next/dist/client/components/hooks-server-context.d.ts","./node_modules/next/dist/client/components/http-access-fallback/error-boundary.d.ts","./node_modules/next/dist/lib/metadata/types/alternative-urls-types.d.ts","./node_modules/next/dist/lib/metadata/types/extra-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-types.d.ts","./node_modules/next/dist/lib/metadata/types/manifest-types.d.ts","./node_modules/next/dist/lib/metadata/types/opengraph-types.d.ts","./node_modules/next/dist/lib/metadata/types/twitter-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-interface.d.ts","./node_modules/next/dist/lib/metadata/types/resolvers.d.ts","./node_modules/next/dist/lib/metadata/types/icons.d.ts","./node_modules/next/dist/lib/metadata/resolve-metadata.d.ts","./node_modules/next/dist/lib/metadata/metadata.d.ts","./node_modules/next/dist/lib/framework/boundary-components.d.ts","./node_modules/next/dist/server/app-render/rsc/preloads.d.ts","./node_modules/next/dist/server/app-render/rsc/postpone.d.ts","./node_modules/next/dist/server/app-render/rsc/taint.d.ts","./node_modules/next/dist/server/app-render/collect-segment-data.d.ts","./node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.d.ts","./node_modules/next/dist/server/app-render/entry-base.d.ts","./node_modules/next/dist/build/templates/app-page.d.ts","./node_modules/@types/react/jsx-dev-runtime.d.ts","./node_modules/@types/react/compiler-runtime.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/rsc/entrypoints.d.ts","./node_modules/@types/react-dom/client.d.ts","./node_modules/@types/react-dom/static.d.ts","./node_modules/@types/react-dom/server.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/app-page/module.d.ts","./node_modules/next/dist/server/route-modules/app-page/module.compiled.d.ts","./node_modules/next/dist/server/route-definitions/app-route-route-definition.d.ts","./node_modules/next/dist/server/async-storage/work-store.d.ts","./node_modules/next/dist/server/web/http.d.ts","./node_modules/next/dist/server/route-modules/app-route/shared-modules.d.ts","./node_modules/next/dist/client/components/redirect-status-code.d.ts","./node_modules/next/dist/client/components/redirect-error.d.ts","./node_modules/next/dist/build/templates/app-route.d.ts","./node_modules/next/dist/server/route-modules/app-route/module.d.ts","./node_modules/next/dist/server/route-modules/app-route/module.compiled.d.ts","./node_modules/next/dist/build/segment-config/app/app-segments.d.ts","./node_modules/next/dist/build/utils.d.ts","./node_modules/next/dist/build/turborepo-access-trace/types.d.ts","./node_modules/next/dist/build/turborepo-access-trace/result.d.ts","./node_modules/next/dist/build/turborepo-access-trace/helpers.d.ts","./node_modules/next/dist/build/turborepo-access-trace/index.d.ts","./node_modules/next/dist/export/routes/types.d.ts","./node_modules/next/dist/export/types.d.ts","./node_modules/next/dist/export/worker.d.ts","./node_modules/next/dist/build/worker.d.ts","./node_modules/next/dist/build/index.d.ts","./node_modules/next/dist/server/lib/incremental-cache/index.d.ts","./node_modules/next/dist/server/after/after.d.ts","./node_modules/next/dist/server/after/after-context.d.ts","./node_modules/next/dist/server/app-render/work-async-storage-instance.d.ts","./node_modules/next/dist/server/app-render/work-async-storage.external.d.ts","./node_modules/next/dist/server/request/params.d.ts","./node_modules/next/dist/server/route-matches/route-match.d.ts","./node_modules/next/dist/server/request-meta.d.ts","./node_modules/next/dist/cli/next-test.d.ts","./node_modules/next/dist/server/config-shared.d.ts","./node_modules/next/dist/server/base-http/index.d.ts","./node_modules/next/dist/server/api-utils/index.d.ts","./node_modules/next/dist/build/adapter/build-complete.d.ts","./node_modules/next/dist/types.d.ts","./node_modules/next/dist/shared/lib/html-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/utils.d.ts","./node_modules/next/dist/pages/_app.d.ts","./node_modules/next/app.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-cache.d.ts","./node_modules/next/dist/server/web/spec-extension/revalidate.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-no-store.d.ts","./node_modules/next/dist/server/use-cache/cache-tag.d.ts","./node_modules/next/cache.d.ts","./node_modules/next/dist/pages/_document.d.ts","./node_modules/next/document.d.ts","./node_modules/next/dist/shared/lib/dynamic.d.ts","./node_modules/next/dynamic.d.ts","./node_modules/next/dist/pages/_error.d.ts","./node_modules/next/error.d.ts","./node_modules/next/dist/shared/lib/head.d.ts","./node_modules/next/head.d.ts","./node_modules/next/dist/server/request/cookies.d.ts","./node_modules/next/dist/server/request/headers.d.ts","./node_modules/next/dist/server/request/draft-mode.d.ts","./node_modules/next/headers.d.ts","./node_modules/next/dist/shared/lib/get-img-props.d.ts","./node_modules/next/dist/client/image-component.d.ts","./node_modules/next/dist/shared/lib/image-external.d.ts","./node_modules/next/image.d.ts","./node_modules/next/dist/client/link.d.ts","./node_modules/next/link.d.ts","./node_modules/next/dist/client/components/readonly-url-search-params.d.ts","./node_modules/next/dist/client/components/unrecognized-action-error.d.ts","./node_modules/next/dist/client/components/redirect.d.ts","./node_modules/next/dist/client/components/not-found.d.ts","./node_modules/next/dist/client/components/forbidden.d.ts","./node_modules/next/dist/client/components/unauthorized.d.ts","./node_modules/next/dist/client/components/unstable-rethrow.server.d.ts","./node_modules/next/dist/client/components/unstable-rethrow.d.ts","./node_modules/next/dist/client/components/navigation.react-server.d.ts","./node_modules/next/dist/client/components/navigation.d.ts","./node_modules/next/navigation.d.ts","./node_modules/next/router.d.ts","./node_modules/next/dist/client/script.d.ts","./node_modules/next/script.d.ts","./node_modules/next/dist/server/web/spec-extension/user-agent.d.ts","./node_modules/next/dist/compiled/@edge-runtime/primitives/url.d.ts","./node_modules/next/dist/server/web/spec-extension/image-response.d.ts","./node_modules/next/dist/compiled/@vercel/og/satori/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/emoji/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/types.d.ts","./node_modules/next/dist/server/after/index.d.ts","./node_modules/next/dist/server/request/connection.d.ts","./node_modules/next/server.d.ts","./node_modules/next/types/global.d.ts","./node_modules/next/types/compiled.d.ts","./node_modules/next/types.d.ts","./node_modules/next/index.d.ts","./node_modules/next/image-types/global.d.ts","./next-env.d.ts","./node_modules/@auth/core/lib/symbols.d.ts","./node_modules/@auth/core/lib/index.d.ts","./node_modules/@auth/core/lib/vendored/cookie.d.ts","./node_modules/oauth4webapi/build/index.d.ts","./node_modules/@auth/core/lib/utils/cookie.d.ts","./node_modules/@auth/core/warnings.d.ts","./node_modules/@auth/core/lib/utils/logger.d.ts","./node_modules/preact/src/jsx.d.ts","./node_modules/preact/src/index.d.ts","./node_modules/@auth/core/providers/credentials.d.ts","./node_modules/@auth/core/providers/provider-types.d.ts","./node_modules/@auth/core/providers/nodemailer.d.ts","./node_modules/@auth/core/providers/email.d.ts","./node_modules/@auth/core/providers/oauth.d.ts","./node_modules/@auth/core/providers/webauthn.d.ts","./node_modules/@auth/core/providers/index.d.ts","./node_modules/@auth/core/adapters.d.ts","./node_modules/@auth/core/lib/utils/webauthn-utils.d.ts","./node_modules/@auth/core/types.d.ts","./node_modules/@auth/core/lib/utils/env.d.ts","./node_modules/@auth/core/jwt.d.ts","./node_modules/@auth/core/lib/utils/actions.d.ts","./node_modules/@auth/core/index.d.ts","./node_modules/next-auth/lib/types.d.ts","./node_modules/next-auth/lib/index.d.ts","./node_modules/@auth/core/errors.d.ts","./node_modules/next-auth/index.d.ts","./node_modules/next-auth/providers/credentials.d.ts","./src/lib/config.ts","./src/lib/auth.ts","./node_modules/bcryptjs/types.d.ts","./node_modules/bcryptjs/index.d.ts","./node_modules/@prisma/client/runtime/library.d.ts","./node_modules/.prisma/client/index.d.ts","./node_modules/.prisma/client/default.d.ts","./node_modules/@prisma/client/default.d.ts","./src/lib/db.ts","./src/lib/audit.ts","./src/lib/settings.ts","./src/lib/caddy.ts","./src/lib/models/access-lists.ts","./app/(dashboard)/access-lists/actions.ts","./src/lib/models/certificates.ts","./app/(dashboard)/certificates/actions.ts","./src/lib/models/dead-hosts.ts","./app/(dashboard)/dead-hosts/actions.ts","./src/lib/actions.ts","./src/lib/models/proxy-hosts.ts","./app/(dashboard)/proxy-hosts/actions.ts","./src/lib/models/redirect-hosts.ts","./app/(dashboard)/redirects/actions.ts","./app/(dashboard)/settings/actions.ts","./app/api/auth/[...nextauth]/route.ts","./app/api/auth/logout/route.ts","./src/lib/models/audit.ts","./src/lib/models/user.ts","./node_modules/@mui/material/esm/colors/amber.d.ts","./node_modules/@mui/material/esm/colors/blue.d.ts","./node_modules/@mui/material/esm/colors/bluegrey.d.ts","./node_modules/@mui/material/esm/colors/brown.d.ts","./node_modules/@mui/material/esm/colors/common.d.ts","./node_modules/@mui/material/esm/colors/cyan.d.ts","./node_modules/@mui/material/esm/colors/deeporange.d.ts","./node_modules/@mui/material/esm/colors/deeppurple.d.ts","./node_modules/@mui/material/esm/colors/green.d.ts","./node_modules/@mui/material/esm/colors/grey.d.ts","./node_modules/@mui/material/esm/colors/indigo.d.ts","./node_modules/@mui/material/esm/colors/lightblue.d.ts","./node_modules/@mui/material/esm/colors/lightgreen.d.ts","./node_modules/@mui/material/esm/colors/lime.d.ts","./node_modules/@mui/material/esm/colors/orange.d.ts","./node_modules/@mui/material/esm/colors/pink.d.ts","./node_modules/@mui/material/esm/colors/purple.d.ts","./node_modules/@mui/material/esm/colors/red.d.ts","./node_modules/@mui/material/esm/colors/teal.d.ts","./node_modules/@mui/material/esm/colors/yellow.d.ts","./node_modules/@mui/material/esm/colors/index.d.ts","./node_modules/@mui/types/esm/index.d.ts","./node_modules/@mui/material/esm/styles/identifier.d.ts","./node_modules/@mui/material/esm/styles/createpalette.d.ts","./node_modules/@emotion/sheet/dist/declarations/src/index.d.ts","./node_modules/@emotion/sheet/dist/emotion-sheet.cjs.d.mts","./node_modules/@emotion/utils/dist/declarations/src/types.d.ts","./node_modules/@emotion/utils/dist/declarations/src/index.d.ts","./node_modules/@emotion/utils/dist/emotion-utils.cjs.d.mts","./node_modules/@emotion/cache/dist/declarations/src/types.d.ts","./node_modules/@emotion/cache/dist/declarations/src/index.d.ts","./node_modules/@emotion/cache/dist/emotion-cache.cjs.default.d.ts","./node_modules/@emotion/cache/dist/emotion-cache.cjs.d.mts","./node_modules/@emotion/serialize/dist/declarations/src/index.d.ts","./node_modules/@emotion/serialize/dist/emotion-serialize.cjs.d.mts","./node_modules/@emotion/react/dist/declarations/src/context.d.ts","./node_modules/@emotion/react/dist/declarations/src/types.d.ts","./node_modules/@emotion/react/dist/declarations/src/theming.d.ts","./node_modules/@emotion/react/dist/declarations/src/jsx-namespace.d.ts","./node_modules/@emotion/react/dist/declarations/src/jsx.d.ts","./node_modules/@emotion/react/dist/declarations/src/global.d.ts","./node_modules/@emotion/react/dist/declarations/src/keyframes.d.ts","./node_modules/@emotion/react/dist/declarations/src/class-names.d.ts","./node_modules/@emotion/react/dist/declarations/src/css.d.ts","./node_modules/@emotion/react/dist/declarations/src/index.d.ts","./node_modules/@emotion/react/dist/emotion-react.cjs.d.mts","./node_modules/@emotion/styled/dist/declarations/src/jsx-namespace.d.ts","./node_modules/@emotion/styled/dist/declarations/src/types.d.ts","./node_modules/@emotion/styled/dist/declarations/src/index.d.ts","./node_modules/@emotion/styled/dist/emotion-styled.cjs.default.d.ts","./node_modules/@emotion/styled/dist/emotion-styled.cjs.d.mts","./node_modules/@mui/styled-engine/esm/styledengineprovider/styledengineprovider.d.ts","./node_modules/@mui/styled-engine/esm/styledengineprovider/index.d.ts","./node_modules/@mui/styled-engine/esm/globalstyles/globalstyles.d.ts","./node_modules/@mui/styled-engine/esm/globalstyles/index.d.ts","./node_modules/@mui/styled-engine/esm/index.d.ts","./node_modules/@mui/system/esm/style/style.d.ts","./node_modules/@mui/system/esm/style/index.d.ts","./node_modules/@mui/system/esm/borders/borders.d.ts","./node_modules/@mui/system/esm/borders/index.d.ts","./node_modules/@mui/system/esm/createbreakpoints/createbreakpoints.d.ts","./node_modules/@mui/system/esm/createtheme/shape.d.ts","./node_modules/@mui/system/esm/createtheme/createspacing.d.ts","./node_modules/@mui/system/esm/stylefunctionsx/standardcssproperties.d.ts","./node_modules/@mui/system/esm/stylefunctionsx/aliasescssproperties.d.ts","./node_modules/@mui/system/esm/stylefunctionsx/overwritecssproperties.d.ts","./node_modules/@mui/system/esm/stylefunctionsx/stylefunctionsx.d.ts","./node_modules/@mui/system/esm/stylefunctionsx/extendsxprop.d.ts","./node_modules/@mui/system/esm/stylefunctionsx/defaultsxconfig.d.ts","./node_modules/@mui/system/esm/stylefunctionsx/index.d.ts","./node_modules/@mui/system/esm/createtheme/applystyles.d.ts","./node_modules/@mui/system/esm/csscontainerqueries/csscontainerqueries.d.ts","./node_modules/@mui/system/esm/csscontainerqueries/index.d.ts","./node_modules/@mui/system/esm/createtheme/createtheme.d.ts","./node_modules/@mui/system/esm/createtheme/index.d.ts","./node_modules/@mui/system/esm/breakpoints/breakpoints.d.ts","./node_modules/@mui/system/esm/breakpoints/index.d.ts","./node_modules/@mui/system/esm/compose/compose.d.ts","./node_modules/@mui/system/esm/compose/index.d.ts","./node_modules/@mui/system/esm/display/display.d.ts","./node_modules/@mui/system/esm/display/index.d.ts","./node_modules/@mui/system/esm/flexbox/flexbox.d.ts","./node_modules/@mui/system/esm/flexbox/index.d.ts","./node_modules/@mui/system/esm/cssgrid/cssgrid.d.ts","./node_modules/@mui/system/esm/cssgrid/index.d.ts","./node_modules/@mui/system/esm/palette/palette.d.ts","./node_modules/@mui/system/esm/palette/index.d.ts","./node_modules/@mui/system/esm/positions/positions.d.ts","./node_modules/@mui/system/esm/positions/index.d.ts","./node_modules/@mui/system/esm/shadows/shadows.d.ts","./node_modules/@mui/system/esm/shadows/index.d.ts","./node_modules/@mui/system/esm/sizing/sizing.d.ts","./node_modules/@mui/system/esm/sizing/index.d.ts","./node_modules/@mui/system/esm/typography/typography.d.ts","./node_modules/@mui/system/esm/typography/index.d.ts","./node_modules/@mui/system/esm/getthemevalue/getthemevalue.d.ts","./node_modules/@mui/system/esm/getthemevalue/index.d.ts","./node_modules/@mui/private-theming/esm/defaulttheme/index.d.ts","./node_modules/@mui/private-theming/esm/themeprovider/themeprovider.d.ts","./node_modules/@mui/private-theming/esm/themeprovider/index.d.ts","./node_modules/@mui/private-theming/esm/usetheme/usetheme.d.ts","./node_modules/@mui/private-theming/esm/usetheme/index.d.ts","./node_modules/@mui/private-theming/esm/index.d.ts","./node_modules/@mui/system/esm/globalstyles/globalstyles.d.ts","./node_modules/@mui/system/esm/globalstyles/index.d.ts","./node_modules/@mui/system/esm/spacing/spacing.d.ts","./node_modules/@mui/system/esm/spacing/index.d.ts","./node_modules/@mui/system/esm/box/box.d.ts","./node_modules/@mui/system/esm/box/boxclasses.d.ts","./node_modules/@mui/system/esm/box/index.d.ts","./node_modules/@mui/system/esm/createbox/createbox.d.ts","./node_modules/@mui/system/esm/createbox/index.d.ts","./node_modules/@mui/system/esm/createstyled/createstyled.d.ts","./node_modules/@mui/system/esm/createstyled/index.d.ts","./node_modules/@mui/system/esm/styled/styled.d.ts","./node_modules/@mui/system/esm/styled/index.d.ts","./node_modules/@mui/system/esm/usethemeprops/usethemeprops.d.ts","./node_modules/@mui/system/esm/usethemeprops/getthemeprops.d.ts","./node_modules/@mui/system/esm/usethemeprops/index.d.ts","./node_modules/@mui/system/esm/usetheme/usetheme.d.ts","./node_modules/@mui/system/esm/usetheme/index.d.ts","./node_modules/@mui/system/esm/usethemewithoutdefault/usethemewithoutdefault.d.ts","./node_modules/@mui/system/esm/usethemewithoutdefault/index.d.ts","./node_modules/@mui/system/esm/usemediaquery/usemediaquery.d.ts","./node_modules/@mui/system/esm/usemediaquery/index.d.ts","./node_modules/@mui/system/esm/colormanipulator/colormanipulator.d.ts","./node_modules/@mui/system/esm/colormanipulator/index.d.ts","./node_modules/@mui/system/esm/themeprovider/themeprovider.d.ts","./node_modules/@mui/system/esm/themeprovider/index.d.ts","./node_modules/@mui/system/esm/memotheme.d.ts","./node_modules/@mui/system/esm/initcolorschemescript/initcolorschemescript.d.ts","./node_modules/@mui/system/esm/initcolorschemescript/index.d.ts","./node_modules/@mui/system/esm/cssvars/localstoragemanager.d.ts","./node_modules/@mui/system/esm/cssvars/usecurrentcolorscheme.d.ts","./node_modules/@mui/system/esm/cssvars/createcssvarsprovider.d.ts","./node_modules/@mui/system/esm/cssvars/preparecssvars.d.ts","./node_modules/@mui/system/esm/cssvars/preparetypographyvars.d.ts","./node_modules/@mui/system/esm/cssvars/createcssvarstheme.d.ts","./node_modules/@mui/system/esm/cssvars/getcolorschemeselector.d.ts","./node_modules/@mui/system/esm/cssvars/index.d.ts","./node_modules/@mui/system/esm/cssvars/creategetcssvar.d.ts","./node_modules/@mui/system/esm/cssvars/cssvarsparser.d.ts","./node_modules/@mui/system/esm/responsiveproptype/responsiveproptype.d.ts","./node_modules/@mui/system/esm/responsiveproptype/index.d.ts","./node_modules/@mui/system/esm/container/containerclasses.d.ts","./node_modules/@mui/system/esm/container/containerprops.d.ts","./node_modules/@mui/system/esm/container/createcontainer.d.ts","./node_modules/@mui/system/esm/container/container.d.ts","./node_modules/@mui/system/esm/container/index.d.ts","./node_modules/@mui/system/esm/grid/gridprops.d.ts","./node_modules/@mui/system/esm/grid/grid.d.ts","./node_modules/@mui/system/esm/grid/creategrid.d.ts","./node_modules/@mui/system/esm/grid/gridclasses.d.ts","./node_modules/@mui/system/esm/grid/traversebreakpoints.d.ts","./node_modules/@mui/system/esm/grid/gridgenerator.d.ts","./node_modules/@mui/system/esm/grid/index.d.ts","./node_modules/@mui/system/esm/stack/stackprops.d.ts","./node_modules/@mui/system/esm/stack/stack.d.ts","./node_modules/@mui/system/esm/stack/createstack.d.ts","./node_modules/@mui/system/esm/stack/stackclasses.d.ts","./node_modules/@mui/system/esm/stack/index.d.ts","./node_modules/@mui/system/esm/version/index.d.ts","./node_modules/@mui/system/esm/index.d.ts","./node_modules/@mui/material/esm/styles/shadows.d.ts","./node_modules/@mui/material/esm/styles/createtransitions.d.ts","./node_modules/@mui/material/esm/styles/createmixins.d.ts","./node_modules/@mui/material/esm/styles/createtypography.d.ts","./node_modules/@mui/material/esm/styles/zindex.d.ts","./node_modules/@mui/material/esm/styles/createthemefoundation.d.ts","./node_modules/@mui/material/esm/overridablecomponent/index.d.ts","./node_modules/@mui/material/esm/svgicon/svgiconclasses.d.ts","./node_modules/@mui/material/esm/svgicon/svgicon.d.ts","./node_modules/@mui/material/esm/svgicon/index.d.ts","./node_modules/@mui/material/esm/internal/index.d.ts","./node_modules/@mui/material/esm/buttonbase/touchrippleclasses.d.ts","./node_modules/@mui/material/esm/buttonbase/touchripple.d.ts","./node_modules/@mui/material/esm/buttonbase/buttonbaseclasses.d.ts","./node_modules/@mui/material/esm/buttonbase/buttonbase.d.ts","./node_modules/@mui/material/esm/buttonbase/index.d.ts","./node_modules/@mui/material/esm/iconbutton/iconbuttonclasses.d.ts","./node_modules/@mui/material/esm/iconbutton/iconbutton.d.ts","./node_modules/@mui/material/esm/iconbutton/index.d.ts","./node_modules/@mui/material/esm/paper/paperclasses.d.ts","./node_modules/@mui/material/esm/paper/paper.d.ts","./node_modules/@mui/material/esm/paper/index.d.ts","./node_modules/@mui/material/esm/alert/alertclasses.d.ts","./node_modules/@mui/utils/esm/types/index.d.ts","./node_modules/@mui/material/esm/utils/types.d.ts","./node_modules/@mui/material/esm/alert/alert.d.ts","./node_modules/@mui/material/esm/alert/index.d.ts","./node_modules/@mui/material/esm/typography/typographyclasses.d.ts","./node_modules/@mui/material/esm/typography/typography.d.ts","./node_modules/@mui/material/esm/typography/index.d.ts","./node_modules/@mui/material/esm/alerttitle/alerttitleclasses.d.ts","./node_modules/@mui/material/esm/alerttitle/alerttitle.d.ts","./node_modules/@mui/material/esm/alerttitle/index.d.ts","./node_modules/@mui/material/esm/appbar/appbarclasses.d.ts","./node_modules/@mui/material/esm/appbar/appbar.d.ts","./node_modules/@mui/material/esm/appbar/index.d.ts","./node_modules/@mui/material/esm/chip/chipclasses.d.ts","./node_modules/@mui/material/esm/chip/chip.d.ts","./node_modules/@mui/material/esm/chip/index.d.ts","./node_modules/@popperjs/core/lib/enums.d.ts","./node_modules/@popperjs/core/lib/modifiers/popperoffsets.d.ts","./node_modules/@popperjs/core/lib/modifiers/flip.d.ts","./node_modules/@popperjs/core/lib/modifiers/hide.d.ts","./node_modules/@popperjs/core/lib/modifiers/offset.d.ts","./node_modules/@popperjs/core/lib/modifiers/eventlisteners.d.ts","./node_modules/@popperjs/core/lib/modifiers/computestyles.d.ts","./node_modules/@popperjs/core/lib/modifiers/arrow.d.ts","./node_modules/@popperjs/core/lib/modifiers/preventoverflow.d.ts","./node_modules/@popperjs/core/lib/modifiers/applystyles.d.ts","./node_modules/@popperjs/core/lib/types.d.ts","./node_modules/@popperjs/core/lib/modifiers/index.d.ts","./node_modules/@popperjs/core/lib/utils/detectoverflow.d.ts","./node_modules/@popperjs/core/lib/createpopper.d.ts","./node_modules/@popperjs/core/lib/popper-lite.d.ts","./node_modules/@popperjs/core/lib/popper.d.ts","./node_modules/@popperjs/core/lib/index.d.ts","./node_modules/@popperjs/core/index.d.ts","./node_modules/@mui/material/esm/portal/portal.types.d.ts","./node_modules/@mui/material/esm/portal/portal.d.ts","./node_modules/@mui/material/esm/portal/index.d.ts","./node_modules/@mui/material/esm/utils/polymorphiccomponent.d.ts","./node_modules/@mui/material/esm/popper/basepopper.types.d.ts","./node_modules/@mui/material/esm/popper/popper.d.ts","./node_modules/@mui/material/esm/popper/popperclasses.d.ts","./node_modules/@mui/material/esm/popper/index.d.ts","./node_modules/@mui/material/esm/useautocomplete/useautocomplete.d.ts","./node_modules/@mui/material/esm/useautocomplete/index.d.ts","./node_modules/@mui/material/esm/autocomplete/autocompleteclasses.d.ts","./node_modules/@mui/material/esm/autocomplete/autocomplete.d.ts","./node_modules/@mui/material/esm/autocomplete/index.d.ts","./node_modules/@mui/material/esm/avatar/avatarclasses.d.ts","./node_modules/@mui/material/esm/avatar/avatar.d.ts","./node_modules/@mui/material/esm/avatar/index.d.ts","./node_modules/@mui/material/esm/avatargroup/avatargroupclasses.d.ts","./node_modules/@mui/material/esm/avatargroup/avatargroup.d.ts","./node_modules/@mui/material/esm/avatargroup/index.d.ts","./node_modules/@types/react-transition-group/transition.d.ts","./node_modules/@mui/material/esm/transitions/transition.d.ts","./node_modules/@mui/material/esm/fade/fade.d.ts","./node_modules/@mui/material/esm/fade/index.d.ts","./node_modules/@mui/material/esm/backdrop/backdropclasses.d.ts","./node_modules/@mui/material/esm/backdrop/backdrop.d.ts","./node_modules/@mui/material/esm/backdrop/index.d.ts","./node_modules/@mui/material/esm/badge/badgeclasses.d.ts","./node_modules/@mui/material/esm/badge/badge.d.ts","./node_modules/@mui/material/esm/badge/index.d.ts","./node_modules/@mui/material/esm/bottomnavigationaction/bottomnavigationactionclasses.d.ts","./node_modules/@mui/material/esm/bottomnavigationaction/bottomnavigationaction.d.ts","./node_modules/@mui/material/esm/bottomnavigationaction/index.d.ts","./node_modules/@mui/material/esm/bottomnavigation/bottomnavigationclasses.d.ts","./node_modules/@mui/material/esm/bottomnavigation/bottomnavigation.d.ts","./node_modules/@mui/material/esm/bottomnavigation/index.d.ts","./node_modules/@mui/material/esm/breadcrumbs/breadcrumbsclasses.d.ts","./node_modules/@mui/material/esm/breadcrumbs/breadcrumbs.d.ts","./node_modules/@mui/material/esm/breadcrumbs/index.d.ts","./node_modules/@mui/material/esm/buttongroup/buttongroupclasses.d.ts","./node_modules/@mui/material/esm/buttongroup/buttongroup.d.ts","./node_modules/@mui/material/esm/buttongroup/buttongroupcontext.d.ts","./node_modules/@mui/material/esm/buttongroup/buttongroupbuttoncontext.d.ts","./node_modules/@mui/material/esm/buttongroup/index.d.ts","./node_modules/@mui/material/esm/button/buttonclasses.d.ts","./node_modules/@mui/material/esm/button/button.d.ts","./node_modules/@mui/material/esm/button/index.d.ts","./node_modules/@mui/material/esm/cardactionarea/cardactionareaclasses.d.ts","./node_modules/@mui/material/esm/cardactionarea/cardactionarea.d.ts","./node_modules/@mui/material/esm/cardactionarea/index.d.ts","./node_modules/@mui/material/esm/cardactions/cardactionsclasses.d.ts","./node_modules/@mui/material/esm/cardactions/cardactions.d.ts","./node_modules/@mui/material/esm/cardactions/index.d.ts","./node_modules/@mui/material/esm/cardcontent/cardcontentclasses.d.ts","./node_modules/@mui/material/esm/cardcontent/cardcontent.d.ts","./node_modules/@mui/material/esm/cardcontent/index.d.ts","./node_modules/@mui/material/esm/cardheader/cardheaderclasses.d.ts","./node_modules/@mui/material/esm/cardheader/cardheader.d.ts","./node_modules/@mui/material/esm/cardheader/index.d.ts","./node_modules/@mui/material/esm/cardmedia/cardmediaclasses.d.ts","./node_modules/@mui/material/esm/cardmedia/cardmedia.d.ts","./node_modules/@mui/material/esm/cardmedia/index.d.ts","./node_modules/@mui/material/esm/card/cardclasses.d.ts","./node_modules/@mui/material/esm/card/card.d.ts","./node_modules/@mui/material/esm/card/index.d.ts","./node_modules/@mui/material/esm/internal/switchbaseclasses.d.ts","./node_modules/@mui/material/esm/internal/switchbase.d.ts","./node_modules/@mui/material/esm/checkbox/checkboxclasses.d.ts","./node_modules/@mui/material/esm/checkbox/checkbox.d.ts","./node_modules/@mui/material/esm/checkbox/index.d.ts","./node_modules/@mui/material/esm/circularprogress/circularprogressclasses.d.ts","./node_modules/@mui/material/esm/circularprogress/circularprogress.d.ts","./node_modules/@mui/material/esm/circularprogress/index.d.ts","./node_modules/@mui/material/esm/collapse/collapseclasses.d.ts","./node_modules/@mui/material/esm/collapse/collapse.d.ts","./node_modules/@mui/material/esm/collapse/index.d.ts","./node_modules/@mui/material/esm/container/containerclasses.d.ts","./node_modules/@mui/material/esm/container/container.d.ts","./node_modules/@mui/material/esm/container/index.d.ts","./node_modules/@mui/material/esm/cssbaseline/cssbaseline.d.ts","./node_modules/@mui/material/esm/cssbaseline/index.d.ts","./node_modules/@mui/material/esm/dialogactions/dialogactionsclasses.d.ts","./node_modules/@mui/material/esm/dialogactions/dialogactions.d.ts","./node_modules/@mui/material/esm/dialogactions/index.d.ts","./node_modules/@mui/material/esm/dialogcontent/dialogcontentclasses.d.ts","./node_modules/@mui/material/esm/dialogcontent/dialogcontent.d.ts","./node_modules/@mui/material/esm/dialogcontent/index.d.ts","./node_modules/@mui/material/esm/dialogcontenttext/dialogcontenttextclasses.d.ts","./node_modules/@mui/material/esm/dialogcontenttext/dialogcontenttext.d.ts","./node_modules/@mui/material/esm/dialogcontenttext/index.d.ts","./node_modules/@mui/material/esm/modal/modalmanager.d.ts","./node_modules/@mui/material/esm/modal/modalclasses.d.ts","./node_modules/@mui/material/esm/modal/modal.d.ts","./node_modules/@mui/material/esm/modal/index.d.ts","./node_modules/@mui/material/esm/dialog/dialogclasses.d.ts","./node_modules/@mui/material/esm/dialog/dialog.d.ts","./node_modules/@mui/material/esm/dialog/index.d.ts","./node_modules/@mui/material/esm/dialogtitle/dialogtitleclasses.d.ts","./node_modules/@mui/material/esm/dialogtitle/dialogtitle.d.ts","./node_modules/@mui/material/esm/dialogtitle/index.d.ts","./node_modules/@mui/material/esm/divider/dividerclasses.d.ts","./node_modules/@mui/material/esm/divider/divider.d.ts","./node_modules/@mui/material/esm/divider/index.d.ts","./node_modules/@mui/material/esm/slide/slide.d.ts","./node_modules/@mui/material/esm/slide/index.d.ts","./node_modules/@mui/material/esm/drawer/drawerclasses.d.ts","./node_modules/@mui/material/esm/drawer/drawer.d.ts","./node_modules/@mui/material/esm/drawer/index.d.ts","./node_modules/@mui/material/esm/accordionactions/accordionactionsclasses.d.ts","./node_modules/@mui/material/esm/accordionactions/accordionactions.d.ts","./node_modules/@mui/material/esm/accordionactions/index.d.ts","./node_modules/@mui/material/esm/accordiondetails/accordiondetailsclasses.d.ts","./node_modules/@mui/material/esm/accordiondetails/accordiondetails.d.ts","./node_modules/@mui/material/esm/accordiondetails/index.d.ts","./node_modules/@mui/material/esm/accordion/accordionclasses.d.ts","./node_modules/@mui/material/esm/accordion/accordion.d.ts","./node_modules/@mui/material/esm/accordion/index.d.ts","./node_modules/@mui/material/esm/accordionsummary/accordionsummaryclasses.d.ts","./node_modules/@mui/material/esm/accordionsummary/accordionsummary.d.ts","./node_modules/@mui/material/esm/accordionsummary/index.d.ts","./node_modules/@mui/material/esm/fab/fabclasses.d.ts","./node_modules/@mui/material/esm/fab/fab.d.ts","./node_modules/@mui/material/esm/fab/index.d.ts","./node_modules/@mui/material/esm/inputbase/inputbaseclasses.d.ts","./node_modules/@mui/material/esm/inputbase/inputbase.d.ts","./node_modules/@mui/material/esm/inputbase/index.d.ts","./node_modules/@mui/material/esm/filledinput/filledinputclasses.d.ts","./node_modules/@mui/material/esm/filledinput/filledinput.d.ts","./node_modules/@mui/material/esm/filledinput/index.d.ts","./node_modules/@mui/material/esm/formcontrollabel/formcontrollabelclasses.d.ts","./node_modules/@mui/material/esm/formcontrollabel/formcontrollabel.d.ts","./node_modules/@mui/material/esm/formcontrollabel/index.d.ts","./node_modules/@mui/material/esm/formcontrol/formcontrolclasses.d.ts","./node_modules/@mui/material/esm/formcontrol/formcontrol.d.ts","./node_modules/@mui/material/esm/formcontrol/formcontrolcontext.d.ts","./node_modules/@mui/material/esm/formcontrol/useformcontrol.d.ts","./node_modules/@mui/material/esm/formcontrol/index.d.ts","./node_modules/@mui/material/esm/formgroup/formgroupclasses.d.ts","./node_modules/@mui/material/esm/formgroup/formgroup.d.ts","./node_modules/@mui/material/esm/formgroup/index.d.ts","./node_modules/@mui/material/esm/formhelpertext/formhelpertextclasses.d.ts","./node_modules/@mui/material/esm/formhelpertext/formhelpertext.d.ts","./node_modules/@mui/material/esm/formhelpertext/index.d.ts","./node_modules/@mui/material/esm/formlabel/formlabelclasses.d.ts","./node_modules/@mui/material/esm/formlabel/formlabel.d.ts","./node_modules/@mui/material/esm/formlabel/index.d.ts","./node_modules/@mui/material/esm/gridlegacy/gridlegacyclasses.d.ts","./node_modules/@mui/material/esm/gridlegacy/gridlegacy.d.ts","./node_modules/@mui/material/esm/gridlegacy/index.d.ts","./node_modules/@mui/material/esm/grid/grid.d.ts","./node_modules/@mui/material/esm/grid/gridclasses.d.ts","./node_modules/@mui/material/esm/grid/index.d.ts","./node_modules/@mui/material/esm/icon/iconclasses.d.ts","./node_modules/@mui/material/esm/icon/icon.d.ts","./node_modules/@mui/material/esm/icon/index.d.ts","./node_modules/@mui/material/esm/imagelist/imagelistclasses.d.ts","./node_modules/@mui/material/esm/imagelist/imagelist.d.ts","./node_modules/@mui/material/esm/imagelist/index.d.ts","./node_modules/@mui/material/esm/imagelistitembar/imagelistitembarclasses.d.ts","./node_modules/@mui/material/esm/imagelistitembar/imagelistitembar.d.ts","./node_modules/@mui/material/esm/imagelistitembar/index.d.ts","./node_modules/@mui/material/esm/imagelistitem/imagelistitemclasses.d.ts","./node_modules/@mui/material/esm/imagelistitem/imagelistitem.d.ts","./node_modules/@mui/material/esm/imagelistitem/index.d.ts","./node_modules/@mui/material/esm/inputadornment/inputadornmentclasses.d.ts","./node_modules/@mui/material/esm/inputadornment/inputadornment.d.ts","./node_modules/@mui/material/esm/inputadornment/index.d.ts","./node_modules/@mui/material/esm/inputlabel/inputlabelclasses.d.ts","./node_modules/@mui/material/esm/inputlabel/inputlabel.d.ts","./node_modules/@mui/material/esm/inputlabel/index.d.ts","./node_modules/@mui/material/esm/input/inputclasses.d.ts","./node_modules/@mui/material/esm/input/input.d.ts","./node_modules/@mui/material/esm/input/index.d.ts","./node_modules/@mui/material/esm/linearprogress/linearprogressclasses.d.ts","./node_modules/@mui/material/esm/linearprogress/linearprogress.d.ts","./node_modules/@mui/material/esm/linearprogress/index.d.ts","./node_modules/@mui/material/esm/link/linkclasses.d.ts","./node_modules/@mui/material/esm/link/link.d.ts","./node_modules/@mui/material/esm/link/index.d.ts","./node_modules/@mui/material/esm/listitemavatar/listitemavatarclasses.d.ts","./node_modules/@mui/material/esm/listitemavatar/listitemavatar.d.ts","./node_modules/@mui/material/esm/listitemavatar/index.d.ts","./node_modules/@mui/material/esm/listitemicon/listitemiconclasses.d.ts","./node_modules/@mui/material/esm/listitemicon/listitemicon.d.ts","./node_modules/@mui/material/esm/listitemicon/index.d.ts","./node_modules/@mui/material/esm/listitem/listitemclasses.d.ts","./node_modules/@mui/material/esm/listitem/listitem.d.ts","./node_modules/@mui/material/esm/listitem/index.d.ts","./node_modules/@mui/material/esm/listitembutton/listitembuttonclasses.d.ts","./node_modules/@mui/material/esm/listitembutton/listitembutton.d.ts","./node_modules/@mui/material/esm/listitembutton/index.d.ts","./node_modules/@mui/material/esm/listitemsecondaryaction/listitemsecondaryactionclasses.d.ts","./node_modules/@mui/material/esm/listitemsecondaryaction/listitemsecondaryaction.d.ts","./node_modules/@mui/material/esm/listitemsecondaryaction/index.d.ts","./node_modules/@mui/material/esm/listitemtext/listitemtextclasses.d.ts","./node_modules/@mui/material/esm/listitemtext/listitemtext.d.ts","./node_modules/@mui/material/esm/listitemtext/index.d.ts","./node_modules/@mui/material/esm/list/listclasses.d.ts","./node_modules/@mui/material/esm/list/list.d.ts","./node_modules/@mui/material/esm/list/index.d.ts","./node_modules/@mui/material/esm/listsubheader/listsubheaderclasses.d.ts","./node_modules/@mui/material/esm/listsubheader/listsubheader.d.ts","./node_modules/@mui/material/esm/listsubheader/index.d.ts","./node_modules/@mui/material/esm/menuitem/menuitemclasses.d.ts","./node_modules/@mui/material/esm/menuitem/menuitem.d.ts","./node_modules/@mui/material/esm/menuitem/index.d.ts","./node_modules/@mui/material/esm/menulist/menulist.d.ts","./node_modules/@mui/material/esm/menulist/index.d.ts","./node_modules/@mui/material/esm/popover/popoverclasses.d.ts","./node_modules/@mui/material/esm/popover/popover.d.ts","./node_modules/@mui/material/esm/popover/index.d.ts","./node_modules/@mui/material/esm/menu/menuclasses.d.ts","./node_modules/@mui/material/esm/menu/menu.d.ts","./node_modules/@mui/material/esm/menu/index.d.ts","./node_modules/@mui/material/esm/mobilestepper/mobilestepperclasses.d.ts","./node_modules/@mui/material/esm/mobilestepper/mobilestepper.d.ts","./node_modules/@mui/material/esm/mobilestepper/index.d.ts","./node_modules/@mui/material/esm/nativeselect/nativeselectinput.d.ts","./node_modules/@mui/material/esm/nativeselect/nativeselectclasses.d.ts","./node_modules/@mui/material/esm/nativeselect/nativeselect.d.ts","./node_modules/@mui/material/esm/nativeselect/index.d.ts","./node_modules/@mui/material/esm/usemediaquery/index.d.ts","./node_modules/@mui/material/esm/outlinedinput/outlinedinputclasses.d.ts","./node_modules/@mui/material/esm/outlinedinput/outlinedinput.d.ts","./node_modules/@mui/material/esm/outlinedinput/index.d.ts","./node_modules/@mui/material/esm/usepagination/usepagination.d.ts","./node_modules/@mui/material/esm/pagination/paginationclasses.d.ts","./node_modules/@mui/material/esm/pagination/pagination.d.ts","./node_modules/@mui/material/esm/pagination/index.d.ts","./node_modules/@mui/material/esm/paginationitem/paginationitemclasses.d.ts","./node_modules/@mui/material/esm/paginationitem/paginationitem.d.ts","./node_modules/@mui/material/esm/paginationitem/index.d.ts","./node_modules/@mui/material/esm/radiogroup/radiogroup.d.ts","./node_modules/@mui/material/esm/radiogroup/radiogroupcontext.d.ts","./node_modules/@mui/material/esm/radiogroup/useradiogroup.d.ts","./node_modules/@mui/material/esm/radiogroup/radiogroupclasses.d.ts","./node_modules/@mui/material/esm/radiogroup/index.d.ts","./node_modules/@mui/material/esm/radio/radioclasses.d.ts","./node_modules/@mui/material/esm/radio/radio.d.ts","./node_modules/@mui/material/esm/radio/index.d.ts","./node_modules/@mui/material/esm/rating/ratingclasses.d.ts","./node_modules/@mui/material/esm/rating/rating.d.ts","./node_modules/@mui/material/esm/rating/index.d.ts","./node_modules/@mui/material/esm/scopedcssbaseline/scopedcssbaselineclasses.d.ts","./node_modules/@mui/material/esm/scopedcssbaseline/scopedcssbaseline.d.ts","./node_modules/@mui/material/esm/scopedcssbaseline/index.d.ts","./node_modules/@mui/material/esm/select/selectinput.d.ts","./node_modules/@mui/material/esm/select/selectclasses.d.ts","./node_modules/@mui/material/esm/select/select.d.ts","./node_modules/@mui/material/esm/select/index.d.ts","./node_modules/@mui/material/esm/skeleton/skeletonclasses.d.ts","./node_modules/@mui/material/esm/skeleton/skeleton.d.ts","./node_modules/@mui/material/esm/skeleton/index.d.ts","./node_modules/@mui/material/esm/slider/useslider.types.d.ts","./node_modules/@mui/material/esm/slider/slidervaluelabel.types.d.ts","./node_modules/@mui/material/esm/slider/slidervaluelabel.d.ts","./node_modules/@mui/material/esm/slider/sliderclasses.d.ts","./node_modules/@mui/material/esm/slider/slider.d.ts","./node_modules/@mui/material/esm/slider/index.d.ts","./node_modules/@mui/material/esm/snackbarcontent/snackbarcontentclasses.d.ts","./node_modules/@mui/material/esm/snackbarcontent/snackbarcontent.d.ts","./node_modules/@mui/material/esm/snackbarcontent/index.d.ts","./node_modules/@mui/material/esm/clickawaylistener/clickawaylistener.d.ts","./node_modules/@mui/material/esm/clickawaylistener/index.d.ts","./node_modules/@mui/material/esm/snackbar/snackbarclasses.d.ts","./node_modules/@mui/material/esm/snackbar/snackbar.d.ts","./node_modules/@mui/material/esm/snackbar/index.d.ts","./node_modules/@mui/material/esm/transitions/index.d.ts","./node_modules/@mui/material/esm/speeddial/speeddialclasses.d.ts","./node_modules/@mui/material/esm/speeddial/speeddial.d.ts","./node_modules/@mui/material/esm/speeddial/index.d.ts","./node_modules/@mui/material/esm/tooltip/tooltipclasses.d.ts","./node_modules/@mui/material/esm/tooltip/tooltip.d.ts","./node_modules/@mui/material/esm/tooltip/index.d.ts","./node_modules/@mui/material/esm/speeddialaction/speeddialactionclasses.d.ts","./node_modules/@mui/material/esm/speeddialaction/speeddialaction.d.ts","./node_modules/@mui/material/esm/speeddialaction/index.d.ts","./node_modules/@mui/material/esm/speeddialicon/speeddialiconclasses.d.ts","./node_modules/@mui/material/esm/speeddialicon/speeddialicon.d.ts","./node_modules/@mui/material/esm/speeddialicon/index.d.ts","./node_modules/@mui/material/esm/stack/stack.d.ts","./node_modules/@mui/material/esm/stack/stackclasses.d.ts","./node_modules/@mui/material/esm/stack/index.d.ts","./node_modules/@mui/material/esm/stepbutton/stepbuttonclasses.d.ts","./node_modules/@mui/material/esm/stepbutton/stepbutton.d.ts","./node_modules/@mui/material/esm/stepbutton/index.d.ts","./node_modules/@mui/material/esm/stepconnector/stepconnectorclasses.d.ts","./node_modules/@mui/material/esm/stepconnector/stepconnector.d.ts","./node_modules/@mui/material/esm/stepconnector/index.d.ts","./node_modules/@mui/material/esm/stepcontent/stepcontentclasses.d.ts","./node_modules/@mui/material/esm/stepcontent/stepcontent.d.ts","./node_modules/@mui/material/esm/stepcontent/index.d.ts","./node_modules/@mui/material/esm/stepicon/stepiconclasses.d.ts","./node_modules/@mui/material/esm/stepicon/stepicon.d.ts","./node_modules/@mui/material/esm/stepicon/index.d.ts","./node_modules/@mui/material/esm/steplabel/steplabelclasses.d.ts","./node_modules/@mui/material/esm/steplabel/steplabel.d.ts","./node_modules/@mui/material/esm/steplabel/index.d.ts","./node_modules/@mui/material/esm/stepper/stepperclasses.d.ts","./node_modules/@mui/material/esm/stepper/stepper.d.ts","./node_modules/@mui/material/esm/stepper/steppercontext.d.ts","./node_modules/@mui/material/esm/stepper/index.d.ts","./node_modules/@mui/material/esm/step/stepclasses.d.ts","./node_modules/@mui/material/esm/step/step.d.ts","./node_modules/@mui/material/esm/step/stepcontext.d.ts","./node_modules/@mui/material/esm/step/index.d.ts","./node_modules/@mui/material/esm/swipeabledrawer/swipeabledrawer.d.ts","./node_modules/@mui/material/esm/swipeabledrawer/index.d.ts","./node_modules/@mui/material/esm/switch/switchclasses.d.ts","./node_modules/@mui/material/esm/switch/switch.d.ts","./node_modules/@mui/material/esm/switch/index.d.ts","./node_modules/@mui/material/esm/tablebody/tablebodyclasses.d.ts","./node_modules/@mui/material/esm/tablebody/tablebody.d.ts","./node_modules/@mui/material/esm/tablebody/index.d.ts","./node_modules/@mui/material/esm/tablecell/tablecellclasses.d.ts","./node_modules/@mui/material/esm/tablecell/tablecell.d.ts","./node_modules/@mui/material/esm/tablecell/index.d.ts","./node_modules/@mui/material/esm/tablecontainer/tablecontainerclasses.d.ts","./node_modules/@mui/material/esm/tablecontainer/tablecontainer.d.ts","./node_modules/@mui/material/esm/tablecontainer/index.d.ts","./node_modules/@mui/material/esm/tablehead/tableheadclasses.d.ts","./node_modules/@mui/material/esm/tablehead/tablehead.d.ts","./node_modules/@mui/material/esm/tablehead/index.d.ts","./node_modules/@mui/material/esm/tablepaginationactions/tablepaginationactions.d.ts","./node_modules/@mui/material/esm/tablepaginationactions/tablepaginationactionsclasses.d.ts","./node_modules/@mui/material/esm/tablepaginationactions/index.d.ts","./node_modules/@mui/material/esm/tablepagination/tablepaginationclasses.d.ts","./node_modules/@mui/material/esm/toolbar/toolbarclasses.d.ts","./node_modules/@mui/material/esm/toolbar/toolbar.d.ts","./node_modules/@mui/material/esm/toolbar/index.d.ts","./node_modules/@mui/material/esm/tablepagination/tablepagination.d.ts","./node_modules/@mui/material/esm/tablepagination/index.d.ts","./node_modules/@mui/material/esm/table/tableclasses.d.ts","./node_modules/@mui/material/esm/table/table.d.ts","./node_modules/@mui/material/esm/table/index.d.ts","./node_modules/@mui/material/esm/tablerow/tablerowclasses.d.ts","./node_modules/@mui/material/esm/tablerow/tablerow.d.ts","./node_modules/@mui/material/esm/tablerow/index.d.ts","./node_modules/@mui/material/esm/tablesortlabel/tablesortlabelclasses.d.ts","./node_modules/@mui/material/esm/tablesortlabel/tablesortlabel.d.ts","./node_modules/@mui/material/esm/tablesortlabel/index.d.ts","./node_modules/@mui/material/esm/tablefooter/tablefooterclasses.d.ts","./node_modules/@mui/material/esm/tablefooter/tablefooter.d.ts","./node_modules/@mui/material/esm/tablefooter/index.d.ts","./node_modules/@mui/material/esm/tab/tabclasses.d.ts","./node_modules/@mui/material/esm/tab/tab.d.ts","./node_modules/@mui/material/esm/tab/index.d.ts","./node_modules/@mui/material/esm/tabscrollbutton/tabscrollbuttonclasses.d.ts","./node_modules/@mui/material/esm/tabscrollbutton/tabscrollbutton.d.ts","./node_modules/@mui/material/esm/tabscrollbutton/index.d.ts","./node_modules/@mui/material/esm/tabs/tabsclasses.d.ts","./node_modules/@mui/material/esm/tabs/tabs.d.ts","./node_modules/@mui/material/esm/tabs/index.d.ts","./node_modules/@mui/material/esm/textfield/textfieldclasses.d.ts","./node_modules/@mui/material/esm/textfield/textfield.d.ts","./node_modules/@mui/material/esm/textfield/index.d.ts","./node_modules/@mui/material/esm/togglebutton/togglebuttonclasses.d.ts","./node_modules/@mui/material/esm/togglebutton/togglebutton.d.ts","./node_modules/@mui/material/esm/togglebutton/index.d.ts","./node_modules/@mui/material/esm/togglebuttongroup/togglebuttongroupclasses.d.ts","./node_modules/@mui/material/esm/togglebuttongroup/togglebuttongroup.d.ts","./node_modules/@mui/material/esm/togglebuttongroup/index.d.ts","./node_modules/@mui/material/esm/styles/props.d.ts","./node_modules/@mui/material/esm/styles/overrides.d.ts","./node_modules/@mui/material/esm/styles/variants.d.ts","./node_modules/@mui/material/esm/styles/components.d.ts","./node_modules/@mui/material/esm/styles/createthemenovars.d.ts","./node_modules/@mui/material/esm/styles/createthemewithvars.d.ts","./node_modules/@mui/material/esm/styles/createtheme.d.ts","./node_modules/@mui/material/esm/styles/adaptv4theme.d.ts","./node_modules/@mui/material/esm/styles/createcolorscheme.d.ts","./node_modules/@mui/material/esm/styles/createstyles.d.ts","./node_modules/@mui/material/esm/styles/responsivefontsizes.d.ts","./node_modules/@mui/system/esm/createbreakpoints/index.d.ts","./node_modules/@mui/material/esm/styles/usetheme.d.ts","./node_modules/@mui/material/esm/styles/usethemeprops.d.ts","./node_modules/@mui/material/esm/styles/slotshouldforwardprop.d.ts","./node_modules/@mui/material/esm/styles/rootshouldforwardprop.d.ts","./node_modules/@mui/material/esm/styles/styled.d.ts","./node_modules/@mui/material/esm/styles/themeprovider.d.ts","./node_modules/@mui/material/esm/styles/cssutils.d.ts","./node_modules/@mui/material/esm/styles/makestyles.d.ts","./node_modules/@mui/material/esm/styles/withstyles.d.ts","./node_modules/@mui/material/esm/styles/withtheme.d.ts","./node_modules/@mui/material/esm/styles/themeproviderwithvars.d.ts","./node_modules/@mui/material/esm/styles/getoverlayalpha.d.ts","./node_modules/@mui/material/esm/styles/shouldskipgeneratingvar.d.ts","./node_modules/@mui/material/esm/styles/excludevariablesfromroot.d.ts","./node_modules/@mui/material/esm/styles/index.d.ts","./node_modules/@mui/utils/esm/classnamegenerator/classnamegenerator.d.ts","./node_modules/@mui/utils/esm/classnamegenerator/index.d.ts","./node_modules/@mui/utils/esm/capitalize/capitalize.d.ts","./node_modules/@mui/utils/esm/capitalize/index.d.ts","./node_modules/@mui/material/esm/utils/capitalize.d.ts","./node_modules/@mui/utils/esm/createchainedfunction/createchainedfunction.d.ts","./node_modules/@mui/utils/esm/createchainedfunction/index.d.ts","./node_modules/@mui/material/esm/utils/createchainedfunction.d.ts","./node_modules/@mui/material/esm/utils/createsvgicon.d.ts","./node_modules/@mui/utils/esm/debounce/debounce.d.ts","./node_modules/@mui/utils/esm/debounce/index.d.ts","./node_modules/@mui/material/esm/utils/debounce.d.ts","./node_modules/@types/prop-types/index.d.ts","./node_modules/@mui/utils/esm/deprecatedproptype/deprecatedproptype.d.ts","./node_modules/@mui/utils/esm/deprecatedproptype/index.d.ts","./node_modules/@mui/material/esm/utils/deprecatedproptype.d.ts","./node_modules/@mui/utils/esm/ismuielement/ismuielement.d.ts","./node_modules/@mui/utils/esm/ismuielement/index.d.ts","./node_modules/@mui/material/esm/utils/ismuielement.d.ts","./node_modules/@mui/material/esm/utils/memotheme.d.ts","./node_modules/@mui/utils/esm/ownerdocument/ownerdocument.d.ts","./node_modules/@mui/utils/esm/ownerdocument/index.d.ts","./node_modules/@mui/material/esm/utils/ownerdocument.d.ts","./node_modules/@mui/utils/esm/ownerwindow/ownerwindow.d.ts","./node_modules/@mui/utils/esm/ownerwindow/index.d.ts","./node_modules/@mui/material/esm/utils/ownerwindow.d.ts","./node_modules/@mui/utils/esm/requirepropfactory/requirepropfactory.d.ts","./node_modules/@mui/utils/esm/requirepropfactory/index.d.ts","./node_modules/@mui/material/esm/utils/requirepropfactory.d.ts","./node_modules/@mui/utils/esm/setref/setref.d.ts","./node_modules/@mui/utils/esm/setref/index.d.ts","./node_modules/@mui/material/esm/utils/setref.d.ts","./node_modules/@mui/utils/esm/useenhancedeffect/useenhancedeffect.d.ts","./node_modules/@mui/utils/esm/useenhancedeffect/index.d.ts","./node_modules/@mui/material/esm/utils/useenhancedeffect.d.ts","./node_modules/@mui/utils/esm/useid/useid.d.ts","./node_modules/@mui/utils/esm/useid/index.d.ts","./node_modules/@mui/material/esm/utils/useid.d.ts","./node_modules/@mui/utils/esm/unsupportedprop/unsupportedprop.d.ts","./node_modules/@mui/utils/esm/unsupportedprop/index.d.ts","./node_modules/@mui/material/esm/utils/unsupportedprop.d.ts","./node_modules/@mui/utils/esm/usecontrolled/usecontrolled.d.ts","./node_modules/@mui/utils/esm/usecontrolled/index.d.ts","./node_modules/@mui/material/esm/utils/usecontrolled.d.ts","./node_modules/@mui/utils/esm/useeventcallback/useeventcallback.d.ts","./node_modules/@mui/utils/esm/useeventcallback/index.d.ts","./node_modules/@mui/material/esm/utils/useeventcallback.d.ts","./node_modules/@mui/utils/esm/useforkref/useforkref.d.ts","./node_modules/@mui/utils/esm/useforkref/index.d.ts","./node_modules/@mui/material/esm/utils/useforkref.d.ts","./node_modules/@mui/material/esm/utils/mergeslotprops.d.ts","./node_modules/@mui/material/esm/utils/index.d.ts","./node_modules/@mui/material/esm/box/box.d.ts","./node_modules/@mui/material/esm/box/boxclasses.d.ts","./node_modules/@mui/material/esm/box/index.d.ts","./node_modules/@mui/material/esm/darkscrollbar/index.d.ts","./node_modules/@mui/material/esm/grow/grow.d.ts","./node_modules/@mui/material/esm/grow/index.d.ts","./node_modules/@mui/material/esm/nossr/nossr.types.d.ts","./node_modules/@mui/material/esm/nossr/nossr.d.ts","./node_modules/@mui/material/esm/nossr/index.d.ts","./node_modules/@mui/material/esm/textareaautosize/textareaautosize.types.d.ts","./node_modules/@mui/material/esm/textareaautosize/textareaautosize.d.ts","./node_modules/@mui/material/esm/textareaautosize/index.d.ts","./node_modules/@mui/material/esm/usescrolltrigger/usescrolltrigger.d.ts","./node_modules/@mui/material/esm/usescrolltrigger/index.d.ts","./node_modules/@mui/material/esm/zoom/zoom.d.ts","./node_modules/@mui/material/esm/zoom/index.d.ts","./node_modules/@mui/material/esm/globalstyles/globalstyles.d.ts","./node_modules/@mui/material/esm/globalstyles/index.d.ts","./node_modules/@mui/material/esm/version/index.d.ts","./node_modules/@mui/utils/esm/composeclasses/composeclasses.d.ts","./node_modules/@mui/utils/esm/composeclasses/index.d.ts","./node_modules/@mui/utils/esm/generateutilityclass/generateutilityclass.d.ts","./node_modules/@mui/utils/esm/generateutilityclass/index.d.ts","./node_modules/@mui/material/esm/generateutilityclass/index.d.ts","./node_modules/@mui/utils/esm/generateutilityclasses/generateutilityclasses.d.ts","./node_modules/@mui/utils/esm/generateutilityclasses/index.d.ts","./node_modules/@mui/material/esm/generateutilityclasses/index.d.ts","./node_modules/@mui/material/esm/unstable_trapfocus/focustrap.types.d.ts","./node_modules/@mui/material/esm/unstable_trapfocus/focustrap.d.ts","./node_modules/@mui/material/esm/unstable_trapfocus/index.d.ts","./node_modules/@mui/material/esm/initcolorschemescript/initcolorschemescript.d.ts","./node_modules/@mui/material/esm/initcolorschemescript/index.d.ts","./node_modules/@mui/material/esm/index.d.ts","./app/providers.tsx","./app/layout.tsx","./node_modules/next-auth/lib/client.d.ts","./node_modules/next-auth/react.d.ts","./app/(auth)/login/loginclient.tsx","./app/(auth)/login/page.tsx","./app/(dashboard)/dashboardlayoutclient.tsx","./app/(dashboard)/overviewclient.tsx","./app/(dashboard)/layout.tsx","./app/(dashboard)/page.tsx","./node_modules/@mui/icons-material/esm/delete.d.ts","./app/(dashboard)/access-lists/accesslistsclient.tsx","./app/(dashboard)/access-lists/page.tsx","./app/(dashboard)/audit-log/auditlogclient.tsx","./app/(dashboard)/audit-log/page.tsx","./node_modules/@mui/icons-material/esm/expandmore.d.ts","./app/(dashboard)/certificates/certificatesclient.tsx","./app/(dashboard)/certificates/page.tsx","./app/(dashboard)/dead-hosts/deadhostsclient.tsx","./app/(dashboard)/dead-hosts/page.tsx","./node_modules/@mui/icons-material/esm/add.d.ts","./node_modules/@mui/icons-material/esm/edit.d.ts","./node_modules/@mui/icons-material/esm/close.d.ts","./app/(dashboard)/proxy-hosts/proxyhostsclient.tsx","./app/(dashboard)/proxy-hosts/page.tsx","./app/(dashboard)/redirects/redirectsclient.tsx","./app/(dashboard)/redirects/page.tsx","./app/(dashboard)/settings/settingsclient.tsx","./app/(dashboard)/settings/page.tsx"],"fileIdsList":[[64,73,128,145,146,272,478,1245,1249],[73,128,145,146,272,478,526,1250],[73,128,145,146,272,537,538,1245,1256],[73,128,145,146,272,449,526,537],[73,128,145,146,272,537,1257],[73,128,145,146,272,1245],[73,128,145,146,272,551,552,1259],[73,128,145,146,272,449,526,539],[73,128,145,146,272,539,540,1245,1261],[73,128,145,146,272,539,1262],[64,73,128,145,146,272,467,478,1245],[73,128,145,146,272,449,526,541],[73,128,145,146,272,541,542,1245,1261],[73,128,145,146,272,541,1264],[64,73,128,145,146,272,526,1252],[73,128,145,146,272,467,923,1245],[73,128,145,146,272,526,533,1253],[73,128,145,146,272,449,526,543,544],[73,128,145,146,272,537,539,544,1269],[64,73,128,145,146,181,183,272,537,539,543,544,545,1245,1256,1266,1267,1268],[73,128,145,146,272,449,526,543,546],[73,128,145,146,272,546,1271],[64,73,128,145,146,181,183,272,543,546,547,1245,1256,1266,1267,1268],[73,128,145,146,272,449,526,535,536],[73,128,145,146,272,526,535,1273],[73,128,145,146,181,183,272,535,548,1245],[73,128,145,146,272,526],[64,73,128,145,146,272,1246],[64,73,128,145,146,272,1245],[73,128,145,146,494,495],[73,128,145,146,530],[73,128,145,146,529],[73,128,145,146,512,515],[73,128,145,146],[73,128,145,146,497,498,503,512,513,515,516,517,518],[73,128,145,146,503,515],[73,128,145,146,497],[73,128,145,146,515],[73,128,145,146,515,519],[73,128,145,146,502,519],[73,128,145,146,501,511,513,515],[73,128,145,146,505,512,515],[73,128,145,146,507,508,512,515],[73,128,145,146,506,509,510,511,515],[73,128,145,146,509,515],[73,128,145,146,497,500,507,512,515,519],[73,128,145,146,499,500,501,502,503,512,514,519],[73,128,145,146,581,582],[73,128,145,146,583,584],[73,128,145,146,583],[64,73,128,145,146,587,590],[64,73,128,145,146,585],[73,128,145,146,581,587],[73,128,145,146,585,587,588,589,590,592,593,594,595,596],[64,73,128,145,146,591],[73,128,145,146,587],[64,73,128,145,146,589],[73,128,145,146,591],[73,128,145,146,597],[63,73,128,145,146,581],[73,128,145,146,586],[73,128,145,146,577],[73,128,145,146,587,598,599,600],[64,73,128,145,146],[73,128,145,146,587,598,599],[73,128,145,146,601,602],[73,128,145,146,601],[73,128,145,146,579],[73,128,145,146,578],[73,128,145,146,580],[73,128,145,146,725],[64,73,128,145,146,715,722,736,740,793,886,1160],[73,128,145,146,886,887],[64,73,128,145,146,715,726,880,1160],[73,128,145,146,880,881],[64,73,128,145,146,715,726,883,1160],[73,128,145,146,883,884],[64,73,128,145,146,715,722,731,740,889,1160],[73,128,145,146,889,890],[64,73,128,145,146,574,715,725,726,734,737,738,740,1160],[73,128,145,146,738,741],[64,73,128,145,146,715,745,746,1160],[73,128,145,146,746,747],[64,73,128,145,146,574,715,722,736,749,1160],[73,128,145,146,749,750],[64,73,128,145,146,574,715,726,734,737,740,754,780,782,783,1160],[73,128,145,146,783,784],[64,73,128,145,146,574,715,722,725,740,786,1160],[73,128,145,146,786,787],[64,73,128,145,146,574,715,740,788,789,1160],[73,128,145,146,789,790],[64,73,128,145,146,715,722,740,793,795,796,1160],[73,128,145,146,796,797],[64,73,128,145,146,574,715,722,740,799,1160],[73,128,145,146,799,800],[64,73,128,145,146,715,722,805,1160],[73,128,145,146,805,806],[64,73,128,145,146,715,722,731,740,802,1160],[73,128,145,146,802,803],[73,128,145,146,574,715,722,1160],[73,128,145,146,1213,1214],[64,73,128,145,146,715,722,725,740,808,1160],[73,128,145,146,808,809],[64,73,128,145,146,574,715,722,731,816,1160],[73,128,145,146,816,817],[64,73,128,145,146,715,722,728,729,1160],[73,128,145,146,727,729,730],[64,73,128,145,146,726,727],[64,73,128,145,146,574,715,722,811,1160],[64,73,128,145,146,812],[73,128,145,146,811,812,813,814],[64,73,128,145,146,574,715,722,737,834,1160],[73,128,145,146,834,835],[64,73,128,145,146,715,722,731,740,819,1160],[73,128,145,146,819,820],[64,73,128,145,146,715,726,822,1160],[73,128,145,146,822,823],[64,73,128,145,146,715,722,825,1160],[73,128,145,146,825,826],[64,73,128,145,146,715,722,740,745,828,1160],[73,128,145,146,828,829],[64,73,128,145,146,715,722,831,1160],[73,128,145,146,831,832],[64,73,128,145,146,574,715,726,740,838,839,1160],[73,128,145,146,839,840],[64,73,128,145,146,574,715,722,740,752,1160],[73,128,145,146,752,753],[64,73,128,145,146,574,715,726,842,1160],[73,128,145,146,842,843],[73,128,145,146,1034],[64,73,128,145,146,715,726,793,845,1160],[73,128,145,146,845,846],[73,128,145,146,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572],[64,73,128,145,146,715,722,848,1160],[73,128,145,146,715],[73,128,145,146,848,849],[64,73,128,145,146,1160],[73,128,145,146,851],[64,73,128,145,146,715,726,737,740,793,798,865,866,1160],[73,128,145,146,866,867],[64,73,128,145,146,715,726,853,1160],[73,128,145,146,853,854],[64,73,128,145,146,715,726,856,1160],[73,128,145,146,856,857],[64,73,128,145,146,715,722,745,859,1160],[73,128,145,146,859,860],[64,73,128,145,146,715,722,745,869,1160],[73,128,145,146,869,870],[64,73,128,145,146,574,715,722,872,1160],[73,128,145,146,872,873],[64,73,128,145,146,715,726,737,740,793,798,865,876,877,1160],[73,128,145,146,877,878],[64,73,128,145,146,574,715,722,731,892,1160],[73,128,145,146,892,893],[64,73,128,145,146,793],[73,128,145,146,794],[73,128,145,146,715,726,897,898,1160],[73,128,145,146,898,899],[64,73,128,145,146,574,715,722,904,1160],[64,73,128,145,146,905],[73,128,145,146,904,905,906,907],[73,128,145,146,906],[64,73,128,145,146,715,726,740,745,901,1160],[73,128,145,146,901,902],[64,73,128,145,146,715,726,909,1160],[73,128,145,146,909,910],[64,73,128,145,146,574,715,722,912,1160],[73,128,145,146,912,913],[64,73,128,145,146,574,715,722,915,1160],[73,128,145,146,915,916],[73,128,145,146,1235],[73,128,145,146,1238],[73,128,145,146,715,1160],[73,128,145,146,1229],[73,128,145,146,574,715,1160],[73,128,145,146,921,922],[64,73,128,145,146,574,715,722,918,1160],[73,128,145,146,918,919],[73,128,145,146,1217],[64,73,128,145,146,574,715,722,924,1160],[73,128,145,146,924,925],[64,73,128,145,146,574,715,722,731,732,1160],[73,128,145,146,732,733],[64,73,128,145,146,574,715,722,927,1160],[73,128,145,146,927,928],[64,73,128,145,146,715,722,933,1160],[73,128,145,146,933,934],[64,73,128,145,146,715,726,930,1160],[73,128,145,146,930,931],[73,128,145,146,573,725,731,734,737,742,745,748,751,754,775,780,782,785,788,791,795,798,801,804,807,810,815,818,821,824,827,830,833,836,841,844,847,850,852,855,858,861,865,868,871,874,876,879,882,885,888,891,894,897,900,903,908,911,914,917,920,923,926,929,932,935,938,941,944,947,950,953,956,959,962,965,968,971,974,977,979,982,985,988,992,993,996,1000,1003,1008,1011,1014,1017,1021,1024,1030,1033,1035,1038,1042,1045,1048,1051,1054,1057,1060,1063,1066,1069,1073,1077,1079,1082,1085,1088,1091,1094,1097,1101,1103,1106,1109,1112,1115,1118,1121,1124,1127,1130,1133,1160,1212,1215,1216,1218,1221,1224,1226,1228,1230,1231,1233,1236,1239,1242,1244],[73,128,145,146,1243],[73,128,145,146,942,943],[73,128,145,146,715,726,897,942,1160],[73,128,145,146,936,937],[64,73,128,145,146,715,722,936,1160],[73,128,145,146,895,896],[64,73,128,145,146,574,715,726,895,1160],[73,128,145,146,939,940],[64,73,128,145,146,574,715,722,917,939,1160],[73,128,145,146,574,1160],[64,73,128,145,146,726,731,740,837],[73,128,145,146,945,946],[64,73,128,145,146,574,715,726,945,1160],[73,128,145,146,948,949],[64,73,128,145,146,574,715,722,745,948,1160],[73,128,145,146,969,970],[64,73,128,145,146,715,722,969,1160],[73,128,145,146,957,958],[64,73,128,145,146,715,722,957,1160],[73,128,145,146,951,952],[73,128,145,146,715,726,951,1160],[73,128,145,146,960,961],[64,73,128,145,146,715,722,731,960,1160],[73,128,145,146,954,955],[64,73,128,145,146,715,726,954,1160],[73,128,145,146,963,964],[64,73,128,145,146,715,726,963,1160],[73,128,145,146,966,967],[64,73,128,145,146,715,726,740,745,966,1160],[73,128,145,146,972,973],[64,73,128,145,146,715,722,972,1160],[73,128,145,146,983,984],[64,73,128,145,146,715,726,737,740,793,798,865,979,982,983,1160],[73,128,145,146,975,976],[64,73,128,145,146,715,722,731,975,1160],[73,128,145,146,978],[64,73,128,145,146,722,971],[73,128,145,146,986,987],[64,73,128,145,146,715,726,737,740,947,986,1160],[73,128,145,146,862,863,864],[64,73,128,145,146,574,715,722,740,775,798,863,1160],[73,128,145,146,990,991],[64,73,128,145,146,715,726,944,989,990,1160],[64,73,128,145,146,715,1160],[73,128,145,146,1219,1220],[64,73,128,145,146,1219],[73,128,145,146,994,995],[64,73,128,145,146,715,726,740,897,994,1160],[64,73,128,145,146,574,1160],[73,128,145,146,998,999],[64,73,128,145,146,574,715,726,997,998,1160],[73,128,145,146,1001,1002],[64,73,128,145,146,574,715,722,740,997,1001,1160],[73,128,145,146,735,736],[64,73,128,145,146,574,715,722,735,1160],[73,128,145,146,980,981],[64,73,128,145,146,715,726,737,739,740,793,798,865,980,1160],[64,73,128,145,146,740,772,775,776],[73,128,145,146,777,778,779],[64,73,128,145,146,715,777,1160],[73,128,145,146,773,774],[64,73,128,145,146,773],[73,128,145,146,1009,1010],[64,73,128,145,146,574,715,726,740,838,1009,1160],[73,128,145,146,1004,1006,1007],[64,73,128,145,146,911],[73,128,145,146,911],[73,128,145,146,1005],[73,128,145,146,1012,1013],[64,73,128,145,146,574,715,722,740,1012,1160],[73,128,145,146,1015,1016],[64,73,128,145,146,715,722,1015,1160],[73,128,145,146,1019,1020],[64,73,128,145,146,715,726,900,944,985,996,1018,1019,1160],[64,73,128,145,146,715,985,1160],[73,128,145,146,1022,1023],[64,73,128,145,146,574,715,722,1022,1160],[73,128,145,146,875],[73,128,145,146,1028,1029],[64,73,128,145,146,574,715,722,740,1025,1027,1028,1160],[64,73,128,145,146,1026],[73,128,145,146,1036,1037],[64,73,128,145,146,715,726,740,793,1033,1035,1036,1160],[73,128,145,146,1031,1032],[64,73,128,145,146,715,726,737,1031,1160],[73,128,145,146,1040,1041],[64,73,128,145,146,715,726,740,894,1039,1040,1160],[73,128,145,146,1046,1047],[64,73,128,145,146,715,726,740,894,1045,1046,1160],[73,128,145,146,1049,1050],[64,73,128,145,146,715,726,1049,1160],[73,128,145,146,1052,1053],[64,73,128,145,146,715,722,1140],[73,128,145,146,1074,1075,1076],[64,73,128,145,146,715,722,1074,1160],[73,128,145,146,1055,1056],[64,73,128,145,146,715,722,731,1055,1160],[73,128,145,146,1058,1059],[64,73,128,145,146,715,726,1058,1160],[73,128,145,146,1061,1062],[64,73,128,145,146,715,726,740,793,847,1061,1160],[73,128,145,146,1064,1065],[64,73,128,145,146,715,725,726,1064,1160],[73,128,145,146,1067,1068],[64,73,128,145,146,715,726,740,1066,1067,1160],[73,128,145,146,1070,1071,1072],[64,73,128,145,146,715,722,737,1070,1160],[73,128,145,146,576,715,716,717,718,719,720,1134,1135,1136,1140],[73,128,145,146,1134,1135,1136],[73,128,145,146,1139],[63,73,128,145,146,715],[73,128,145,146,576,721,1138,1139],[73,128,145,146,574,576,692,715,716,717,718,719,720],[73,128,145,146,576,715,716,717,718,719,720,721,1137],[73,128,145,146,721,1137,1138],[64,73,128,145,146,576,718],[73,128,145,146,718],[73,128,145,146,574,575,576,692,715,716,717,718,719,720,1134,1135,1136,1137,1139,1140,1141,1142,1143,1144,1145,1146,1147,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159],[73,128,145,146,715,725,728,731,734,737,742,745,748,751,754,780,785,788,791,798,801,804,807,810,815,818,821,824,827,830,833,836,841,844,847,850,855,858,861,865,868,871,874,879,882,885,888,891,894,897,900,903,908,911,914,917,920,923,926,929,932,935,938,941,944,947,950,953,956,959,962,965,968,971,974,977,979,982,985,988,992,996,1000,1003,1008,1011,1014,1017,1021,1024,1030,1033,1038,1042,1045,1048,1051,1054,1057,1060,1063,1066,1069,1073,1077,1082,1085,1088,1091,1094,1097,1101,1103,1106,1109,1112,1115,1118,1124,1127,1130,1133,1134],[73,128,145,146,725,728,731,734,737,742,745,748,751,754,780,785,788,791,798,801,804,807,810,815,818,821,824,827,830,833,836,841,844,847,850,852,855,858,861,865,868,871,874,879,882,885,888,891,894,897,900,903,908,911,914,917,920,923,926,929,932,935,938,941,944,947,950,953,956,959,962,965,968,971,974,977,979,982,985,988,992,993,996,1000,1003,1008,1011,1014,1017,1021,1024,1030,1033,1038,1042,1045,1048,1051,1054,1057,1060,1063,1066,1069,1073,1077,1079,1082,1085,1088,1091,1094,1097,1101,1103,1106,1109,1112,1115,1118,1124,1127,1130,1133],[73,128,145,146,715,719],[73,128,145,146,715,1140,1148,1149],[64,73,128,145,146,692,715,1138],[64,73,128,145,146,684,715,1139],[73,128,145,146,1140],[73,128,145,146,1137,1140],[73,128,145,146,715,1134],[73,128,145,146,723,724],[64,73,128,145,146,574,715,722,723,1160],[73,128,145,146,1078],[64,73,128,145,146,740,879],[73,128,145,146,1080,1081],[64,73,128,145,146,574,715,726,740,838,1080,1160],[73,128,145,146,1116,1117],[64,73,128,145,146,715,722,731,1116,1160],[73,128,145,146,1104,1105],[64,73,128,145,146,574,715,722,1104,1160],[73,128,145,146,1083,1084],[64,73,128,145,146,715,722,1083,1160],[73,128,145,146,1086,1087],[64,73,128,145,146,574,715,726,1086,1160],[73,128,145,146,1089,1090],[64,73,128,145,146,715,722,1089,1160],[73,128,145,146,1113,1114],[64,73,128,145,146,715,722,1113,1160],[73,128,145,146,1092,1093],[64,73,128,145,146,715,722,1092,1160],[73,128,145,146,1098,1102],[64,73,128,145,146,715,722,734,740,977,1021,1088,1097,1098,1101,1160],[73,128,145,146,1095,1096],[64,73,128,145,146,725,733],[73,128,145,146,1107,1108],[64,73,128,145,146,715,722,1107,1160],[73,128,145,146,1110,1111],[64,73,128,145,146,715,722,731,740,1110,1160],[73,128,145,146,1122,1123],[64,73,128,145,146,574,715,722,725,740,1121,1122,1160],[73,128,145,146,1119,1120],[64,73,128,145,146,715,725,731,740,1119,1160],[73,128,145,146,1222,1223],[64,73,128,145,146,1222],[73,128,145,146,1125,1126],[64,73,128,145,146,574,715,726,740,897,900,908,914,941,944,996,1021,1125,1160],[73,128,145,146,1128,1129],[64,73,128,145,146,574,715,722,731,1128,1160],[73,128,145,146,1131,1132],[64,73,128,145,146,574,715,726,1131,1160],[73,128,145,146,1099,1100],[64,73,128,145,146,574,715,722,1099,1160],[73,128,145,146,1043,1044],[64,73,128,145,146,715,726,740,780,793,1043,1160],[73,128,145,146,793],[64,73,128,145,146,792],[73,128,145,146,743,744],[64,73,128,145,146,574,715,719,722,743,1160],[64,73,128,145,146,1240],[73,128,145,146,1240,1241],[73,128,145,146,781],[64,73,128,145,146,574],[73,128,145,146,677,1140],[73,128,145,146,1225],[73,128,145,146,1164],[73,128,145,146,1167],[73,128,145,146,1171],[73,128,145,146,1175],[73,128,145,146,740,1162,1165,1168,1169,1172,1176,1179,1180,1183,1186,1189,1192,1195,1198,1201,1204,1207,1210,1211],[73,128,145,146,1178],[73,128,145,146,608,1140],[73,128,145,146,739],[73,128,145,146,1182],[73,128,145,146,1185],[73,128,145,146,1188],[73,128,145,146,1191],[73,128,145,146,715,739,1160],[73,128,145,146,1200],[73,128,145,146,1203],[73,128,145,146,1194],[73,128,145,146,1206],[73,128,145,146,1209],[73,128,145,146,1197],[73,128,145,146,1227],[73,128,145,146,650,652,654],[73,128,145,146,651],[73,128,145,146,650],[73,128,145,146,653],[64,73,128,145,146,598],[73,128,145,146,606],[63,73,128,145,146,598,603,605,607],[73,128,145,146,604],[73,128,145,146,610],[73,128,145,146,611],[64,73,128,145,146,574,610,612,622,627,631,633,635,637,639,641,643,645,647,659],[73,128,145,146,660,661],[73,128,145,146,608,610,613,622,627],[73,128,145,146,628],[73,128,145,146,678],[73,128,145,146,630],[73,128,145,146,574,698],[64,73,128,145,146,574,622,627,697],[64,73,128,145,146,574,608,627,698],[73,128,145,146,697,698,700],[73,128,145,146,574,627,662],[73,128,145,146,663],[73,128,145,146,574],[73,128,145,146,613],[64,73,128,145,146,608,622,627],[73,128,145,146,665],[73,128,145,146,608],[73,128,145,146,608,613,614,615,622,623,625],[73,128,145,146,623,626],[73,128,145,146,624],[73,128,145,146,636],[64,73,128,145,146,684,685,686],[73,128,145,146,688],[73,128,145,146,685,687,688,689,690,691],[73,128,145,146,685],[73,128,145,146,632],[73,128,145,146,634],[73,128,145,146,648],[64,73,128,145,146,608,627],[73,128,145,146,656],[64,73,128,145,146,574,608,673,702,715],[73,128,145,146,574,702],[73,128,145,146,613,615,622,702],[64,73,128,145,146,574,622,627,662],[73,128,145,146,702,703,704,705,706,707],[73,128,145,146,608,610,612,613,614,615,622,625,627,629,631,633,635,637,639,641,643,645,647,649,655,657,659,662,664,666,668,671,673,675,677,679,681,682,688,690,692,693,694,696,699,701,708,713,714],[73,128,145,146,683],[73,128,145,146,638],[73,128,145,146,640],[73,128,145,146,695],[73,128,145,146,642],[73,128,145,146,644],[73,128,145,146,658],[64,73,128,145,146,574,608,613,615,709,715],[73,128,145,146,709,710,711,712],[73,128,145,146,574,709],[73,128,145,146,609],[73,128,145,146,667],[73,128,145,146,666],[73,128,145,146,616],[73,128,145,146,619],[73,128,145,146,616,617,618,619,620,621],[63,73,128,145,146],[63,73,128,145,146,608,616,617,618],[73,128,145,146,680],[73,128,145,146,655],[73,128,145,146,646],[73,128,145,146,676],[73,128,145,146,672],[73,128,145,146,627],[73,128,145,146,669,670],[73,128,145,146,674],[73,128,145,146,1163],[73,128,145,146,1161],[73,128,145,146,1232],[73,128,145,146,1166],[73,128,145,146,1170],[73,128,145,146,1173],[73,128,145,146,1174],[73,128,145,146,1234],[73,128,145,146,1237],[73,128,145,146,1177],[73,128,145,146,1181],[73,128,145,146,1184],[73,128,145,146,1187],[64,73,128,145,146,1173],[73,128,145,146,1190],[73,128,145,146,1199],[73,128,145,146,1202],[73,128,145,146,1193],[73,128,145,146,1205],[73,128,145,146,1208],[73,128,145,146,1196],[73,128,145,146,771],[73,128,145,146,765,767],[73,128,145,146,755,765,766,768,769,770],[73,128,145,146,765],[73,128,145,146,755,765],[73,128,145,146,756,757,758,759,760,761,762,763,764],[73,128,145,146,756,760,761,764,765,768],[73,128,145,146,756,757,758,759,760,761,762,763,764,765,766,768,769],[73,128,145,146,755,756,757,758,759,760,761,762,763,764],[73,128,145,146,531],[73,125,126,128,145,146],[73,127,128,145,146],[128,145,146],[73,128,133,145,146,163],[73,128,129,134,139,145,146,148,160,171],[73,128,129,130,139,145,146,148],[73,128,131,145,146,172],[73,128,132,133,140,145,146,149],[73,128,133,145,146,160,168],[73,128,134,136,139,145,146,148],[73,127,128,135,145,146],[73,128,136,137,145,146],[73,128,138,139,145,146],[73,127,128,139,145,146],[73,128,139,140,141,145,146,160,171],[73,128,139,140,141,145,146,155,160,163],[73,120,128,136,139,142,145,146,148,160,171],[73,128,139,140,142,143,145,146,148,160,168,171],[73,128,142,144,145,146,160,168,171],[71,72,73,74,75,76,77,78,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],[73,128,139,145,146],[73,128,145,146,147,171],[73,128,136,139,145,146,148,160],[73,128,145,146,149],[73,128,145,146,150],[73,127,128,145,146,151],[73,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],[73,128,145,146,153],[73,128,145,146,154],[73,128,139,145,146,155,156],[73,128,145,146,155,157,172,174],[73,128,140,145,146],[73,128,139,145,146,160,161,163],[73,128,145,146,162,163],[73,128,145,146,160,161],[73,128,145,146,163],[73,128,145,146,164],[73,125,128,145,146,160,165],[73,128,139,145,146,166,167],[73,128,145,146,166,167],[73,128,133,145,146,148,160,168],[73,128,145,146,169],[73,128,145,146,148,170],[73,128,142,145,146,154,171],[73,128,133,145,146,172],[73,128,145,146,160,173],[73,128,145,146,147,174],[73,128,145,146,175],[73,128,133,145,146],[73,120,128,145,146],[73,128,145,146,176],[73,120,128,139,141,145,146,151,160,163,171,173,174,176],[73,128,145,146,160,177],[64,68,73,128,145,146,179,180,181,183,440,487],[64,68,73,128,145,146,179,180,181,182,401,440,487],[64,68,73,128,145,146,179,180,182,183,440,487],[64,73,128,145,146,183,401,402],[64,73,128,145,146,183,401],[64,68,73,128,145,146,180,181,182,183,440,487],[64,68,73,128,145,146,179,181,182,183,440,487],[62,63,73,128,145,146],[73,128,145,146,527],[73,128,145,146,490,494,512,515,519,520,521,522],[64,73,128,145,146,512,515,522],[73,128,145,146,490,494,515,519,520],[73,128,145,146,490],[73,128,145,146,506],[64,73,128,145,146,512,515,1248],[73,128,145,146,443],[73,128,145,146,445,446,447,448],[73,128,145,146,188,190,194,214,223,426,436],[73,128,145,146,190,218,219,220,222,436],[73,128,145,146,190,253,255,257,258,261,436,438],[73,128,145,146,190,194,196,197,198,199,213,214,215,425,436,438],[73,128,145,146,436],[73,128,145,146,212,213,219,406,415,432],[73,128,145,146,190],[73,128,145,146,184,212,432],[73,128,145,146,263],[73,128,145,146,262,436,438],[73,128,142,145,146,396,406,492],[73,128,142,145,146,365,377,415,431],[73,128,142,145,146,308],[73,128,145,146,419],[73,128,145,146,418,419,420],[73,128,145,146,418],[70,73,128,142,145,146,184,190,194,197,213,216,217,219,223,235,236,263,338,416,436,440],[73,128,145,146,188,190,221,253,254,259,260,436,492],[73,128,145,146,221,492],[73,128,145,146,188,236,352,436,492],[73,128,145,146,492],[73,128,145,146,190,221,222,492],[73,128,145,146,256,492],[73,128,145,146,216,417,424],[73,128,145,146,154,272,432],[73,128,145,146,272,432],[64,73,128,145,146,272],[64,73,128,145,146,369],[73,128,145,146,305,306,432,468,469,476],[73,128,145,146,412,468,470,471,472,473,475],[73,128,145,146,411],[73,128,145,146,411,412],[73,128,145,146,199,200,201,210,212],[73,128,145,146,211,212],[73,128,145,146,203,204,205,207,208,210,212],[73,128,145,146,210,212],[73,128,145,146,203,204,210,212],[73,128,145,146,202,203,205,206,209],[73,128,145,146,474],[73,128,145,146,212],[64,73,128,145,146,191,462],[64,73,128,145,146,171],[64,73,128,145,146,221,296],[64,73,128,145,146,221],[73,128,145,146,154,210,211,212],[73,128,145,146,294,298],[64,73,128,145,146,295,442],[64,68,73,128,142,145,146,178,179,180,181,182,183,440,485,486],[73,128,142,145,146],[73,128,142,145,146,194,243,313,328,349,351,421,422,436,437],[73,128,145,146,235,423],[73,128,145,146,440],[73,128,145,146,189],[64,73,128,145,146,354,367,376,386,388,431],[73,128,145,146,154,354,367,385,386,387,431,491],[73,128,145,146,379,380,381,382,383,384],[73,128,145,146,381],[73,128,145,146,385],[73,128,145,146,270,271,272,274],[64,73,128,145,146,264,265,266,267,273],[73,128,145,146,270,273],[73,128,145,146,268],[73,128,145,146,269],[64,73,128,145,146,272,295,442],[64,73,128,145,146,272,441,442],[64,73,128,145,146,272,442],[73,128,145,146,328,428],[73,128,145,146,428],[73,128,142,145,146,437,442],[73,128,145,146,373],[73,127,128,145,146,372],[73,128,145,146,212,244,245,311,314,351,360,363,365,366,405,431,434,437],[73,128,145,146,204,212,245],[73,128,145,146,365,431],[64,73,128,145,146,365,370,371,373,374,375,376,377,378,389,390,391,392,393,394,395,431,432,492],[73,128,145,146,359],[73,128,142,145,146,154,191,243,245,246,267,290,311,328,338,349,350,405,427,436,437,438,440,492],[73,128,145,146,431],[73,127,128,145,146,219,311,338,362,427,429,430,437],[73,128,145,146,365],[73,127,128,145,146,243,280,314,355,356,357,358,359,360,361,363,364,431,432],[73,128,142,145,146,280,281,355,437,438],[73,128,145,146,219,328,338,351,427,431,437],[73,128,142,145,146,436,438],[73,128,142,145,146,160,434,437,438],[73,128,142,145,146,154,171,184,194,213,221,244,245,246,248,277,282,287,290,311,313,314,316,319,321,324,325,326,327,349,351,426,427,432,434,436,437,438],[73,128,142,145,146,160],[73,128,145,146,190,191,192,217,434,435,440,442,492],[73,128,145,146,188,436],[73,128,145,146,276],[73,128,142,145,146,160,171,238,261,263,264,265,266,267,274,275,492],[73,128,145,146,154,171,184,213,238,253,286,287,288,289,314,319,328,334,337,339,349,351,427,432,434],[73,128,145,146,213,216,217,235,338,427,436],[73,128,142,145,146,171,191,194,314,332,434,436],[73,128,145,146,353],[73,128,142,145,146,267,275,335,336,346],[73,128,145,146,434,436],[73,128,145,146,360,362],[73,128,145,146,311,314,426,442],[73,128,142,145,146,154,249,253,289,319,334,337,341,434],[73,128,142,145,146,216,235,253,342],[73,128,145,146,190,248,344,426,436],[73,128,142,145,146,171,267,436],[73,128,142,145,146,221,247,248,249,258,276,343,345,426,436],[70,73,128,145,146,245,311,348,440,442],[73,128,142,145,146,154,171,194,216,223,235,244,246,282,286,287,288,289,290,314,316,328,329,331,333,349,351,426,427,432,433,434,442],[73,128,142,145,146,160,216,334,340,346,434],[73,128,145,146,226,227,228,229,230,231,232,233,234],[73,128,145,146,277,320],[73,128,145,146,322],[73,128,145,146,320],[73,128,145,146,322,323],[73,128,142,145,146,194,197,199,243,437],[73,128,142,145,146,154,189,191,244,245,290,310,311,312,349,434,438,440,442],[73,128,142,145,146,154,171,193,199,312,314,360,427,433,437],[73,128,145,146,355],[73,128,145,146,356],[73,128,145,146,212,213,405],[73,128,145,146,357],[73,128,145,146,237,241],[73,128,142,145,146,194,237,244],[73,128,145,146,240,241],[73,128,145,146,242],[73,128,145,146,237,238],[73,128,145,146,237,291],[73,128,145,146,237],[73,128,145,146,277,318,433],[73,128,145,146,317],[73,128,145,146,238,432,433],[73,128,145,146,315,433],[73,128,145,146,238,432],[73,128,145,146,405],[73,128,145,146,194,212,214,239,244,311,314,348,351,354,360,367,368,397,400,404,426,434,437],[73,128,145,146,299,302,303,304,305,306],[64,73,128,145,146,181,183,272,398,399],[64,73,128,145,146,181,183,272,398,399,403],[73,128,145,146,414],[73,128,145,146,219,281,311,348,351,365,373,377,407,408,409,410,412,413,416,426,431,436],[73,128,145,146,305],[73,128,145,146,310],[73,128,142,145,146,244,292,307,309,313,348,434,440,442],[73,128,145,146,299,300,301,302,303,304,305,306,441],[70,73,128,142,145,146,154,171,237,238,246,290,311,314,346,347,349,426,427,436,437,440],[73,128,145,146,281,283,286,427],[73,128,142,145,146,277,436],[73,128,145,146,280,365],[73,128,145,146,279],[73,128,145,146,281,282],[73,128,145,146,278,280,436],[73,128,142,145,146,193,281,283,284,285,436,437],[64,73,128,145,146,200,212,432],[64,73,128,145,146,211],[73,128,145,146,186,187],[64,73,128,145,146,191],[64,73,128,145,146,432],[64,70,73,128,145,146,290,311,440,442],[73,128,145,146,191,462,463],[64,73,128,145,146,298],[64,73,128,145,146,154,171,189,260,293,295,297,442],[73,128,145,146,221,432,437],[73,128,145,146,330,432],[64,73,128,140,142,145,146,154,188,189,255,298,440,441],[64,73,128,145,146,179,180,181,182,183,440,487],[64,65,66,67,68,73,128,145,146],[73,128,145,146,250,251,252],[73,128,145,146,250],[64,68,73,128,142,144,145,146,154,178,179,180,181,182,183,184,189,246,341,385,438,439,442,487],[73,128,145,146,450],[73,128,145,146,452],[73,128,145,146,454],[73,128,145,146,456],[73,128,145,146,458,459,460],[73,128,145,146,464],[69,73,128,145,146,444,449,451,453,455,457,461,465,467,478,479,481,490,491,492,493],[73,128,145,146,466],[73,128,145,146,477],[73,128,145,146,295],[73,128,145,146,480],[73,127,128,145,146,281,283,284,286,482,483,484,487,488,489],[73,128,145,146,178],[73,128,145,146,504],[73,128,145,146,505],[73,128,145,146,160,178],[73,86,89,92,93,128,145,146,171],[73,89,128,145,146,160,171],[73,89,93,128,145,146,171],[73,128,145,146,160],[73,83,128,145,146],[73,87,128,145,146],[73,85,86,89,128,145,146,171],[73,128,145,146,148,168],[73,83,128,145,146,178],[73,85,89,128,145,146,148,171],[73,80,81,82,84,88,128,139,145,146,160,171],[73,89,97,105,128,145,146],[73,81,87,128,145,146],[73,89,114,115,128,145,146],[73,81,84,89,128,145,146,163,171,178],[73,89,128,145,146],[73,85,89,128,145,146,171],[73,80,128,145,146],[73,83,84,85,87,88,89,90,91,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,115,116,117,118,119,128,145,146],[73,89,107,110,128,136,145,146],[73,89,97,98,99,128,145,146],[73,87,89,98,100,128,145,146],[73,88,128,145,146],[73,81,83,89,128,145,146],[73,89,93,98,100,128,145,146],[73,93,128,145,146],[73,87,89,92,128,145,146,171],[73,81,85,89,97,128,145,146],[73,89,107,128,145,146],[73,100,128,145,146],[73,83,89,114,128,145,146,163,176,178],[73,128,145,146,272],[73,128,145,146,272,533],[73,128,145,146,272,478,523,524,525,526],[73,128,133,140,145,146,150,272,525,533,535],[73,128,133,145,146,272],[73,128,145,146,272,532],[73,128,145,146,272,528,533,534,536],[73,128,145,146,272,533,534,536]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"170d4db14678c68178ee8a3d5a990d5afb759ecb6ec44dbd885c50f6da6204f6","affectsGlobalScope":true,"impliedFormat":1},{"version":"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","impliedFormat":1},{"version":"0ff1b165090b491f5e1407ae680b9a0bc3806dc56827ec85f93c57390491e732","impliedFormat":1},{"version":"acd8fd5090ac73902278889c38336ff3f48af6ba03aa665eb34a75e7ba1dccc4","impliedFormat":1},{"version":"d6258883868fb2680d2ca96bc8b1352cab69874581493e6d52680c5ffecdb6cc","impliedFormat":1},{"version":"1b61d259de5350f8b1e5db06290d31eaebebc6baafd5f79d314b5af9256d7153","impliedFormat":1},{"version":"f258e3960f324a956fc76a3d3d9e964fff2244ff5859dcc6ce5951e5413ca826","impliedFormat":1},{"version":"643f7232d07bf75e15bd8f658f664d6183a0efaca5eb84b48201c7671a266979","impliedFormat":1},{"version":"21da358700a3893281ce0c517a7a30cbd46be020d9f0c3f2834d0a8ad1f5fc75","impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"378281aa35786c27d5811af7e6bcaa492eebd0c7013d48137c35bbc69a2b9751","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"1b2dd1cbeb0cc6ae20795958ba5950395ebb2849b7c8326853dd15530c77ab0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"387a023d363f755eb63450a66c28b14cdd7bc30a104565e2dbf0a8988bb4a56c","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"487b694c3de27ddf4ad107d4007ad304d29effccf9800c8ae23c2093638d906a","impliedFormat":1},{"version":"3a80bc85f38526ca3b08007ee80712e7bb0601df178b23fbf0bf87036fce40ce","impliedFormat":1},{"version":"ccf4552357ce3c159ef75f0f0114e80401702228f1898bdc9402214c9499e8c0","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"2931540c47ee0ff8a62860e61782eb17b155615db61e36986e54645ec67f67c2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"f6faf5f74e4c4cc309a6c6a6c4da02dbb840be5d3e92905a23dcd7b2b0bd1986","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"33e981bf6376e939f99bd7f89abec757c64897d33c005036b9a10d9587d80187","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"b41767d372275c154c7ea6c9d5449d9a741b8ce080f640155cc88ba1763e35b3","impliedFormat":1},{"version":"3bacf516d686d08682751a3bd2519ea3b8041a164bfb4f1d35728993e70a2426","impliedFormat":1},{"version":"7fb266686238369442bd1719bc0d7edd0199da4fb8540354e1ff7f16669b4323","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"54c3e2371e3d016469ad959697fd257e5621e16296fa67082c2575d0bf8eced0","impliedFormat":1},{"version":"beb8233b2c220cfa0feea31fbe9218d89fa02faa81ef744be8dce5acb89bb1fd","impliedFormat":1},{"version":"c183b931b68ad184bc8e8372bf663f3d33304772fb482f29fb91b3c391031f3e","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"48cc3ec153b50985fb95153258a710782b25975b10dd4ac8a4f3920632d10790","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"e1528ca65ac90f6fa0e4a247eb656b4263c470bb22d9033e466463e13395e599","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"866078923a56d026e39243b4392e282c1c63159723996fa89243140e1388a98d","impliedFormat":1},{"version":"830171b27c5fdf9bcbe4cf7d428fcf3ae2c67780fb7fbdccdf70d1623d938bc4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d97fb21da858fb18b8ae72c314e9743fd52f73ebe2764e12af1db32fc03f853f","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ea15fd99b2e34cb25fe8346c955000bb70c8b423ae4377a972ef46bfb37f595","impliedFormat":1},{"version":"7cf69dd5502c41644c9e5106210b5da7144800670cbe861f66726fa209e231c4","impliedFormat":1},{"version":"72c1f5e0a28e473026074817561d1bc9647909cf253c8d56c41d1df8d95b85f7","impliedFormat":1},{"version":"f9b4137a0d285bd77dba2e6e895530112264310ae47e07bf311feae428fb8b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b21e13ed07d0df176ae31d6b7f01f7b17d66dbeb489c0d31d00de2ca14883da","impliedFormat":1},{"version":"51aecd2df90a3cffea1eb4696b33b2d78594ea2aa2138e6b9471ec4841c6c2ee","impliedFormat":1},{"version":"2c91d8366ff2506296191c26fd97cc1990bab3ee22576275d28b654a21261a44","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"f929f0b6b3421a2d34344b0f421f45aeb2c84ad365ebf29d04312023b3accc58","impliedFormat":1},{"version":"db9ada976f9e52e13f7ae8b9a320f4b67b87685938c5879187d8864b2fbe97f3","impliedFormat":1},{"version":"9f39e70a354d0fba29ac3cdf6eca00b7f9e96f64b2b2780c432e8ea27f133743","impliedFormat":1},{"version":"0dace96cc0f7bc6d0ee2044921bdf19fe42d16284dbcc8ae200800d1c9579335","impliedFormat":1},{"version":"a2e2bbde231b65c53c764c12313897ffdfb6c49183dd31823ee2405f2f7b5378","impliedFormat":1},{"version":"ad1cc0ed328f3f708771272021be61ab146b32ecf2b78f3224959ff1e2cd2a5c","impliedFormat":1},{"version":"c64e1888baaa3253ca4405b455e4bf44f76357868a1bd0a52998ade9a092ad78","affectsGlobalScope":true,"impliedFormat":1},{"version":"d8cf132379078d0974a59df26069689a2d33c7dc826b5be56231841cb2f32e58","impliedFormat":1},{"version":"fbf413fc617837453c878a9174a1f1b383616857a3f8366bc41cf30df4aea7d5","impliedFormat":1},{"version":"148c73ec11318850f571172ceae3e55ce479d850fe18ec8eae0abd99d9f6c319","impliedFormat":1},{"version":"230bdc111d7578276e4a3bb9d075d85c78c6b68f428c3a9935e2eaa10f4ae1f5","impliedFormat":1},{"version":"e8aabbee5e7b9101b03bb4222607d57f38859b8115a8050a4eb91b4ee43a3a73","impliedFormat":1},{"version":"bbf42f98a5819f4f06e18c8b669a994afe9a17fe520ae3454a195e6eabf7700d","impliedFormat":1},{"version":"c0bb1b65757c72bbf8ddf7eaa532223bacf58041ff16c883e76f45506596e925","impliedFormat":1},{"version":"c8b85f7aed29f8f52b813f800611406b0bfe5cf3224d20a4bdda7c7f73ce368e","affectsGlobalScope":true,"impliedFormat":1},{"version":"145dcf25fd4967c610c53d93d7bc4dce8fbb1b6dd7935362472d4ae49363c7ba","impliedFormat":1},{"version":"ff65b8a8bd380c6d129becc35de02f7c29ad7ce03300331ca91311fb4044d1a9","impliedFormat":1},{"version":"76957a6d92b94b9e2852cf527fea32ad2dc0ef50f67fe2b14bd027c9ceef2d86","impliedFormat":1},{"version":"9043daec15206650fa119bad6b8d70136021ea7d52673a71f79a87a42ee38d44","affectsGlobalScope":true,"impliedFormat":1},{"version":"8ba0db41ed773e152647a78e9053e36a747891db41d6a51c7030a0d0f01babb2","affectsGlobalScope":true,"impliedFormat":1},{"version":"a58a15da4c5ba3df60c910a043281256fa52d36a0fcdef9b9100c646282e88dd","impliedFormat":1},{"version":"b36beffbf8acdc3ebc58c8bb4b75574b31a2169869c70fc03f82895b93950a12","impliedFormat":1},{"version":"de263f0089aefbfd73c89562fb7254a7468b1f33b61839aafc3f035d60766cb4","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"8c81fd4a110490c43d7c578e8c6f69b3af01717189196899a6a44f93daa57a3a","impliedFormat":1},{"version":"5fb39858b2459864b139950a09adae4f38dad87c25bf572ce414f10e4bd7baab","impliedFormat":1},{"version":"28e3631087ecef78fef8efdb21d4d2509f776ef6f0d660ff605b5ee6a22ebb8c","impliedFormat":1},{"version":"b33b74b97952d9bf4fbd2951dcfbb5136656ddb310ce1c84518aaa77dbca9992","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"6b306cd4282bbb54d4a6bb23cfb7a271160983dfc38c67b5a132504cfcc34896","affectsGlobalScope":true,"impliedFormat":1},{"version":"c119835edf36415081dfd9ed15fc0cd37aaa28d232be029ad073f15f3d88c323","impliedFormat":1},{"version":"450172a56b944c2d83f45cc11c9a388ea967cd301a21202aa0a23c34c7506a18","impliedFormat":1},{"version":"9705cd157ffbb91c5cab48bdd2de5a437a372e63f870f8a8472e72ff634d47c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ae86f30d5d10e4f75ce8dcb6e1bd3a12ecec3d071a21e8f462c5c85c678efb41","impliedFormat":1},{"version":"72f8936aebf0c4a1adab767b97d34ba7d3a308afcf76de4417b9c16fb92ed548","impliedFormat":1},{"version":"e03460fe72b259f6d25ad029f085e4bedc3f90477da4401d8fbc1efa9793230e","impliedFormat":1},{"version":"4286a3a6619514fca656089aee160bb6f2e77f4dd53dc5a96b26a0b4fc778055","impliedFormat":1},{"version":"04aa8fb012abeecf5666b013c59ba01dca5aa0c28173cb5385bc88d4adeb8d64","affectsGlobalScope":true,"impliedFormat":1},{"version":"3585d6891e9ea18e07d0755a6d90d71331558ba5dc5561933553209f886db106","affectsGlobalScope":true,"impliedFormat":1},{"version":"86be71cbb0593468644932a6eb96d527cfa600cecfc0b698af5f52e51804451d","impliedFormat":1},{"version":"84dd6b0fd2505135692935599d6606f50a421389e8d4535194bcded307ee5cf2","impliedFormat":1},{"version":"0d5b085f36e6dc55bc6332ecb9c733be3a534958c238fb8d8d18d4a2b6f2a15a","impliedFormat":1},{"version":"db19ea066fdc5f97df3f769e582ae3000380ab7942e266654bdb1a4650d19eaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"2a034894bf28c220a331c7a0229d33564803abe2ac1b9a5feee91b6b9b6e88ea","impliedFormat":1},{"version":"d7e9ab1b0996639047c61c1e62f85c620e4382206b3abb430d9a21fb7bc23c77","impliedFormat":1},{"version":"24259d3dae14de55d22f8b3d3e96954e5175a925ab6a830dc05a1993d4794eda","impliedFormat":1},{"version":"05069916ab9175271d15f9315a41ab28401561fe0e5f85f295c43538a38bd62e","impliedFormat":1},{"version":"be1cc4d94ea60cbe567bc29ed479d42587bf1e6cba490f123d329976b0fe4ee5","impliedFormat":1},{"version":"42bc0e1a903408137c3df2b06dfd7e402cdab5bbfa5fcfb871b22ebfdb30bd0b","impliedFormat":1},{"version":"9894dafe342b976d251aac58e616ac6df8db91fb9d98934ff9dd103e9e82578f","impliedFormat":1},{"version":"413df52d4ea14472c2fa5bee62f7a40abd1eb49be0b9722ee01ee4e52e63beb2","impliedFormat":1},{"version":"db6d2d9daad8a6d83f281af12ce4355a20b9a3e71b82b9f57cddcca0a8964a96","impliedFormat":1},{"version":"446a50749b24d14deac6f8843e057a6355dd6437d1fac4f9e5ce4a5071f34bff","impliedFormat":1},{"version":"182e9fcbe08ac7c012e0a6e2b5798b4352470be29a64fdc114d23c2bab7d5106","impliedFormat":1},{"version":"14109b34dc927e3b872c0f954a8d2536c245e38062bc47e8f97ba27f922fc9bd","impliedFormat":1},{"version":"1214c8bb321e2376f9dfc174a97b06c6e7bef05a61a1c50f094617d99fc4c9dd","impliedFormat":1},{"version":"96ffa70b486207241c0fcedb5d9553684f7fa6746bc2b04c519e7ebf41a51205","impliedFormat":1},{"version":"5c24c66b3ba29ce9f2a79c719967e6e944131352a117a0bc43fa5b346b5562b3","impliedFormat":1},{"version":"a86f82d646a739041d6702101afa82dcb935c416dd93cbca7fd754fd0282ce1f","impliedFormat":1},{"version":"ad0d1d75d129b1c80f911be438d6b61bfa8703930a8ff2be2f0e1f8a91841c64","impliedFormat":1},{"version":"ce75b1aebb33d510ff28af960a9221410a3eaf7f18fc5f21f9404075fba77256","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"496bbf339f3838c41f164238543e9fe5f1f10659cb30b68903851618464b98ba","impliedFormat":1},{"version":"099f915371bf0f8fd812d48a088531397f9edaf2ebfefe422cbe774c274a1621","impliedFormat":1},{"version":"78a2869ad0cbf3f9045dda08c0d4562b7e1b2bfe07b19e0db072f5c3c56e9584","impliedFormat":1},{"version":"f0a1bd6ad77f98dd7ed0d3207fcbcb5dd109ba144799cf41b8ea4dacb4e3e009","impliedFormat":1},{"version":"197efda3bbcdd3f1bc5379cd0534f1ab740f3be957efb17b320da8e7dcb2743b","impliedFormat":1},{"version":"0c05e9842ec4f8b7bfebfd3ca61604bb8c914ba8da9b5337c4f25da427a005f2","impliedFormat":1},{"version":"6b078c751b5d5e6b6c413be9d5b4dfc19429415f68b332fe2a39e9f1542b7d8b","impliedFormat":1},{"version":"faed7a5153215dbd6ebe76dfdcc0af0cfe760f7362bed43284be544308b114cf","impliedFormat":1},{"version":"2821b2fa5851e13a32c60ee34bcc77e9dcc49a1c11e9b90b4bce66e9bc33cd77","impliedFormat":1},{"version":"202490d447095d89dd86dd60afb8a4e444181c38ad3af29564f3fe1fd5850b8e","impliedFormat":1},{"version":"d3a0843edb8ee75a797f6e646c34b2a865f44719048244666dd1f191d2204bc7","impliedFormat":1},{"version":"9346288f949b2b88527b173a7c8bf85aca37be087d0ca4e56df8f84421bcd721","impliedFormat":1},{"version":"ed27e451ce2425f7cc032d16d15621600d4599d308c2f0da8fd9e4548a90fbe4","impliedFormat":1},{"version":"a7907a713895fe2b67001b10870649ecc286f102d21fb1b07a09eb7f86684f81","impliedFormat":1},{"version":"c327002046cc4dd450cff982d36e64e020838dae04eafb06d8d6f2dc1333237a","impliedFormat":1},{"version":"808b5d89d2ee266eb5552a053c1dd9633e6fb313f6c24c1788034a755c790552","impliedFormat":1},{"version":"df3c987836720acdc5d116ca3cafed0b7999d1d6d1001bcb7f4e95d08be143e8","impliedFormat":1},{"version":"b06d68a692d3c1dd12bed02eaa3b4c06cfc2a3e9560b0cecd2014bba480c4e8e","impliedFormat":1},{"version":"9e2739b32f741859263fdba0244c194ca8e96da49b430377930b8f721d77c000","impliedFormat":1},{"version":"fb1d8e814a3eeb5101ca13515e0548e112bd1ff3fb358ece535b93e94adf5a3a","impliedFormat":1},{"version":"ffa495b17a5ef1d0399586b590bd281056cee6ce3583e34f39926f8dcc6ecdb5","impliedFormat":1},{"version":"f8d5ff8eafd37499f2b6a98659dd9b45a321de186b8db6b6142faed0fea3de77","impliedFormat":1},{"version":"c86fe861cf1b4c46a0fb7d74dffe596cf679a2e5e8b1456881313170f092e3fa","impliedFormat":1},{"version":"6975047b49da82197056852c16534c41e7faff71d5048ec5c41cc943ebcf8ca4","impliedFormat":1},{"version":"540cc83ab772a2c6bc509fe1354f314825b5dba3669efdfbe4693ecd3048e34f","impliedFormat":1},{"version":"121b0696021ab885c570bbeb331be8ad82c6efe2f3b93a6e63874901bebc13e3","impliedFormat":1},{"version":"4e01846df98d478a2a626ec3641524964b38acaac13945c2db198bf9f3df22ee","impliedFormat":1},{"version":"678d6d4c43e5728bf66e92fc2269da9fa709cb60510fed988a27161473c3853f","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"aa14cee20aa0db79f8df101fc027d929aec10feb5b8a8da3b9af3895d05b7ba2","impliedFormat":1},{"version":"f9358de24a0b2592b856b7497181294314885a54b5339ac1878937311e320597","impliedFormat":1},{"version":"aeb554d876c6b8c818da2e118d8b11e1e559adbe6bf606cc9a611c1b6c09f670","impliedFormat":1},{"version":"acf5a2ac47b59ca07afa9abbd2b31d001bf7448b041927befae2ea5b1951d9f9","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"d71291eff1e19d8762a908ba947e891af44749f3a2cbc5bd2ec4b72f72ea795f","impliedFormat":1},{"version":"c0480e03db4b816dff2682b347c95f2177699525c54e7e6f6aa8ded890b76be7","impliedFormat":1},{"version":"892258709c8fc69cc1711d3554503f35101381df7e33eec344356bdc443ba07b","impliedFormat":1},{"version":"b620391fe8060cf9bedc176a4d01366e6574d7a71e0ac0ab344a4e76576fcbb8","impliedFormat":1},{"version":"3e7efde639c6a6c3edb9847b3f61e308bf7a69685b92f665048c45132f51c218","impliedFormat":1},{"version":"df45ca1176e6ac211eae7ddf51336dc075c5314bc5c253651bae639defd5eec5","impliedFormat":1},{"version":"106c6025f1d99fd468fd8bf6e5bda724e11e5905a4076c5d29790b6c3745e50c","impliedFormat":1},{"version":"ee8df1cb8d0faaca4013a1b442e99130769ce06f438d18d510fed95890067563","impliedFormat":1},{"version":"bfb7f8475428637bee12bdd31bd9968c1c8a1cc2c3e426c959e2f3a307f8936f","impliedFormat":1},{"version":"6f491d0108927478d3247bbbc489c78c2da7ef552fd5277f1ab6819986fdf0b1","impliedFormat":1},{"version":"0d8f2b8781c721170b87a6b662b3cb038fd1a721165ecca390352c818d425872","impliedFormat":1},{"version":"15a234e5031b19c48a69ccc1607522d6e4b50f57d308ecb7fe863d44cd9f9eb3","impliedFormat":1},{"version":"380647d8f3b7f852cca6d154a376dbf8ac620a2f12b936594504a8a852e71d2f","impliedFormat":1},{"version":"148679c6d0f449210a96e7d2e562d589e56fcde87f843a92808b3ff103f1a774","impliedFormat":1},{"version":"6459054aabb306821a043e02b89d54da508e3a6966601a41e71c166e4ea1474f","impliedFormat":1},{"version":"2f9c89cbb29d362290531b48880a4024f258c6033aaeb7e59fbc62db26819650","impliedFormat":1},{"version":"bb37588926aba35c9283fe8d46ebf4e79ffe976343105f5c6d45f282793352b2","impliedFormat":1},{"version":"05c97cddbaf99978f83d96de2d8af86aded9332592f08ce4a284d72d0952c391","impliedFormat":1},{"version":"72179f9dd22a86deaad4cc3490eb0fe69ee084d503b686985965654013f1391b","impliedFormat":1},{"version":"2e6114a7dd6feeef85b2c80120fdbfb59a5529c0dcc5bfa8447b6996c97a69f5","impliedFormat":1},{"version":"7b6ff760c8a240b40dab6e4419b989f06a5b782f4710d2967e67c695ef3e93c4","impliedFormat":1},{"version":"c8f004e6036aa1c764ad4ec543cf89a5c1893a9535c80ef3f2b653e370de45e6","impliedFormat":1},{"version":"dd80b1e600d00f5c6a6ba23f455b84a7db121219e68f89f10552c54ba46e4dc9","impliedFormat":1},{"version":"b064c36f35de7387d71c599bfcf28875849a1dbc733e82bd26cae3d1cd060521","impliedFormat":1},{"version":"05c7280d72f3ed26f346cbe7cbbbb002fb7f15739197cbbee6ab3fd1a6cb9347","impliedFormat":1},{"version":"8de9fe97fa9e00ec00666fa77ab6e91b35d25af8ca75dabcb01e14ad3299b150","impliedFormat":1},{"version":"f63ab283a1c8f5c79fabe7ca4ef85f9633339c4f0e822fce6a767f9d59282af2","impliedFormat":1},{"version":"dba114fb6a32b355a9cfc26ca2276834d72fe0e94cd2c3494005547025015369","impliedFormat":1},{"version":"7ab12b2f1249187223d11a589f5789c75177a0b597b9eb7f8e2e42d045393347","impliedFormat":1},{"version":"11c90ce55a33b4b3542d4eddaba4cf5305121ec0e97f9ab900d2c29ee0d1ab19","impliedFormat":1},{"version":"3996be00e03a6ad70bf746a62015cd8f530fd9c99166d7551f0b1434f6a5a4bb","impliedFormat":1},{"version":"f974e4a06953682a2c15d5bd5114c0284d5abf8bc0fe4da25cb9159427b70072","impliedFormat":1},{"version":"50256e9c31318487f3752b7ac12ff365c8949953e04568009c8705db802776fb","impliedFormat":1},{"version":"7d73b24e7bf31dfb8a931ca6c4245f6bb0814dfae17e4b60c9e194a631fe5f7b","impliedFormat":1},{"version":"d130c5f73768de51402351d5dc7d1b36eaec980ca697846e53156e4ea9911476","impliedFormat":1},{"version":"413586add0cfe7369b64979d4ec2ed56c3f771c0667fbde1bf1f10063ede0b08","impliedFormat":1},{"version":"06472528e998d152375ad3bd8ebcb69ff4694fd8d2effaf60a9d9f25a37a097a","impliedFormat":1},{"version":"50b5bc34ce6b12eccb76214b51aadfa56572aa6cc79c2b9455cdbb3d6c76af1d","impliedFormat":1},{"version":"b7e16ef7f646a50991119b205794ebfd3a4d8f8e0f314981ebbe991639023d0e","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"a401617604fa1f6ce437b81689563dfdc377069e4c58465dbd8d16069aede0a5","impliedFormat":1},{"version":"6e9082e91370de5040e415cd9f24e595b490382e8c7402c4e938a8ce4bccc99f","impliedFormat":1},{"version":"97307708b8350a98d82c8201f755d8bcb62ef00d7861e5b57ccbd4aa54aedb05","impliedFormat":1},{"version":"dd30e671d9d907727dd28fbc06a2811da6e092dba46967b0643eff22ca74b877","impliedFormat":1},{"version":"d682336018141807fb602709e2d95a192828fcb8d5ba06dda3833a8ea98f69e3","impliedFormat":1},{"version":"6124e973eab8c52cabf3c07575204efc1784aca6b0a30c79eb85fe240a857efa","impliedFormat":1},{"version":"0d891735a21edc75df51f3eb995e18149e119d1ce22fd40db2b260c5960b914e","impliedFormat":1},{"version":"3b414b99a73171e1c4b7b7714e26b87d6c5cb03d200352da5342ab4088a54c85","impliedFormat":1},{"version":"4fbd3116e00ed3a6410499924b6403cc9367fdca303e34838129b328058ede40","impliedFormat":1},{"version":"b01bd582a6e41457bc56e6f0f9de4cb17f33f5f3843a7cf8210ac9c18472fb0f","impliedFormat":1},{"version":"0a437ae178f999b46b6153d79095b60c42c996bc0458c04955f1c996dc68b971","impliedFormat":1},{"version":"74b2a5e5197bd0f2e0077a1ea7c07455bbea67b87b0869d9786d55104006784f","impliedFormat":1},{"version":"4a7baeb6325920044f66c0f8e5e6f1f52e06e6d87588d837bdf44feb6f35c664","impliedFormat":1},{"version":"12d218a49dbe5655b911e6cc3c13b2c655e4c783471c3b0432137769c79e1b3c","impliedFormat":1},{"version":"7274fbffbd7c9589d8d0ffba68157237afd5cecff1e99881ea3399127e60572f","impliedFormat":1},{"version":"6b0fc04121360f752d196ba35b6567192f422d04a97b2840d7d85f8b79921c92","impliedFormat":1},{"version":"1a82deef4c1d39f6882f28d275cad4c01f907b9b39be9cbc472fcf2cf051e05b","impliedFormat":1},{"version":"c5426dbfc1cf90532f66965a7aa8c1136a78d4d0f96d8180ecbfc11d7722f1a5","impliedFormat":1},{"version":"65a15fc47900787c0bd18b603afb98d33ede930bed1798fc984d5ebb78b26cf9","impliedFormat":1},{"version":"9d202701f6e0744adb6314d03d2eb8fc994798fc83d91b691b75b07626a69801","impliedFormat":1},{"version":"de9d2df7663e64e3a91bf495f315a7577e23ba088f2949d5ce9ec96f44fba37d","impliedFormat":1},{"version":"c7af78a2ea7cb1cd009cfb5bdb48cd0b03dad3b54f6da7aab615c2e9e9d570c5","impliedFormat":1},{"version":"1ee45496b5f8bdee6f7abc233355898e5bf9bd51255db65f5ff7ede617ca0027","impliedFormat":1},{"version":"42189cd810c0bf1247da0742d5744bb7c1486de6fd62269d5c25833b7ec38732","affectsGlobalScope":true,"impliedFormat":1},{"version":"3fbdd025f9d4d820414417eeb4107ffa0078d454a033b506e22d3a23bc3d9c41","affectsGlobalScope":true,"impliedFormat":1},{"version":"a8f8e6ab2fa07b45251f403548b78eaf2022f3c2254df3dc186cb2671fe4996d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa6c12a7c0f6b84d512f200690bfc74819e99efae69e4c95c4cd30f6884c526e","impliedFormat":1},{"version":"f1c32f9ce9c497da4dc215c3bc84b722ea02497d35f9134db3bb40a8d918b92b","impliedFormat":1},{"version":"b73c319af2cc3ef8f6421308a250f328836531ea3761823b4cabbd133047aefa","affectsGlobalScope":true,"impliedFormat":1},{"version":"e433b0337b8106909e7953015e8fa3f2d30797cea27141d1c5b135365bb975a6","impliedFormat":1},{"version":"40436e992021afc07b61da5f488e9671729a3c5b5e6665b99b1fb43a39081ee3","impliedFormat":1},{"version":"ddff7fc6edbdc5163a09e22bf8df7bef75f75369ebd7ecea95ba55c4386e2441","impliedFormat":1},{"version":"3a788c7fb7b1b1153d69a4d1d9e1d0dfbcf1127e703bdb02b6d12698e683d1fb","impliedFormat":1},{"version":"2e4f37ffe8862b14d8e24ae8763daaa8340c0df0b859d9a9733def0eee7562d9","impliedFormat":1},{"version":"d38530db0601215d6d767f280e3a3c54b2a83b709e8d9001acb6f61c67e965fc","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"4805f6161c2c8cefb8d3b8bd96a080c0fe8dbc9315f6ad2e53238f9a79e528a6","impliedFormat":1},{"version":"b83cb14474fa60c5f3ec660146b97d122f0735627f80d82dd03e8caa39b4388c","impliedFormat":1},{"version":"9c82171d836c47486074e4ca8e059735bf97b205e70b196535b5efd40cbe1bc5","impliedFormat":1},{"version":"f374cb24e93e7798c4d9e83ff872fa52d2cdb36306392b840a6ddf46cb925cb6","impliedFormat":1},{"version":"42b81043b00ff27c6bd955aea0f6e741545f2265978bf364b614702b72a027ab","impliedFormat":1},{"version":"162e071992b34bc36ca257d629547f93cb43728d6fe073ad18a237e4f7c52d7d","impliedFormat":1},{"version":"b73cbf0a72c8800cf8f96a9acfe94f3ad32ca71342a8908b8ae484d61113f647","impliedFormat":1},{"version":"bae6dd176832f6423966647382c0d7ba9e63f8c167522f09a982f086cd4e8b23","impliedFormat":1},{"version":"20865ac316b8893c1a0cc383ccfc1801443fbcc2a7255be166cf90d03fac88c9","impliedFormat":1},{"version":"c9958eb32126a3843deedda8c22fb97024aa5d6dd588b90af2d7f2bfac540f23","impliedFormat":1},{"version":"461d0ad8ae5f2ff981778af912ba71b37a8426a33301daa00f21c6ccb27f8156","impliedFormat":1},{"version":"e927c2c13c4eaf0a7f17e6022eee8519eb29ef42c4c13a31e81a611ab8c95577","impliedFormat":1},{"version":"fcafff163ca5e66d3b87126e756e1b6dfa8c526aa9cd2a2b0a9da837d81bbd72","impliedFormat":1},{"version":"70246ad95ad8a22bdfe806cb5d383a26c0c6e58e7207ab9c431f1cb175aca657","impliedFormat":1},{"version":"f00f3aa5d64ff46e600648b55a79dcd1333458f7a10da2ed594d9f0a44b76d0b","impliedFormat":1},{"version":"772d8d5eb158b6c92412c03228bd9902ccb1457d7a705b8129814a5d1a6308fc","impliedFormat":1},{"version":"45490817629431853543adcb91c0673c25af52a456479588b6486daba34f68bb","impliedFormat":1},{"version":"802e797bcab5663b2c9f63f51bdf67eff7c41bc64c0fd65e6da3e7941359e2f7","impliedFormat":1},{"version":"8b4327413e5af38cd8cb97c59f48c3c866015d5d642f28518e3a891c469f240e","impliedFormat":1},{"version":"a85397e1b7fc6ee7ea6fe7e040a94331c961f207687827e33ee0c5591e90874e","impliedFormat":1},{"version":"4b20fcf10a5413680e39f5666464859fc56b1003e7dfe2405ced82371ebd49b6","impliedFormat":1},{"version":"c06ef3b2569b1c1ad99fcd7fe5fba8d466e2619da5375dfa940a94e0feea899b","impliedFormat":1},{"version":"f7d628893c9fa52ba3ab01bcb5e79191636c4331ee5667ecc6373cbccff8ae12","impliedFormat":1},{"version":"5b2323ca2d1bd97e1f32f09452908e015b012e0e4f958f649cbe0c8989a3fb4f","impliedFormat":1},{"version":"8c50ee1fcb97de2860d9ebd76561614ab6d365ac8390ef4a02bb4e76929705d1","impliedFormat":1},{"version":"cff125b5bbb8b819d7835c6b78809416d08da8b00e66611bfe368e0964be7b83","impliedFormat":1},{"version":"d663134457d8d669ae0df34eabd57028bddc04fc444c4bc04bc5215afc91e1f4","impliedFormat":1},{"version":"985153f0deb9b4391110331a2f0c114019dbea90cba5ca68a4107700796e0d75","impliedFormat":1},{"version":"30fe85f1312ab83e45dab3fc3f63b566e0486b64abb6986805a4613560dc7a78","impliedFormat":1},{"version":"43e96a3d5d1411ab40ba2f61d6a3192e58177bcf3b133a80ad2a16591611726d","impliedFormat":1},{"version":"58659b06d33fa430bee1105b75cf876c0a35b2567207487c8578aec51ca2d977","impliedFormat":1},{"version":"d8cdd9477b9c5d1a8fbf2fa58e2eb6723969e7201b3549f998e0d2661dfec9d8","impliedFormat":1},{"version":"cfa846a7b7847a1d973605fbb8c91f47f3a0f0643c18ac05c47077ebc72e71c7","impliedFormat":1},{"version":"20e1c8beced348a9bf7864dd2b3ca7efa9ea6675dde8ecae6109b1a3f7248cd2","impliedFormat":1},{"version":"6c800b281b9e89e69165fd11536195488de3ff53004e55905e6c0059a2d8591e","impliedFormat":1},{"version":"7d4254b4c6c67a29d5e7f65e67d72540480ac2cfb041ca484847f5ae70480b62","impliedFormat":1},{"version":"19c3d6db2020cee6f9d8d79e13c15e546e05b6db2020a3ee63789ec74a9990b3","impliedFormat":1},{"version":"41eeb453ccb75c5b2c3abef97adbbd741bd7e9112a2510e12f03f646dc9ad13d","impliedFormat":1},{"version":"4c9894b4900bc407719c258656b6c34a7888833f0424403b803023c4ada4763f","impliedFormat":1},{"version":"301cf1d98bce8b1666184888c7aaacd6c9dfed9185510f4317ed623596e38d2c","impliedFormat":1},{"version":"6c66d5cf284a56109703f941c92b9a22f2472c14645f80a2dbb8e4ef2128d67c","impliedFormat":1},{"version":"a3e7d932dc9c09daa99141a8e4800fc6c58c625af0d4bbb017773dc36da75426","impliedFormat":1},{"version":"3c06285ec67f1dd3d6829584b6088204d43830f498671fbe69d099049a9b6f91","impliedFormat":1},{"version":"a57b1802794433adec9ff3fed12aa79d671faed86c49b09e02e1ac41b4f1d33a","impliedFormat":1},{"version":"ad10d4f0517599cdeca7755b930f148804e3e0e5b5a3847adce0f1f71bbccd74","impliedFormat":1},{"version":"1042064ece5bb47d6aba91648fbe0635c17c600ebdf567588b4ca715602f0a9d","impliedFormat":1},{"version":"c49469a5349b3cc1965710b5b0f98ed6c028686aa8450bcb3796728873eb923e","impliedFormat":1},{"version":"4a889f2c763edb4d55cb624257272ac10d04a1cad2ed2948b10ed4a7fda2a428","impliedFormat":1},{"version":"7bb79aa2fead87d9d56294ef71e056487e848d7b550c9a367523ee5416c44cfa","impliedFormat":1},{"version":"d88ea80a6447d7391f52352ec97e56b52ebec934a4a4af6e2464cfd8b39c3ba8","impliedFormat":1},{"version":"d3c8b73132efa48e9399d63e8946a57ed4a7176e2f26d2f144bb14c89fcdefc1","impliedFormat":1},{"version":"96171c03c2e7f314d66d38acd581f9667439845865b7f85da8df598ff9617476","impliedFormat":1},{"version":"27ff4196654e6373c9af16b6165120e2dd2169f9ad6abb5c935af5abd8c7938c","impliedFormat":1},{"version":"8c030e515014c10a2b98f9f48408e3ba18023dfd3f56e3312c6c2f3ae1f55a16","impliedFormat":1},{"version":"d193c8a86144b3a87b22bc1f5534b9c3e0f5a187873ec337c289a183973a58fe","impliedFormat":1},{"version":"d2aa1580a899bcec04c29b1c37f2a60f62e2f03acb731534d4e210307c982da8","impliedFormat":1},{"version":"47bdec88bb6708e8dfde9e97343fd3ea4bc8e5c4674ccdd7b73611caea205bb8","impliedFormat":1},{"version":"f56bdc6884648806d34bc66d31cdb787c4718d04105ce2cd88535db214631f82","impliedFormat":1},{"version":"68ab1530f0ddf7475425917b0e04068afdc1aee2db033bed9aa9b60a914c512e","impliedFormat":1},{"version":"01479d9d5a5dda16d529b91811375187f61a06e74be294a35ecce77e0b9e8d6c","impliedFormat":1},{"version":"49f95e989b4632c6c2a578cc0078ee19a5831832d79cc59abecf5160ea71abad","impliedFormat":1},{"version":"9666533332f26e8995e4d6fe472bdeec9f15d405693723e6497bf94120c566c8","impliedFormat":1},{"version":"ce0df82a9ae6f914ba08409d4d883983cc08e6d59eb2df02d8e4d68309e7848b","impliedFormat":1},{"version":"796273b2edc72e78a04e86d7c58ae94d370ab93a0ddf40b1aa85a37a1c29ecd7","impliedFormat":1},{"version":"5df15a69187d737d6d8d066e189ae4f97e41f4d53712a46b2710ff9f8563ec9f","impliedFormat":1},{"version":"1a4dc28334a926d90ba6a2d811ba0ff6c22775fcc13679521f034c124269fd40","impliedFormat":1},{"version":"f05315ff85714f0b87cc0b54bcd3dde2716e5a6b99aedcc19cad02bf2403e08c","impliedFormat":1},{"version":"8a8c64dafaba11c806efa56f5c69f611276471bef80a1db1f71316ec4168acef","impliedFormat":1},{"version":"43ba4f2fa8c698f5c304d21a3ef596741e8e85a810b7c1f9b692653791d8d97a","impliedFormat":1},{"version":"5fad3b31fc17a5bc58095118a8b160f5260964787c52e7eb51e3d4fcf5d4a6f0","impliedFormat":1},{"version":"72105519d0390262cf0abe84cf41c926ade0ff475d35eb21307b2f94de985778","impliedFormat":1},{"version":"d0a4cac61fa080f2be5ebb68b82726be835689b35994ba0e22e3ed4d2bc45e3b","impliedFormat":1},{"version":"c857e0aae3f5f444abd791ec81206020fbcc1223e187316677e026d1c1d6fe08","impliedFormat":1},{"version":"ccf6dd45b708fb74ba9ed0f2478d4eb9195c9dfef0ff83a6092fa3cf2ff53b4f","impliedFormat":1},{"version":"2d7db1d73456e8c5075387d4240c29a2a900847f9c1bff106a2e490da8fbd457","impliedFormat":1},{"version":"2b15c805f48e4e970f8ec0b1915f22d13ca6212375e8987663e2ef5f0205e832","impliedFormat":1},{"version":"205a31b31beb7be73b8df18fcc43109cbc31f398950190a0967afc7a12cb478c","impliedFormat":1},{"version":"8fca3039857709484e5893c05c1f9126ab7451fa6c29e19bb8c2411a2e937345","impliedFormat":1},{"version":"35069c2c417bd7443ae7c7cafd1de02f665bf015479fec998985ffbbf500628c","impliedFormat":1},{"version":"dba6c7006e14a98ec82999c6f89fbbbfd1c642f41db148535f3b77b8018829b8","impliedFormat":1},{"version":"7f897b285f22a57a5c4dc14a27da2747c01084a542b4d90d33897216dceeea2e","impliedFormat":1},{"version":"7e0b7f91c5ab6e33f511efc640d36e6f933510b11be24f98836a20a2dc914c2d","impliedFormat":1},{"version":"045b752f44bf9bbdcaffd882424ab0e15cb8d11fa94e1448942e338c8ef19fba","impliedFormat":1},{"version":"2894c56cad581928bb37607810af011764a2f511f575d28c9f4af0f2ef02d1ab","impliedFormat":1},{"version":"0a72186f94215d020cb386f7dca81d7495ab6c17066eb07d0f44a5bf33c1b21a","impliedFormat":1},{"version":"05c20b01929a2386831b27903b2b1a1c624205b24123bab8ec3931ba00115b34","impliedFormat":1},{"version":"0aedb02516baf3e66b2c1db9fef50666d6ed257edac0f866ea32f1aa05aa474f","impliedFormat":1},{"version":"ca0f4d9068d652bad47e326cf6ba424ac71ab866e44b24ddb6c2bd82d129586a","affectsGlobalScope":true,"impliedFormat":1},{"version":"04d36005fcbeac741ac50c421181f4e0316d57d148d37cc321a8ea285472462b","impliedFormat":1},{"version":"56ccb49443bfb72e5952f7012f0de1a8679f9f75fc93a5c1ac0bafb28725fc5f","impliedFormat":1},{"version":"20fa37b636fdcc1746ea0738f733d0aed17890d1cd7cb1b2f37010222c23f13e","impliedFormat":1},{"version":"d90b9f1520366d713a73bd30c5a9eb0040d0fb6076aff370796bc776fd705943","impliedFormat":1},{"version":"88e9caa9c5d2ba629240b5913842e7c57c5c0315383b8dc9d436ef2b60f1c391","impliedFormat":1},{"version":"19df3488557c2fc9b4d8f0bac0fd20fb59aa19dec67c81f93813951a81a867f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"a15cf91ab29d3667801562a95730c5f0d96e1d87dffa00a8a91da0002e89fd2d","affectsGlobalScope":true,"impliedFormat":1},{"version":"bef86adb77316505c6b471da1d9b8c9e428867c2566270e8894d4d773a1c4dc2","impliedFormat":1},{"version":"1b239954e46191b95913d20771cf4283f63c3ebac79d7e30736a8d40b094fdaf","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"2652448ac55a2010a1f71dd141f828b682298d39728f9871e1cdf8696ef443fd","impliedFormat":1},{"version":"02c4fc9e6bb27545fa021f6056e88ff5fdf10d9d9f1467f1d10536c6e749ac50","impliedFormat":1},{"version":"120599fd965257b1f4d0ff794bc696162832d9d8467224f4665f713a3119078b","impliedFormat":1},{"version":"5433f33b0a20300cca35d2f229a7fc20b0e8477c44be2affeb21cb464af60c76","impliedFormat":1},{"version":"db036c56f79186da50af66511d37d9fe77fa6793381927292d17f81f787bb195","impliedFormat":1},{"version":"bd4131091b773973ca5d2326c60b789ab1f5e02d8843b3587effe6e1ea7c9d86","impliedFormat":1},{"version":"c7f6485931085bf010fbaf46880a9b9ec1a285ad9dc8c695a9e936f5a48f34b4","impliedFormat":1},{"version":"14f6b927888a1112d662877a5966b05ac1bf7ed25d6c84386db4c23c95a5363b","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"b5189fd031ef3232ec66817df5a8e7b23b079fdf3cd29a0c100eff1e98b2ce8e","impliedFormat":1},{"version":"8d0cbb73a990e0107ac60bccea2b06b1eeaa425350be95f5e318fedba1a19a07","impliedFormat":1},{"version":"49c346823ba6d4b12278c12c977fb3a31c06b9ca719015978cb145eb86da1c61","impliedFormat":1},{"version":"bfac6e50eaa7e73bb66b7e052c38fdc8ccfc8dbde2777648642af33cf349f7f1","impliedFormat":1},{"version":"92f7c1a4da7fbfd67a2228d1687d5c2e1faa0ba865a94d3550a3941d7527a45d","impliedFormat":1},{"version":"f53b120213a9289d9a26f5af90c4c686dd71d91487a0aa5451a38366c70dc64b","impliedFormat":1},{"version":"83fe880c090afe485a5c02262c0b7cdd76a299a50c48d9bde02be8e908fb4ae6","impliedFormat":1},{"version":"946a709579b7868a92a70ad70906444f32803fa6e6ce3739b6594c17691837ce","impliedFormat":1},{"version":"57d67b72e06059adc5e9454de26bbfe567d412b962a501d263c75c2db430f40e","impliedFormat":1},{"version":"6511e4503cf74c469c60aafd6589e4d14d5eb0a25f9bf043dcbecdf65f261972","impliedFormat":1},{"version":"3174d4a29957cdcff56d28f64edba4678f1b6cc9faf7c1a9c59a88f6746fe91a","impliedFormat":1},{"version":"8c70ddc0c22d85e56011d49fddfaae3405eb53d47b59327b9dd589e82df672e7","impliedFormat":1},{"version":"a67b87d0281c97dfc1197ef28dfe397fc2c865ccd41f7e32b53f647184cc7307","impliedFormat":1},{"version":"771ffb773f1ddd562492a6b9aaca648192ac3f056f0e1d997678ff97dbb6bf9b","impliedFormat":1},{"version":"232f70c0cf2b432f3a6e56a8dc3417103eb162292a9fd376d51a3a9ea5fbbf6f","impliedFormat":1},{"version":"4162ae9d4c1b8a7ab7f9ef287d98e9000b57062db1eb1ae735c4814845c2cb5d","impliedFormat":1},{"version":"a0ba218ac1baa3da0d5d9c1ec1a7c2f8676c284e6f5b920d6d049b13fa267377","impliedFormat":1},{"version":"8a0e762ceb20c7e72504feef83d709468a70af4abccb304f32d6b9bac1129b2c","impliedFormat":1},{"version":"e8a68cafbba564f74b7b737b0c831f57c6223f87affc1b71c672b21e24e08329","impliedFormat":1},{"version":"9252d498a77517aab5d8d4b5eb9d71e4b225bbc7123df9713e08181de63180f6","impliedFormat":1},{"version":"9353792eaa8271bc0e6e70e37ce06455c58056f4cf1b868feaed76b17b8449d0","impliedFormat":1},{"version":"35e6379c3f7cb27b111ad4c1aa69538fd8e788ab737b8ff7596a1b40e96f4f90","impliedFormat":1},{"version":"1fffe726740f9787f15b532e1dc870af3cd964dbe29e191e76121aa3dd8693f2","impliedFormat":1},{"version":"371bf6127c1d427836de95197155132501cb6b69ef8709176ce6e0b85d059264","impliedFormat":1},{"version":"2bafd700e617d3693d568e972d02b92224b514781f542f70d497a8fdf92d52a2","affectsGlobalScope":true,"impliedFormat":1},{"version":"5542d8a7ea13168cb573be0d1ba0d29460d59430fb12bb7bf4674efd5604e14c","impliedFormat":1},{"version":"af48e58339188d5737b608d41411a9c054685413d8ae88b8c1d0d9bfabdf6e7e","impliedFormat":1},{"version":"616775f16134fa9d01fc677ad3f76e68c051a056c22ab552c64cc281a9686790","impliedFormat":1},{"version":"65c24a8baa2cca1de069a0ba9fba82a173690f52d7e2d0f1f7542d59d5eb4db0","impliedFormat":1},{"version":"f9fe6af238339a0e5f7563acee3178f51db37f32a2e7c09f85273098cee7ec49","impliedFormat":1},{"version":"22f3e5ec72c82809784e4b9ea68920c5096f71e3cffbbd4a6e2b4bc7db05a49a","impliedFormat":1},{"version":"77e71242e71ebf8528c5802993697878f0533db8f2299b4d36aa015bae08a79c","impliedFormat":1},{"version":"98a787be42bd92f8c2a37d7df5f13e5992da0d967fab794adbb7ee18370f9849","impliedFormat":1},{"version":"332248ee37cca52903572e66c11bef755ccc6e235835e63d3c3e60ddda3e9b93","impliedFormat":1},{"version":"94e8cc88ae2ef3d920bb3bdc369f48436db123aa2dc07f683309ad8c9968a1e1","impliedFormat":1},{"version":"4545c1a1ceca170d5d83452dd7c4994644c35cf676a671412601689d9a62da35","impliedFormat":1},{"version":"320f4091e33548b554d2214ce5fc31c96631b513dffa806e2e3a60766c8c49d9","impliedFormat":1},{"version":"a2d648d333cf67b9aeac5d81a1a379d563a8ffa91ddd61c6179f68de724260ff","impliedFormat":1},{"version":"d90d5f524de38889d1e1dbc2aeef00060d779f8688c02766ddb9ca195e4a713d","impliedFormat":1},{"version":"a3f41ed1b4f2fc3049394b945a68ae4fdefd49fa1739c32f149d32c0545d67f5","impliedFormat":1},{"version":"b0309e1eda99a9e76f87c18992d9c3689b0938266242835dd4611f2b69efe456","impliedFormat":1},{"version":"47699512e6d8bebf7be488182427189f999affe3addc1c87c882d36b7f2d0b0e","impliedFormat":1},{"version":"6ceb10ca57943be87ff9debe978f4ab73593c0c85ee802c051a93fc96aaf7a20","impliedFormat":1},{"version":"1de3ffe0cc28a9fe2ac761ece075826836b5a02f340b412510a59ba1d41a505a","impliedFormat":1},{"version":"e46d6cc08d243d8d0d83986f609d830991f00450fb234f5b2f861648c42dc0d8","impliedFormat":1},{"version":"1c0a98de1323051010ce5b958ad47bc1c007f7921973123c999300e2b7b0ecc0","impliedFormat":1},{"version":"ff863d17c6c659440f7c5c536e4db7762d8c2565547b2608f36b798a743606ca","impliedFormat":1},{"version":"5412ad0043cd60d1f1406fc12cb4fb987e9a734decbdd4db6f6acf71791e36fe","impliedFormat":1},{"version":"ad036a85efcd9e5b4f7dd5c1a7362c8478f9a3b6c3554654ca24a29aa850a9c5","impliedFormat":1},{"version":"fedebeae32c5cdd1a85b4e0504a01996e4a8adf3dfa72876920d3dd6e42978e7","impliedFormat":1},{"version":"b6c1f64158da02580f55e8a2728eda6805f79419aed46a930f43e68ad66a38fc","impliedFormat":1},{"version":"cdf21eee8007e339b1b9945abf4a7b44930b1d695cc528459e68a3adc39a622e","impliedFormat":1},{"version":"9f9bb6755a8ce32d656ffa4763a8144aa4f274d6b69b59d7c32811031467216e","impliedFormat":1},{"version":"bc9ee0192f056b3d5527bcd78dc3f9e527a9ba2bdc0a2c296fbc9027147df4b2","impliedFormat":1},{"version":"330896c1a2b9693edd617be24fbf9e5895d6e18c7955d6c08f028f272b37314d","impliedFormat":1},{"version":"1d9c0a9a6df4e8f29dc84c25c5aa0bb1da5456ebede7a03e03df08bb8b27bae6","impliedFormat":1},{"version":"84380af21da938a567c65ef95aefb5354f676368ee1a1cbb4cae81604a4c7d17","impliedFormat":1},{"version":"1af3e1f2a5d1332e136f8b0b95c0e6c0a02aaabd5092b36b64f3042a03debf28","impliedFormat":1},{"version":"30d8da250766efa99490fc02801047c2c6d72dd0da1bba6581c7e80d1d8842a4","impliedFormat":1},{"version":"03566202f5553bd2d9de22dfab0c61aa163cabb64f0223c08431fb3fc8f70280","impliedFormat":1},{"version":"4c0a1233155afb94bd4d7518c75c84f98567cd5f13fc215d258de196cdb40d91","impliedFormat":1},{"version":"f9ceb394e029da0392ebd49564002b01fb4517cef0d14b238f2a8e7362a833e1","impliedFormat":1},{"version":"1de80059b8078ea5749941c9f863aa970b4735bdbb003be4925c853a8b6b4450","impliedFormat":1},{"version":"1d079c37fa53e3c21ed3fa214a27507bda9991f2a41458705b19ed8c2b61173d","impliedFormat":1},{"version":"5bf5c7a44e779790d1eb54c234b668b15e34affa95e78eada73e5757f61ed76a","impliedFormat":1},{"version":"5835a6e0d7cd2738e56b671af0e561e7c1b4fb77751383672f4b009f4e161d70","impliedFormat":1},{"version":"5c634644d45a1b6bc7b05e71e05e52ec04f3d73d9ac85d5927f647a5f965181a","impliedFormat":1},{"version":"4b7f74b772140395e7af67c4841be1ab867c11b3b82a51b1aeb692822b76c872","impliedFormat":1},{"version":"27be6622e2922a1b412eb057faa854831b95db9db5035c3f6d4b677b902ab3b7","impliedFormat":1},{"version":"a68d4b3182e8d776cdede7ac9630c209a7bfbb59191f99a52479151816ef9f9e","impliedFormat":99},{"version":"39644b343e4e3d748344af8182111e3bbc594930fff0170256567e13bbdbebb0","impliedFormat":99},{"version":"ed7fd5160b47b0de3b1571c5c5578e8e7e3314e33ae0b8ea85a895774ee64749","impliedFormat":99},{"version":"63a7595a5015e65262557f883463f934904959da563b4f788306f699411e9bac","impliedFormat":1},{"version":"4ba137d6553965703b6b55fd2000b4e07ba365f8caeb0359162ad7247f9707a6","impliedFormat":1},{"version":"6de125ea94866c736c6d58d68eb15272cf7d1020a5b459fea1c660027eca9a90","affectsGlobalScope":true,"impliedFormat":1},{"version":"8fac4a15690b27612d8474fb2fc7cc00388df52d169791b78d1a3645d60b4c8b","affectsGlobalScope":true,"impliedFormat":1},{"version":"064ac1c2ac4b2867c2ceaa74bbdce0cb6a4c16e7c31a6497097159c18f74aa7c","impliedFormat":1},{"version":"3dc14e1ab45e497e5d5e4295271d54ff689aeae00b4277979fdd10fa563540ae","impliedFormat":1},{"version":"d3b315763d91265d6b0e7e7fa93cfdb8a80ce7cdd2d9f55ba0f37a22db00bdb8","impliedFormat":1},{"version":"b789bf89eb19c777ed1e956dbad0925ca795701552d22e68fd130a032008b9f9","impliedFormat":1},"7b550dda9686c16f36a17bf9051d5dbf31e98555b30d114ac49fc49a1e712651",{"version":"cc2958d8abd86edcdf05542bb1b40ba659db5bc5a2560720cde08e8950e63bc1","impliedFormat":99},{"version":"e44e0ea195d68c0aea951809bda325322085008c0622fc4ee44db5359f37b747","impliedFormat":99},{"version":"fa2c48fd724dd8f0e11dfb04f20d727a2595890bfa95419c83b21ed575ed77d1","impliedFormat":99},{"version":"ffe2bdab10cc9bb3121784020df2d2449b9344c965a5d96857f9d7e6fc984322","impliedFormat":99},{"version":"20be44c04e883d5fe7840d630a8d0656e95b00c2d6eebab9ab253275e7170534","impliedFormat":99},{"version":"3b674288fbdc0ff0ed2b7fc2839014c2ff209c84999fd06b6339347d0f976a85","impliedFormat":99},{"version":"87561cc8a2d7444adf4eed4b3f15bef8c6098cceb0e7617fba1cc45d187ac8c8","impliedFormat":99},{"version":"fd40c454d56e1d14e60ce13f3bc60c7fdb9bc70c6ef9c7bfafec1f0eb5d8075b","impliedFormat":1},{"version":"155ced96d70533d95c481061e2691802fae7cfb96869d7c85ac8622f53b51cb7","impliedFormat":1},{"version":"3689b6f599705380d2ceaccb4e58eec5c9439a7a5635d6e37c1ba66ed7c34b35","impliedFormat":99},{"version":"6cf0d3cc668cdbb01358ef7c2e41bbcc14d8d8e4ca424a1b6d2838d9a1cae8ce","impliedFormat":99},{"version":"b7bd70307671536c735389e0a1748555c438c392dfceb6f2ac3aa0a50ca82530","impliedFormat":99},{"version":"661c403f4c5bbf259e03f4fdc3a9e3f51ad562684f702e1b842e6c5336de0752","impliedFormat":99},{"version":"415dd92247ca21db682f75ba7e6289ab2d093cd34c6f471c6c789afd047ad4f3","impliedFormat":99},{"version":"b52f7568bb9b00bcee6c4929938226541c09d86b849b8ba8db2fe2a8bba46f49","impliedFormat":99},{"version":"39d80ec3c018d7ffe7c99ddd3a7b6844b3376c15e52937a7687d2c2828830fd0","impliedFormat":99},{"version":"828f8b38dff4e5c47b0112cb437da379c720f0360d40d392457c9775f30c8ae8","impliedFormat":99},{"version":"d42e1872d53ebb213e7bbe15e5fecdcaa9a490d2f2a2b035ee9cf4a6d3f1e44e","impliedFormat":99},{"version":"2262d96c02073dcb17a31ae8c738651ebff75f102522eae686f5462658b687a8","impliedFormat":99},{"version":"21053659ad72fe51b9dfbde4fa14dbbac0912359fa37c9a5aa75f188782b2ee8","impliedFormat":99},{"version":"e297bdcb7db008d8d7d0481f2c935a9f7f0a338f41b7e5d1cec6a7744140a4ff","impliedFormat":99},{"version":"ef816ad6735a271c4c8035a1914c3a9beaaa90b3c174da312d26bce8736e56ec","impliedFormat":99},{"version":"7202026e24c5e5b7b6e5fe6b99455a91058ef82e74a5cdf6a3a4136b7ae9c080","impliedFormat":99},{"version":"69dbe5d61d2f298046513598f55bd1e719c50dfd6af2f9feea6fc84f8aa3c4bf","impliedFormat":99},{"version":"6a78643fbbf1b0bd954a53d4edfa217b6a5f92d357fa9cdf8d2ee430f96b9472","impliedFormat":99},{"version":"2ebe2f0255b6f301ba7bc0e10c3dda289c6cf1876f289f7a8f6444613d988e5e","impliedFormat":99},{"version":"012b5083a47ccbe050763f8df2be89daa50c1606e9a0bb31f64276d508c02d78","impliedFormat":99},{"version":"fc7c3943608aec142abb8c28f5892a1faaf255d48e1137ff2b2e0be0afdd479e","impliedFormat":99},{"version":"73dbb1871f5e5c69ac92ad54e21f965dc68273cbb1f49dec5fa4dd0045a99ffc","signature":"ec711c4f1e7e5014477402b688042c94908c1803f2e6abcca205270a325fb9f2"},{"version":"2f03105c6592db352a74e56ad724d5a3e34d85102a3e86a42e54e34f146ee21d","signature":"deff5df20ff743afd6d9775861955c16c871eb4b1eb5c9bd7922dadc005562b8"},{"version":"07fcc9be98e12bd2f0f71a501a9bfbe2e53d38c50e8a5e84223fdd05bd8749c5","impliedFormat":99},{"version":"b887a4575db46263f82d7bde681bdc14526e4a2618a1172fef4206c467752d8f","impliedFormat":99},{"version":"b845876de475c230a1e012150db8d2c2a62bd6835a93e8cd23ebb10f7de16266","impliedFormat":1},{"version":"29bf73d76ea3aaffada2731507867496693f4b383c38b3ee61e5bae2c46d90fc","impliedFormat":1},{"version":"d5eb5865d4cbaa9985cc3cfb920b230cdcf3363f1e70903a08dc4baab80b0ce1","impliedFormat":1},{"version":"51ebca098538b252953b1ef83c165f25b52271bfb6049cd09d197dddd4cd43c5","impliedFormat":1},{"version":"5358d56b3c050e6fc7f01124e5e8bf2827c79ff9d46b02624e9e0b413b79c9d9","signature":"7424ae01ceb5378e730137b945bea629e4ec269df566195719bceef5bd3e8b3f"},{"version":"4da1d2c6ed89c78aef0e87caf11a7cb78c6fb9dd99c3f236b76743f023035ff3","signature":"66d42e0a79131b09732b689ea48bcea69707fd8a04d8841ae94c6c6b9f6053ff"},{"version":"1147779f7414aa8b4de1be80c19158afa9e152d5d35b1a133d286d709fd45e6e","signature":"d8a39665cb658366229de50937bd42787ea2996ceb522b1b5427083e7c97155d"},{"version":"5058bb7d21c097f138f6b7c9d5c0b30e85ef5edb779a28fe2fe8e82605e6407e","signature":"eb98f98dcc154d161b148d7c5177f7433a853c4facf17f71e473c7574f436e23"},{"version":"ab67f9fc591a5452ef6528bb9f05921ae8ccd1d35a2c9ded1f7674038b497126","signature":"d3b5429c2f4c78df363fe39a26eae3df7b978519c8a9610de0b395ab2d75baff"},{"version":"eb4fd15fd8c42bbe8289ff9c3e2f59faf5ec91c2a2cccdfd3c2246242033e7d9","signature":"9307a18241723cb7be27d1d8786af09b2edc1d725db7d06b1ee21a80b7207803"},{"version":"e9146fde10448600d4f06f75d546cea8a3401fc9cc5295c14b5f6ab0ce384040","signature":"2d454bbb632a0be8ec8a3c1ca6e30c48c03364c1c33d2b703d9e25fa0fa55594"},{"version":"b7c454b1139d73a67115b55be19be1228659059b7dd1775b51b017ad741de8cd","signature":"4d0f8e5fed5b53a1a7dcd6bdb62ad2d939500593cb23ae21c9281c3597f6f9e5"},{"version":"05325cf12a659ddbf80b8e78ff2aebc4b076106c28ae5bef66e942e8f34c2b0d","signature":"d3fd150cf9c5211e6e3cd2ef8f0017e1080e3fb37ccfd3ceb7b5a6c0c84c5fc7"},{"version":"6562204c0813839f863f5ac44b69b3364ec317b66742e52ceb44c690ce42748c","signature":"f8021ef3ba655b84107446eb5e6c89e2b2d5d298ad43d0170e3498fb2f963293"},{"version":"35aa1aea846a81298026602d81d28a3acc56faa60bf81c8954c0e05b6ee4a921","signature":"2b70b57254be815a56b25635737c50382d962e6477116bffb0bddc7e44cb22de"},{"version":"be5cdd64aab4da033706ce7403582101a68ae6fae8add929cac1819f9147e683","signature":"226f9720cbec0d821c55baddf7b6bb3e91453aa2e4b9243ec3f5bd413e169140"},{"version":"f05166ab86c34cc05199c34d8e749418665b4c6273fd10c4fe73d5225eef54bb","signature":"71652547a538b6ebb93e1f4c2a6809bf7d292ed2ca205fb88c76fc71101c40ae"},{"version":"452821cb7652769b93d1b9dd6efff5a5eddac76faa52571da0e9de960d50b2fd","signature":"6554e093cba0884268951c47f22940dc52a667ec9803652a906e339452a37b81"},{"version":"b8db6479b9d8f677c1946ce8558c8bf57bbb9d8cabe64256539d1a4bae0e1025","signature":"fcc82fcb1db3e59399ad1615d701a1129e486199c0fe752d4732195f2b8c482c"},{"version":"f69c7fdeb6d9e752cd7708f11cfb5ec0fb9d1f6e6de6abad45d5efeaa13402bc","signature":"561d34dc2c6db6cde0352f20deac0639f5c3d36cb6c84bfef89f07e45af6b21c"},{"version":"4dd5c3a863c9c1c80680f1ea55f60657620abbc906af1e590c3ae96e7d3926cb","signature":"a6e910076be840e6dc59847ad6152bb47834ab21ae1ccab3561b703bb491c521"},{"version":"e7d655fb35efa61150245d655ea1b111de57ce5660d5feaaa47635fe400c594f","signature":"5b0f84f3cb5e533bd426fa2ca774f59ab8779ff590807cf9fe94408cd759855c"},{"version":"847fb38bfc91a05b16d994f282a412a79471326309847d6500858eaccf3f2283","signature":"fbcc6094905c4102b234e63a1a15387cbf27b866476806d9f6e80754ad10b74b"},{"version":"072085b64d4d87b7689059fbdf89706c746382f28bec1520b74d0e3f736f79d9","signature":"588deba44dc77322b058c68b70cf53ac2e5d467ee807add7e576c95d55deb44f"},{"version":"deb685eea280337580ecdc1f59ba64df19b8a0a5b26737c152a492d372d75738","impliedFormat":99},{"version":"e8f18d8914599c6b788ab6549287ecf89bd1a9a173e9eb81659edd61f041fc3c","impliedFormat":99},{"version":"6a89c8b199e69d0fa67aa02481d672c80c1077f1668446d995243efd2fc37225","impliedFormat":99},{"version":"e00fc542e2d58412c06217830a0650bc201c706c8eee2d8d27d5ba6b804c6035","impliedFormat":99},{"version":"b46555207d3dbb03ab62585b52a396f48b48a3c40e96723c3ddab672b66ccf2a","impliedFormat":99},{"version":"37b768bac5fe7881c1823e8b8f372b73f2bb4f619e4ed14432df2030f0fd42ae","impliedFormat":99},{"version":"006047b00455c1b865fa1df0ddae8db818bb39a321f3ddda2c2701f893f81aa4","impliedFormat":99},{"version":"537bed5a5d8b5885ebc6f33a2a27bf6af7231a5119410a7c19ca49ece077b985","impliedFormat":99},{"version":"38ef428d44eec84100a2c3d9409607b7d5d79b611b2e9e3b5bf55787fb3cf01a","impliedFormat":99},{"version":"a082dc47e7a81b2075d1be0e1c84abeef96b90f5c4b0df67c882ea36e9b5198a","impliedFormat":99},{"version":"2eb9b16c811eb2e4cc7c088ecafe3dd58d381cb7bcd43c6378f59d6b62343f82","impliedFormat":99},{"version":"0d99404df5e7375c3af5b29e421e971e4d9497f757e08f6d71c55abe12fb4775","impliedFormat":99},{"version":"2ad8375a297254a151082eca24de4880709e22af2b90b5c0a1527a5c34fdfdd8","impliedFormat":99},{"version":"fb1c107b6e709fa8d8183dcb5513a88ef43037b8dfdb148945bb5de406ced872","impliedFormat":99},{"version":"1c6477a91023bd6c797a298f14926e90756eb2d1eddcf04399d003afc3b8c874","impliedFormat":99},{"version":"31881b2ef14f4a800abb5a2e901a380a60890d3e53481f43820e5677e6731071","impliedFormat":99},{"version":"b1ca55067b6f268f36321ef2bcc284d5bd8f728aeb2be639385d9f62bf4a0b3e","impliedFormat":99},{"version":"08415f0037d74b8126615514833ce44bf9e946ee77390b8f68e93df26a905297","impliedFormat":99},{"version":"56c63ffa519c6f7f237f8d4f2475260a32938bf3e0c2287670bce0c5008854cd","impliedFormat":99},{"version":"01a19462afb14049348a4437ca23d8ea8216f2c5a49e2a05bfaaec0acc4987e7","impliedFormat":99},{"version":"18d4f7640b5e7f959234f0226842f5aac95df07414e66afbe0a86624c0317f72","impliedFormat":99},{"version":"c19012befc7fa0dca216cd574620b15da1cf4ad2b62957d835ba6ccdbb1a9c27","impliedFormat":99},{"version":"cc0048f62d66e974d5c563bcc0b94476e8a005406ed07ef41e8693316b2e31bd","impliedFormat":99},{"version":"da84ac2614990bb98cc8921995af5c6e99cdea1eae3d92692ef6d4a152e9df68","impliedFormat":99},{"version":"4dcdbdbc992d114e52247e2f960b05cf9d65d3142114bf08552b18938cb3d56b","impliedFormat":1},{"version":"b75d56703daaffcb31a7cdebf190856e07739a9481f01c2919f95bde99be9424","impliedFormat":99},{"version":"ddb5454371b8da3a72ec536ad319f9f4e0a9851ffa961ae174484296a88a70db","impliedFormat":1},{"version":"fb7c8a2d7e2b50ada1e15b223d3bb83690bd34fd764aa0e009918549e440db1d","impliedFormat":1},{"version":"b75d56703daaffcb31a7cdebf190856e07739a9481f01c2919f95bde99be9424","impliedFormat":99},{"version":"9c909c17f69f125976e5c320eded3e693890d21b18cbc4caa246ec4fda260dcd","impliedFormat":1},{"version":"7915d50018073244a9bcb3621e79b8e0ad4eedfb6b053fc945cad60c983bb11b","impliedFormat":1},{"version":"ea7b47bc357858506e6161065b1a8997cfbc5d1dcdf233966da9d01d74721ef8","impliedFormat":1},{"version":"50444daaee4bf4ad85ad8eb52e3ad5c6bba420aad9e2a800043a78f4d8bc436c","impliedFormat":99},{"version":"1fa33d8db2a9d2a7dbfb7a24718cccbcde8364d10cce29b1a7eea4cf3a530cbb","impliedFormat":1},{"version":"b75d56703daaffcb31a7cdebf190856e07739a9481f01c2919f95bde99be9424","impliedFormat":99},{"version":"90300bef1c0e2523c97fdd178b9d50e3f39646ade67faab69be4e445937c862a","impliedFormat":1},{"version":"381437930df37907c030519b23ffea4d8113f46e4431a70bfe008a0c43c63648","impliedFormat":1},{"version":"695cbb89013bc9e87fb24b0df020fe605c54f0ab5c267b5bf0490ed097044197","impliedFormat":1},{"version":"f43780383543bfcdc0a2ee850375e1f03d94bdb1b85091d5b11bb8b2023c8b49","impliedFormat":1},{"version":"303638e9e9378e3cce14c10a276251b2b6baea811f882b0adb6d8b7e44a8245e","impliedFormat":1},{"version":"93fc1a008c4786aa9970b7a4c56295bef4d39c243af63cbfcbd5548ca4fdd535","impliedFormat":1},{"version":"6b91aca1948fd92e4fb32e91e94955e7b7c12fb8cbc0a40eb55f1808886e53e8","impliedFormat":1},{"version":"1e197b6e669b8ece0a68c684af9a4394d8c47e58eaa040391cbdadcc1b5020a0","impliedFormat":1},{"version":"fccfc90c19498513d5c4b9c705706660eba9eb493bc38cdc16a11e9d384cd086","impliedFormat":1},{"version":"b288bbe96ea05e353f008a4d445fb8589a82f2a1c4d4d0bdfc283a19020dc96f","impliedFormat":1},{"version":"b75d56703daaffcb31a7cdebf190856e07739a9481f01c2919f95bde99be9424","impliedFormat":99},{"version":"cf32b34fb9148d541c100a83fd3d204ced00c76871b4811d53b710ff15a948a1","impliedFormat":1},{"version":"6940a178bd12acca76e270f0b0c4d907b9cc469d28833bd59a3276f11668591e","impliedFormat":1},{"version":"22165b22578a128275b69d52c0cacc6ab19e36eb95e10da18f1bca58cd6ac887","impliedFormat":1},{"version":"ea7b47bc357858506e6161065b1a8997cfbc5d1dcdf233966da9d01d74721ef8","impliedFormat":1},{"version":"9dc9c7a268e5b2caa79a5a5040a86ba5ddf1cba20d8715ceaf2b76f79ee444fc","impliedFormat":99},{"version":"84920f743c6fe02da67c1aeab9bd4e2d377ad96197e9960cb0e7738b8584ad0c","impliedFormat":99},{"version":"c048b081418f530417dd4193b47890bc734711378df819f0ff217144f6775afa","impliedFormat":99},{"version":"e6332e193ef43377d724d8f6efa5e2b36b5ea70389cad57e8a5176e8035ceac8","impliedFormat":99},{"version":"bf0b1e6c1bb4930244203a593c6db7aed456e635c31aba73ee2102c55998861f","impliedFormat":99},{"version":"5c21ec7196196aa797c5bcaa3bbd55f80091b4f793438947e9802376b3538927","impliedFormat":99},{"version":"1f653a61528e5e86b4f6e754134fee266e67a1a63b951baccc4a7f138321e7e6","impliedFormat":99},{"version":"76e3666a9f4495c6d15035095a9bb678a4c3e20014dc8eb9c8df8dc091ec8981","impliedFormat":99},{"version":"055bc641ca1f1eed76df9bc84ec55aaff34e65d364fea6ae7f274ba301726768","impliedFormat":99},{"version":"22ebe7ce1ddc8ee5e70f28c41930c63401e178c637d628b9af9f7a9c456e86b0","impliedFormat":99},{"version":"041c4afbee0a17614e9d4a8aa4385ffbbbfa1a5d5148c9aab0dce964be1af0d6","impliedFormat":99},{"version":"00d259e465df20202e848bf8d192056919e460a3de20aa14f59d523d3af38b29","impliedFormat":99},{"version":"9cbb746b8d46880874f6a8f8c64dfa925ec0cf70412d4ad5e00a8756c82edf3c","impliedFormat":99},{"version":"fd23901347e68e39f7043fc6787b2af6c7094d6c7ef6038ee909cfe26da625c1","impliedFormat":99},{"version":"818a39ff71deaab13a1aa427802c76d3976c365302ddd862810da9e428c8ebb1","impliedFormat":99},{"version":"ef3a6a6b54ff97244df620aa06d7df4d5474d0274617e265e041246c1b7d05c9","impliedFormat":99},{"version":"881c9f22c8d6ffc25b57cc4cf60cc27576d979a8d54ce85dd740d83b0571a088","impliedFormat":99},{"version":"3be840cd66eea7fddebcbc83265943f7f0029a8bff513919fb78450400054dba","impliedFormat":99},{"version":"4904ff0e4bda91f1b7e50a3738c91f393345de5f7e5d0fea9da581e42ec92fb3","impliedFormat":99},{"version":"5f6442d0a9bbb961b58f45d09690a034734aeea01f2875cb0e7ec31aa3676ef7","impliedFormat":99},{"version":"6511839e63105744b3bb8b340791218b253bdae80c7d57c288dcc85bc6f91317","impliedFormat":99},{"version":"a361409ddb9ecedc609eac1cc6f752383b1a667be212846927b660727e346d85","impliedFormat":99},{"version":"3f01edcdc9641acfb6689126d9506248d3a3afe3e4a23e2f7588988ba693f349","impliedFormat":99},{"version":"a12f75a9a3aefb304abb528b2898c085356d4876e77ccd2dd1c708bd660041cd","impliedFormat":99},{"version":"6ac1b4401d51471ae0d6b6bcce637e550eb78d75b1cfe993b6eaca9898d74976","impliedFormat":99},{"version":"aaba5744f8794b7cebab915aa45ca71d322bb2086d7c7aec6e858c313bf6cc69","impliedFormat":99},{"version":"894395299a4761cd4e38c20bf17bfce27a3cbdc2650054e5fc28e692fddc4b4c","impliedFormat":99},{"version":"7568f6aaaf6b62b7f3f72ebd07bbabd95749a0f969dfb15e7789d4a3c8e080a1","impliedFormat":99},{"version":"039d7ce09e9246c255c7acc1c00ba3afe7e98b4767547ccb6b77274109f8a5c1","impliedFormat":99},{"version":"b4b9514c90add4b59499251f760f01aa7fdaacb02894ff0d885286094cef8c2a","impliedFormat":99},{"version":"f670e23ac2377ed32187f39d02be707c9c0cd61e95786a6ba49ea7f860baa50d","impliedFormat":99},{"version":"25f27d8da6c42f1622b0b01fc5c78f48c79c645e10c4849fc8c5521faa9ace29","impliedFormat":99},{"version":"54e17510b0440980e3bc8ce141c9b922adb6c8e77ee81c443870bf684679255a","impliedFormat":99},{"version":"3e9e2f295358fa46f10faa524be6e99a42114752b0e195ae997f550968ea481f","impliedFormat":99},{"version":"74cf1308a1f0de094f0e8567541b0a0e126426ec2eb4ef68c9cd97fa4d0d9272","impliedFormat":99},{"version":"dcd1e783bde43c7d570ce309cc21e9d9d7b3110491aef9c5c5ce87c6a53f7e5d","impliedFormat":99},{"version":"08bc14542d8d34fd138945413e31ecf65668e029f966b5aab5b25e8e421efead","impliedFormat":99},{"version":"17648a898be56a6a9c4a6305e84ba220bc76d4355f0f55696726f1eb1fcd6d4d","impliedFormat":99},{"version":"cc6c1ade000cc9b7f8c79d8bdddb145950bbe7d404e5b3b938537a0bbfba73bd","impliedFormat":99},{"version":"eb97def43c2617552f76eb367e7f5531127fa03fdf991ef12cf5ae8fcc52c7ed","impliedFormat":99},{"version":"f49bde1443de7aaf05371f049ee0710619bde1b7bb7042192512e5cab672b3fc","impliedFormat":99},{"version":"a704c8b701194cc47d333b093f87db332694b124e304fb0167be09ff3304d353","impliedFormat":99},{"version":"358f8d33b436d21a7c313f02e900b805eb1c6abda3d675f703ada38eea3b92d5","impliedFormat":99},{"version":"dbcf8b1a2d94e9a1f0fa3fd5152114a14f83d8dba8d3f8dd773be476adac937f","impliedFormat":99},{"version":"ee63e60be6f56e08cf8d7b5ab750078fc6d08f69cdf70ee43fd0693d10c65d2f","impliedFormat":99},{"version":"4807b8b139747bd82ef181b5eaf8676c1f9012be0ad91feb1173bd57f08aaac8","impliedFormat":99},{"version":"ceee442c1035bd941c9fbddbab08fce2e34d1e23d79d56a48c0444bb45d705b7","impliedFormat":99},{"version":"fb9bcb4ee14feca03c05eaff9f1eb826bb1e75bade5e64f98c65ecc79b910949","impliedFormat":99},{"version":"f8ee6c9ecf3a39cb551db7d6f0aea157cd272ac477c561331efd734a13b34134","impliedFormat":99},{"version":"f72af7f1a38a5b8ae564be5eb68a8c25e5cf9cf4c567ddfa471a481425369c79","impliedFormat":99},{"version":"aef37af42cec810a643f24ba90f2f7d55c3e05ec5e31adca4c3318e578822aa6","impliedFormat":99},{"version":"ce35f35a8d59172dbf5cd945c253512114d6020e7dd30d399d372e473eff2515","impliedFormat":99},{"version":"e9e8a6bbb3819df983667e1bbf9c993e954c009f575c1f5d2063d55c1af47d1a","impliedFormat":99},{"version":"fc1eda40a6dc0e283ac8d75cec0082f6cc49c517ae608d2413e872ef2f5c2e84","impliedFormat":99},{"version":"bf0b1e6c1bb4930244203a593c6db7aed456e635c31aba73ee2102c55998861f","impliedFormat":99},{"version":"44993fcc19de9502ac3f58734809acbe0b7af3f5cca12761dc33d9a77cf02d1b","impliedFormat":99},{"version":"d172b164580892e56129985557aaf73b4e45279e4e0774e1df53282e6fd89427","impliedFormat":99},{"version":"1e1e240fa12ec7975ee7c9803e2e3751399820b4435f476ecfe22656809916f9","impliedFormat":99},{"version":"68f1a4ec2937052ae0dd18407eb8d1b579708970ced79c6e7cfe4a93d0a00385","impliedFormat":99},{"version":"efe0fabfc89403ce6a4a8b1fe3a7633f1161b7e10d9824299560f2d15e4e606e","impliedFormat":99},{"version":"64c4a5d1bb65e93416fb1ca1d08210dcce25d6d8d1208039a58e4379a647bd76","impliedFormat":99},{"version":"e84f2065c605965fd1d44de2cddf0509dce060b4d9e79c01a884a0899fe877db","impliedFormat":99},{"version":"b0df9d1b07f9ffc72ac128e5a05da99af0e3a8a19a08d8defc26678c0e30c25c","impliedFormat":99},{"version":"16725a633f5f5c1cd82e2baf4b0ae521da7f6055339f837bf2695bc3fd44373f","impliedFormat":99},{"version":"664104ab990ca5d100a69e159f9f8874551d94a187db834309af14fee2d64f4e","impliedFormat":99},{"version":"542e50c2dca6d24f5cb9cb2b7a5c07d450850af21ef253838bb2bbfb175a3e8c","impliedFormat":99},{"version":"6ee3000708f3add1fe74964fd6ea6b1f5abf82151481babb96f7905a763ad5d8","impliedFormat":99},{"version":"93640558bd78d5f98d7bf455d07e79f700efbe2f9826958d4b2acdcafbb5ba89","impliedFormat":99},{"version":"fd8b58b771380655281dca6ed40019cd8ecd639ef6ec74baa91662ca0e0ae458","impliedFormat":99},{"version":"6a73dc1806928e57c21fc51d00f40e4e92f17dc6b31ddfa95365a837651587c0","impliedFormat":99},{"version":"ce35f35a8d59172dbf5cd945c253512114d6020e7dd30d399d372e473eff2515","impliedFormat":99},{"version":"97912ca64fedc028914d9f1585e30d98a1e1e46a426a06f2190024067b8a534f","impliedFormat":99},{"version":"a9b65aa46a4613eef2bef431366d8f5f166e8226c6fae3688c67ca102c3d6a79","impliedFormat":99},{"version":"5fbfad634244c213e44e6b3e8e7936ccfb74bf163750dfbd1464140d8230497e","impliedFormat":99},{"version":"0caecd57de90295669dd561bf9f0e4c4478434e14e0741c2b0fbed44e38563eb","impliedFormat":99},{"version":"bb125cb4f8a3155a5dec027913e615c6b7f1000f0c600de19798ac4f0c8a6c5b","impliedFormat":99},{"version":"78c0f55d5519d39233daf5562c5704a0322dd7abcc1e72afb015cac550be32d3","impliedFormat":99},{"version":"95f1e94151a3a45c139a9efb748888d1af359521f6c96e7e644e070913fafc31","impliedFormat":99},{"version":"f72af7f1a38a5b8ae564be5eb68a8c25e5cf9cf4c567ddfa471a481425369c79","impliedFormat":99},{"version":"205d330174cc427f3002517bae08e2cf8b8e134cfe086cc80fe18a07efeca799","impliedFormat":99},{"version":"93d7cf0d29aa72f51299e10d738149a77bb92d42473d3145428cdfedcaf8efa3","impliedFormat":99},{"version":"03535e283a156874e32846037dc86e32c53995db4e077d392a8b17c6f26e4f8d","impliedFormat":99},{"version":"d8f104b12bb1e0ee5690c50f3d6100f71c24145687190a5f2d5ba7b52538d57e","impliedFormat":99},{"version":"aff2d01dbf009d2dc7c5aa71d32930d4783463a08527775e834e2e37bbed5b4a","impliedFormat":99},{"version":"c63356e770e4fa3fd4d6cff5e804e557fafaef2bad6f5b81291d15b1ff21da8e","impliedFormat":99},{"version":"5b2bc65ff0bd22d2ab336f592e4e3f6697516f0160b3b495b319a18903d91f3e","impliedFormat":99},{"version":"87621a249f7a938e9d270b70e560b78b55552eafd08ddf71d2fbd80913699488","impliedFormat":99},{"version":"8c40fdc32e3fab434b704c3bd731a12d479a061fdc72f42f665f4b0c287ad7e4","impliedFormat":99},{"version":"400402da2b06f5acd7940db2ee5507784fdab53354062fcddfe4934f3ac04340","impliedFormat":99},{"version":"3e80aeb2dad64ce73bb62a404e1db152fd73bd5849b1777d444939d0c1cfc287","impliedFormat":99},{"version":"61f825380b5ff41a275f6d0cedd145a073524cc24b4963f82c4348574325768c","impliedFormat":99},{"version":"d457f5d460966fee473f543e400f8e0784ca9875ce6aecd48b7ff0f6351a04d1","impliedFormat":99},{"version":"b41d3caa8c0839223be817bfedea85bfcf1e682182d51414fd11d9ccaf83792f","impliedFormat":99},{"version":"2b5637680ce53987f0335180e79a9dd639ccfa8f20d46332195dcf11c02e9bb7","impliedFormat":99},{"version":"08bee5ad21bf8bf6d1e66f9bcbcf1c790c1873ae5d63068c02567c357ae619fc","impliedFormat":99},{"version":"2e76803b80712451178add529e574c5b6acfa0ef4ff169dc5f8a4dfabb43704a","impliedFormat":99},{"version":"931c8729cf2295582ad36e56947aa4253a554135800a5ae3c719e2937061319f","impliedFormat":99},{"version":"949ccc4add0506d70be23ded8fe17702ce7ecad3f6b9b2948d12be7b7621c008","impliedFormat":99},{"version":"8b5aa4aceca84ffb115eaa92eb511db532a380715fbe40e0f2691399f59779c4","impliedFormat":99},{"version":"fa161dc810c98f507b7c8fe8d1cc978ef6cecfd05a91a0897b272ff3d424f53e","impliedFormat":99},{"version":"04498bab7aa04819b6f85e0a833cac9a90d2c225449e62a500e0d969a980a0f5","impliedFormat":99},{"version":"2f8c3df976ef62d1f2aecb54514354e582688693981c9afbeaa8d6369962ad8f","impliedFormat":99},{"version":"953be5c29962c02b750c81742c6c8e3ec88f0dca93b490ae0c25d06ec09a336b","impliedFormat":99},{"version":"93c47ea71b8ac6043e85e16a7f5a12fdf28283e0c3e64818b24ef77339dde953","impliedFormat":99},{"version":"d0ebe2f759e4811f5157b9a1e1920458dbc5d4566fce7af6c6a777abcc31d7d0","impliedFormat":99},{"version":"0a5c9fcea7d8dfde5b22c26763cf7c8822a99ba7774b87d4faa63fe165f371d3","impliedFormat":99},{"version":"79e012a9efce1afb73f1d04c643326f3a90ecad76274b8b099711300f475c561","impliedFormat":99},{"version":"cd80c1f39858c9aaf24cb6cf109d90b16470b4c4af5b712b350e6e18b08c1d7e","impliedFormat":99},{"version":"864d41aebd6e0f4a5e0fbf1f4de66517439fd9e342f7397362bf4bb0c285dc46","impliedFormat":99},{"version":"ef0a3e581b336ec4522badc01575daa324a63e76b7317ceda2ef887a5168e2e2","impliedFormat":99},{"version":"5a3458dfcbd3d376e91a57ff64ae747c34f8ca1b503b1be1a84f490b56da1638","impliedFormat":99},{"version":"684fed66904651fd676b78ec044da251651f4dfaedb163df74b2280013d5cd5f","impliedFormat":99},{"version":"78156ec80b86cc8f8651968051ed8f9eb4b2f02559500365ee12c689c2febd9e","impliedFormat":99},{"version":"e463bccc0c9e8e19113e8f5684fa1e0d357fd66cbc7a495a3c4854442268ab0b","impliedFormat":99},{"version":"01104176c1be6e4db2f152e17202e2752e01dd7dce8bf1fbfcbc85a54acd25f0","impliedFormat":99},{"version":"0383ff8743bc48551085aa9b40fa96327e857764fc0b8e4657b06db1b0068f79","impliedFormat":99},{"version":"df9ca548acc13813971b2a578514bfb3383fffc0f3d88cc2b49150accf4cf090","impliedFormat":99},{"version":"2e415d3626693f39e40f19ad427f6ad173dc4bde2a7c4ef6a655f30d052b61b0","impliedFormat":99},{"version":"237e9704d0e1474ebf693ea358488397b86f287ba2fdc4c0349353585904fd1c","impliedFormat":99},{"version":"496b4dd6da860c392c036aab07f706f623902707e0af1cef271eb9a6a827aa44","impliedFormat":99},{"version":"c98069496e78eba403f51c1a7d582ae0e0f338e2d63b6417e561c9f56cbe88c6","impliedFormat":99},{"version":"89e6832e87186cf2f1924ccbbdf510db4ed9d45271b332a1cb1ed659eaa0c874","impliedFormat":99},{"version":"4b0e0173e248db6eab5b9402044f2f1a2d086e99d9d8af6c4a7f46f52cb6d787","impliedFormat":99},{"version":"8d56ae9f7cac9011b44edb4905ad58cb57d12199ca56fd23a16c5714b15d368b","impliedFormat":99},{"version":"a39d68209be7cdeb86ea872366f7c9f3578e657dde3eb1489012833c87028ff3","impliedFormat":99},{"version":"8fc83926d2b5737ff691660774a9ab5829b5fb77d9a382eb97bb2786b8b2a661","impliedFormat":99},{"version":"c5e59270f3237a2bf344ac83ab3095f30c0ad8f3f07e41f266e662ce544520c5","impliedFormat":99},{"version":"63d8897302acaf122123a675c9e4875a1fc7d82bbc62a54949d595119b1ad049","impliedFormat":99},{"version":"1bfb743c928bfe9fbf9ce88bdfaf8235edb1d3ea0b5ab446603d71c4ac87d802","impliedFormat":99},{"version":"b6e92e897f1bd0dab01bb0f64bd70956f574c7752f7bbdc7f107460a074b707d","impliedFormat":99},{"version":"6841d50aae775f444751e244f756085d8fcf34f94ff6647aafe8041b63fc89fe","impliedFormat":99},{"version":"a3c33f57bb6ce04191478ea23a17293d382cddb7aee7b56bb5aed3ca49c7fa60","impliedFormat":99},{"version":"c9bfc8572556f746686beb2ac476f999356253c4b3fcba189327b25b30c47801","impliedFormat":99},{"version":"2d0bedabb6ca97235d746f5e1dd974c4975e8833985f6efb82a995afa06fea38","impliedFormat":99},{"version":"6af214e64dbf7c599257f7f0851cb57b267c6eef97dbca04b1f2d204ac571fdb","impliedFormat":99},{"version":"58617876087d1660ff295d2d76c325e50a42e5fd9bb7dfd9d02963ef80c8fced","impliedFormat":99},{"version":"ac84c9b0786abb646dfce8480f6ebf83370a47a45d8bd7e2bc705f1069bc71b5","impliedFormat":99},{"version":"d0fa8bcd9d99495de67ccbc3124de850e514f3eea0dc0c40f927ea8511bf8e8b","impliedFormat":99},{"version":"b4a722a1b575060673d2b0d9c24c37dfaab0304193ff1746ee6faea07e68e852","impliedFormat":99},{"version":"98c33da6fd946601b36415c760e677c1faed100c361fee8c45565d8d6a00aca1","impliedFormat":99},{"version":"afabd37daf4bc1b2604caedd796ec9deb277d7f3f1927ecea80cc9eeda678518","impliedFormat":99},{"version":"1cd9c44575b349148a044fb300d2dade101e663dc7556b7c0b9aa4494dc88de7","impliedFormat":99},{"version":"c59eee5e50312900effee1403fa07d9386e95dfaf20411a854729acdf6787629","impliedFormat":99},{"version":"8c8b35b1251978c2156c04db23ce6b842f48db71d39b42dd3c537dfa099e5ef9","impliedFormat":99},{"version":"0001579790ad5940cb4f59fbdf96b540a867b3d2c36624426aaa4fbcea1a4a1f","impliedFormat":99},{"version":"9b571fa31a14b8e1e8e7412743e6000be66b7d350358938c1e42bcd18701c31f","impliedFormat":99},{"version":"9a14a6f51a079956ce0a7ee0826c7898825dea24be60e10802e18b46f142efc3","impliedFormat":99},{"version":"f2f1772f08149a999525bb78ffa3d504a851162d8dfbc7e9b8039baf42eb20bd","impliedFormat":99},{"version":"f0410c617e9f6d332d7b860a1c3a679f7fa3e00e89699dfbc6b4f563b12b350c","impliedFormat":99},{"version":"ace1cb8ad5d6a8cec49a1d4c26757bea48fb6612e0f6ca99581253b5893eaae2","impliedFormat":99},{"version":"bec03add72a64113fd0cccabed802eb5bdc8b104ff94e092be66c9720eb499e1","impliedFormat":99},{"version":"b6b726231178cb2695b8a83519d4fa50a03e800fa9b2dd75193a56bf6cb58a08","impliedFormat":99},{"version":"70a29119482d358ab4f28d28ee2dcd05d6cbf8e678068855d016e10a9256ec12","impliedFormat":1},{"version":"869ac759ae8f304536d609082732cb025a08dcc38237fe619caf3fcdd41dde6f","impliedFormat":1},{"version":"0ea900fe6565f9133e06bce92e3e9a4b5a69234e83d40b7df2e1752b8d2b5002","impliedFormat":1},{"version":"e5408f95ca9ac5997c0fea772d68b1bf390e16c2a8cad62858553409f2b12412","impliedFormat":1},{"version":"3c1332a48695617fc5c8a1aead8f09758c2e73018bd139882283fb5a5b8536a6","impliedFormat":1},{"version":"9260b03453970e98ce9b1ad851275acd9c7d213c26c7d86bae096e8e9db4e62b","impliedFormat":1},{"version":"083838d2f5fea0c28f02ce67087101f43bd6e8697c51fd48029261653095080c","impliedFormat":1},{"version":"969132719f0f5822e669f6da7bd58ea0eb47f7899c1db854f8f06379f753b365","impliedFormat":1},{"version":"94ca5d43ff6f9dc8b1812b0770b761392e6eac1948d99d2da443dc63c32b2ec1","impliedFormat":1},{"version":"2cbc88cf54c50e74ee5642c12217e6fd5415e1b35232d5666d53418bae210b3b","impliedFormat":1},{"version":"ccb226557417c606f8b1bba85d178f4bcea3f8ae67b0e86292709a634a1d389d","impliedFormat":1},{"version":"5ea98f44cc9de1fe05d037afe4813f3dcd3a8c5de43bdd7db24624a364fad8e6","impliedFormat":1},{"version":"5260a62a7d326565c7b42293ed427e4186b9d43d6f160f50e134a18385970d02","impliedFormat":1},{"version":"0b3fc2d2d41ad187962c43cb38117d0aee0d3d515c8a6750aaea467da76b42aa","impliedFormat":1},{"version":"ed219f328224100dad91505388453a8c24a97367d1bc13dcec82c72ab13012b7","impliedFormat":1},{"version":"6847b17c96eb44634daa112849db0c9ade344fe23e6ced190b7eeb862beca9f4","impliedFormat":1},{"version":"d479a5128f27f63b58d57a61e062bd68fa43b684271449a73a4d3e3666a599a7","impliedFormat":1},{"version":"6f308b141358ac799edc3e83e887441852205dc1348310d30b62c69438b93ca0","impliedFormat":1},{"version":"64f588374cff45a495d9da0722e88fa7c4a77b7024ea17750a7c947fb8f08e98","impliedFormat":99},{"version":"5ca32089fa4a40b1369f085635aadc4bf853bc4ea4dd49eac0779bf9f62423a3","impliedFormat":99},{"version":"5a46f69508e086a0f63d8fb15717422e9ea54d1813be3798c2220bbd9c8ef43c","impliedFormat":99},{"version":"21e29420bf5da1147cf6ebcd8cd85afa21dc3cbf04aee331a042ae6f94c1fa63","impliedFormat":99},{"version":"71e67299f77ff5da289ee428bb85157485f4a1d335c1b311288262ca04736b85","impliedFormat":99},{"version":"5df08c4af12b3ec3b3e6afeadd08eaaadcdc2825f50335de914b505ee3252964","impliedFormat":99},{"version":"9bab9e8d65ff83bceec753685598d1d522ca1735a2983eb8c881dc8389b6c008","impliedFormat":99},{"version":"0356b906e53157425c8beb4e5673c71fa80d88e1cd32759d4bd57e59698ef88f","impliedFormat":99},{"version":"d8967e23ae7aed52ef845d75ccb56e5917fc9d6686786e875de3016d2b8e1f49","impliedFormat":99},{"version":"edca1f05d978d3c2feae191a82e34710dd8fedb83a24c2fab15373be5be8a378","impliedFormat":99},{"version":"36ac04ebfefc210ab3c0148cbfc451f3434e9ca7048b19827a98247875923176","impliedFormat":99},{"version":"4e152e1b7f2d588e6279ed5ee1815770a12e32913f06a9191f0f3cd60b01aaac","impliedFormat":99},{"version":"d44ad42a40c4e84bcccc9a5db198f86afa6196d42e152cedbe09d513bff01fb5","impliedFormat":99},{"version":"4f20bc9c75b4515c25c3de1cc6c5391972991a25136b796f8c6601a809e80796","impliedFormat":99},{"version":"38edf1b0be2ed5239574a4592d186f200083648350845c46cc7846f43e409036","impliedFormat":99},{"version":"2670ba717e7b90210f244401d5fe6f729cf879cb2938b6536c9c118371ef24a2","impliedFormat":99},{"version":"2e86a352fce1cf1df7be54b242d65c5efa3d66a445a60b2a0f7c33a60ed76eeb","impliedFormat":99},{"version":"9b3abc22bb11e450c1c77674d11719e4eeebf980315470587cfd461d1d407606","impliedFormat":99},{"version":"02e6668da999217b040e0d8d6e41daa96d7f59eda7bd9dc9156378584116b296","impliedFormat":99},{"version":"7c52a6d05a6e68269e63bc63fad6e869368a141ad23a20e2350c831dc499c5f2","impliedFormat":1},{"version":"556261268d31864a619459b9bfece0058e468456ff0ce569fbea916e6b543910","impliedFormat":99},{"version":"827508bd5aee3a424eb2e91965c5ef78e2ec95585b4074399179b70d8f66524c","impliedFormat":99},{"version":"97bc3fd65336434e6330e0a9141807cbde8ba4045989809632f70ba93f70f6d3","impliedFormat":99},{"version":"d5bcc410b5ab12693f89a3c477f8dba724d881d87498adfa8ed292869b393c7e","impliedFormat":99},{"version":"642ed2138fdab566b42e41f6ce85bb2f70b29d238549fa2160b0c4f808fd7868","impliedFormat":99},{"version":"9f313a2d30d03a9954269fa7c7f5cca86ffe2ae6c1ea14741c3e2794aa805806","impliedFormat":99},{"version":"2c4945c48f529153672e10dc7b67f414ac7e7678bfcd5d6b79842ae28a330002","impliedFormat":99},{"version":"590e67f69dd7dd135b235746827ed2ff8bdf892dda69334f83bd89cee0adb8b9","impliedFormat":99},{"version":"ef83f22620073b4b9e666191044faad4f2b3a5b4bb87e8487b8200bcc75102df","impliedFormat":99},{"version":"99cec35e19fac2229b5c6ba317476fd2694f15a0e9a9d38f146c5f5edfe3ada3","impliedFormat":99},{"version":"5393b11e04a8b72951905bb5d76c4bc540c695886bd81c7af8167717b875a555","impliedFormat":99},{"version":"98ab624c4bb847ffac693acecf770154c9763eeb7228e28b873aa2d2ec9eacc4","impliedFormat":99},{"version":"6d26c9ddd47ab86552f4d06e7bf051661237856cc0e5cf75d634853bbd562166","impliedFormat":99},{"version":"136769a51b1415d74b8c03b74e9bf38e629177447065b897694072606bb26f92","impliedFormat":99},{"version":"0a202409812f7dd20d61ded10a6984b79882fe264c76364dc53dca951a28c737","impliedFormat":99},{"version":"06d5971c8b4a3bc00bf57f4332d3bfd92636dd4abda4fa0357c7c1dd496b1407","impliedFormat":99},{"version":"ee67a800e8ec7418a1aac731c3e54759ece60a5aaa4c61a3daaaffea3360dd76","impliedFormat":99},{"version":"719f559f65d32823f1db11af17b4ee08fbb19d5acd4b6feb7b6610ccc83af179","impliedFormat":99},{"version":"432d66aa77c1e6059106ae63b5609793c1aeadc644282bf39d552afc83ee2ac6","impliedFormat":99},{"version":"4c36226ba094c4b73a1ac45ca38815698eb2089101fc707de511bbe51dc0e6e5","impliedFormat":99},{"version":"458a584e7898e910be8bb52341daf8466ed1d363a967f240bc082e549cfcbb69","impliedFormat":99},{"version":"218daa4b2d1f8f6d3c4f022acce45b10b65d04086a1ab74ea7a135814521627d","impliedFormat":99},{"version":"7f7b3faa89da29e2f52f73f7f2dd37b40c7d1e6dd8b820be1f9603bbd37080a0","impliedFormat":99},{"version":"30d4591edcd78009f16185869f1a832b6ff00b42927d16892ede106f7b03081a","impliedFormat":99},{"version":"6c80a54d4b2be32868d3dee7c69cbba3243d7150da9e0f3820a86f988047c9da","impliedFormat":99},{"version":"8a50a838343a8ee7318f5a4a33defa84d325cb035ff67d4cef3f04cc3dbd7c72","impliedFormat":99},{"version":"93f0399b89384f652cb73f597865e287b69db239dbb52c044a6844cb44a45b1b","impliedFormat":99},{"version":"68d83130bc9e211f85ba2a3aaba7a27f25b368e257ce559d7def6b20aa935240","impliedFormat":99},{"version":"9553bb2ddc97cadf255d6056236f335fb3d0b34cd3ff34ef7dc170d0004d8f05","impliedFormat":99},{"version":"522651983601a3d0a24eb8104086714d8e9a958810503275e45cd6ff263cf416","impliedFormat":99},{"version":"a8f9fed7dba6d9a5c6ed93b7c8e02c892c184c8153639a6ab3ce30ffe30c43c2","impliedFormat":99},{"version":"ddec04cd05ab7614a2d51c3fbafa772b47cec4d7d6be80c1de8d37e4366692d1","impliedFormat":99},{"version":"a28d089808860737ef08c33c36db5e3db57ec5c5fd41acdbeb0f0d1d8f7a1519","impliedFormat":99},{"version":"c921f5db48373afab4577ce6dbd5dcff50c41a0f34aaf4529808affc733f75a2","impliedFormat":99},{"version":"51b1dce48fa5bde70b49e5586d0bf7ba3371e172df994fd6401bba8b436fb852","impliedFormat":99},{"version":"09a2cc054e9070ff418f718c410e0065a56447a91e4770d619b58142b7ca7800","impliedFormat":99},{"version":"dcd55333d4d8b92fcf250652f65c88826be6ac472183aff5ca58c3e886db7b38","impliedFormat":99},{"version":"aec5756720255bd7045409db869db09031ce31003dc654175f552d59b196313f","impliedFormat":99},{"version":"86892d5bcae518db21850a892aa682878f77bc6ff1fe096f5f706c91e547cde3","impliedFormat":99},{"version":"6852847a05178fce73d3c8b6388e0b5cb23bac202845c426387762b9fcf8970e","impliedFormat":99},{"version":"d22c80b0d938d2a571dbe1707606222fb97bd1d4bbb46fe42e326bdee6545ca3","impliedFormat":99},{"version":"4053a0866f10634083ba91f2166420b1c29a2509b64803bd192f50baeb221265","impliedFormat":99},{"version":"74941adf0115a098f810cc363996a95da17e6847267bc29c9d519bf8b0838b98","impliedFormat":99},{"version":"8b5762f3138b2894db972d51cb539f1ff2bf6b231129667cb89962d4711f9c70","impliedFormat":99},{"version":"ffa366f1f2b7ccf00d170f120836a57cc74e8548e3e72b41bd0cee00dab9dd2a","impliedFormat":99},{"version":"17df8cd347878e24d165a9c06b86714762243650d50950f651b8d011bca6ccf5","impliedFormat":99},{"version":"aa94cdb0dbaac5ab520157f991bdcdc953c2fbb0436cb4ef6252bba926429a34","impliedFormat":99},{"version":"771d0002db8c8e153963f4f11a34dfa9bc45eb0cb07c99d711645d9496f07b41","impliedFormat":99},{"version":"664ea2d1a61cbe738cf3a4cbe619f775868a97d06398cfe2867173356786988a","impliedFormat":99},{"version":"88cddcb22330359bd1ffe0cf4f02b4ec0f54e07e6e25e47d6a33968a0209fe4e","impliedFormat":99},{"version":"3a0fce6a9982d55de28a62fb390f80b998f55ffe7aefadb9bec15c1f3801d3c8","impliedFormat":99},{"version":"060bc6464f23a8cfe35ff7b91a3ca4ad918b4f760a96e666453ea093b412a336","impliedFormat":99},{"version":"057a6bc4d8d4ebc4817ad261915f898cf589b62194058913ed9eb4c25f14544f","impliedFormat":99},{"version":"a458726e9fbf25d67d7eb9dbba3909f2654a475f162a97227e592b79b1e6cf68","impliedFormat":99},{"version":"90eb37365f7f73460de47970a44dbf4760990badf21b3223e8ce0207ed874903","impliedFormat":99},{"version":"3127a03a881f78c9145d7db821295531e8c577a8a0738847e70af2b6ad9778f3","impliedFormat":99},{"version":"cefe8670acf41bb5cc2726613785261a6b912c729b0423ed5daadd48a268e7d8","impliedFormat":99},{"version":"1a35bd51a28387166ff9069b79c5b1b45d917efc33381368083a645c78aa5006","impliedFormat":99},{"version":"17e18b0edde7e814a13e0208d2db3f5a6fbe189671b57caef288e39f1f1b9602","impliedFormat":99},{"version":"57afd9ed037a00dd2715e6128c9f305f287c9b29d9c7f556e4daa074d35a90e5","impliedFormat":99},{"version":"221c6bb2c1152e37f7254d5a167f11ffd57f12c734e970ea15cdc59a97f2038e","impliedFormat":99},{"version":"4220b6bb9febf019e09d875d52fe611225de4c5574412a4c1a62c324e4a82401","impliedFormat":99},{"version":"5b6c6c22a039478fa3bc034d6d91d10c0e4d20af1829d986b78a85232cbe0d2f","impliedFormat":99},{"version":"ac67258368872db1e2d5a8fd53fa649fe31c5abe6f62786fd4bc6e6ad51ccb9d","impliedFormat":99},{"version":"a2568a7262a7c222ffdbe3b9296fe725a3aa6037d3792815af50923bb669b7fe","impliedFormat":99},{"version":"1397759591619d547cbcaea8d94cca1ed29e9f6f13beffaffe9f9307e5955861","impliedFormat":99},{"version":"77381f3914dde6135f903652e311c5bb8053dae28607f519a3716ead90429f85","impliedFormat":99},{"version":"761bfb2da76dd72beaa61c09770aa2d4e90fd2a8c8e38f79203cde259d4ed4c6","impliedFormat":99},{"version":"788ec71568d441083686e3c32d5238de15aab63b59481f9b91174d8b4fb71100","impliedFormat":99},{"version":"d77ee71e3052258d3b9afcc8e921ca84f96d460bab31ac752e6237454c5d5cc3","impliedFormat":99},{"version":"6d9b1602e3d14e16b782dec30666f2e42d287d6a5345fb7ae52111f9a1e1f92d","impliedFormat":99},{"version":"e537ea67b8894b0ebb941bce267e16f9eb0719ab8ff37f0653d12f200339f2ea","impliedFormat":99},{"version":"07c9867e04c1628c47fde22389e075d615795c6b7c66ea90af6c281810699d0a","impliedFormat":99},{"version":"f5349612ec61213715349174adb060d1361fa1713a3d8d23dd1630dacd942b11","impliedFormat":99},{"version":"0aace45ac5ed670f576a4b81cd039a6640b5adf81437996f110f7d55c196b802","impliedFormat":99},{"version":"23abf55ba0b7a59b9bfd17491675b818fc178c581686840a7aef27e45205383c","impliedFormat":99},{"version":"06d3015b06f1f22899905d74207c52e54c051f0466975156de9067ceb884ee47","impliedFormat":99},{"version":"21714b0d8f7fdd7be1e233d4eb2daa87d2f4ee3e41a363362276fefcc2bd45aa","impliedFormat":99},{"version":"3ecd423076cd6107967e1b9187f38919490d790b258df54e8a6572a93ded5f96","impliedFormat":99},{"version":"015edc4dd049b299c563701125cd50d16d9605e9927824f8371a428993c25def","impliedFormat":99},{"version":"f84ebeaa3d5b14a9fb6b8349330e371f706f48317b1524e3968ca13c8eab2ff6","impliedFormat":99},{"version":"242258092f0ed6960f328b9d7a455c6559c7253c6b57b08883a2fb859c4cfdbb","impliedFormat":99},{"version":"d3002aa3f7fcaf5921ebf891a2556ff5a95885d20f0f169b12f0428e4bf80bb1","impliedFormat":99},{"version":"848ac64950a137510b1f47d87cb0f1fe15c7eb06c8e1c2823ae63f413430653c","impliedFormat":99},{"version":"cbd768cb4e86fa0057ca6db0359749dde395eacf2eb9dafc86b903ff1477d213","impliedFormat":99},{"version":"fea682940516e26202c6c8f274865555881b5ea171b1b7c262c5336512d938dd","impliedFormat":99},{"version":"31f800e9c3607ff0e370bd5a2b73501567dfcf03b7c7c9c9e8927c10a0467efd","impliedFormat":99},{"version":"75624353ffcf91bb2b7911b44075d19a7b9283670f2a78938c17e82e50d1c0f3","impliedFormat":99},{"version":"c43841a8e135fc3a96ae46e5403a46a3ed686ba983f4f0ef142b1f776269147c","impliedFormat":99},{"version":"f54bb4e54d36037ae537835edc7d64caff0e33b34fac0a2c3e035a418258ab62","impliedFormat":99},{"version":"725e63c5518a0ca69dc44c12dc4cde29218e4bfd8088368ec67836f394cfc7a4","impliedFormat":99},{"version":"a0231312762c8f9446ccb79c88227acdd9d2ee4f8cb3a459eda57029562470e5","impliedFormat":99},{"version":"a6c16d7e6060828143259e5ce1ad0228e3a34e2ff2cf35d2300adc78b6fcb130","impliedFormat":99},{"version":"de9ff289e55588add27a015cc023023660d6b8a21da1a64baa237d0f448b2e96","impliedFormat":99},{"version":"0e04533196527dd4ad14822b18bfcd7f0f701de029ef67da0813df3465651757","impliedFormat":99},{"version":"2f7d6f80dd8dd07edff2652926a4b8eeaedafb51775bea7c889afbc795d40b4f","impliedFormat":99},{"version":"1a84b7fc795e6812ce4d63d7066dfd5292bfd2ccf52364b1fed7f599efa896d2","impliedFormat":99},{"version":"c7501754d2236f6c5c2b03d8689d218805c77f231aea2965faaaf002bc992ee3","impliedFormat":99},{"version":"0528549bceed39a3d94c2bbefde7eab0778460dae5eef4ff71f04fcb8c8ec6f0","impliedFormat":99},{"version":"17d424fb44cd45655049d153d11a71cb236155abb50d605e1d91c3736799004b","impliedFormat":99},{"version":"96ebc724425e9aae600472cd4af10a11b0573a82cecd6c53581bcd235c869b37","impliedFormat":99},{"version":"03ceff4db920e1831332a5a40c2eaf8056f221b9e3e672bc294ebc89537c9ff8","impliedFormat":99},{"version":"ad030e8f3bae5badcd0e18837a3b637bf411c06ba3aa38c9b89bc6e016c67a35","impliedFormat":99},{"version":"e7f31cf8377bd6a1779922371bd84d2427a6df910b3333a93f0c5168299cdece","impliedFormat":99},{"version":"377862d812238033feb16a3174f3eca5449b5786727572fc546cb6f1e973adef","impliedFormat":99},{"version":"e362bee8c7c56dad6c0f52b2d83316ed53c6aca843ccc4c1a88b7e55382e0b52","impliedFormat":99},{"version":"2784077307c50f1342422e95f1a67f5cb9870ea04ad1a80ed4d99e9cec829980","impliedFormat":99},{"version":"eb7e19c5a59896a08776f58b63212ebf6b4c52c24cb6f0574c8ad2e462fc1277","impliedFormat":99},{"version":"c5676e6ff4ed5b0069a3dea05479e3a5abd938dedd4f5ca813f744728066fae8","impliedFormat":99},{"version":"3b30055d700e379329817ad8469e061cfffb79dd0b6e66cdc3cabc5fe03da7d3","impliedFormat":99},{"version":"7944d3987fda085b3b5a9325ec52f998d0172d4138fcdcbbff60e34b562656cc","impliedFormat":99},{"version":"b944764dcffb404b05669dede7b7008e62b21a8f7c0cc1c021294490a99e555f","impliedFormat":99},{"version":"e887a7a29bd7525556302dd1dae062cbc66ceced3565609b59920fe166910086","impliedFormat":99},{"version":"503a8ac885749cc70864c0dfff99302888a41964e4a9fcaf83ab8d01eef3e458","impliedFormat":99},{"version":"015b9884efeea4f3ffbf092e1c1d6eb69ade71d7d79833468e9c18e36545e142","impliedFormat":99},{"version":"8637312eb67001e93cee29113dfcab695b3e12332a5f4d2fba22471d01978b3d","impliedFormat":99},{"version":"8dfeb90bd8f28f690c724ee3c00d2d32ad633884e159fcfb5ce4e82ee5589c5c","impliedFormat":99},{"version":"f21c7e7ba380996bc52cfbd4e23f037edc90b073fc4b34395c4f8167752da7f2","impliedFormat":99},{"version":"f5df5c1a71732a42fdf23542b344d7069a4e0a68adbec151982b93571442b068","impliedFormat":99},{"version":"b532dd989593d814d9bfcb3131b4331de4b35ade064427001676d1fff001ddd9","impliedFormat":99},{"version":"49ebb1610637e76da9500d2def8f15c96c77b1bdc3560091d5d07ceb86c6be70","impliedFormat":99},{"version":"3dad5f9d2442b6a1ee26187724f0a1ebdf9f89b5dff0fb3b8ba1eea11db6d7ba","impliedFormat":99},{"version":"5fca4b593907fc70848e8590d14dba0cf0410e6c061e39c177835e700ad089bf","impliedFormat":99},{"version":"aa76dec64917d5cb480593cd443b229f9ac8c3a983b88962bbc5afd89d0963ef","impliedFormat":99},{"version":"4876014affafb8fe03898c335c396ec29ff29ec8ae3b50ad5ea5ff98c9323c8d","impliedFormat":99},{"version":"255cfcfd791b6f0dfd44f17f8bf6d4dfd733b4a8fec6c15efed8013d794016c2","impliedFormat":99},{"version":"420139e540c3461ff3a03158ba1a1d52e956aaf083c1a4b04069a8482e8978be","impliedFormat":99},{"version":"d15d43b6b19a969858befe90f60009952298120dcaab7110cff78a388a50f7a0","impliedFormat":99},{"version":"0cade822c5888722f9398f9e29781cfccb603d8844cb0273fd4ac8aa9a184193","impliedFormat":99},{"version":"37b5ab7dcd9f3954013a12e1e873953d8be801cc3f97b4e5d9c4dc895d8fc4ac","impliedFormat":99},{"version":"1277bf682a6d071861d20d2df102d950dedc15e49a96f211b1a4d2c87c83a912","impliedFormat":99},{"version":"8cfe0fafb887fb38150159834ac34b3e91d883b250ba4e1154ce88ed057d9fe2","impliedFormat":99},{"version":"ec69be923cb78bb128ea6fbf86555974d0f172a1f65b866d9bbbbc8e4dab82e5","impliedFormat":99},{"version":"da5d2ad94cbe6ead090c5dabeb266eb81a958354e487442dfe8313beb467f99c","impliedFormat":99},{"version":"1656706a594b924adfc45a7e9088c63caafb5c2ba689fce0d757d1ee5f016b17","impliedFormat":99},{"version":"d274837eed0e7d29bfd55aaeb65147107ff57060c70cc977ec83868830fffe51","impliedFormat":99},{"version":"a050ee6f9c5833d18643f86c0618ffe791cc15e7dd758f21738e305749e9b002","impliedFormat":99},{"version":"baa0b19d4b1f69101d22cf17b011d4544343df50572a2ff7a56fa51a1182c299","impliedFormat":99},{"version":"15e6e5a7d194e6a1d4852f2582c0b0f174e805c445cbd758fc9d2279374d5ae5","impliedFormat":99},{"version":"bcaf57053cdd116527f18f99ed70085db39bed9a251510fcd6903e99df6910d2","impliedFormat":99},{"version":"522ff1756b55a8c06ccc949b09b4cafe6fe922fbb1e2d780dc04e992673f6375","impliedFormat":99},{"version":"6c583ae286739f214987efbbc2bc3222870c03a83b8af01fbb4e951c78a19cd6","impliedFormat":99},{"version":"04ea39e4b3e1d6e56bc1f0bd0c7b19aeb4d35b678937b3ad54c63d44b44900c9","impliedFormat":99},{"version":"7a54a284c5fb690b97ce715f0e7d861c3b150765751cb6bffd6c479c8d5b0313","impliedFormat":99},{"version":"65ad93db7608fa525e362be30971ab55076ddae12db11d04a8e3ea4633ba7738","impliedFormat":99},{"version":"d7fbd0ea7793a151d792f6ad7d7c9a9ab7dbc69d970d0d0e57b408cba59ab91c","impliedFormat":99},{"version":"c59df2ff58c6adc907ed95ae1e0ddc2f6a123ca1189926dbafa3fae1fe8f40b5","impliedFormat":99},{"version":"3e85dc80eee865fee0b9aed7bbe2707c38e2b36b0f9192f9202566a9be7c404e","impliedFormat":99},{"version":"717c55229509a89e25c3c3a83a1de364e4db51be5002a738800f76f0ac168868","impliedFormat":99},{"version":"84a9a4f587a288376db1f1905fad7ad37a600b17ff85a4e33676acc607089873","impliedFormat":99},{"version":"e7165093ba33bad2ca7ee2865de7a0e7ca3b0480101c0cb75be7b024167d9e59","impliedFormat":99},{"version":"ec4ec119f797f71ee6d8110930dad93c689a1683484171621a2702b873d8af1f","impliedFormat":99},{"version":"1390e4de40d868b8e1d2619f6d0e95d0524b7ccdbf9a90c660e0b7230bd5ed19","impliedFormat":99},{"version":"707a37c179d6ff79844ffe41d72350c775de3fe1a1e2ce2ff458cda9595cc75e","impliedFormat":99},{"version":"09c6639e5622dc1693276f4c7684b0f0f4992d5c4e5c0769dd576e95c50635f7","impliedFormat":99},{"version":"0af521e519e48440bd69f5683fd26542d478c8110c1bde2815a732ea790d5448","impliedFormat":99},{"version":"af40e667287d9d2e79aec9af683744075a87c85424f518a70230af7aa8825844","impliedFormat":99},{"version":"49062a955da1d4880135873f5c08988c920429c3785349ed1b4e112b9269d8f7","impliedFormat":99},{"version":"334bc494ebf7f62684a30a916455dc63c6895784a74b07b835d28d0297785496","impliedFormat":99},{"version":"de20f1cce0ab86efc45d9d7bdc100999fec7f369613d57cd8d44cdaec8e12958","impliedFormat":99},{"version":"907467198cc07e6eac62f7eb2bcc7afc31e3ee433ae60000eca62213de971e6d","impliedFormat":99},{"version":"4263e62ba6e779cd26752ab3fcfb42249d009efcf110bf7a69412c1f33582e22","impliedFormat":99},{"version":"0afb4e75b4e9dfb1e331b026346fa429c72b3f76c2838ce448b5281b8d89eb9f","impliedFormat":99},{"version":"a723cf11acbb7f1d9b620b90a5cdc50f60f9ac8c2ec7bb6f69751729093180b6","impliedFormat":99},{"version":"019bfea6e0ea6051fe1d51f3d0671fccd704731d54ab218d9a8a42afcde54a41","impliedFormat":99},{"version":"63646b3d3e6071e59c2ae0a3012529910593f6f55b0285c028798b700df1eaad","impliedFormat":99},{"version":"3f854a9e492f56ef132efbc1bdc155896b97618a2c15eb06248bd88478303be2","impliedFormat":99},{"version":"984d0fd8112e3cdde9bc9cf0875f69676cd5a150caabb228cf067741e1241add","impliedFormat":99},{"version":"8235beb430cdab1e2c5244364de7f28ac109b3fac5e3b6def3bc9aa0fb7d1360","impliedFormat":99},{"version":"6b95bc34efdbe1082609ab0a1522f30f4b79a906e479af1295d4aba7fa887f58","impliedFormat":99},{"version":"c81e7a416c0e77487b511c0f345797d6323214968009b52dc8c2aa5c9faf7210","impliedFormat":99},{"version":"f1f7004e9aadb6803b238c03a27971c5e1effdaf1c5d6dd9b3d688767f5563b2","impliedFormat":99},{"version":"0d8ab497f53d6142282bacf32f1538fc607e267e058074286528126fd1c2db6c","impliedFormat":99},{"version":"5b81a34a60401dac6213a45e2bbde3e57060ff06f847cb005337816ff2015189","impliedFormat":99},{"version":"6b847067d0fd98ff82fdf0f0abf69b9ddfa87c01ab09dad9576af17fed68f254","impliedFormat":99},{"version":"8ae43e29b6a1b72cec9bd415afd180de9a9d83423c7d7c8f4d61e090f85ad572","impliedFormat":99},{"version":"f8449256f5c820606e9da9e5dcffd574d48981b8b6520c234b15f8a6bc3dfa70","impliedFormat":99},{"version":"a61e72002ae43b8230b720eac472b287c2d6e492adaaeb7546570e1ede58c3ca","impliedFormat":99},{"version":"3de403593b664a953f7b10950653129a6b70e97fbdbcc79ad8292cebd6602274","impliedFormat":99},{"version":"35c011c44b69e88a5798bb61158c26e35ce74df571c095c029b29d182924c2f8","impliedFormat":99},{"version":"14cb4ab32e33b9a279f3b62ef3ae69938583fcdb276b219d74d149e9106b7aeb","impliedFormat":99},{"version":"c9bf49c427e33b552a03b20084624635957dc8468eca2a3d461f0582a011c5b8","impliedFormat":99},{"version":"f4d2c3633596eb54d2bb659bc1c60da3d4157c74c6b6e19f8d27965da2b46bf4","impliedFormat":99},{"version":"4a6091ca49cf40b7933e287a233de2c4666c4ac22c80aab2a0bf4a52b467c743","impliedFormat":99},{"version":"53b2c7304bea0d35da3f158365ecd0794a49cbd8882ff2f7122f99a737854993","impliedFormat":99},{"version":"d51c6abeb24e22093f26441b97eff90378ec9bd13979d0d59f5034a2296ef884","impliedFormat":99},{"version":"6f40ad7380099493513c35be209c0b10a531c4e3bf3acf27d5400d030c59971a","impliedFormat":99},{"version":"d2f0d9d92558f5e5406a561675e6437524bee447f554a8ba6f4dbdd627d0b2e5","impliedFormat":99},{"version":"c1b32c621d2a714cca1106ca3f40bbc3a0a1099e14743a67023bbf5092add641","impliedFormat":99},{"version":"ef74f47c63b7a4d7a022c1f569f3ca9c14e3277e0385b037587665d69b96be7d","impliedFormat":99},{"version":"4198bc4505f06500bd9b7db780972b9a301cc946896287e0c9da7d140849ea46","impliedFormat":99},{"version":"d1102e99d80c4f24da7a3c9e5b830a41a2039c289bea81f5121b3bc6c2ed2abd","impliedFormat":99},{"version":"b4b440d99a10cbfd6272aac5bfd9aa9622b9c1f9c43f7d5cf79cb43825614958","impliedFormat":99},{"version":"741587fb86739542002fd67fed070c07e34dbfd9bbfde95ca955144b861d00f3","impliedFormat":99},{"version":"808deb409b1514ef7d438394db0b3c5a9397267abe7eac6053165151e7423232","impliedFormat":99},{"version":"6989d42d669be40f6591a8fdb8e705df5fec8968a38206f5a0047f47c230d1b2","impliedFormat":99},{"version":"20b1db9c33a81af48e43140a540d51c87b6b20f608489fbbf7486c8f56ef0c87","impliedFormat":99},{"version":"a534aae35e31df8c5dfae7d984612adca9d5641b59b49ead295066dee45b4dfe","impliedFormat":99},{"version":"4960805d11b85af4fcff7d549c97447b2294d67d4ee2bbf00695184d5eb6b21e","impliedFormat":99},{"version":"d0b1cdaa14a443a383bfe147dc579b4a836b73f8dfe2b3289e58e871fcad0bf8","impliedFormat":99},{"version":"2546d813c0fcb88951aeeb0c59d42fcc188ca463a6b64045cc091cbe01737664","impliedFormat":99},{"version":"3a629b2c09c54c79c0bb45cd7800b57bce05640427ad222f9ed0e5329bddde48","impliedFormat":99},{"version":"fda15a21c72487186d6e08d90b6d2554eda631c7bfa71c8805bde1d409f04c4f","impliedFormat":99},{"version":"aad34743471540dc34740144e1dccc42c9b4a1522a8f60ea6f8bece95f226aa5","impliedFormat":99},{"version":"c4feb5adb299f304513b63720b3caadca698d20eb5f2ba53f540609576399ed4","impliedFormat":99},{"version":"3f6ff7fa12f7ae9e51fb3335767a23feb2042397ff6dd78836ab8380ce06b760","impliedFormat":99},{"version":"e379f2cc178fbdfe06bd7575ed0c3019f06307503753d2e3833fa08cccdf765b","impliedFormat":99},{"version":"05e7d52d0f13fc255dae1568da631c3b31ae36097bf4fa7fafa5d4fc0a902d2f","impliedFormat":99},{"version":"b911ec34b809d0cc9bd3392c04f5fc4b7d29fc43635330ec94ddcb64aad6c32f","impliedFormat":99},{"version":"4f9692533302f9ffbb665538ef05ad184b334076c381f443716ac818a0016940","impliedFormat":99},{"version":"035cdb01dc859990cc531611dd6c7bb0144f5c02a911b06e7dfbf3232ee0bc73","impliedFormat":99},{"version":"15f23c7f87961ef45889ccb37db664270db9c7ceb127a4d3938521ed095504d2","impliedFormat":99},{"version":"cce8976bec1dfccb5e48ed58df797a393e3c894397b40986884a173e3ef8fb51","impliedFormat":99},{"version":"d1dfa8127d21751115a0a6ae3e0e0e41f70eabf45e23787ba2d327a14669e518","impliedFormat":99},{"version":"ef87c5b95fbe2151e96c89e6c80ad7dcfa895a7001ea9c0cc258eca3eb84ae49","impliedFormat":99},{"version":"2433129fe6d3d67b8268ba54abd4ab1c7c2f7a32444d4c6a68a9a10be06cc617","impliedFormat":99},{"version":"e969d9b9fd9ca2e023ef701519ccd75e207dd52b92f9af22e15c04fea8e719c4","impliedFormat":99},{"version":"112fae55d6c0f317fab229ee28d756ed163afc3ce4b0cf0c948736f6442abb42","impliedFormat":99},{"version":"dd429b03ce8ba91ab6f204d6c2c7ca00fb3cff07b956da1ac8c60360da28d866","impliedFormat":99},{"version":"b7a63ff548e03c363de65f81f7c31bf98f77b73f13054ece8ee2bc1c1ed9cf6b","impliedFormat":99},{"version":"89ac2289cf83ef63f0f869aa225afa006fc066bb8a5cb81f690a0ff8b6b27419","impliedFormat":99},{"version":"5f49779e856a15a93dbc55628c6dd22787c4729a6ecd4a3ef0226ce3efa54d6a","impliedFormat":99},{"version":"bb836f3e3bb9cff93ea6cd392b5fcb88aae3d664d7c09171e6ffacc2f0a44759","impliedFormat":99},{"version":"612f919817f17d0a4ab4dc0bb83f1af7b6fd3a810ab8265f3ba247619c90118a","impliedFormat":99},{"version":"02d5344b11cf703ffd698f1874f5298d855ae6a91c3a2d42c3d95b70c2f4e6f7","impliedFormat":99},{"version":"f6a02ec242fe847abb54511123ee93c58ff13d7b660bfb8a01eaf5edc39e8856","impliedFormat":99},{"version":"4ed57726726e281f991b7419a8df5536aa8c1189bac3a0386ff590c8f16b7bc0","impliedFormat":99},{"version":"8ead572121be169161fbafe5293a189110c391b15670753f1be62d6298a316da","impliedFormat":99},{"version":"3801017d48638edbf32c445143b804711d2bc1a2ef51f0dceb25fe8a5b591bd5","impliedFormat":99},{"version":"2d5537810389a683449de9b0896ca4b130b93a339d8d72836649f08cebd17f1d","impliedFormat":99},{"version":"773f4ca58611a16eae2143575c1a01d738de48378dd2d11fc400be42ef2daca3","impliedFormat":99},{"version":"558d19d1b6743e92b564bfbf3edf3501ed8bdb2d090181b4fe5003b884694c38","impliedFormat":99},{"version":"9f74f3a8cb86c7035df458ac1964b046e71d75e156ca30e46b7237ccb5c88352","impliedFormat":99},{"version":"bb4a8d5ccc79c02fd91468a00a6a60094b5faf91c69e510fbc4b84ce1f1a44e9","impliedFormat":99},{"version":"a68d52626a14a314e2f910dc7e279bc087f066e60a78b259c3ab78a4cc1b2e4a","impliedFormat":99},{"version":"c796c30eea1275679550236b6f00139fad4be671f5df058fc908156949d91e32","impliedFormat":99},{"version":"405533464641522eab7fbdc2c249729514750d679d5905a84ad94b790787df9f","impliedFormat":99},{"version":"ee2f8c4790ef349e7777b3faaf599823e82e3e59a4bfc2c67c3e1775d3bee50c","impliedFormat":99},{"version":"8effb19bf88f12addeb45df0c5d05e0f6464612d3d6b34f1da8ca8c2c1c5cc12","impliedFormat":99},{"version":"1e013d9eb6ae0803a2aca856d30da9cfc48c6448500544d8600cd1ef8549d311","impliedFormat":99},{"version":"bec1c0e444418bd6b168ffb15b76b9441c761bb2d243c089fa6ea378b2cc72ef","impliedFormat":99},{"version":"c5a21f137c70fdc46c5d643218989ae7d71199f3d6a30af86441dea65a458d5e","impliedFormat":99},{"version":"5c7d1b8744a3c63cb23db59258fcee28ef638307c6862f51572805162a851b51","impliedFormat":99},{"version":"448a88c8e7eda3d8999b7022cfe4dbd1cf586e71e21e999bdbbcdd436ac58b8d","impliedFormat":99},{"version":"1fd21de5ef3cedcf80d2b5478c2b040dc0e9284cc129f491fe72dea690c16976","impliedFormat":99},{"version":"ceec50190a9d3d13a8500a8e1d1b6f8f5a3f6be45dc8e9f983530d84dbd69cd7","impliedFormat":99},{"version":"42b9d795a3152c6bb0f641da28297b91d5424cdbe936952ad18c20f501bed1f0","impliedFormat":99},{"version":"37488fdc6ffd2d40cb049ddab8ba198c8e887dfe77510c6c83efb6de34e2fe68","impliedFormat":99},{"version":"c261f2749392eceff6ac17efdcf38dce0d8e6d8b15cded165f834b40dd65f93c","impliedFormat":99},{"version":"661b89ea587a659596859486a0123a631c34b5057993284d60ef9b87c015797f","impliedFormat":99},{"version":"0e6f5d456e1b73ad322c4b0bdcf10b0f9a8a0b75414d5b9e00d9f561a43874df","impliedFormat":99},{"version":"4461b8cf1fb26fa159072330c41c2b52d80c8ab3d2e4093abf74ba9dbf840259","impliedFormat":99},{"version":"e72931e0fd3c01a2153527880a56b53a2fbbe198421809dc2a7c3a93ea74997f","impliedFormat":99},{"version":"b70eb8f22c1217715e2c34d1a83a75d5fa024c32b1aef4b7c4db3f98645cb395","impliedFormat":99},{"version":"3f955b3cce7f95f2fe1bed6fbb5d41c864bb89b0aa11bc4b0154da332f136be9","impliedFormat":99},{"version":"3a5b6c07dd61016f03d7d4b9b8714fc10e0ecfb2f358783449a6385b930409fd","impliedFormat":99},{"version":"0b70dc15cd46f0b2f0d705744aa3dc4798b87f5113589ca5e1a7053af8edc756","impliedFormat":99},{"version":"7687d8298fbd5d0859b84ec89fbd43fa591970639447cc7b0156670b2a4740f8","impliedFormat":99},{"version":"ae1fc7ed3c72167972acd4f771883d14dd13d635c3b585606218ea4f9f5662c9","impliedFormat":99},{"version":"69204d6d8f37d8ef16ef681b185c5aafc81d81afd5432a25912560f9909ed2bb","impliedFormat":99},{"version":"3608e6f20899db55d817ab7a76390aea19b8e3bf7cb4becb5f3b70b833db038f","impliedFormat":99},{"version":"434af61f55bf25916aba2d8abcec57ceeef35571daff914fe7b54aba771312c1","impliedFormat":99},{"version":"3f31fbb79cd50033ef517ce3296f511ba8654758609015026227740f4892e187","impliedFormat":99},{"version":"b6cbb9a7507ddfb4658eb5fc04835b24abdb18f9b1dcfc821ea8cb220c6b4a24","impliedFormat":99},{"version":"590a91fe582b89a9bad5b5b4d1a6d9747c5287f6e1b23a2a57d1aa60c1a23180","impliedFormat":99},{"version":"5aa8cb7c1bc385a9938b872f6b857ffd91a17cebe05c86a44f12666a37cdf1ce","impliedFormat":99},{"version":"8867ef533f3a1b2d7e77051ee1c764c1942861544873ffd8773d52005a7b30e1","impliedFormat":99},{"version":"157a1f916813abf3e1faadae34279ee65110d7dc8146711240196ce0e46cbcec","impliedFormat":99},{"version":"7d0101529b77bd85692b2a831308a7534a478c60b95a1798c07e14d3a14e4b21","impliedFormat":99},{"version":"4683b8b99421fd9229d15a80d66cbd5ee1d67ff19ff86ae7d6b449b29ad304a3","impliedFormat":99},{"version":"19ea1b64d140b3fb5d1b699b09f1aaa60ebf32014f6dee279b96d92ca662d871","impliedFormat":99},{"version":"b2d2ab3ab26f446cad62cc23ded652641a44deb9d19280550c74cc81c7cd4263","impliedFormat":99},{"version":"1b7f1fee5d0df0a2a9e5c4e0f685561d75fed9820679f0eb1f87757a050b7bf6","impliedFormat":99},{"version":"9afee2d40467087a6aed46b5fef0548c2a1351d533f2aafc68cb47694a81f7c2","impliedFormat":99},{"version":"372c39fd10f96d006497fc2bf9d56d0a602119244ed46d087a2bd5bb037821d9","impliedFormat":99},{"version":"eda319a4faefc5335172ac0c5ab2d6530580e71f55b53a68de5cec96a106bcb3","impliedFormat":99},{"version":"d9e8f082189fbcd24d1c13275aaffebaf48c9222d20654d61ad7082f6f2df101","impliedFormat":99},{"version":"8f2350543fe05a8d34952c3dae8f9781594751f5ef130384446a729e3dac7bff","impliedFormat":99},{"version":"fc71808cf3e82c4b815b17870970038be40a83c23ea77a47c88bebd7a8a0d431","impliedFormat":99},{"version":"87622b9b115ff00fdcb1ad2e5c0f6064249dd577cd94140d2429aed76218195d","impliedFormat":99},{"version":"987a12239021ad858813841f22475f2a225d3333a2dfd9beb32222c9e2dc2505","impliedFormat":99},{"version":"ed3f6a7fbdb2e7d6bc2636b3f56c08ed34d2ba80ad3c4d30f03a8b12298ba100","impliedFormat":99},{"version":"097d4c89e60fa539682315762384d83801b9c8bc0f24f57a63d62319b6cb88f6","impliedFormat":99},{"version":"ae868f126890affa478b4628684db9c084b00eaea3ac884ece0184e8f9b4041c","impliedFormat":99},{"version":"0aa2fc9a3936aaed64b486dc8efcbd6c62e0afad81ffd72be408cb97867c0b16","impliedFormat":99},{"version":"03b6d8653fe0ad8c0b09eacd38d002780fc03b77ef06858abe4fee879cb82f85","impliedFormat":99},{"version":"1caad517833757199ab3830587bca968433d3e1e485c518989e10a3b77f85b24","impliedFormat":99},{"version":"9087d62992fb955a421851106b0e8c815f3e24120b95c56e8373d384e273e0e5","impliedFormat":99},{"version":"1952baf9e86d0538fc675388f66f5aa215514034ed4be848d2f59e926780c4d3","impliedFormat":99},{"version":"ebdb84450ad6efa9a70dbb78f4c0f9a16888bd798eefc37f6cd04d2572206242","impliedFormat":99},{"version":"f93d43b0832bc9f5e6a3ec0358bfee8dc2f44f748278f3e6a073220844e78c78","impliedFormat":99},{"version":"a15b1957c98e891ab28b838335bb1deb557343bb4124a9975df71d3e523a8a46","impliedFormat":99},{"version":"30d463e7ce174f7a529d3a832711f424c984cf517c08f59dbcd2ccd5b16bb6ea","impliedFormat":99},{"version":"6767ab11a8cda8c0ac2ac7e2252bf7be2299410752049237a48d93c62a4a7195","impliedFormat":99},{"version":"556ec31b542b318f82f9fbcbcea81d9c139ab820d4e32df8327b81843dc32234","impliedFormat":99},{"version":"256cde5dd5a4f0ed7516ef587efd4bef006317e8daffc232974fac0efe47ecee","impliedFormat":99},{"version":"53c4229dc8cd2aa22a2c58537514818d429b6972555241f821cd7e1701c42d38","impliedFormat":99},{"version":"dbfcc3a90669180c15e0817815c5a9ac090b9473998ec0bedbfc3dc98fdafe12","impliedFormat":99},{"version":"6745a82126e61c30cb5a8db54d35886159c53ac5a28f5a61d31fee282598f7c2","impliedFormat":99},{"version":"be768a2f53e62d96a980aa56e02861472f7e974862730dd12fa26cb4bc50e348","impliedFormat":99},{"version":"1ba993dfeec6dca5b138bc0370f561e5a220a367b7fc015a935e015ecc865aa4","impliedFormat":99},{"version":"1bc5d66f065f14c9c6290f6fe09492e60d30901737b68a1e344f2d61ed001e96","impliedFormat":99},{"version":"e7e21ce3d17c8c107f99522eb0c9d2e7e98823a873024efbebf93db436812363","impliedFormat":99},{"version":"fe896af05f06c4c6257fdc8e8cad8a278c90d4b38ff6b70efc5b5e3ecc880bb4","impliedFormat":99},{"version":"362db1b55e2006226b53ac79a8ddd5a12976bdd4531badad0ddff27b49817de2","impliedFormat":99},{"version":"c3ff132ac57ce2706280f9e145befc0e7ee6060caebb32ff3022e9c154575876","impliedFormat":99},{"version":"8c1e7fe0b90aeba2f3eab5fe6e5fd66e70ddb6cd998a1eda1c5cfdd6336ba94c","impliedFormat":99},{"version":"a0f0701ce0a5be197aa18a41feea179f1e21a2991918ca26320753fd3cbc17d0","impliedFormat":99},{"version":"89af4f75c1f204d678637102d01382e0b8b167e0b213a42a6fab2a64826e815d","impliedFormat":99},{"version":"372c4938c22abcb5635c40958f040b4f7ee794922cd2dec038844ed0a825711f","impliedFormat":99},{"version":"50d2f4d075114bd15852e0ae28244f897e8fb7109fdb4bb980cd0d3071ffa87e","impliedFormat":99},{"version":"fb29fb3a2e3247167f4e699f19b47cbbe02e3137794c48d08ef6140c13a82a13","impliedFormat":99},{"version":"b8b338b2581fe913b51078571e66b93f60e27089753bfcf0124cd0727684571c","impliedFormat":99},{"version":"00287f47a7a9ab63f5e218d1db19923519e6761a3ae2ba9222d2c38a21a4bb35","impliedFormat":99},{"version":"17f1776b27b2c29bebba486721f5d9319dd9b651b6e3be83de3fa216085e948e","impliedFormat":99},{"version":"97fe89bab2cbd68a825b749e69b091cc01cdcbce11ea81dd9292b41a0067fb2c","impliedFormat":99},{"version":"7468715152819058c1a2a27ea8688a7ae51f9800f1273e0815a60b53a0c023ac","impliedFormat":99},{"version":"f253619c22ea40bf7cbe77923e570714f74ba32e33fd3af620a623867d94561f","impliedFormat":99},{"version":"a9615353b037dab7ed7a5ba67807a7daa8c15cd433f627170360135ae30f7913","impliedFormat":99},{"version":"9ddf47eb87c7613d5a5bbb577fe6ce87dd34f2c7681dede0ab9fa1d6bcaa7242","impliedFormat":99},{"version":"57b00b8088284b7178fda7be8f5987d5edcdddfa10bd2f777c9910bbb7ac7e97","impliedFormat":99},{"version":"eeca86e723c4dd548eaf507190e849b925fdc0788734afe84a4e5ad29ea518b6","impliedFormat":99},{"version":"cf03afdf519792b0f8bcc22c984a5521c5d192c3f46b1caee9d645dc02cc076c","impliedFormat":99},{"version":"8ef260aeed7f688a8c40f0a3480e8e4ff4c1406b0afc44544a8d0087c9f80cd2","impliedFormat":99},{"version":"1074bad4ea7a4cd8088f39ebf5169e355510089d28ee7b775ba1ee5ddbd67a2b","impliedFormat":99},{"version":"500265f07d0faf96f8b04ee1c9e0a77a8e5e1ae07b075adf58105c05db2687ac","impliedFormat":99},{"version":"5eafb802b8483ae0fda85920af0802e633178c701f631ad85db80156054a3840","impliedFormat":99},{"version":"d4326b0dc272b46b1ce13fce5b29331a705b1aaaf79c67dcd883fea74c713b81","impliedFormat":99},{"version":"41edc9dcb80ada08b64177bd4405650842e2e17f86f2ba905e5a7395b660c1f6","impliedFormat":99},{"version":"282c37fb44ceeb5bcfcf070f383314a1bc33b1c1f089f682f53e79b0bd90ce7b","impliedFormat":99},{"version":"4ecb8009aa0813b67a7c0c5994f5549b264dee7c46ed973ad5c39bcc0a26f362","impliedFormat":99},{"version":"57d5f16d751884e0a2e97ef772d1a24f256dd1b82b35397041d91baa85e4bd93","impliedFormat":99},{"version":"d5851073cd5047ff38938d853a37c2d709d68a74017bd4df1010187f44541fa2","impliedFormat":99},{"version":"af3769df4fbcac3d41dfc066a33a4b8836c6de72e7da550fc8f9a07ed5ab5ddc","impliedFormat":99},{"version":"979fa80f9aa7e1f015e0a019a28baed03f69924db612889d1899b62b4439f8b7","impliedFormat":99},{"version":"67cfa42620d86ad53914cfec05a9d8f90e43fb28fef9323275d25f6dde1d7790","impliedFormat":99},{"version":"ec5c726ce278b542cff27f8c2a507166eefcb9ae2130ba3785b1c7e168a8f2a0","impliedFormat":99},{"version":"08b4120029f17693ae31a695121c2a37fa1b7f98769aeaf4582ec7a7b25bb352","impliedFormat":99},{"version":"cc5354e745ad65d3a07f67586f85565d332db8f83ab6119616d5dcd5e57bc3fe","impliedFormat":99},{"version":"0be25ceb7bdfe3fa2597861b1c579897370ab1c936494ddb68fe55c85a07be73","impliedFormat":99},{"version":"7a1f228faa5fa5b29b96c1ad04293e310a20c22ec1b83b5adbd1ee306625ddb1","impliedFormat":99},{"version":"22d5c827159162dd95e53a3a67e0d84b61f08d549589ce83dc650ba2446e4055","impliedFormat":99},{"version":"57ab97e8e4bfe6a726c44fa4982c63713e21ebaf407c314afd4e48c235ffb96c","impliedFormat":99},{"version":"54ee6720ce787300bf050b24224405696295d9e2f3f42da366a0b62758835451","impliedFormat":99},{"version":"07c5c5f7501a8d1f5f2ec59e599420e61f8ed871c89cae97494f1b12ee3bd061","impliedFormat":99},{"version":"0d6fe3b966117b53aa6c6a32a8af28285119143a0e89782fdd2fdb0cdd324dfe","impliedFormat":99},{"version":"370004a0e6351ec211d8d18137fe40dc86a9b242fdb53e158f0e585ee434cb68","impliedFormat":99},{"version":"8aef1f2bd94f2409cc6f7f26e31648f39409ba5623032654d0e80cadfcc864cb","impliedFormat":99},{"version":"83eb2cbb1913c3adb9cbf391eacac9bb6ea2627737e4a3c0350d78bc8e1c040a","impliedFormat":99},{"version":"4401d9e598f79416073ca11228aa611d769c212f2815c97ea11f045408e1583b","impliedFormat":99},{"version":"697929cc709ce1a14bfa22637796c90de5a7deac1afc32d703aed10cd148230b","impliedFormat":99},{"version":"a96c285e78d88334d074cc966ceadc5ed67608dfac9c6626a0f800288b692ccc","impliedFormat":99},{"version":"c2bff621d611a1cc7e0cbf6f8bb2e5fd99930b159d80bfc721bd6e2f3ac1af50","impliedFormat":99},{"version":"56e9483c87ffd60f3811152a21d9704384c6539b13fef717ddbf99c5d944c330","impliedFormat":99},{"version":"5c06912ea08265c5b0b46e34ccb3c2082cd608bce26e80d9d810af2cc47fc990","impliedFormat":99},{"version":"32f816bc6d64a56503bb2398846ba92f6e058d93a57ca8dba27790b8214fc88c","impliedFormat":99},{"version":"99c9b803342e29e16248f6d03fccbc88f202c57852c4ef2f8f37407965cfbb6a","impliedFormat":99},{"version":"9057244241137ab9d0f8e7b2419d26d6b5794c063ff2a390047ab733e17a84f6","impliedFormat":99},{"version":"68a5d0c31d7f136af350c10d778043fabe5c94407495d9417fdf8e543ac277de","impliedFormat":99},{"version":"afe62de8880caa0ca0cf59e8bb37d93f6d4d19d7ee887ec9b88cc5b79c2e2cad","impliedFormat":99},{"version":"0c46d7c267ba59b302512de340f4c92b97764eafd086c5b13477fedfa953385d","impliedFormat":99},{"version":"0f2e941fbb7fa25b52f407745686b2e905ec03225af1de5285dc8113cf9f38cc","impliedFormat":99},{"version":"a12f3295a92f365c2919a9b128984c35486282b7de8f3ff81fc360b8f137aaa5","impliedFormat":99},{"version":"80b3f9c2b731626233662c38a5c4ca60a1ae28775a031d59b105672ef1a3f934","impliedFormat":99},{"version":"c326bb72f933aa18f366a29a27dfd4193749c4c077b0464bb31054134a84aa8b","impliedFormat":99},{"version":"0222992caad46191f90e9a5987e0c92ca95c5bb631f8f953e4c92b700411321e","impliedFormat":99},{"version":"fbb281974839d3fcc1fc0eb70b71f68688d9d2e3c719f7956f02ada2d03b0e2a","impliedFormat":99},{"version":"f9c21a69d044828e19f2b9e202b4fb1a1de1927fdd7e7ff0c40d4f63ebcc9b42","impliedFormat":99},{"version":"df38839fca3589013d3cd76564185ab4d19ce938593a27602cfd3e50f42424ab","impliedFormat":99},{"version":"c44f3421179cfb7ac73a38b1b9e1d5d229228327e0ede465d9d9a21c5039203d","impliedFormat":99},{"version":"b4d6ec77adcdc6728c52f2739954c7f5ae1c9598c5f0a6b8e3ae73989590e9d5","impliedFormat":99},{"version":"05718aee3a6d1193f2a4b1772a3ef60f1ebc0228a293b94c84a602fbec0ec5e0","impliedFormat":99},{"version":"b62e58a89eb8b818d7422360e5ef6f69038be1cdac57ae5fabe6f1060aa880dd","impliedFormat":99},{"version":"eb4c841c0bf793dd919904718220df9623006e90628e7e332b708239a5cd3c42","impliedFormat":99},{"version":"0dea1946e1a188dcefc1a78bd3e8d206b482bb0e34205c8bee073bcf9e9a81a8","impliedFormat":99},{"version":"57f207358f2409974d35d0c62cb39b0e2122d87f74314ac36f362a591b0eb02e","impliedFormat":99},{"version":"c9d4c7b66b4f74273a4cb6fff0b42833916c043a4cfa450a13a71ab3a261ad6c","impliedFormat":99},{"version":"943e697697e9e73676b145c331f114e733753cb920d08882f8db5faa841e0f41","impliedFormat":99},{"version":"3dc164317289da2ec08166baca1c10ca42b29fa2ea51d4b1769748c3c06d4da1","impliedFormat":99},{"version":"ca92a9ee21c608133d7c5d16e16936e072b6d48b5a7258736eacc19f76beac38","impliedFormat":99},{"version":"87d9d29dbc745f182683f63187bf3d53fd8673e5fca38ad5eaab69798ed29fbc","impliedFormat":1},{"version":"db6d9a3de83202ef18f6cabbb064362b6ec796fa5499e18e89cbbd1f22f81902","impliedFormat":99},{"version":"1bc55655e0c89b5d02451cdfd1d11595aa3b4c55ee829fe502ab352218ef6d1c","impliedFormat":99},{"version":"f8c341677219569376d0eb374bc9c8483c7d13a7d9ba7820ddd68aa188e641b6","impliedFormat":99},{"version":"6e8a8d10c8e40378dc5aa955218c5b4f374465eebc313adc4bafb69b9ad4d77d","impliedFormat":99},{"version":"51eb031a7f09d002181adb6a235a49b25995ab954e9f319b9edab0a8dc3f6e8e","impliedFormat":99},{"version":"3bc01a0f49b6a90662942f70139d9d44b8eaf2527ab95bdaf3a1a7d0383e65c2","impliedFormat":99},{"version":"1fc08a76433c326036f4b07b8eabb370f0e4b66429a17a940b2eadf82e4cd0c0","impliedFormat":99},{"version":"9d71b80f4dd663e7be4960a4b4fc48bdff4f1db34ffc9a3c01b3fa7de1ed2330","impliedFormat":99},{"version":"42670fd2d98fce7eaa84ddb1ba6a2bb6015df92db527913f869eb545d94e60f6","impliedFormat":99},{"version":"dcc306d9e63904256ba262f23cfa59fbfcef86f4caeb88835146164ca2a19bc3","impliedFormat":99},{"version":"18cee427b1962391970a74a31bbd4c150ab4bea0118dfa0ce9722fa276f1530b","impliedFormat":99},{"version":"d53ce1daa4010a2195a1710b2da24e464afc8f8b8dbe976ef3626a5a53e3042c","impliedFormat":99},{"version":"1ce643fded91c3a62f16ba0c7f5e607f68d5792a0282c57019aa64ce61df5c05","impliedFormat":99},{"version":"08b9b1b7f590e2b9dce12e29ef7cc0b0257a1aaea8d0fc2cd88233e36f716d5f","impliedFormat":99},{"version":"1e9201bf6f6968b3a2e05fa337b2d824a9de4f8a4fabb43d3a39def1bacc40b9","impliedFormat":99},{"version":"6a2b97a8d4f8d77bfde0ad800d2ca49f274fa0e25036645345168f033a8b559e","impliedFormat":99},{"version":"676ecc05abaf7e2a33686da7f5a998a8812fde2b4b42cb756b8ee63ef22dad55","impliedFormat":99},{"version":"cca1205cd000d7a9a19dda43d3bd5079ed8d70f81ad1f7d3912d2c4d68c19bcc","impliedFormat":99},{"version":"e98020ecd0cca8549262c22e1e566e35232e038650ab9dec76c4d9c343cd22c0","impliedFormat":99},{"version":"ca747835676df2aa94222860024b77a548e1c1507c3c4fafc25f2d92973f1c19","impliedFormat":99},{"version":"c024e4c849cbd9492e428f6f686d5d47c13f8b1978856abc0b11b758d26469d2","impliedFormat":99},{"version":"c392ac93c5e068db0465a6657921c5e7f191abd0b437b4a9c2adc36da94b0c74","impliedFormat":99},{"version":"479d563dabfecd2b14d7ec2537d3511c20d2a3440296fef7196edbb8b494d3dd","impliedFormat":99},{"version":"322131ab9e1654f5213c906962bc32778f54e7d535e82e2230b852d319ae8621","impliedFormat":99},{"version":"6f7065ce4d734d131e3d2c01210d511cff0e5fae015c31482b320a834825c448","impliedFormat":99},{"version":"247b3b8c56f8371ada220c9a9f6add3dfc4fdd2b9071bedb5ed419ea10940452","impliedFormat":99},{"version":"4a76d4e462ed14f907f9481cefebe4ceab9ac5c5b3aa4385c345d8a9f4cda619","impliedFormat":99},{"version":"b1f0deff4fe7bf2f0cb9c21e20be987cbb795315dcadac0b68d9e76c95966ca9","impliedFormat":99},{"version":"0215e7d5a64add35e3b4299938382992b0fc30dd2831ff5ecbb8921a292c0bcc","impliedFormat":99},{"version":"eb97b7250139e59ed75255aef10fc86db69cd581bde7e22e6489b0b040f4c6e4","impliedFormat":99},{"version":"8b2c52cb91dcde62bbfa05daf76ba4da979808cd0e689320fc9762376b4ac6c3","impliedFormat":99},{"version":"9eb7631a1e210d6b0909ffc776eade0f1a70008574cbf9c3649168028bc563f1","impliedFormat":99},{"version":"6b88fe55b86bc79c7520b2679c7986923c71a5bc33854175955e31b5b9e6038b","impliedFormat":99},{"version":"069e31ae523cb318e9aae15f78260447ccd27bffa5f319f56489c0a416490eb0","impliedFormat":99},{"version":"1ff0faca356af9440189026e7ead9f4461af4109fff62c9508b8c0ed9a49ce68","impliedFormat":99},{"version":"0bcf85264f800550fdc97d3cb0ff2f8f7d75a943e01c6c15ec377f4b51bb5f02","impliedFormat":99},{"version":"b4f4fc24849f8b8f21fd31bc16d4057ef33af97e8e3cd57b247399ca506152cc","impliedFormat":99},{"version":"dcf64894451cde209d632119dec1e8fce24e4904b284b940d90435a92a2c6385","impliedFormat":99},{"version":"5aeb99822fa7426946e3a084fe3b60cf8d62b9a22399e3991be0826bf8928b8d","impliedFormat":99},{"version":"780b7574ff647f7592572ac6bebe44d9e44eeae680224a72c83f6df38ba57bbb","impliedFormat":99},{"version":"68f1a4ec2937052ae0dd18407eb8d1b579708970ced79c6e7cfe4a93d0a00385","impliedFormat":99},{"version":"efe0fabfc89403ce6a4a8b1fe3a7633f1161b7e10d9824299560f2d15e4e606e","impliedFormat":99},{"version":"7967fa7a9f6773b95983f48e97e7035febdf1d68e9d6d076e21ea2616c206356","impliedFormat":99},{"version":"d66c9477be46879e98232cd61bbc6f9b7f34d21c57d252b3c6ce626c3497386a","impliedFormat":99},{"version":"39fdb2b6872a2169add72f5d44f397ea69374ea938c5343229e108f007253bf8","impliedFormat":99},{"version":"e765f9158b9a795c34082f712bf8f3f2889b70ffdcf28fb99337a3d00a106d75","impliedFormat":99},{"version":"4c4cd7a14fe65ee08a34e47c43850496cc8ae8e7cc89ec8a2c8458ac4038ee4a","impliedFormat":99},{"version":"5d5e263808e7c276dd788f1a6ad27f227fd41741346dfa56c70dbe38f9fe6151","impliedFormat":99},{"version":"8fe0e21455b63cfd4d5450b7e62b6d6c6f89898fa061bb5984b80cd23efd6926","impliedFormat":99},{"version":"ef7c9468b5a48fa6b69b344224a00b9208ee59133e201e1e97a16c77863ab9af","impliedFormat":99},{"version":"6328ab8645c1d5bb6e8a6842d7948b10f2f3f604a3bb9d3a128323dcb6488d27","impliedFormat":99},{"version":"5939c650a5699e4c1b3afa330ada69d3e34ecf0217f2b4e75af7cee9077a2060","impliedFormat":99},{"version":"8f2dd4412647aea2f4051ec8b633ab31d777c9b818fc13ddb2b4bd3f14c6ab15","impliedFormat":99},{"version":"064565a078082e3aa9e5a010b02965db3dce768e6bd125fa86d51eafd8af6b37","impliedFormat":99},{"version":"5dda0fdf62bcaa5710d1ccd97adea53f875e01e854995e55488256ecba4f84a8","impliedFormat":99},{"version":"57c99c92a7d6b1874c36afbfc38f0a69f40821cb8e5a4c1fc949ab2d0ed9dc48","impliedFormat":99},{"version":"bf0b1e6c1bb4930244203a593c6db7aed456e635c31aba73ee2102c55998861f","impliedFormat":99},{"version":"684fed66904651fd676b78ec044da251651f4dfaedb163df74b2280013d5cd5f","impliedFormat":99},{"version":"1cad8abbc5f25133dea041deb44aa979498ee0b66e1ddc3d00f299e3629d4d6f","impliedFormat":99},{"version":"54dfbe6b81ce997409cc2c0bc37f492eeca1130ad5025e5b9148e857a8e34478","impliedFormat":99},{"version":"4bb6f54e837a952382d05afe37f3fea393c3908b14223cef578b882b00e9b31a","impliedFormat":99},{"version":"f7b3b183e6fbd30930c3e6bf7ce1953433c5cfce3142e1f0247fc4c6c26c5535","impliedFormat":99},{"version":"53c0d5e4b66e6f7fec9b79c3f776b85cd6be1e1d5d62bf57c63ecfde794ec6a5","impliedFormat":99},{"version":"7764e57eda6746e2ddab9b085a0fcb35d2c8ecee5d36759ae21c29038014a824","impliedFormat":99},{"version":"c3bd90fd93652ea125e8ba975bbd68d17f88ccacd0abd408fc2c64d1331a19cc","impliedFormat":99},{"version":"80e2f6580bb45d179d283cfac2863e94ad87c2ddce90e33dfab141ac4115379a","impliedFormat":99},{"version":"ba4896bb93b1a967f9a9797c3d91fd2b771c448f09249757fc0f1dab95277c3d","impliedFormat":99},{"version":"c3ce2db820d63c84554c94c5f929ef7786a4e4a7d61db6fac09bf2e85243e51a","impliedFormat":99},{"version":"8dfeb49bc8ac66938f09bc428ad4285975421bd18558604f0e098932dce8f9da","impliedFormat":99},{"version":"2a0a0bf2a808db87282cb77ff6a339d483dae129a64389ddb389cf0bb85c9f74","impliedFormat":99},{"version":"5d27a5d59ac05633bb38b263a713c2a2b15050dd6037f57efe7b897968778fb8","impliedFormat":99},{"version":"e61ec63942cec5365c27d711a3e47f0189aa2e8dff000f806a91e0a77aa36c10","impliedFormat":99},{"version":"7b2796b494c5aace1320946b2ae40cb3858e5a84f067ae978367680c200e8feb","signature":"379b9c1b11d5deb1dceb75f6e77645ee55030af49f711285a6776af42073d1a9"},{"version":"ca842ee17e1574ca9291a751548e5cac18d902cd22626a634f2d4a6db86ccf63","signature":"12e21893ba6e93e9e7b943afdf0055fa73d468d757d59dedf08fc841173c5549"},{"version":"d6056b480feb3370ff004ca083aed2b9dd36b391fc3cef6da7038574bcdb5577","impliedFormat":99},{"version":"d00b7ef279b5e11236738e99e985ced45d75dbf417eab19110519d7fcf029be9","impliedFormat":99},{"version":"cbd4996dba152cde384c9e93265b1a23e485ef14d8f9581549052b32b4fb1647","signature":"aba182e0f6f689f17e026b621bea22da9ccd069517c236d120cf58455066c47d"},{"version":"1a841d7acc4a736bf4d74db46f2661ba722d8f55bc9de5a93be488958ca48b79","signature":"ad8962648c9068c2113d8ee601c1f157c1d103a30a77a1405aa2080c948ca368"},{"version":"a27f6ce98597d2a0465d407f1931db402ba46621d763f37aff3071294aae994e","signature":"79792f2a09661386ded854a7d1a69105ee478fc1ede966113be4a93261ede0ee"},{"version":"9f91a7fe3f70abb9d374bdf2be3257d16712fd509bc48aed7f255ce14808d891","signature":"7e462f9cb43fce4fcd962322c25d06be821c527ffbfd339e556b65dda15bfd52"},{"version":"fac8d5f456df5f49e99736537ea4fc588962856cdfa7b7a447cf1a33fc22f354","signature":"40e28f24e9fc14e2710cedfa2fca904ea265ef111fd51146f685b0c6bf6b1e80"},{"version":"638d6e12e70d7d0715dc052969ed633927f6715335c475f20b4030d0cef64621","signature":"7443bc5788fae7f61dfccb6bb6be4555b866934a7f1d2f801172c2c46bf76d2c"},{"version":"8b6824a01148a5f0b9bac41612d43495cb082b3a8cc2b1f14ea33298d6ac00b8","impliedFormat":99},{"version":"4908557bd4f7cd90434fe34442f72796506336555a30cc9d3bb3e979a0027295","signature":"57be19115aa06a1c9a717d2cc2f25e5610623a2a2c8b161f7ec66dadc80dc3b8"},{"version":"4a259aef1287e087ede2b30368a533da9b7300818a4131515e92ea2882f8416f","signature":"070e8e28261290ec2a5c9fe38206da2cc12fa777e63eb6c52ed91c9283c10a74"},{"version":"e8c62c39c8d15b481db93945b0a559d585858da05e3c5777e05bcf906e25dceb","signature":"63c85adf04dc886f22f2ac162dc6178d3f82066d481f8fd0d3cc94430644d8ef"},{"version":"ff49601de36b628d8c3dd7bc27483c40a3654b2ba9c5b87038252db121436b7e","signature":"2ed6561148df5e57cb41e95fab5366c2d0e5fcacacd27a3c51874c867cbbe087"},{"version":"8b6824a01148a5f0b9bac41612d43495cb082b3a8cc2b1f14ea33298d6ac00b8","impliedFormat":99},{"version":"12cc03a5209f532ba93c00092bc5786556bfd84753469762e791504699092215","signature":"40e104c1586d64f72727f4c1c18bd8867212d98f52d79275eed127b373af991d"},{"version":"92c3e5e43fd1db7865779971d0e39f3111d07916cd95bbba2dbc6157250494d2","signature":"cc935566d7fd91512f61594f3f9076156de40aae1d51c986ff2ec119ee42e562"},{"version":"3f1411bfc3ca1b5e15653741109a3bbc1ba475b71617a38105f45a857b04d201","signature":"eff13554ef964d398e37504f08f5c4aa047aa4f483e97b2ff3b3b5c6cc3f6e59"},{"version":"d5acf521eb9ea12709a1e4c547b7483717ed9ceff1366bfa7313415b57a17c78","signature":"b7bb6099cbd37bee98fe97762f22a3234dc0da2355e2954df0370ced746cb6d5"},{"version":"8b6824a01148a5f0b9bac41612d43495cb082b3a8cc2b1f14ea33298d6ac00b8","impliedFormat":99},{"version":"8b6824a01148a5f0b9bac41612d43495cb082b3a8cc2b1f14ea33298d6ac00b8","impliedFormat":99},{"version":"8b6824a01148a5f0b9bac41612d43495cb082b3a8cc2b1f14ea33298d6ac00b8","impliedFormat":99},{"version":"27cd0f8dfd3a2f30ea901f60f0fd0ef08940148a244c968fdf1a5def892959a2","signature":"a0353c9ba9ddeb5fa295ecb4a88c0821b238163c59f48b245c880da784f4db62"},{"version":"73aa47233e2b9f5903ce30da493cee6682499a7df115743cb587bf8200893608","signature":"7b5b8e1aec61908cd910ba61eeafabe4507b461fcf57583717341f180798f9a9"},{"version":"0419716e547d33203a0acad780f138d3c54066e0bc74639956f046335371f843","signature":"3f1a836f256efd515d778831a3c41334f30cd2b44a2fd5c155003eb7d53c7381"},{"version":"91356ed3d0e45ed31a42e3d44f1d50e389e006ed5830c7560d9f808886f858fb","signature":"4fbd4cdfd143fc318642ed25f00b998ad01f54852ba13ee6a2068e3aefe6060d"},{"version":"54ec3d87608f25540f4d9836d2501cd0bba23e5179b9869687aca3c7f2a96a71","signature":"cadb7b5f3fcf1ea4138da4a554a5197039da0d120fad5ac304030b8cb86bf7b2"},{"version":"365bbad7ca63d37bef3f7e4505786ea208352ad798ca357c7488392eafefaaa5","signature":"cc96ba3bc4552a9e2064d89c29d67c7fb7c0e42fa24450d783e54ad6b9883ec5"}],"root":[496,525,526,[533,552],1246,1247,[1250,1255],[1257,1260],[1262,1265],[1269,1274]],"options":{"allowJs":false,"esModuleInterop":true,"jsx":4,"module":99,"skipLibCheck":true,"strict":true,"target":7},"referencedMap":[[1250,1],[1251,2],[1257,3],[538,4],[1258,5],[1259,6],[1260,7],[540,8],[1262,9],[1263,10],[1252,11],[542,12],[1264,13],[1265,14],[1254,15],[1253,16],[1255,17],[545,18],[1270,19],[1269,20],[547,21],[1272,22],[1271,23],[548,24],[1274,25],[1273,26],[549,27],[550,27],[1247,28],[1246,29],[496,30],[531,31],[530,32],[513,33],[522,34],[519,35],[517,36],[498,37],[497,34],[518,38],[501,38],[516,39],[503,40],[514,41],[499,34],[506,42],[509,43],[512,44],[508,45],[510,46],[507,34],[511,33],[515,47],[502,34],[583,48],[582,34],[585,49],[584,50],[595,51],[588,52],[596,53],[593,51],[597,54],[591,51],[592,55],[594,56],[590,57],[589,58],[598,59],[586,60],[587,61],[577,34],[578,62],[601,63],[599,64],[600,65],[603,66],[602,67],[580,68],[579,69],[581,70],[1266,71],[1268,71],[1256,71],[1267,71],[1261,71],[887,72],[886,34],[888,73],[881,74],[880,34],[882,75],[884,76],[883,34],[885,77],[890,78],[889,34],[891,79],[741,80],[738,34],[742,81],[747,82],[746,34],[748,83],[750,84],[749,34],[751,85],[784,86],[783,34],[785,87],[787,88],[786,34],[788,89],[790,90],[789,34],[791,91],[797,92],[796,34],[798,93],[800,94],[799,34],[801,95],[806,96],[805,34],[807,97],[803,98],[802,34],[804,99],[1213,100],[1214,34],[1215,101],[809,102],[808,34],[810,103],[817,104],[816,34],[818,105],[730,106],[729,34],[731,107],[728,108],[727,34],[812,109],[814,64],[811,34],[813,110],[815,111],[835,112],[834,34],[836,113],[820,114],[819,34],[821,115],[823,116],[822,34],[824,117],[826,118],[825,34],[827,119],[829,120],[828,34],[830,121],[832,122],[831,34],[833,123],[840,124],[839,34],[841,125],[753,126],[752,34],[754,127],[843,128],[842,34],[844,129],[1034,64],[1035,130],[846,131],[845,34],[847,132],[553,34],[554,34],[555,34],[556,34],[557,34],[558,34],[559,34],[560,34],[561,34],[562,34],[573,133],[563,34],[564,34],[565,34],[566,34],[567,34],[568,34],[569,34],[570,34],[571,34],[572,34],[849,134],[848,135],[850,136],[851,137],[852,138],[1216,34],[867,139],[866,34],[868,140],[854,141],[853,34],[855,142],[857,143],[856,34],[858,144],[860,145],[859,34],[861,146],[870,147],[869,34],[871,148],[873,149],[872,34],[874,150],[878,151],[877,34],[879,152],[893,153],[892,34],[894,154],[794,155],[795,156],[899,157],[898,34],[900,158],[905,159],[904,34],[906,160],[908,161],[907,162],[902,163],[901,34],[903,164],[910,165],[909,34],[911,166],[913,167],[912,34],[914,168],[916,169],[915,34],[917,170],[1236,171],[1239,172],[1229,173],[1230,174],[921,175],[922,34],[923,176],[919,177],[918,34],[920,178],[1217,155],[1218,179],[925,180],[924,34],[926,181],[733,182],[732,34],[734,183],[928,184],[927,34],[929,185],[934,186],[933,34],[935,187],[931,188],[930,34],[932,189],[1245,190],[1244,191],[1243,64],[944,192],[943,193],[942,34],[938,194],[937,195],[936,34],[897,196],[896,197],[895,34],[941,198],[940,199],[939,34],[726,200],[838,201],[837,34],[947,202],[946,203],[945,34],[950,204],[949,205],[948,34],[971,206],[970,207],[969,34],[959,208],[958,209],[957,34],[953,210],[952,211],[951,34],[962,212],[961,213],[960,34],[956,214],[955,215],[954,34],[965,216],[964,217],[963,34],[968,218],[967,219],[966,34],[974,220],[973,221],[972,34],[985,222],[984,223],[983,34],[977,224],[976,225],[975,34],[979,226],[978,227],[988,228],[987,229],[986,34],[865,230],[864,231],[863,34],[862,34],[992,232],[991,233],[990,34],[989,234],[1221,235],[1220,236],[1219,64],[996,237],[995,238],[994,34],[722,239],[1000,240],[999,241],[998,34],[1003,242],[1002,243],[1001,34],[737,244],[736,245],[735,34],[982,246],[981,247],[980,34],[777,248],[780,249],[778,250],[779,34],[775,251],[774,252],[773,64],[1011,253],[1010,254],[1009,34],[1008,255],[1004,256],[1007,257],[1005,64],[1006,258],[1014,259],[1013,260],[1012,34],[1017,261],[1016,262],[1015,34],[1021,263],[1020,264],[1019,34],[1018,265],[1024,266],[1023,267],[1022,34],[876,268],[875,155],[1030,269],[1029,270],[1028,34],[1027,271],[1026,34],[1025,64],[1038,272],[1037,273],[1036,34],[1033,274],[1032,275],[1031,34],[1042,276],[1041,277],[1040,34],[1048,278],[1047,279],[1046,34],[1051,280],[1050,281],[1049,34],[1054,282],[1052,283],[1053,135],[1077,284],[1075,285],[1074,34],[1076,64],[1057,286],[1056,287],[1055,34],[1060,288],[1059,289],[1058,34],[1063,290],[1062,291],[1061,34],[1066,292],[1065,293],[1064,34],[1069,294],[1068,295],[1067,34],[1073,296],[1071,297],[1070,34],[1072,64],[1141,298],[1137,299],[1142,300],[718,301],[576,34],[1143,34],[1140,302],[721,303],[1138,304],[1139,305],[717,34],[719,306],[1152,307],[1159,34],[1157,34],[575,34],[1160,308],[1153,34],[1135,309],[1134,310],[1144,311],[1149,34],[716,34],[1158,34],[1148,34],[1150,312],[1151,313],[1156,314],[1146,315],[1147,316],[1136,317],[1154,34],[1155,34],[720,34],[725,318],[724,319],[723,34],[1079,320],[1078,321],[1082,322],[1081,323],[1080,34],[1118,324],[1117,325],[1116,34],[1106,326],[1105,327],[1104,34],[1085,328],[1084,329],[1083,34],[1088,330],[1087,331],[1086,34],[1091,332],[1090,333],[1089,34],[1115,334],[1114,335],[1113,34],[1094,336],[1093,337],[1092,34],[1103,338],[1102,339],[1098,34],[1097,340],[1095,341],[1096,34],[1109,342],[1108,343],[1107,34],[1112,344],[1111,345],[1110,34],[1124,346],[1123,347],[1122,34],[1121,348],[1120,349],[1119,34],[1224,350],[1223,351],[1222,64],[1127,352],[1126,353],[1125,34],[1130,354],[1129,355],[1128,34],[1133,356],[1132,357],[1131,34],[1101,358],[1100,359],[1099,34],[1045,360],[1044,361],[1043,34],[1039,362],[793,363],[745,364],[744,365],[743,34],[1241,366],[1240,64],[1242,367],[782,368],[781,369],[993,370],[997,64],[1226,371],[1225,34],[1165,372],[1168,373],[1169,71],[1172,374],[1176,375],[1212,376],[1179,377],[1180,378],[1211,379],[1183,380],[1186,381],[776,369],[1189,382],[1192,383],[740,384],[1201,385],[1204,386],[1195,387],[1207,388],[1210,389],[1198,390],[1231,34],[1228,391],[1227,155],[650,34],[655,392],[652,393],[651,394],[654,395],[653,394],[606,396],[607,397],[608,398],[605,399],[604,64],[611,400],[612,401],[660,402],[661,34],[662,403],[628,404],[629,405],[678,34],[679,406],[630,400],[631,407],[700,408],[697,34],[698,409],[699,410],[701,411],[663,412],[664,413],[613,414],[1145,415],[665,416],[666,417],[623,418],[615,34],[626,419],[627,420],[614,34],[624,415],[625,421],[636,400],[637,422],[687,423],[690,424],[693,34],[694,34],[691,34],[692,425],[685,34],[688,34],[689,34],[686,426],[632,400],[633,427],[634,400],[635,428],[648,34],[649,429],[656,430],[657,431],[704,432],[703,433],[705,34],[707,434],[702,435],[708,436],[706,415],[715,437],[684,438],[683,64],[682,418],[639,439],[638,400],[641,440],[640,400],[696,441],[695,34],[643,442],[642,400],[645,443],[644,400],[659,444],[658,400],[711,445],[713,446],[710,447],[712,34],[709,435],[610,448],[609,418],[668,449],[667,450],[617,451],[621,400],[620,452],[622,453],[618,454],[616,454],[619,455],[681,456],[680,457],[647,458],[646,400],[677,459],[676,34],[673,460],[672,461],[670,34],[671,462],[669,34],[675,463],[674,34],[714,34],[574,64],[1163,34],[1164,464],[1161,34],[1162,465],[1232,34],[1233,466],[1166,34],[1167,467],[1170,34],[1171,468],[1174,469],[1175,470],[1234,34],[1235,471],[1237,34],[1238,472],[1178,473],[1177,34],[1182,474],[1181,34],[1185,475],[1184,34],[1188,476],[1187,477],[1191,478],[1190,64],[739,64],[1200,479],[1199,34],[1203,480],[1202,64],[1194,481],[1193,64],[1206,482],[1205,34],[1209,483],[1208,64],[1197,484],[1196,34],[255,34],[772,485],[768,486],[755,34],[771,487],[764,488],[762,489],[761,489],[760,488],[757,489],[758,488],[766,490],[759,489],[756,488],[763,489],[769,491],[770,492],[765,493],[767,489],[532,494],[529,34],[125,495],[126,495],[127,496],[73,497],[128,498],[129,499],[130,500],[71,34],[131,501],[132,502],[133,503],[134,504],[135,505],[136,506],[137,506],[138,507],[139,508],[140,509],[141,510],[74,34],[72,34],[142,511],[143,512],[144,513],[178,514],[145,515],[146,34],[147,516],[148,517],[149,518],[150,519],[151,520],[152,521],[153,522],[154,523],[155,524],[156,524],[157,525],[158,34],[159,526],[160,527],[162,528],[161,529],[163,530],[164,531],[165,532],[166,533],[167,534],[168,535],[169,536],[170,537],[171,538],[172,539],[173,540],[174,541],[175,542],[75,34],[76,543],[77,34],[78,34],[121,544],[122,545],[123,34],[124,530],[176,546],[177,547],[1173,34],[182,548],[401,64],[183,549],[181,550],[403,551],[402,552],[792,64],[179,553],[399,34],[180,554],[62,34],[64,555],[398,64],[272,64],[528,556],[527,34],[79,34],[63,34],[523,557],[1248,558],[521,559],[520,560],[524,561],[1249,562],[444,563],[449,564],[439,565],[221,566],[259,567],[426,568],[254,569],[236,34],[214,34],[219,34],[416,570],[285,571],[220,34],[213,572],[262,573],[263,574],[397,575],[413,576],[309,577],[420,578],[421,579],[419,580],[418,34],[417,581],[261,582],[222,583],[352,34],[353,584],[245,585],[223,586],[290,585],[287,585],[192,585],[257,587],[256,34],[425,588],[435,34],[199,34],[374,589],[375,590],[369,64],[472,34],[377,34],[378,591],[370,592],[477,593],[476,594],[471,34],[468,34],[412,595],[411,34],[470,596],[371,64],[211,597],[200,598],[203,34],[208,34],[209,599],[202,600],[206,600],[205,601],[210,602],[473,34],[469,34],[475,603],[474,34],[201,604],[463,605],[466,606],[297,607],[296,608],[207,609],[295,610],[480,64],[294,611],[279,34],[483,34],[486,34],[485,64],[487,612],[185,34],[422,613],[423,614],[424,615],[198,34],[247,34],[197,616],[184,34],[390,64],[190,617],[389,618],[388,619],[379,34],[380,34],[387,34],[382,34],[385,620],[381,34],[383,621],[386,622],[384,621],[218,34],[195,34],[196,585],[267,34],[273,623],[274,624],[271,625],[269,626],[270,627],[265,34],[395,591],[312,591],[443,628],[450,629],[454,630],[429,631],[428,34],[282,34],[488,632],[438,633],[372,634],[373,635],[367,636],[358,34],[394,637],[359,638],[396,639],[392,640],[391,34],[393,34],[364,34],[351,641],[430,642],[431,643],[361,644],[365,645],[356,646],[408,647],[437,648],[289,649],[328,650],[193,651],[436,652],[189,653],[275,654],[266,34],[276,655],[340,656],[264,34],[339,657],[70,34],[333,658],[246,34],[354,659],[329,34],[194,34],[240,34],[337,660],[217,34],[277,661],[363,662],[427,663],[362,34],[336,34],[268,34],[342,664],[343,665],[215,34],[345,666],[347,667],[346,668],[249,34],[335,651],[349,669],[334,670],[341,671],[225,34],[229,34],[228,34],[227,34],[232,34],[226,34],[234,34],[231,34],[230,34],[233,34],[235,672],[224,34],[321,673],[320,34],[326,674],[322,675],[325,676],[324,676],[327,674],[323,675],[244,677],[313,678],[434,679],[489,34],[458,680],[460,681],[360,682],[459,683],[432,642],[376,642],[216,34],[314,684],[241,685],[242,686],[243,687],[239,688],[407,688],[291,688],[315,689],[292,689],[238,690],[237,34],[319,691],[318,692],[317,693],[316,694],[433,695],[406,696],[405,697],[368,698],[400,699],[404,700],[415,701],[414,702],[410,703],[308,704],[310,705],[307,706],[348,707],[338,34],[448,34],[350,708],[409,34],[278,709],[357,613],[355,710],[280,711],[283,712],[484,34],[281,713],[284,713],[446,34],[445,34],[447,34],[482,34],[286,714],[305,715],[212,716],[260,34],[188,717],[311,34],[452,64],[187,34],[462,718],[304,64],[456,591],[303,719],[441,720],[302,718],[191,34],[464,721],[300,64],[301,64],[293,34],[186,34],[299,722],[298,723],[248,724],[366,523],[288,523],[344,34],[331,725],[330,34],[204,604],[306,64],[442,726],[65,64],[68,727],[69,728],[66,64],[67,34],[258,543],[253,729],[252,34],[251,730],[250,34],[440,731],[451,732],[453,733],[455,734],[457,735],[461,736],[495,737],[465,737],[494,738],[467,739],[478,740],[479,741],[481,742],[490,743],[493,616],[492,34],[491,744],[500,34],[505,745],[504,746],[332,747],[60,34],[61,34],[10,34],[11,34],[13,34],[12,34],[2,34],[14,34],[15,34],[16,34],[17,34],[18,34],[19,34],[20,34],[21,34],[3,34],[22,34],[23,34],[4,34],[24,34],[28,34],[25,34],[26,34],[27,34],[29,34],[30,34],[31,34],[5,34],[32,34],[33,34],[34,34],[35,34],[6,34],[39,34],[36,34],[37,34],[38,34],[40,34],[7,34],[41,34],[46,34],[47,34],[42,34],[43,34],[44,34],[45,34],[8,34],[51,34],[48,34],[49,34],[50,34],[52,34],[9,34],[53,34],[54,34],[55,34],[57,34],[56,34],[1,34],[58,34],[59,34],[97,748],[109,749],[95,750],[110,751],[119,752],[86,753],[87,754],[85,755],[118,744],[113,756],[117,757],[89,758],[106,759],[88,760],[116,761],[83,762],[84,756],[90,763],[91,34],[96,764],[94,763],[81,765],[120,766],[111,767],[100,768],[99,763],[101,769],[104,770],[98,771],[102,772],[114,744],[92,773],[93,774],[105,775],[82,751],[108,776],[107,763],[103,777],[112,34],[80,34],[115,778],[543,779],[534,780],[526,781],[536,782],[525,783],[533,784],[537,785],[551,780],[539,786],[541,786],[544,786],[546,786],[552,780],[535,780]],"affectedFilesPendingEmit":[1250,1251,1257,538,1258,1259,1260,540,1262,1263,1252,542,1264,1265,1254,1253,1255,545,1270,1269,547,1272,1271,548,1274,1273,549,550,1247,1246,543,534,526,536,525,533,537,551,539,541,544,546,552,535],"version":"5.9.3"} \ No newline at end of file