From ce4ed5b11672024b24c5cfb3eeb09857f1f3ec8a Mon Sep 17 00:00:00 2001 From: Luis Centeno Date: Tue, 27 Oct 2026 15:40:10 -0600 Subject: [PATCH 1/6] Migrate static site from Next.js to Astro --- .dockerignore | 3 + .gitignore | 5 +- .vscode/tasks.json | 14 +- ASTRO_MIGRATION_PLAN.md | 1146 +++++++++++++++++ Dockerfile | 2 +- README.md | 27 +- astro.config.mjs | 12 + bun.lock | 841 ++++++++---- components/navbar/index.jsx | 77 -- components/seo/index.jsx | 41 - eslint.config.mjs | 69 +- hooks/index.js | 3 - hooks/useWindowSize.js | 32 - jsconfig.json | 12 + layouts/main-layout/index.jsx | 15 - layouts/project-layout/index.jsx | 39 - next-sitemap.config.js | 6 - next.config.js | 12 - nginx/default.conf | 30 +- package.json | 26 +- pages/_app.js | 20 - pages/index.jsx | 39 - pages/privacy.jsx | 62 - pages/projects/[slug].jsx | 28 - pages/projects/index.jsx | 40 - .nojekyll => public/.nojekyll | 0 public/vercel.svg | 4 - .../components}/about-me-box/index.jsx | 0 .../components}/dev-icon/index.jsx | 34 +- .../components}/github-button/index.jsx | 9 +- src/components/navbar/Navbar.astro | 91 ++ .../components}/profile-box/index.jsx | 5 +- .../components}/project-card/index.jsx | 17 +- .../components}/projects-box/index.jsx | 11 +- .../components}/timeline/index.jsx | 1 - .../components}/timeline/row.jsx | 1 - .../components}/work-experience/index.jsx | 1 - {data => src/data}/index.js | 1 + {data => src/data}/profile.json | 0 {data => src/data}/projects.json | 0 {data => src/data}/work-experience.json | 0 src/layouts/BaseLayout.astro | 58 + src/layouts/ProjectLayout.astro | 35 + src/pages/404.astro | 16 + src/pages/index.astro | 34 + src/pages/privacy.astro | 66 + src/pages/projects/[slug].astro | 15 + src/pages/projects/index.astro | 33 + src/pages/robots.txt.ts | 11 + .../styles}/components/_components.scss | 0 .../styles}/components/_navbar.scss | 0 .../styles}/components/_profile-box.scss | 0 .../styles}/components/_project-card.scss | 0 .../styles}/components/_timeline.scss | 0 {styles => src/styles}/globals.scss | 2 - {styles => src/styles}/pages/_home.scss | 0 {styles => src/styles}/pages/_pages.scss | 0 {styles => src/styles}/pages/_privacy.scss | 0 {styles => src/styles}/pages/_project.scss | 0 src/utils/getProjectContent.js | 21 + src/utils/getProjectData.js | 19 + src/utils/index.js | 5 + {utils => src/utils}/markdownFetch.js | 0 utils/getProjectContent.js | 17 - utils/getProjectStaticProps.js | 16 - utils/index.js | 5 - 66 files changed, 2329 insertions(+), 800 deletions(-) create mode 100644 ASTRO_MIGRATION_PLAN.md create mode 100644 astro.config.mjs delete mode 100644 components/navbar/index.jsx delete mode 100644 components/seo/index.jsx delete mode 100644 hooks/index.js delete mode 100644 hooks/useWindowSize.js create mode 100644 jsconfig.json delete mode 100644 layouts/main-layout/index.jsx delete mode 100644 layouts/project-layout/index.jsx delete mode 100644 next-sitemap.config.js delete mode 100644 next.config.js delete mode 100644 pages/_app.js delete mode 100644 pages/index.jsx delete mode 100644 pages/privacy.jsx delete mode 100644 pages/projects/[slug].jsx delete mode 100644 pages/projects/index.jsx rename .nojekyll => public/.nojekyll (100%) delete mode 100644 public/vercel.svg rename {components => src/components}/about-me-box/index.jsx (100%) rename {components => src/components}/dev-icon/index.jsx (53%) rename {components => src/components}/github-button/index.jsx (74%) create mode 100644 src/components/navbar/Navbar.astro rename {components => src/components}/profile-box/index.jsx (91%) rename {components => src/components}/project-card/index.jsx (84%) rename {components => src/components}/projects-box/index.jsx (86%) rename {components => src/components}/timeline/index.jsx (94%) rename {components => src/components}/timeline/row.jsx (98%) rename {components => src/components}/work-experience/index.jsx (94%) rename {data => src/data}/index.js (98%) rename {data => src/data}/profile.json (100%) rename {data => src/data}/projects.json (100%) rename {data => src/data}/work-experience.json (100%) create mode 100644 src/layouts/BaseLayout.astro create mode 100644 src/layouts/ProjectLayout.astro create mode 100644 src/pages/404.astro create mode 100644 src/pages/index.astro create mode 100644 src/pages/privacy.astro create mode 100644 src/pages/projects/[slug].astro create mode 100644 src/pages/projects/index.astro create mode 100644 src/pages/robots.txt.ts rename {styles => src/styles}/components/_components.scss (100%) rename {styles => src/styles}/components/_navbar.scss (100%) rename {styles => src/styles}/components/_profile-box.scss (100%) rename {styles => src/styles}/components/_project-card.scss (100%) rename {styles => src/styles}/components/_timeline.scss (100%) rename {styles => src/styles}/globals.scss (92%) rename {styles => src/styles}/pages/_home.scss (100%) rename {styles => src/styles}/pages/_pages.scss (100%) rename {styles => src/styles}/pages/_privacy.scss (100%) rename {styles => src/styles}/pages/_project.scss (100%) create mode 100644 src/utils/getProjectContent.js create mode 100644 src/utils/getProjectData.js create mode 100644 src/utils/index.js rename {utils => src/utils}/markdownFetch.js (100%) delete mode 100644 utils/getProjectContent.js delete mode 100644 utils/getProjectStaticProps.js delete mode 100644 utils/index.js diff --git a/.dockerignore b/.dockerignore index 1cf953f..e361b95 100644 --- a/.dockerignore +++ b/.dockerignore @@ -3,5 +3,8 @@ node_modules .next out +dist +.astro .vscode README.md +ASTRO_MIGRATION_PLAN.md diff --git a/.gitignore b/.gitignore index e28f1e1..1b01cfc 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,9 @@ # next.js /.next/ /out/ + +# astro +/.astro/ /dist/ # production @@ -32,4 +35,4 @@ yarn-error.log* .env.production.local # vercel -.vercel \ No newline at end of file +.vercel diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 58dd450..59a69db 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -4,8 +4,16 @@ "version": "2.0.0", "tasks": [ { - "label": "serve", - "command": "bundle exec jekyll serve" + "label": "dev", + "type": "shell", + "command": "bun run dev", + "problemMatcher": [] + }, + { + "label": "build", + "type": "shell", + "command": "bun run build", + "problemMatcher": [] } ] -} \ No newline at end of file +} diff --git a/ASTRO_MIGRATION_PLAN.md b/ASTRO_MIGRATION_PLAN.md new file mode 100644 index 0000000..ce0646a --- /dev/null +++ b/ASTRO_MIGRATION_PLAN.md @@ -0,0 +1,1146 @@ +# Next.js → Astro migration plan + +> Project: `luisjcenteno.dev` (personal portfolio) +> Current stack: Next.js 16 Pages Router, static export, Bulma/SCSS, React 19 +> Target: Astro 7 (static output) + React integration, reusing existing React components +> +> **Status:** implemented on branch `migrate/astro` with Astro 7.4.2, +> `@astrojs/react` 7.1.1, and `@astrojs/sitemap` 3.7.4. + +--- + +## 1. What the site actually is today + +The site is **already a pure static site**. `next.config.js` sets `output: 'export'`, so +`next build` produces plain HTML/CSS/JS in `out/`, and Docker serves that folder through Nginx. +There is no server runtime, API route, middleware, or image optimization service. + +### Routes + +| URL | Source file | Notes | +| --- | --- | --- | +| `/` | `pages/index.jsx` | Profile sidebar + about + work experience + projects | +| `/projects` | `pages/projects/index.jsx` | Project grid | +| `/projects/adm2` | `pages/projects/[slug].jsx` | Markdown README fetched at build time | +| `/projects/baby-tracker` | same | same | +| `/projects/memorias-de-vida` | same | same | +| `/projects/contractflow` | same | same | +| `/projects/photo-print-tool` | same | same | +| `/privacy` | `pages/privacy.jsx` | Static text | +| `404` | Next.js default | No custom `pages/404.jsx` exists | + +### Build and deploy flow + +``` +bun install + → next build (output: export) → out/ + → next-sitemap → out/sitemap*.xml + out/robots.txt + → Docker builder stage + → nginx:alpine serves /app/out at :80 (nginx/default.conf) +``` + +### Dependencies that matter + +- `next`, `react`, `react-dom` +- `@tabler/icons-react` (SVG icons inside React components) +- `bulma` + `sass` (SCSS with Bulma variables) +- `marked` (remote README → HTML at build time) +- `html-react-parser` (renders the HTML string into React) +- `styled-components` — **only used for `StyleSheetManager` in `_app.js`; not used for styling** +- `next-sitemap`, `eslint-config-next` +- `prop-types` — imported by components but **not declared** in `package.json`; it currently + resolves transitively through `eslint-plugin-react`. + +### Interactivity audit + +Only **one** component is genuinely interactive: + +- `components/navbar/index.jsx` — `useState` for the mobile burger menu. + +Everything else is static markup: + +- `profile-box`, `about-me-box`, `work-experience`, `timeline`, `timeline/row`, + `projects-box`, `project-card`, `dev-icon`, `github-button`, `seo`. + +`hooks/useWindowSize.js` exists but is **not imported anywhere**. + +This matters: after the navbar is handled, Astro can render the entire site with **zero +React hydration**, while still reusing the React components at build time. + +### Existing quirks/bugs to fix during migration + +These are pre-existing, not caused by Astro: + +1. `components/dev-icon/index.jsx` maps icon keys as `REACT`, `VUE`, … but `projects.json` + uses `"react"`, `"vue"`, so `logos[name]` is always `undefined` — **no stack icons render + today**. Use lowercase keys. +2. `projects.json` also uses `express` and `postgres`, which `dev-icon` has no mapping for. +3. `projects-box` calls `.sort()` on the imported `Projects` array in place. +4. `useWindowSize` has an invalid dependency array (`[input]`) and is unused. +5. `about-me-box` has a `callToAction.button` with `onClick`; it is never used, and would not + hydrate in Astro without a `client:*` directive. +6. `seo` renders a relative `og:image` (`/images/cover.jpg`), which social crawlers generally + require to be absolute. +7. `privacy.jsx` has no SEO/title and its copy mentions “Living Company” and + `contact@livingcompany.com` (likely copy/paste leftovers). +8. No canonical URL anywhere. +9. `next.config.js` forwards `sassOptions.includePaths`, but the SCSS uses Bulma package imports; + this is not needed in Astro/Vite. +10. `/_next/static/*` has a long-cache rule in Nginx; Astro uses `/_astro/*`. +11. No Nginx `error_page 404`; the custom 404 HTML is not used. + +--- + +## 2. Recommended strategy + +### Strategy A (recommended first pass): lift-and-shift React components into Astro + +Keep the React components almost exactly as they are and render them from `.astro` pages +**without a `client:*` directive**. Astro renders them to static HTML at build time and ships +no React runtime to the browser. + +- Lowest risk, fastest parity. +- Reuses all presentational components. +- Only the navbar and Next-specific imports need real changes. +- Gives the full Astro benefit for deployment, routing, sitemap, and JS payload + (React is build-time only). + +### Strategy B (optional follow-up): convert static React components to `.astro` + +Once parity is reached, progressively rewrite the purely presentational components as +`.astro` components and remove `@astrojs/react`, `react`, and `react-dom` entirely. +This removes React from the build pipeline too, but is not required for the first migration. + +> Recommendation: do A now, keep B as a later cleanup. Do **not** mix both in the first PR. + +### Key architectural decisions + +| Decision | Recommendation | Reason | +| --- | --- | --- | +| Output | `output: 'static'` (Astro default) | Same deployment model as today | +| URL format | `build.format: 'directory'`, `trailingSlash: 'never'` | Produces `dist/projects/index.html`; keeps existing no-slash URLs/links and canonical URLs | +| React | `@astrojs/react`, no `client:*` initially | Static render at build; no React in browser | +| Navbar | Rewrite as `Navbar.astro` + tiny inline script | Avoids shipping React just for a burger menu | +| SEO | Move into `BaseLayout.astro` props | Astro has no `next/head`; head is owned by layouts | +| Markdown | Keep `marked` + `` | Same behavior, removes `html-react-parser` | +| Styles | Keep all SCSS under one `globals.scss` entrypoint | Current partials rely on Bulma variables loaded first | +| Sitemap | `@astrojs/sitemap` + `src/pages/robots.txt.ts` | Replaces `next-sitemap` | +| Hosting | Keep Docker + Nginx, change `out` → `dist` and `_next` → `_astro` | Minimal infra change | + +--- + +## 3. Target file tree + +``` +astro.config.mjs +package.json +public/ # stays at root; Astro copies it to dist/ +src/ + components/ + about-me-box/index.jsx # reused + dev-icon/index.jsx # reused + key fix + github-button/index.jsx # reused, + navbar/Navbar.astro # rewritten + profile-box/index.jsx # reused, + project-card/index.jsx # reused, + dangerouslySetInnerHTML + projects-box/index.jsx # reused + seo/ # DELETE (merged into BaseLayout) + timeline/index.jsx # reused + timeline/row.jsx # reused + work-experience/index.jsx # reused + data/ + index.js + profile.json + projects.json + work-experience.json + layouts/ + BaseLayout.astro # replaces _app + main-layout + seo + ProjectLayout.astro # replaces project-layout + html-react-parser + pages/ + index.astro + projects/index.astro + projects/[slug].astro + privacy.astro + 404.astro + robots.txt.ts + styles/ + globals.scss + components/... + pages/... + utils/ + getProjectContent.js + getProjectData.js # renamed from getProjectStaticProps + index.js + markdownFetch.js +nginx/default.conf +Dockerfile +``` + +`pages/`, root `components/`, `layouts/`, `data/`, `styles/`, `hooks/` are deleted after parity. +`next.config.js`, `next-sitemap.config.js`, and the Next dependencies are removed at the end. + +--- + +## 4. Step-by-step migration + +### Phase 0 — Baseline and safety net (30–60 min) + +1. Create a branch: + ```sh + git checkout -b migrate/astro + ``` +2. Install the current project and keep a baseline build for comparison: + ```sh + bun install + bun run build + cp -R out /tmp/luisjcenteno-next-baseline + ``` +3. Record the current routes and rendered output: + ```sh + find out -name '*.html' | sort + curl -s https://luisjcenteno.dev/sitemap.xml + ``` +4. Capture screenshots/Lighthouse for `/`, `/projects`, one project page, `/privacy`. + (Optional: `npx lighthouse https://luisjcenteno.dev --view`.) +5. Note the production URL policy: internal links currently have no trailing slash + (`/projects/adm2`), so the plan keeps no-trailing-slash canonicals. + +**Acceptance:** baseline build works and `out/` routes are recorded. + +--- + +### Phase 1 — Scaffold Astro in place (1–2 h) + +Add Astro and integrations with Bun: + +```sh +bun add astro @astrojs/react @astrojs/sitemap +bun add -d @astrojs/check typescript +``` + +> Use the latest Astro 7.x / matching `@astrojs/react`. Do not copy versions by hand; +> `bun add` will resolve a compatible set. + +Create `astro.config.mjs`: + +```js +import { defineConfig } from 'astro/config' +import react from '@astrojs/react' +import sitemap from '@astrojs/sitemap' + +export default defineConfig({ + site: process.env.SITE_URL ?? 'https://luisjcenteno.dev', + trailingSlash: 'never', + build: { format: 'directory' }, + integrations: [react(), sitemap()], +}) +``` + +Notes: + +- `site` is required by `@astrojs/sitemap` and makes canonical/OG URLs easy. +- `build.format: 'directory'` emits `dist/projects/index.html`. +- `trailingSlash: 'never'` keeps the current links (`/projects/adm2`) canonical. Nginx will + serve both `/projects` and `/projects/`; Astro dev redirects the slash variant. +- Do **not** port `sassOptions.includePaths`; Bulma imports (`@import 'bulma/sass/...'`) + resolve from `node_modules` through Vite. +- No `output` key is needed; static is the default. + +Update `package.json` scripts now (keep old ones temporarily if running side by side): + +```json +{ + "scripts": { + "dev": "astro dev", + "build": "astro build", + "preview": "astro preview", + "astro": "astro" + } +} +``` + +Move directories to `src/`: + +```sh +mkdir -p src +git mv components src/components +git mv data src/data +git mv layouts src/layouts +git mv styles src/styles +git mv utils src/utils +git mv pages src/legacy-pages # temporary reference only +``` + +Move JSON/data alongside. Keep `public/` at the repository root. + +Update `.gitignore` (`/dist/` is already listed, so only the Astro cache is new; remove the +Next entries after parity): + +```gitignore +/.astro/ +# /dist/ already exists +# remove /.next/ and /out/ once Next is gone +``` + +Add a `jsconfig.json` (optional, for editor aliases and JSX): + +```json +{ + "compilerOptions": { + "jsx": "react-jsx", + "baseUrl": ".", + "paths": { "@/*": ["src/*"] } + }, + "include": ["src/**/*", "astro.config.mjs"] +} +``` + +If aliases are not configured, keep relative imports — no alias is required. + +**Acceptance:** `bun run astro --version` works and `src/` contains the old code. + +--- + +### Phase 2 — Build the shared layout and SEO (2–3 h) + +#### 2.1 `src/layouts/BaseLayout.astro` + +Replaces `pages/_app.js`, `layouts/main-layout`, and `components/seo`. + +```astro +--- +import NavBar from '../components/navbar/Navbar.astro' +import '../styles/globals.scss' + +const { + title, + description, + image = '/images/cover.jpg', + className = '', + type = 'website', +} = Astro.props + +const canonical = new URL(Astro.url.pathname, Astro.site) +const ogImage = new URL(image, Astro.site) +--- + + + + + + {title} + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +``` + +Important details: + +- `className` is a prop here; DOM elements inside `.astro` files use `class`, not `className`. +- The global SCSS import must happen **once**, here. The page/component partials use Bulma + variables (`$text`, `$purple`, `$dark-secondary`, `$scheme-main`) that are defined in + `globals.scss` before those partials are imported. Do not split the imports. +- Move the Google Fonts `@import` out of `globals.scss` (delete line 3) now that it is a + ``; this avoids a render-blocking CSS import. +- `og:image` is absolute now. `image` can stay relative and is resolved against `Astro.site`. +- `Astro.site` is defined because `site` is set in `astro.config.mjs`. + +Delete `src/components/seo/` after moving its meta tags here. + +#### 2.2 Navbar: rewrite as Astro (recommended) + +Create `src/components/navbar/Navbar.astro`. This removes the only React island and keeps the +mobile menu working with a tiny vanilla script. + +```astro +--- +import { Profile } from '../../data' +--- +
+ + +``` + +Astro bundles this script (module, deferred) and includes it only where the navbar is rendered. +No React, no hydration. + +**Fallback if you want zero component rewrites:** keep the React navbar and hydrate it: + +```astro + +``` + +This ships the React runtime to the browser just for the menu, so prefer the Astro rewrite. + +#### 2.3 `src/layouts/ProjectLayout.astro` + +Replaces `layouts/project-layout/index.jsx`. `html-react-parser` is replaced by `set:html`. + +```astro +--- +import BaseLayout from './BaseLayout.astro' +import { Profile } from '../data' +import GithubButton from '../components/github-button' + +const { project, content, className = 'ProjectPage' } = Astro.props + +const githubLink = project.links?.find((link) => link.label === 'View on GitHub')?.url +const coverImage = typeof project.cover === 'string' ? project.cover : null +--- + +
+ {coverImage && ( +
+ {`${project.name} +
+ )} + +
+ + + {githubLink && ( +
+ +
+ )} +
+
+
+``` + +**Acceptance:** layout renders, head tags are correct, navbar burger still works. + +--- + +### Phase 3 — Migrate pages (3–4 h) + +#### 3.1 `src/pages/index.astro` + +```astro +--- +import BaseLayout from '../layouts/BaseLayout.astro' +import ProfileBox from '../components/profile-box' +import AboutMeBox from '../components/about-me-box' +import ProjectsBox from '../components/projects-box' +import WorkExperience from '../components/work-experience' +import { Profile, Projects, WorkExp } from '../data' + +const title = `${Profile.name} | ${Profile.title}` +--- + +
+
+
+ +
+ +
+
+ + + +
+
+
+
+
+``` + +Note the conversion from `className` to `class` on plain HTML elements. React components keep +their existing `className` internals. + +The imports above use Vite's directory-index resolution (`components/profile-box` → +`components/profile-box/index.jsx`). If your resolver setup does not do that, use explicit +paths such as `../components/profile-box/index.jsx`. + +#### 3.2 `src/pages/projects/index.astro` + +Same as the current page, with `class` on DOM elements and `` instead of +`` + ``: + +```astro +--- +import BaseLayout from '../../layouts/BaseLayout.astro' +import ProjectCard from '../../components/project-card' +import { Profile, Projects } from '../../data' +--- + +
+
+

Projects 🚀

+

+ Explore these builds and reach out if one sparks your next idea. +

+
+ {Projects.map((project, index) => ( +
+ +
+ ))} +
+
+
+
+``` + +#### 3.3 `src/pages/projects/[slug].astro` + +`getStaticPaths()` replaces `getStaticPaths`/`getStaticProps`/`fallback: false`. + +```astro +--- +import ProjectLayout from '../../layouts/ProjectLayout.astro' +import { Projects } from '../../data' +import { getProjectData } from '../../utils' + +export function getStaticPaths() { + return Projects + .filter(({ slug }) => typeof slug === 'string' && slug.trim().length) + .map(({ slug }) => ({ params: { slug } })) +} + +const { slug } = Astro.params +const { project, content } = await getProjectData(slug) +--- + +``` + +Refactor `src/utils/getProjectStaticProps.js` → `src/utils/getProjectData.js`: + +```js +import { getProjectBySlug } from '../data' +import getProjectContent from './getProjectContent' + +const getProjectData = async (slug) => { + const project = getProjectBySlug(slug) + + if (!project.content) { + throw new Error(`No markdown content configured for project "${slug}"`) + } + + const content = await getProjectContent(project.content) + return { project, content } +} + +export default getProjectData +``` + +Update `src/utils/index.js`. Remove the old `getProjectStaticProps` export. + +#### 3.4 `src/pages/privacy.astro` + +Port the JSX one-to-one. Use `class` instead of `className`, and add a proper title +(which the current page lacks): + +```astro +--- +import BaseLayout from '../layouts/BaseLayout.astro' +import { Profile } from '../data' +--- + +
+ +
+
+``` + +While here, decide whether the “Living Company” copy is intentional. If not, replace it. + +#### 3.5 `src/pages/404.astro` + +```astro +--- +import BaseLayout from '../layouts/BaseLayout.astro' +--- + +
+

404

+

This page does not exist.

+

Go back home

+
+
+``` + +**Acceptance:** `bun run build` produces every route; project pages render the same HTML +content as today. + +--- + +### Phase 4 — Adapt the React components (2–3 h) + +All components keep their current folder shape and JSX. Only these edits are required: + +#### 4.1 Remove `next/link` + +In `profile-box`, `project-card`, `github-button`, and (if kept) `navbar`: + +```diff +- import Link from 'next/link' +- ... ++ ... +``` + +Plain anchors are correct for a static site. Internal links become normal page navigations. + +#### 4.2 Replace `html-react-parser` in `project-card` + +```diff +- import parse from 'html-react-parser' +-
{parse(description || '')}
++
+``` + +Descriptions come from the trusted local `projects.json`. In `ProjectLayout` the HTML is +rendered by Astro's `set:html`, so `html-react-parser` is no longer needed anywhere. + +#### 4.3 Remove `React` imports + +With Astro's React integration the automatic JSX runtime is used. `import React from 'react'` +can be removed from every component. It is harmless if left in place. + +#### 4.4 PropTypes + +`prop-types` is currently only a transitive dependency. Choose one: + +- **Recommended:** remove all `PropTypes` declarations and the imports (Astro does not use + them, and they add noise). +- **Minimal change:** `bun add prop-types` so the dependency is explicit. + +#### 4.5 Fix `dev-icon` while touching it + +```js +const logos = { + react: , + vue: , + angular: , + javascript: , + nodejs: , + python: , + android: , + apple: , + github: , + // add mappings for express / postgres or render a fallback +} +``` + +Return `null` (not `undefined`) for unknown names. This fixes the missing stack icons. + +#### 4.6 Components that need no changes + +- `timeline`, `timeline/row` +- `work-experience` +- `projects-box` (optional: change `projects.sort` to `[...projects].sort`) +- `about-me-box` (optional: drop the unused `callToAction` branch, which cannot work + without hydration) + +**Acceptance:** no imports from `next/*`, `html-react-parser`, or `styled-components` remain in +the rendered tree. + +--- + +### Phase 5 — Markdown content and build robustness (1–2 h) + +`utils/getProjectContent.js` currently does: + +```js +const response = await markdownFetch(contentURL) +const rawContent = await response.text() || '' +const htmlContent = marked(rawContent) +``` + +Clean it up: + +```js +import { marked } from 'marked' + +const getProjectContent = async (url) => { + const response = await fetch(url) + + if (!response.ok) { + throw new Error(`Failed to fetch project content: ${url} (${response.status})`) + } + + return marked.parse(await response.text()) +} + +export default getProjectContent +``` + +- Remove the unused `import { ReactNode } from 'react'`. +- Inline `markdownFetch` or keep it; it is a one-line wrapper. +- `marked.parse()` is the documented API. +- The build now fails loudly instead of silently rendering an empty page if GitHub is down. + +**Optional but recommended for reproducible builds:** vendor the READMEs. + +``` +scripts/fetch-readmes.mjs + fetch each project.content + write src/data/readmes/.md + build reads local files; fall back to network only if missing +``` + +This removes a network dependency and rate-limit risk from Docker/CI builds. It can be done in +a follow-up PR if you want to keep the first migration focused. + +Security note: `set:html` disables escaping. The markdown comes from your own repositories, so +it is trusted. If that ever changes, sanitize the HTML. + +--- + +### Phase 6 — Replace the Next build pipeline (1 h) + +#### 6.1 Sitemap + +`astro.config.mjs` already registers `sitemap()` and sets `site`. It emits: + +``` +dist/sitemap-index.xml +dist/sitemap-0.xml +``` + +Add `src/pages/robots.txt.ts`: + +```ts +import type { APIRoute } from 'astro' + +export const GET: APIRoute = ({ site }) => { + const base = site ?? new URL('https://luisjcenteno.dev') + const sitemap = new URL('sitemap-index.xml', base) + + return new Response( + `User-agent: *\nAllow: /\n\nSitemap: ${sitemap.href}\n`, + { headers: { 'Content-Type': 'text/plain; charset=utf-8' } } + ) +} +``` + +This replaces `next-sitemap.config.js`. If you want to keep the old `/sitemap.xml` URL working, +add an Nginx redirect (see Phase 7) or accept the new filename and update Search Console. + +#### 6.2 Remove Next-only config and dependencies + +```sh +bun remove next next-sitemap styled-components html-react-parser eslint-config-next +bun remove prop-types # only if you removed PropTypes declarations +``` + +Then: + +```sh +bun install +``` + +Remove files: + +``` +next.config.js +next-sitemap.config.js +src/legacy-pages/ +src/hooks/ +``` + +Remove `NEXT_PUBLIC_SITE_URL` references from the README. Use `SITE_URL` for the Astro config. + +Expected final dependency shape (versions resolved by Bun): + +```json +{ + "dependencies": { + "@astrojs/react": "latest compatible", + "@astrojs/sitemap": "latest compatible", + "@tabler/icons-react": "^3", + "astro": "^7", + "bulma": "^0.9.4", + "marked": "^12", + "react": "^19", + "react-dom": "^19", + "sass": "^1.70" + }, + "devDependencies": { + "@astrojs/check": "latest", + "eslint": "^9", + "eslint-plugin-astro": "latest", + "typescript": "latest" + } +} +``` + +`sass` 1.70 works today; if the Astro/Vite version in use complains about the legacy Sass API, +upgrade `sass` and expect deprecation warnings from Bulma 0.9's `@import` usage (warnings only, +not build failures). + +#### 6.3 Lint + +The current `eslint.config.mjs` extends `eslint-config-next`. Replace it with Astro support: + +```sh +bun add -d eslint-plugin-astro +``` + +```js +import js from '@eslint/js' +import astro from 'eslint-plugin-astro' + +export default [ + js.configs.recommended, + ...astro.configs.recommended, + { + ignores: ['dist/**', '.astro/**', 'node_modules/**'], + }, +] +``` + +If linting is not actively used, dropping the config is also acceptable; do not leave a config +that depends on a removed package. + +**Acceptance:** `bun run build` uses only Astro, generates sitemap + robots, and has no Next +imports. + +--- + +### Phase 7 — Deployment (Docker + Nginx) (1–2 h) + +#### 7.1 Dockerfile + +```diff + FROM deps AS builder + COPY . . + RUN bun run build + + FROM nginx:alpine AS runner + WORKDIR /usr/share/nginx/html +-COPY --from=builder /app/out . ++COPY --from=builder /app/dist . + COPY nginx/default.conf /etc/nginx/conf.d/default.conf +``` + +#### 7.2 `.dockerignore` + +Add Astro output/cache: + +```gitignore +dist +.astro +``` + +#### 7.3 `nginx/default.conf` + +Required changes: + +```diff +- location = /projects { +- try_files /projects.html =404; +- } +- +- location = /projects/ { +- try_files /projects.html =404; +- } +- + location / { +- try_files $uri.html $uri $uri/index.html =404; ++ try_files $uri $uri.html $uri/ =404; + } + +-location ~* ^/_next/static/.+\.(?:js|css|woff2?|ttf|eot|otf)$ { ++location /_astro/ { + access_log off; + expires 1y; + add_header Cache-Control "public, max-age=31536000, immutable" always; + try_files $uri =404; + } +``` + +Also add a real 404 handler (currently missing): + +```nginx +error_page 404 /404.html; +``` + +and optionally, to preserve the old sitemap URL: + +```nginx +location = /sitemap.xml { + return 301 /sitemap-index.xml; +} +``` + +Notes: + +- `try_files $uri $uri.html $uri/` supports both directory output (`/projects/index.html`) + and file output if you later change `build.format`. +- `index index.html;` is already present, so `$uri/` serves directory indexes. +- Keep the existing gzip, dotfile, PHP/WordPress, and security-header rules. +- Keep the generic asset-cache rule; prefix `location /_astro/` takes precedence. +- Verify that `/404.html` is not caught by the long-cache rule — the existing `.html` + no-cache rule covers it. + +#### 7.4 Smoke test locally + +```sh +bun run build +docker build -t luisjcenteno/portfolio:astro . +docker run --rm -p 8080:80 luisjcenteno/portfolio:astro +``` + +```sh +curl -I http://localhost:8080/ +curl -I http://localhost:8080/projects +curl -I http://localhost:8080/projects/adm2 +curl -I http://localhost:8080/privacy +curl -I http://localhost:8080/does-not-exist +curl -I http://localhost:8080/_astro/.css +``` + +Check: + +- `200` for all known routes (with and without trailing slash). +- `404` returns the custom `404.html` body. +- `_astro/*` returns `Cache-Control: public, max-age=31536000, immutable`. +- HTML returns `no-cache`. +- `robots.txt` references the Astro sitemap index. +- Security headers still present. +- gzip works for HTML/CSS/JS/XML. + +**Acceptance:** the container serves the same visual site and all headers/routes are correct. + +--- + +### Phase 8 — Cleanup and validation (1 h) + +1. Search for leftovers: + ```sh + rg -n "next/|_next|styled-components|html-react-parser|getStaticProps|next-sitemap" \ + --glob '!ASTRO_MIGRATION_PLAN.md' --glob '!bun.lock' + ``` +2. Remove unused files: `hooks/`, `public/vercel.svg`, stale `.vscode/tasks.json` (it runs + Jekyll), and the root `.nojekyll` unless you deploy to GitHub Pages. +3. If deploying to GitHub Pages, move `.nojekyll` into `public/` and set `base` in + `astro.config.mjs` if the site is not served from the domain root. Because `projects.json` + contains root-absolute `/images/...` paths, a non-root `base` requires updating those paths. +4. Update `README.md`: + - Astro instead of Next + - `dist/` instead of `out/` + - `bun run dev` (port 4321) and `bun run preview` + - sitemap is generated by Astro + - `SITE_URL` instead of `NEXT_PUBLIC_SITE_URL` +5. Update `.vscode/tasks.json` to a `bun run dev` task or delete it. +6. Run lint/build: + ```sh + bun run lint + bun run build + ``` +7. Final visual check: + - `/` profile sidebar sticky on desktop; scroll area works + - mobile column layout + - project grid images/cards + - project README rendering: headings, lists, code blocks, links, cover + - navbar burger open/close on mobile, `aria-expanded` updates + - Umami request fires and `data-umami-event` attributes survive + - sitemap/robots/canonical/OG values +8. Compare Lighthouse against the baseline. Expect: + - similar or better LCP/CLS + - significantly less JavaScript (React/Next runtime removed) + - no hydration warnings + +--- + +## 5. Acceptance checklist + +- [ ] `bun run dev` serves all routes at `http://localhost:4321` +- [ ] `bun run build` completes without Next.js +- [ ] `dist/` contains `/`, `/projects`, 5 project pages, `/privacy`, `404.html`, + `robots.txt`, sitemap files +- [ ] Project markdown renders identically (headings, lists, code, links) +- [ ] No `next/*` imports remain +- [ ] No React JS is shipped to the browser (unless the React navbar fallback is chosen) +- [ ] Mobile navigation works and updates `aria-expanded` +- [ ] Umami analytics loads and page/event tracking still works +- [ ] Title, description, OG, Twitter, canonical tags are correct and absolute +- [ ] `sitemap-index.xml`, `sitemap-0.xml`, and `robots.txt` are reachable +- [ ] Nginx serves `/_astro/*` with immutable caching and HTML with `no-cache` +- [ ] Unknown URLs return the custom 404 page +- [ ] Docker image builds and serves the site +- [ ] README and environment-variable docs are updated + +--- + +## 6. Risks and gotchas + +| Risk | Impact | Mitigation | +| --- | --- | --- | +| SCSS variables unresolved | Page styles break | Keep one `globals.scss` import; do not split partials into Astro scoped styles | +| Bulma 0.9 uses deprecated Sass `@import` | Warnings; future breakage | Keep `sass` pinned for the migration; plan Bulma 1.x/`@use` later | +| Remote README fetch fails during Docker build | Build failure or empty content | Add status checks; optionally vendor READMEs locally | +| React event handlers silently do nothing | Broken UI after migration | Audit `onClick`/`useState`; only navbar was interactive | +| `className` in `.astro` files | Attributes render literally / styles missing | Use `class` on DOM elements; `className` only as a component prop | +| Trailing-slash policy mismatch | Duplicate URLs/redirects | Set `trailingSlash` once; keep links canonical; verify sitemap | +| Sitemap filename changes | Search Console/old links | Add `/sitemap.xml` → `/sitemap-index.xml` redirect | +| `set:html` bypasses escaping | XSS if content source changes | Trusted repo READMEs; sanitize if user-generated | +| `prop-types` only transitive | Breaks after dependency cleanup | Remove declarations or add the package explicitly | +| Nginx `_next` cache rule | Astro assets not cached | Replace with `/_astro/` | +| Docker copies wrong folder | Empty container | `out` → `dist` in Dockerfile | +| GitHub Pages/subpath deploy | Root-absolute asset URLs break | Set `base` and update `/images/...` paths; move `.nojekyll` to `public/` | +| Astro 7 / `@astrojs/react` version mismatch | Build errors | Install latest with `bun add`, do not hand-pin old versions | +| Node/Bun version | Astro 7 requires Node >= 22.23.4 | Node 24 and Bun 1.4.4 are already available | + +--- + +## 7. Effort estimate + +| Phase | Work | Estimate | +| --- | --- | --- | +| 0 | Baseline | 0.5–1 h | +| 1 | Scaffold + move files | 1–2 h | +| 2 | Layouts + SEO + navbar | 2–3 h | +| 3 | Pages + dynamic routes | 3–4 h | +| 4 | React component edits | 2–3 h | +| 5 | Markdown/build robustness | 1–2 h | +| 6 | Build pipeline + cleanup deps | 1 h | +| 7 | Docker/Nginx | 1–2 h | +| 8 | QA + README | 1 h | +| **Total** | | **~1.5–2.5 working days** | + +For a focused first pass (reuse React components, Astro navbar, Docker/Nginx updates, no README +vendoring or full component conversion), **1–1.5 days** is realistic. + +--- + +## 8. Suggested commit sequence + +1. `chore: scaffold astro and move source into src/` +2. `feat: add BaseLayout, ProjectLayout, and SEO head` +3. `feat: migrate home, projects, project detail, privacy, and 404 pages` +4. `refactor: remove next/link and html-react-parser from React components` +5. `feat: rewrite navbar as Astro component` +6. `chore: replace next-sitemap with @astrojs/sitemap and robots endpoint` +7. `chore: update docker and nginx for astro dist output` +8. `chore: remove next dependencies and dead code` +9. `docs: update README for astro` + +Keeping these separable makes it easy to review and to bisect any visual regression. + +--- + +## 9. Optional follow-up: drop React entirely + +After the site is stable, the presentational components can be rewritten as `.astro` +components. At that point: + +- `@astrojs/react`, `react`, and `react-dom` can be removed. +- `@tabler/icons-react` can be replaced with inline SVGs or `@tabler/icons`. +- The only browser JS left is the navbar toggle (or it can be replaced with a CSS-only menu). +- Build time and dependency count drop further. + +This is a “nice to have”, not a requirement of the migration, and should be a separate PR. diff --git a/Dockerfile b/Dockerfile index 9a1e74c..79b8826 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,7 +9,7 @@ RUN bun run build FROM nginx:alpine AS runner WORKDIR /usr/share/nginx/html -COPY --from=builder /app/out . +COPY --from=builder /app/dist . COPY nginx/default.conf /etc/nginx/conf.d/default.conf EXPOSE 80 CMD ["nginx", "-g", "daemon off;"] diff --git a/README.md b/README.md index 2c1979e..8da1db7 100644 --- a/README.md +++ b/README.md @@ -2,16 +2,33 @@ ![Luis-J-Centeno-Full-Stack-Web-Developer](https://user-images.githubusercontent.com/5175137/159013022-5694e946-9f5a-4a62-8211-867529b3f3c2.png) +## Stack + +- Astro (static output) with React components rendered at build time +- Bulma + SCSS +- Markdown project READMEs fetched during the build + +## Development + +```sh +bun install +bun run dev # http://localhost:4321 +bun run build # static output in dist/ +bun run preview # preview the production build +``` + ## Deployment hardening -- Static output is generated with Next.js export and served by Nginx in Docker. +- Static output is generated with `astro build` and served by Nginx in Docker. - Custom Nginx rules live in `nginx/default.conf`. - Common scanner probe paths like `.env`, `xmlrpc.php`, `wp-*`, and `*.php` return `404`. - Dotfiles are blocked except `/.well-known/*`. -- Static routes support both `/path` and `/path/` URLs. +- Hash-based assets in `/_astro/` are cached immutably; HTML is served with `no-cache`. +- Unknown routes return the custom `404.html` page. ## Sitemap automation -- Sitemap and robots are generated automatically with `next-sitemap` during `bun run build`. -- Config lives in `next-sitemap.config.js` and outputs files directly into `out` for Docker/Nginx. -- Set `NEXT_PUBLIC_SITE_URL` to change the canonical domain if needed. +- Sitemap files are generated automatically by `@astrojs/sitemap` during `bun run build`. +- `robots.txt` is generated from `src/pages/robots.txt.ts` and points at `sitemap-index.xml`. +- Set `SITE_URL` to change the canonical domain if needed. The default is + `https://luisjcenteno.dev`. diff --git a/astro.config.mjs b/astro.config.mjs new file mode 100644 index 0000000..deb6c7a --- /dev/null +++ b/astro.config.mjs @@ -0,0 +1,12 @@ +import { defineConfig } from 'astro/config' +import react from '@astrojs/react' +import sitemap from '@astrojs/sitemap' + +export default defineConfig({ + site: process.env.SITE_URL ?? 'https://luisjcenteno.dev', + trailingSlash: 'never', + build: { + format: 'directory', + }, + integrations: [react(), sitemap()], +}) diff --git a/bun.lock b/bun.lock index 02fca3e..d23d2d0 100644 --- a/bun.lock +++ b/bun.lock @@ -5,69 +5,126 @@ "": { "name": "luisjcenteno.dev", "dependencies": { + "@astrojs/react": "^7.1.1", + "@astrojs/sitemap": "^3.7.4", "@tabler/icons-react": "^3.37.1", + "astro": "^7.4.2", "bulma": "^0.9.4", - "eslint-config-next": "16.1.6", - "html-react-parser": "^5.2.17", "marked": "^12.0.0", - "next": "16.1.6", + "prop-types": "^15.8.1", "react": "19.2.4", "react-dom": "19.2.4", "sass": "1.70.0", }, "devDependencies": { + "@astrojs/check": "^0.9.12", + "@eslint/js": "^10.0.1", + "@types/prop-types": "^15.7.15", + "@typescript-eslint/parser": "^8.72.1", "eslint": "^9", - "next-sitemap": "^4.2.3", - "styled-components": "^6.3.11", + "eslint-plugin-astro": "^3.2.1", + "eslint-plugin-react": "^7.37.5", + "globals": "^17.13.0", + "typescript": "^6.0.0", }, }, }, "packages": { - "@babel/code-frame": ["@babel/code-frame@7.29.0", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw=="], + "@astrojs/astro2tsx": ["@astrojs/astro2tsx@0.1.3", "", { "dependencies": { "@emnapi/core": "1.11.3", "@napi-rs/wasm-runtime": "1.2.4" } }, "sha512-GMDC7Eo0myBUA/QLBl0u+OcegJ8LiBhccmNZR34KmprQNP8gQUJlWlOOZWUsxNA2rNS6GuPYcGDyLoPnjmn4/Q=="], - "@babel/compat-data": ["@babel/compat-data@7.29.0", "", {}, "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg=="], + "@astrojs/check": ["@astrojs/check@0.9.12", "", { "dependencies": { "@astrojs/language-server": "^2.17.3", "chokidar": "^5.0.0", "kleur": "^4.1.5", "yargs": "^18.2.0" }, "peerDependencies": { "typescript": "^5.0.0 || ^6.0.0" }, "bin": { "astro-check": "./bin/astro-check.js" } }, "sha512-hazpqxIfZWj2VhyPyR0pOEQ/IhFDM/2nIApL96zMXABdD8NrUKYDmhxTy7h+drTDl9MQG/Sd1ET/4amadVJUUA=="], - "@babel/core": ["@babel/core@7.29.0", "", { "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-module-transforms": "^7.28.6", "@babel/helpers": "^7.28.6", "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", "@babel/traverse": "^7.29.0", "@babel/types": "^7.29.0", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA=="], + "@astrojs/compiler-binding": ["@astrojs/compiler-binding@0.5.2", "", { "optionalDependencies": { "@astrojs/compiler-binding-android-arm64": "0.5.2", "@astrojs/compiler-binding-darwin-arm64": "0.5.2", "@astrojs/compiler-binding-darwin-x64": "0.5.2", "@astrojs/compiler-binding-linux-arm64-gnu": "0.5.2", "@astrojs/compiler-binding-linux-arm64-musl": "0.5.2", "@astrojs/compiler-binding-linux-x64-gnu": "0.5.2", "@astrojs/compiler-binding-linux-x64-musl": "0.5.2", "@astrojs/compiler-binding-wasm32-wasi": "0.5.2", "@astrojs/compiler-binding-win32-arm64-msvc": "0.5.2", "@astrojs/compiler-binding-win32-x64-msvc": "0.5.2" } }, "sha512-lEn76+0JcMQ5RDXU0wSMWJg2ZppiZvSULpghC29cfv4o9bhvWFDbQjsCtvjjXN9iVLFQ7fL3wTR2L2UU13mP8g=="], - "@babel/generator": ["@babel/generator@7.29.1", "", { "dependencies": { "@babel/parser": "^7.29.0", "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw=="], + "@astrojs/compiler-binding-android-arm64": ["@astrojs/compiler-binding-android-arm64@0.5.2", "", { "os": "android", "cpu": "arm64" }, "sha512-kckIxon6Rm/Bxzh9mGPYpRRqUbToUQoHptCmpMmE+Yt0Xumq8CqrKUidyYhrBsrHVO7bxuRzzWUUqvpf+iYceQ=="], - "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.28.6", "", { "dependencies": { "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA=="], + "@astrojs/compiler-binding-darwin-arm64": ["@astrojs/compiler-binding-darwin-arm64@0.5.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-1ZG5Ar3dD8HtodX9XH1mRmE0qBXZlvjYXSFfpgFwocqfWnvhFuqtGUNseL8wgfImiRMztIjpQqlogQFQQtgiag=="], - "@babel/helper-globals": ["@babel/helper-globals@7.28.0", "", {}, "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw=="], + "@astrojs/compiler-binding-darwin-x64": ["@astrojs/compiler-binding-darwin-x64@0.5.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-+kl35S7hiHJ2cb7eujwEsPFYYuSgE11uEE2Z20lAJ+undpgulMcW+weQqFPOSSZccEKHOiLIY+kQHkb4e4092w=="], - "@babel/helper-module-imports": ["@babel/helper-module-imports@7.28.6", "", { "dependencies": { "@babel/traverse": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw=="], + "@astrojs/compiler-binding-linux-arm64-gnu": ["@astrojs/compiler-binding-linux-arm64-gnu@0.5.2", "", { "os": "linux", "cpu": "arm64", "libc": "glibc" }, "sha512-BqlR0EHNQLPLwgL9+xogjsAc7zGf0cHho2CPdhv0P1yqbVMwGVaGAqrANP6VYAXCqSC43AF4Czcxc2n+oqdesg=="], - "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.28.6", "", { "dependencies": { "@babel/helper-module-imports": "^7.28.6", "@babel/helper-validator-identifier": "^7.28.5", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA=="], + "@astrojs/compiler-binding-linux-arm64-musl": ["@astrojs/compiler-binding-linux-arm64-musl@0.5.2", "", { "os": "linux", "cpu": "arm64", "libc": "musl" }, "sha512-GRGyby3AZWw5d6JQzidyxPyvGgHWsSusrpgKyFVpDTKctABF7L3Pd5V1cRJbV36/rcu+Eh292/wL7pF7MkmGkQ=="], - "@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], + "@astrojs/compiler-binding-linux-x64-gnu": ["@astrojs/compiler-binding-linux-x64-gnu@0.5.2", "", { "os": "linux", "cpu": "x64", "libc": "glibc" }, "sha512-9XAqGTMQAtIslMsjK3xdyY6OI9d59OZqcLBB6pvD/DcoR0daYswfrKx2azdDERDY4AqAnWPC7odVM1BmxYv3Vw=="], - "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + "@astrojs/compiler-binding-linux-x64-musl": ["@astrojs/compiler-binding-linux-x64-musl@0.5.2", "", { "os": "linux", "cpu": "x64", "libc": "musl" }, "sha512-jOViewGeTh9bSfS8vK72ECxoy2yvmA+Pd/ZcEvBI5c7+7IcfHwZ5qA4L9fRYuOhSrAifvQ2dV4vm1XAtloaWBw=="], - "@babel/helper-validator-option": ["@babel/helper-validator-option@7.27.1", "", {}, "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="], + "@astrojs/compiler-binding-wasm32-wasi": ["@astrojs/compiler-binding-wasm32-wasi@0.5.2", "", { "dependencies": { "@emnapi/core": "1.11.3", "@emnapi/runtime": "1.11.3", "@napi-rs/wasm-runtime": "^1.2.5" }, "cpu": "none" }, "sha512-Z7p64doar1uvR5C9Xs6j1CV9lGlPVQX7OQ2aAtZ/xKC5aGS6GB13nyc2UfQXTQLvZrvVwsyaflTQy6ziY5Bekw=="], - "@babel/helpers": ["@babel/helpers@7.28.6", "", { "dependencies": { "@babel/template": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw=="], + "@astrojs/compiler-binding-win32-arm64-msvc": ["@astrojs/compiler-binding-win32-arm64-msvc@0.5.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-Tr13bh+ahTWsjXjzctK7pFpWV+dUU4FtBfETlR7gO+ueex0F+RDch7eRr0YfKysaRhk9tWm14lsCJ5uWyFPNHQ=="], - "@babel/parser": ["@babel/parser@7.29.0", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww=="], + "@astrojs/compiler-binding-win32-x64-msvc": ["@astrojs/compiler-binding-win32-x64-msvc@0.5.2", "", { "os": "win32", "cpu": "x64" }, "sha512-SfKkI+jOQYLh6wojPvVPV0lFfQnxisweN9B+qCzRvZp7DHAuGif8Y0WcC5PUgN4jb8VKy57LggQDtggR46Du1g=="], - "@babel/template": ["@babel/template@7.28.6", "", { "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/parser": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ=="], + "@astrojs/compiler-rs": ["@astrojs/compiler-rs@0.5.2", "", { "dependencies": { "@astrojs/compiler-binding": "0.5.2" } }, "sha512-IvwYLB8t1M86rKO4oPdBi9GP4gzXcgrVlNgocjwos1jeeUuEIV8d9Crn1PvYD/5IKteWOxpIHomf7e8iYlkE+Q=="], - "@babel/traverse": ["@babel/traverse@7.29.0", "", { "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", "@babel/types": "^7.29.0", "debug": "^4.3.1" } }, "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA=="], + "@astrojs/internal-helpers": ["@astrojs/internal-helpers@0.13.0", "", { "dependencies": { "@types/hast": "^3.0.5", "@types/mdast": "^4.0.4", "picomatch": "^4.0.7", "retext-smartypants": "^6.2.0", "shiki": "^4.5.0", "smol-toml": "^1.9.1", "unified": "^11.0.5", "yaml": "^2.9.1" } }, "sha512-20jxQqnSmpskcGyad7N5l6Xf1gz0UCa6lNde44bEBdaXGpncEYfAZJ142r2ZgzBaG4dUyzGmhqZWv1INU2eiHQ=="], - "@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], + "@astrojs/language-server": ["@astrojs/language-server@2.17.3", "", { "dependencies": { "@astrojs/astro2tsx": "^0.1.2", "@astrojs/yaml2ts": "^0.2.4", "@volar/kit": "~2.4.28", "@volar/language-core": "~2.4.28", "@volar/language-server": "~2.4.28", "@volar/language-service": "~2.4.28", "muggle-string": "^0.4.1", "tinyglobby": "^0.2.17", "volar-service-css": "0.0.71", "volar-service-emmet": "0.0.71", "volar-service-html": "0.0.71", "volar-service-prettier": "0.0.71", "volar-service-typescript": "0.0.71", "volar-service-typescript-twoslash-queries": "0.0.71", "volar-service-yaml": "0.0.71", "vscode-html-languageservice": "^5.6.2", "vscode-uri": "^3.2.0" }, "peerDependencies": { "prettier": "^3.0.0", "prettier-plugin-astro": ">=0.11.0" }, "optionalPeers": ["prettier", "prettier-plugin-astro"], "bin": { "astro-ls": "./bin/nodeServer.js" } }, "sha512-QIAFu1e/4quJMTPdmBOm+ZPXc5NDGZE4/YQjgR3EgjhGLl/tdidaWJDr5WmO2lesVc+BW1qN/xNBURmuePDG2A=="], - "@corex/deepmerge": ["@corex/deepmerge@4.0.43", "", {}, "sha512-N8uEMrMPL0cu/bdboEWpQYb/0i2K5Qn8eCsxzOmxSggJbbQte7ljMRoXm917AbntqTGOzdTu+vP3KOOzoC70HQ=="], + "@astrojs/markdown-satteri": ["@astrojs/markdown-satteri@0.4.5", "", { "dependencies": { "@astrojs/internal-helpers": "0.13.0", "@astrojs/prism": "4.1.1", "github-slugger": "^2.0.0", "satteri": "^0.10.5" } }, "sha512-0IeGdoFbv0f+442KJhYS44Wg8F3MuHmRsxIEYuFyqkjRubc6dPBFZ7azor5t4AeXLQoT5A5h9HyViKpd70Dl9w=="], - "@emnapi/core": ["@emnapi/core@1.8.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" } }, "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg=="], + "@astrojs/prism": ["@astrojs/prism@4.1.1", "", { "dependencies": { "prismjs": "^1.30.0" } }, "sha512-sXlAXJX6t4QfuLg+CuCDzpg7NoxWcyb4paFprgtFppLeisCBmh935h+tJ5CWXfsXEoW2IDy/ihbRMtiu28Chjw=="], - "@emnapi/runtime": ["@emnapi/runtime@1.8.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg=="], + "@astrojs/react": ["@astrojs/react@7.1.1", "", { "dependencies": { "@astrojs/internal-helpers": "0.13.0", "@vitejs/plugin-react": "^6.1.2", "devalue": "^6.0.2", "ultrahtml": "^1.7.0", "vite": "^8.3.4" }, "peerDependencies": { "@types/react": "^17.0.50 || ^18.0.21 || ^19.0.0", "@types/react-dom": "^17.0.17 || ^18.0.6 || ^19.0.0", "oxc-transform-react": "^0.145.0", "react": "^17.0.2 || ^18.0.0 || ^19.0.0", "react-dom": "^17.0.2 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["oxc-transform-react"] }, "sha512-jHan8UuXzFEbzcmsjCRrepm9Xc5XRz+Jt57MjfE568tbOEoDKVzeMuHf9YO0Y4hHwROX8iJmLzaiT3Yr5W0UbQ=="], - "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.1.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ=="], + "@astrojs/sitemap": ["@astrojs/sitemap@3.7.4", "", { "dependencies": { "sitemap": "^9.0.0", "zod": "^4.3.6" } }, "sha512-LbKNC24bdUWcQf/pThB6qLlSqHojxGjZDURIzFocY8rlWnAn2t74nnhnK6S5x0NHriHoAduLEpVjRykmeGiVvA=="], - "@emotion/is-prop-valid": ["@emotion/is-prop-valid@1.4.0", "", { "dependencies": { "@emotion/memoize": "^0.9.0" } }, "sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw=="], + "@astrojs/telemetry": ["@astrojs/telemetry@3.4.1", "", { "dependencies": { "ci-info": "^4.4.0", "dset": "^3.1.4", "is-docker": "^4.0.0", "package-manager-detector": "^1.9.0" } }, "sha512-SMkvMsGOpM0FMAoT5pzhgI3LZC0JSPWf7Evwop+fZ3N6UkusPM7lI+sOJjMNI5OJrVoiei1/AGo1cY7sikTc5A=="], - "@emotion/memoize": ["@emotion/memoize@0.9.0", "", {}, "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ=="], + "@astrojs/yaml2ts": ["@astrojs/yaml2ts@0.2.4", "", { "dependencies": { "yaml": "^2.8.3" } }, "sha512-8oddpOae35pJsXPQXhTkM0ypfKPskVsh2bCxRtbf7e+/Epw2nReakFYpLKjZMEr75CsoF203PMnCocpfz0s69A=="], - "@emotion/unitless": ["@emotion/unitless@0.10.0", "", {}, "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg=="], + "@babel/helper-string-parser": ["@babel/helper-string-parser@7.29.11", "", {}, "sha512-snZbO7MEDOof+hvNa97EjEY7qD7h2kwvQr5AJC3ZhQudKW5dnej6k3kP9NQV88hJwaS8vDqRLFo9rivLEhle2g=="], + + "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.29.7", "", {}, "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg=="], + + "@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + + "@babel/types": ["@babel/types@7.29.11", "", { "dependencies": { "@babel/helper-string-parser": "^7.29.11", "@babel/helper-validator-identifier": "^7.29.7" } }, "sha512-WCsemW40Cpc6gouC1SrY6PBaZ+oLRlEVY9XBvZBI7il/HyUrb2nJ505wE1MHEFyDZNnrWDEuy4jL50WVHfTTSQ=="], + + "@bruits/satteri-darwin-arm64": ["@bruits/satteri-darwin-arm64@0.10.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-27KTVl4TJkVahMy/ohyA7qd4938G5UNneFUz/PsScYfpIhj0IVAS23mpcJXdPF44sa6nva198lmV/cKIb2YPyA=="], + + "@bruits/satteri-darwin-x64": ["@bruits/satteri-darwin-x64@0.10.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-IjnLe3nKspq6qaeqGgjT7MT8VrTV74yWRlaag7ZdNsI8TDAYZ0iPxMCo+9KQZHUk5EyVB+reBI/PFWL5KuFw9Q=="], + + "@bruits/satteri-linux-arm64-gnu": ["@bruits/satteri-linux-arm64-gnu@0.10.5", "", { "os": "linux", "cpu": "arm64", "libc": "glibc" }, "sha512-glkYXZCJywjP13v67eAyAMSJdF+ncvEbYvgi/wOtffL9tQ27lr/zsyzUfgs+ovjJ9d8JNQKiXeiArJcX8PJL9w=="], + + "@bruits/satteri-linux-arm64-musl": ["@bruits/satteri-linux-arm64-musl@0.10.5", "", { "os": "linux", "cpu": "arm64", "libc": "musl" }, "sha512-yWdgG1g17Nh2QyGVlFUxGRa3FEFwiMcpZEyMNWkbM3deC94cmVc+/i9OuyFpdKuWo3GkgoCtYVOoxk1uCnCZIA=="], + + "@bruits/satteri-linux-x64-gnu": ["@bruits/satteri-linux-x64-gnu@0.10.5", "", { "os": "linux", "cpu": "x64", "libc": "glibc" }, "sha512-FVaLoPT1fBgGl0J+AYebyyXJYBachGl8Oyyrf1lye4RTqCB4S0Gwkj1uM9RJyThUOvx5VUmAT1CnNh1SFHA+kw=="], + + "@bruits/satteri-linux-x64-musl": ["@bruits/satteri-linux-x64-musl@0.10.5", "", { "os": "linux", "cpu": "x64", "libc": "musl" }, "sha512-EHpVAx2bqW3GINHTKkljtxVfQmVDGWIuwOYOP5YghTj+0PkBa2o8oKPRtQ9Kbsr1Fye8jtUcDjhwj2jMNugZKg=="], + + "@bruits/satteri-wasm32-wasi": ["@bruits/satteri-wasm32-wasi@0.10.5", "", { "dependencies": { "@emnapi/core": "1.11.1", "@emnapi/runtime": "1.11.1", "@napi-rs/wasm-runtime": "^1.2.3" }, "cpu": "none" }, "sha512-ypz8c/Zmipxp4IoeDa228Gstv6TLzVmNs3yC6wKCoNSOjx1iwpgzu87Y3hTkXFdwChVGU85qeUDuOIarGUZQLw=="], + + "@bruits/satteri-win32-arm64-msvc": ["@bruits/satteri-win32-arm64-msvc@0.10.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-siTV88nb0LRqNpkL2gXboqCwVdq95sLtzMHS1/3eONV2gLbB3NAK46wmSMvCO/yquBvI2lvaFIfd8P12ecsxBw=="], + + "@bruits/satteri-win32-x64-msvc": ["@bruits/satteri-win32-x64-msvc@0.10.5", "", { "os": "win32", "cpu": "x64" }, "sha512-C3IfPvfvMXmlzBxaMPKFS1XiuV9pu2mC7YqkPk7PSvTgPZ8gbdASIpHpztDLvTTQjqZ0z1Ol8tK5X+V6XXC0wQ=="], + + "@capsizecss/unpack": ["@capsizecss/unpack@4.0.1", "", { "dependencies": { "fontkitten": "^1.0.3" } }, "sha512-CuNiSqg7+e1cO/GjffyMOm5Tt2jUF9CWHHnvQ/UkqvtkGfHdgwEC0wpmq7fkN3gxwpRnrAN0WzO3vREKmNolMQ=="], + + "@clack/core": ["@clack/core@1.5.1", "", { "dependencies": { "fast-wrap-ansi": "^0.2.0", "sisteransi": "^1.0.5" } }, "sha512-iHTrHA8MtVuLl2TfZySmcKv1qO2PoyC9Z7pfSDozEuV5vtY3/wcOPKJXlqJ5Oq2Cx5DDGQGAMVx6HZfRRoVEbQ=="], + + "@clack/prompts": ["@clack/prompts@1.8.1", "", { "dependencies": { "@clack/core": "1.5.1", "fast-string-width": "^3.0.2", "fast-wrap-ansi": "^0.2.0", "sisteransi": "^1.0.5" } }, "sha512-dlT1m5e/0yUL0kRNcQn7yGLVThkgbB0Ga/1AmfDDC/8ik6AIiSf2QLQO2zPYvefsHP0aFgxO93cVLCCfDp7kzQ=="], + + "@emmetio/abbreviation": ["@emmetio/abbreviation@2.3.3", "", { "dependencies": { "@emmetio/scanner": "^1.0.4" } }, "sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA=="], + + "@emmetio/css-abbreviation": ["@emmetio/css-abbreviation@2.1.8", "", { "dependencies": { "@emmetio/scanner": "^1.0.4" } }, "sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw=="], + + "@emmetio/css-parser": ["@emmetio/css-parser@0.4.1", "", { "dependencies": { "@emmetio/stream-reader": "^2.2.0", "@emmetio/stream-reader-utils": "^0.1.0" } }, "sha512-2bC6m0MV/voF4CTZiAbG5MWKbq5EBmDPKu9Sb7s7nVcEzNQlrZP6mFFFlIaISM8X6514H9shWMme1fCm8cWAfQ=="], + + "@emmetio/html-matcher": ["@emmetio/html-matcher@1.3.0", "", { "dependencies": { "@emmetio/scanner": "^1.0.0" } }, "sha512-NTbsvppE5eVyBMuyGfVu2CRrLvo7J4YHb6t9sBFLyY03WYhXET37qA4zOYUjBWFCRHO7pS1B9khERtY0f5JXPQ=="], + + "@emmetio/scanner": ["@emmetio/scanner@1.0.4", "", {}, "sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA=="], + + "@emmetio/stream-reader": ["@emmetio/stream-reader@2.2.0", "", {}, "sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw=="], + + "@emmetio/stream-reader-utils": ["@emmetio/stream-reader-utils@0.1.0", "", {}, "sha512-ZsZ2I9Vzso3Ho/pjZFsmmZ++FWeEd/txqybHTm4OgaZzdS8V9V/YYWQwg5TC38Z7uLWUV1vavpLLbjJtKubR1A=="], + + "@emnapi/core": ["@emnapi/core@1.11.3", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.3", "tslib": "^2.4.0" } }, "sha512-zLpS5asjEb7lq8jYLq37N6XKaE41DIexlY1rF/z4/tIl3wo13Sqm28fRyfIsKZD+NZ8mM5RoKkpW/rBcuoSZSg=="], + + "@emnapi/runtime": ["@emnapi/runtime@1.11.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA=="], + + "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-ELEBe8PsLvvJ6QMr0zLt8ffvOHW/dc1m3CEzNMg7aJUv3bMaoDtw2TXyDAwkYBuroxxuHEwhRTLJSe5sya547g=="], "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.9.1", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ=="], @@ -81,7 +138,7 @@ "@eslint/eslintrc": ["@eslint/eslintrc@3.3.4", "", { "dependencies": { "ajv": "^6.14.0", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.1", "minimatch": "^3.1.3", "strip-json-comments": "^3.1.1" } }, "sha512-4h4MVF8pmBsncB60r0wSJiIeUKTSD4m7FmTFThG8RHlsg9ajqckLm9OraguFGZE4vVdpiI1Q4+hFnisopmG6gQ=="], - "@eslint/js": ["@eslint/js@9.39.3", "", {}, "sha512-1B1VkCq6FuUNlQvlBYb+1jDu/gV297TIs/OeiaSR9l1H27SVW55ONE1e1Vp16NqP683+xEGzxYtv4XCiDPaQiw=="], + "@eslint/js": ["@eslint/js@10.0.1", "", { "peerDependencies": { "eslint": "^10.0.0" }, "optionalPeers": ["eslint"] }, "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA=="], "@eslint/object-schema": ["@eslint/object-schema@2.1.7", "", {}, "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA=="], @@ -95,171 +152,183 @@ "@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.3", "", {}, "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ=="], - "@img/colour": ["@img/colour@1.0.0", "", {}, "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw=="], + "@img/colour": ["@img/colour@1.1.0", "", {}, "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ=="], - "@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.2.4" }, "os": "darwin", "cpu": "arm64" }, "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w=="], + "@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.3.4" }, "os": "darwin", "cpu": "arm64" }, "sha512-QRUlFQ0WxvdWyqqG/WtI3iupfD5rBzmCHXSdPsY91sAtVtTo7Q4cb6zOccZ3gqEqkr0f1As1ehLqmEpDsRf+lg=="], - "@img/sharp-darwin-x64": ["@img/sharp-darwin-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-x64": "1.2.4" }, "os": "darwin", "cpu": "x64" }, "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw=="], + "@img/sharp-darwin-x64": ["@img/sharp-darwin-x64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-x64": "1.3.4" }, "os": "darwin", "cpu": "x64" }, "sha512-+BR255RhDlpygUpOc/Jdt1nT6DQ3XG/ERo5wbcdOf5Q320dKtPCKPLR1LJs9VGXRaMa8l1uUa0tkCNOXiAxZUw=="], - "@img/sharp-libvips-darwin-arm64": ["@img/sharp-libvips-darwin-arm64@1.2.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g=="], + "@img/sharp-freebsd-wasm32": ["@img/sharp-freebsd-wasm32@0.35.5", "", { "dependencies": { "@img/sharp-wasm32": "0.35.5" }, "os": "freebsd" }, "sha512-Y/z91nEZ4uIBX5X3nfTovjU9lHNKFYbL2lpHCLVNmXQK03VIZvXBBt0KxbPGp2SdGSF+2mQU4e+hQaWOt86iAw=="], - "@img/sharp-libvips-darwin-x64": ["@img/sharp-libvips-darwin-x64@1.2.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg=="], + "@img/sharp-libvips-darwin-arm64": ["@img/sharp-libvips-darwin-arm64@1.3.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-5R89nBYiRdUlSWJxPhO+GVtaXzXSxKnRu/xqMn3KTA3L9EB9Oy/P+Nn2f2vlhPuUdy/Zusb2DarbyTpGCfEDuw=="], - "@img/sharp-libvips-linux-arm": ["@img/sharp-libvips-linux-arm@1.2.4", "", { "os": "linux", "cpu": "arm" }, "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A=="], + "@img/sharp-libvips-darwin-x64": ["@img/sharp-libvips-darwin-x64@1.3.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-iR2OKH80yi0U+dUplyh3/xdpFvps6YkCwsXenIJxqxR1v9o+xtKTGbS9H7cps+2Vxjc8B1j96p75NmTGjIhtpQ=="], - "@img/sharp-libvips-linux-arm64": ["@img/sharp-libvips-linux-arm64@1.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw=="], + "@img/sharp-libvips-linux-arm": ["@img/sharp-libvips-linux-arm@1.3.4", "", { "os": "linux", "cpu": "arm", "libc": "glibc" }, "sha512-LmRtTsOHuvM2+wlO2Db37dx5MiZhB0FvSunciw48YjdOkZz9KAiRbm8ujeMOA1INqmei5NapFxYEK1D1ZSidmw=="], - "@img/sharp-libvips-linux-ppc64": ["@img/sharp-libvips-linux-ppc64@1.2.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA=="], + "@img/sharp-libvips-linux-arm64": ["@img/sharp-libvips-linux-arm64@1.3.4", "", { "os": "linux", "cpu": "arm64", "libc": "glibc" }, "sha512-Y3dgX/6lE2QhQb+Gxy0WZxfg9MEm/JBjamZpS2IklP7xIQoKN4hzAm7KcMVGtaVDt3neE9OKBC7vAfonA/Lr1A=="], - "@img/sharp-libvips-linux-riscv64": ["@img/sharp-libvips-linux-riscv64@1.2.4", "", { "os": "linux", "cpu": "none" }, "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA=="], + "@img/sharp-libvips-linux-ppc64": ["@img/sharp-libvips-linux-ppc64@1.3.4", "", { "os": "linux", "cpu": "ppc64", "libc": "glibc" }, "sha512-Le6boB8Tai0Nis+gIxIpKx68UDVVIqdR8Tin5Yf1z2LJJQLDJvCDRqRu+jC2qCoD+eIomonmOwB4smBRxfVpYQ=="], - "@img/sharp-libvips-linux-s390x": ["@img/sharp-libvips-linux-s390x@1.2.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ=="], + "@img/sharp-libvips-linux-riscv64": ["@img/sharp-libvips-linux-riscv64@1.3.4", "", { "os": "linux", "cpu": "none", "libc": "glibc" }, "sha512-aHkkIEHPRdQEegJN20MLmGtxYD9R2wQr3Cwpddnu5+YKMt6Uzax7S9h5gpZTo8wyrGuZSlfQ63OevL5mTyOC7Q=="], - "@img/sharp-libvips-linux-x64": ["@img/sharp-libvips-linux-x64@1.2.4", "", { "os": "linux", "cpu": "x64" }, "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw=="], + "@img/sharp-libvips-linux-s390x": ["@img/sharp-libvips-linux-s390x@1.3.4", "", { "os": "linux", "cpu": "s390x", "libc": "glibc" }, "sha512-ra/mB6MikESDUO7Yg+Mi95bFBb9GsObURuhnOv3OqknjGe9sZrG8tCe9q0xSIGrtLgvgw0gKnFWcK4blSgQOuQ=="], - "@img/sharp-libvips-linuxmusl-arm64": ["@img/sharp-libvips-linuxmusl-arm64@1.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw=="], + "@img/sharp-libvips-linux-x64": ["@img/sharp-libvips-linux-x64@1.3.4", "", { "os": "linux", "cpu": "x64", "libc": "glibc" }, "sha512-GJ//SSXbnwSDes02umB3nDJLFcQzw8a18V8fyhqr6tV515tOEMdImjjxj1AoafMRz56F3PHgftnj1QEKSU1zkw=="], - "@img/sharp-libvips-linuxmusl-x64": ["@img/sharp-libvips-linuxmusl-x64@1.2.4", "", { "os": "linux", "cpu": "x64" }, "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg=="], + "@img/sharp-libvips-linuxmusl-arm64": ["@img/sharp-libvips-linuxmusl-arm64@1.3.4", "", { "os": "linux", "cpu": "arm64", "libc": "musl" }, "sha512-hvulFwtjUcagsis6BBxHwGFwWoNZjgYmULGVrZcyfNbjA8hKILbRxGg15/7w5HDyXHXUos/j6baAWqnCyQ2DWA=="], - "@img/sharp-linux-arm": ["@img/sharp-linux-arm@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm": "1.2.4" }, "os": "linux", "cpu": "arm" }, "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw=="], + "@img/sharp-libvips-linuxmusl-x64": ["@img/sharp-libvips-linuxmusl-x64@1.3.4", "", { "os": "linux", "cpu": "x64", "libc": "musl" }, "sha512-6zXKeE/p39I1AmA3cJG35eyBGNqNddLnUXjhwBnsGjFPWqf5VKkDBEqaEkPDoTEtkxwi2vv8Tcr2mDyP4So7Fg=="], - "@img/sharp-linux-arm64": ["@img/sharp-linux-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm64": "1.2.4" }, "os": "linux", "cpu": "arm64" }, "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg=="], + "@img/sharp-linux-arm": ["@img/sharp-linux-arm@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm": "1.3.4" }, "os": "linux", "cpu": "arm", "libc": "glibc" }, "sha512-LEaXK2WdXVK5ykcw0buWyPMsmLLL2vpHLD6yrNSW+JGEL3BZPA4tpKN6iaMc4AxTTAoaX/sU1rOL51lcIz48ZQ=="], - "@img/sharp-linux-ppc64": ["@img/sharp-linux-ppc64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-ppc64": "1.2.4" }, "os": "linux", "cpu": "ppc64" }, "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA=="], + "@img/sharp-linux-arm64": ["@img/sharp-linux-arm64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm64": "1.3.4" }, "os": "linux", "cpu": "arm64", "libc": "glibc" }, "sha512-LYVx5JTsOM2CBzmxreh+nl64/3H6Xb09iSLknqH47z2T2DFFxDeFLP5y4dJwe6H7uGQlHPyEEtIqyo3DYsRwdQ=="], - "@img/sharp-linux-riscv64": ["@img/sharp-linux-riscv64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-riscv64": "1.2.4" }, "os": "linux", "cpu": "none" }, "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw=="], + "@img/sharp-linux-ppc64": ["@img/sharp-linux-ppc64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-ppc64": "1.3.4" }, "os": "linux", "cpu": "ppc64", "libc": "glibc" }, "sha512-QVxAAq8evVRI9ia2vqgwrmWucn5Dfv+JdWzj75pD8omHLPSP7f8p20O8jxzjCcuCEQEOtYOZUmX1hkiZ0kdevA=="], - "@img/sharp-linux-s390x": ["@img/sharp-linux-s390x@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-s390x": "1.2.4" }, "os": "linux", "cpu": "s390x" }, "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg=="], + "@img/sharp-linux-riscv64": ["@img/sharp-linux-riscv64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-riscv64": "1.3.4" }, "os": "linux", "cpu": "none", "libc": "glibc" }, "sha512-LtdreXguaavKODPIfzJ4kffx7UNt1omwtK0rch4EBbbSTXPnxWmYSayXdLJw0fJzQ97kHt1gL/yh4tvU+nCyRQ=="], - "@img/sharp-linux-x64": ["@img/sharp-linux-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-x64": "1.2.4" }, "os": "linux", "cpu": "x64" }, "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ=="], + "@img/sharp-linux-s390x": ["@img/sharp-linux-s390x@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-s390x": "1.3.4" }, "os": "linux", "cpu": "s390x", "libc": "glibc" }, "sha512-UZasTOFiYzotTsGOCu42BfUzP6Tu6Do/947iRm1RsLKvlllxwGcn4RN27LibGWceix4Y+Pmw3jsnTcCQIgWjqA=="], - "@img/sharp-linuxmusl-arm64": ["@img/sharp-linuxmusl-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" }, "os": "linux", "cpu": "arm64" }, "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg=="], + "@img/sharp-linux-x64": ["@img/sharp-linux-x64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-x64": "1.3.4" }, "os": "linux", "cpu": "x64", "libc": "glibc" }, "sha512-SxFtLTeJInhAA9Q836kux2vZNeOBQEx658qvbboZScr0wIARym3IcGmW7KpVD5sbVg0Ojy+udFQdayYIZyoNog=="], - "@img/sharp-linuxmusl-x64": ["@img/sharp-linuxmusl-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-x64": "1.2.4" }, "os": "linux", "cpu": "x64" }, "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q=="], + "@img/sharp-linuxmusl-arm64": ["@img/sharp-linuxmusl-arm64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-arm64": "1.3.4" }, "os": "linux", "cpu": "arm64", "libc": "musl" }, "sha512-9HbMclmI1zlNkFRs3z9/eBtDjfD0sGlrX1z6b1qwmiFY5ElDLh4BC0LPBdVp7z1DXFiKlIcznf+ZlsuZzLxQqg=="], - "@img/sharp-wasm32": ["@img/sharp-wasm32@0.34.5", "", { "dependencies": { "@emnapi/runtime": "^1.7.0" }, "cpu": "none" }, "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw=="], + "@img/sharp-linuxmusl-x64": ["@img/sharp-linuxmusl-x64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-x64": "1.3.4" }, "os": "linux", "cpu": "x64", "libc": "musl" }, "sha512-4KOphqB035HrVdqLZfCgMzzERrQkkzOwRhl4OAkRO1YCldbaFjySXMaK534Mo0V+LndnlJk+sbUyLeU0ULyD1A=="], - "@img/sharp-win32-arm64": ["@img/sharp-win32-arm64@0.34.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g=="], + "@img/sharp-wasm32": ["@img/sharp-wasm32@0.35.5", "", { "dependencies": { "@emnapi/runtime": "^1.11.3" } }, "sha512-Ptsga1su4tQx+LLF1ECS9U6nz5kmrXKo6XVbtR48Ke3ZRxxgaWBu7IDtEe1quo8hiupwm6WFqxVlXaSf7IINGQ=="], - "@img/sharp-win32-ia32": ["@img/sharp-win32-ia32@0.34.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg=="], + "@img/sharp-webcontainers-wasm32": ["@img/sharp-webcontainers-wasm32@0.35.5", "", { "dependencies": { "@img/sharp-wasm32": "0.35.5" }, "cpu": "none" }, "sha512-hfhF/FmoQyTUkA0bIKFOtw536BQSeBMe6BF6QyWlrPxT754+TFLaZ7sKKTfvvM0yJgKgaYTwnFCIZ/GuDw5SUA=="], - "@img/sharp-win32-x64": ["@img/sharp-win32-x64@0.34.5", "", { "os": "win32", "cpu": "x64" }, "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw=="], + "@img/sharp-win32-arm64": ["@img/sharp-win32-arm64@0.35.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-X4t7g+7ZA5DKblCBEXGjUqqemj4vczING/5viFwAL8h4N3qYeyjwdCvRLHi4EdOUI+2Z7UFlp1VM+p/AuEtm6Q=="], - "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], + "@img/sharp-win32-ia32": ["@img/sharp-win32-ia32@0.35.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-5Zm82LoBc43nhwNybZlG7Y1KO//Zhsn306fQl29ZOuStHLGTo3BWL83q3cznX0poxSAMuYL1On/BHBxkBeKr6A=="], - "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], + "@img/sharp-win32-x64": ["@img/sharp-win32-x64@0.35.5", "", { "os": "win32", "cpu": "x64" }, "sha512-x76eH0vEiHlcMQu8Y8IenntaACtddpT6W0wmXtWrnKcnKI7ME5DdgqhAD6SEWOEl1v2zDvkZDhFA9KnURwpfqg=="], - "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.6.0", "", {}, "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw=="], - "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], + "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.2.4", "", { "dependencies": { "@tybys/wasm-util": "^0.10.3" }, "peerDependencies": { "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.4", "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.4" } }, "sha512-AJxoUD2/15ESHbvpcyjU274nsAPLuOtPHCk0vKJM5pj//Fg/B1FXNWjPnXTT9PymCYYiHo4zPj0ZomXBKhoy7g=="], - "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + "@oslojs/encoding": ["@oslojs/encoding@1.1.0", "", {}, "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ=="], - "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.12", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@tybys/wasm-util": "^0.10.0" } }, "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ=="], + "@oxc-project/types": ["@oxc-project/types@0.155.0", "", {}, "sha512-SeE8JPwW1xs1tHeNycjUtUBdhorRa8o4jlvjwk49R7/Z291i+4DQa7JJIgOm/TaYQZx+QrPQbVJ/9c8dMIZN8Q=="], - "@next/env": ["@next/env@13.5.11", "", {}, "sha512-fbb2C7HChgM7CemdCY+y3N1n8pcTKdqtQLbC7/EQtPdLvlMUT9JX/dBYl8MMZAtYG4uVMyPFHXckb68q/NRwqg=="], + "@pkgr/core": ["@pkgr/core@0.3.6", "", {}, "sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA=="], - "@next/eslint-plugin-next": ["@next/eslint-plugin-next@16.1.6", "", { "dependencies": { "fast-glob": "3.3.1" } }, "sha512-/Qq3PTagA6+nYVfryAtQ7/9FEr/6YVyvOtl6rZnGsbReGLf0jZU6gkpr1FuChAQpvV46a78p4cmHOVP8mbfSMQ=="], + "@rolldown/binding-android-arm-eabi": ["@rolldown/binding-android-arm-eabi@1.2.15", "", { "os": "android", "cpu": "arm" }, "sha512-aLcgK9gIJ3YRvrrtfSBbRa27F5WrpiTaPulnFpsHPxpUHgFlSgnU4854MHwoRGEBhfRJDWCS2WQ7lIjskE9Olw=="], - "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@16.1.6", "", { "os": "darwin", "cpu": "arm64" }, "sha512-wTzYulosJr/6nFnqGW7FrG3jfUUlEf8UjGA0/pyypJl42ExdVgC6xJgcXQ+V8QFn6niSG2Pb8+MIG1mZr2vczw=="], + "@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.2.15", "", { "os": "android", "cpu": "arm64" }, "sha512-xD7DdZCrbThKuxNg7ooQmvp07ys4J/pnSEMTG3/OdOWl6daC67m/Q4fL78sRHMxTH/N4fGUbYhcPM0MF5WFHkg=="], - "@next/swc-darwin-x64": ["@next/swc-darwin-x64@16.1.6", "", { "os": "darwin", "cpu": "x64" }, "sha512-BLFPYPDO+MNJsiDWbeVzqvYd4NyuRrEYVB5k2N3JfWncuHAy2IVwMAOlVQDFjj+krkWzhY2apvmekMkfQR0CUQ=="], + "@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.2.15", "", { "os": "darwin", "cpu": "arm64" }, "sha512-m2WuQ6r0B4OTYxyPpNLtXaMRbRDUbG8YQV2Q3KTdSSK8Th6KHCnC8jVCJt8bvYeSB5WivkkNbc85mKadaSdOxA=="], - "@next/swc-linux-arm64-gnu": ["@next/swc-linux-arm64-gnu@16.1.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-OJYkCd5pj/QloBvoEcJ2XiMnlJkRv9idWA/j0ugSuA34gMT6f5b7vOiCQHVRpvStoZUknhl6/UxOXL4OwtdaBw=="], + "@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.2.15", "", { "os": "darwin", "cpu": "x64" }, "sha512-5RtnsHM36nodM9WbMy+zip0LGS/G+y5wro5RHrpOlr4ac24+1zSi9kiV2MP1myZeZ/ifEHfulQcWjnAXzc2C2A=="], - "@next/swc-linux-arm64-musl": ["@next/swc-linux-arm64-musl@16.1.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-S4J2v+8tT3NIO9u2q+S0G5KdvNDjXfAv06OhfOzNDaBn5rw84DGXWndOEB7d5/x852A20sW1M56vhC/tRVbccQ=="], + "@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.2.15", "", { "os": "freebsd", "cpu": "x64" }, "sha512-g3l09pyFqhu+135JKkbkwiKGQmwU5hUMUPJ4VdBADvuqR8d33L6H578rh8m7rtxbdp+VmX/+nzI7nvhSZlzpUQ=="], - "@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@16.1.6", "", { "os": "linux", "cpu": "x64" }, "sha512-2eEBDkFlMMNQnkTyPBhQOAyn2qMxyG2eE7GPH2WIDGEpEILcBPI/jdSv4t6xupSP+ot/jkfrCShLAa7+ZUPcJQ=="], + "@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.2.15", "", { "os": "linux", "cpu": "arm" }, "sha512-nIe3VugI97nGQtspPxDqA4sXMUpeiocKIP/CqpY/u/vgbT+alX+cVxu1C/oVBPKg4feNTmYovE91v4DgXvXNwQ=="], - "@next/swc-linux-x64-musl": ["@next/swc-linux-x64-musl@16.1.6", "", { "os": "linux", "cpu": "x64" }, "sha512-oicJwRlyOoZXVlxmIMaTq7f8pN9QNbdes0q2FXfRsPhfCi8n8JmOZJm5oo1pwDaFbnnD421rVU409M3evFbIqg=="], + "@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.2.15", "", { "os": "linux", "cpu": "arm64", "libc": "glibc" }, "sha512-iTBjXx+B5QSvgI89lJfmqh4wTh8NabR1YZIIN3hNx4zSG0EVfVqkOvLulNpG4251pbd6/IAmZ/LefVk1Y4rPhw=="], - "@next/swc-win32-arm64-msvc": ["@next/swc-win32-arm64-msvc@16.1.6", "", { "os": "win32", "cpu": "arm64" }, "sha512-gQmm8izDTPgs+DCWH22kcDmuUp7NyiJgEl18bcr8irXA5N2m2O+JQIr6f3ct42GOs9c0h8QF3L5SzIxcYAAXXw=="], + "@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.2.15", "", { "os": "linux", "cpu": "arm64", "libc": "musl" }, "sha512-uN26XOnVR7rqQupG3V9oAG2EGGatWjcJHOeDOHUFCh4TBWmP2tHTFoVN13aYbwfm0aHqJAEmcwhAu6sooIjfqQ=="], - "@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@16.1.6", "", { "os": "win32", "cpu": "x64" }, "sha512-NRfO39AIrzBnixKbjuo2YiYhB6o9d8v/ymU9m/Xk8cyVk+k7XylniXkHwjs4s70wedVffc6bQNbufk5v0xEm0A=="], + "@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.2.15", "", { "os": "linux", "cpu": "ppc64", "libc": "glibc" }, "sha512-9nWkcdd+H+XhaA3fQIwpHnKIrfx/PQ6rO0pivr78Og07tXlUlctBBJoEYLPfhTmCR/QxEVdn6uPjHV5SymPhdw=="], - "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], + "@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.2.15", "", { "os": "linux", "cpu": "s390x", "libc": "glibc" }, "sha512-Ggh0ciFjLwIusLSLz7LZYEaGdxOAUJXI+Qu5JCbhPJJHEt8vP+IjRATTJheiJsdzzTYgUiHUiw3X1Ea3ZpMBdA=="], - "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], + "@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.2.15", "", { "os": "linux", "cpu": "x64", "libc": "glibc" }, "sha512-FHg60rS6DBePAYZ9X9F67x+JObFdmgn6tupA1C/a3B+CufFmTD4mX+e8M75tCiAO3foR/6xwVBI0KQiI7sn/rw=="], - "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], + "@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.2.15", "", { "os": "linux", "cpu": "x64", "libc": "musl" }, "sha512-/cvV/7v5VGz/moiz0XKRj2dE8DzsKyhIu1KpOvJGPjRywg3yscON889UGvAe8zfiJLHup7VLjBduoGWi3HusWQ=="], - "@nolyfill/is-core-module": ["@nolyfill/is-core-module@1.0.39", "", {}, "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA=="], + "@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.2.15", "", { "os": "none", "cpu": "arm64" }, "sha512-MyzC5Hrv/sm+Z7TSGKP/j8001RO2xQm1zOpCNVL4j0cY/VhBZviludA2YFQ7i4lH6ZAXxQm0lcMdBzM+99mE7w=="], - "@rtsao/scc": ["@rtsao/scc@1.1.0", "", {}, "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g=="], + "@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.2.15", "", { "os": "win32", "cpu": "arm64" }, "sha512-+PgYiS+AH5omy6L45ZLxybasauJaj3M8buoT83D+nzPmCayXlxUV9hydhciCKVyIg0B/v0BtXPDE1uGqNwCPpg=="], - "@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + "@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.2.15", "", { "os": "win32", "cpu": "x64" }, "sha512-HFZd2QNQYn1JbIi+Hpd7H+r/lkWxcfIu28nirZ6eCn2LafuvmExMlb/P96Sfx5tf7pPArw39IdhmCF8vmV+NhQ=="], - "@tabler/icons": ["@tabler/icons@3.37.1", "", {}, "sha512-neLCWkuyNHEPXCyYu6nbN4S3g/59BTa4qyITAugYVpq1YzYNDOZooW7/vRWH98ZItXAudxdKU8muFT7y1PqzuA=="], + "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.1", "", {}, "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw=="], - "@tabler/icons-react": ["@tabler/icons-react@3.37.1", "", { "dependencies": { "@tabler/icons": "" }, "peerDependencies": { "react": ">= 16" } }, "sha512-R7UE71Jji7i4Su56Y9zU1uYEBakUejuDJvyuYVmBuUoqp/x3Pn4cv2huarexR3P0GJ2eHg4rUj9l5zccqS6K/Q=="], + "@shikijs/core": ["@shikijs/core@4.5.0", "", { "dependencies": { "@shikijs/primitive": "4.5.0", "@shikijs/types": "4.5.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.5", "hast-util-to-html": "^9.0.5" } }, "sha512-6CIgwq+bt2JZ3OSjb/nBkkwEf/CfpHcbam+Mg5Pllco7HAGRQ2/EFhZrrJtbyNTgKwknfVS+llsXGygiDGwJWw=="], - "@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], + "@shikijs/engine-javascript": ["@shikijs/engine-javascript@4.5.0", "", { "dependencies": { "@shikijs/types": "4.5.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.6" } }, "sha512-Ed6UdEj84LyYkwnxM5CvSMWAD+id9ExTYri0/+x41U9zrgNifPSS9lZm0JqBP0VfYI8yr8tY5nbNq9+p9R0kFA=="], - "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], + "@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@4.5.0", "", { "dependencies": { "@shikijs/types": "4.5.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-dKVmbJecVdB9recl8a/CU4jdpNXyjJQrIcesIkpS70s5HS02ohpnCSpMUbotPnEUzbAcLQ+S4hwZYbkBBiTcJw=="], - "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], + "@shikijs/langs": ["@shikijs/langs@4.5.0", "", { "dependencies": { "@shikijs/types": "4.5.0" } }, "sha512-wwBTqwduXSz0X4v9Qa2EWeFaYJEw1clCncWjoRNQRbVDu3SPRTRWucnouYapKj3b8Q+sk/41Vbc4B5c8nuYzLA=="], + + "@shikijs/primitive": ["@shikijs/primitive@4.5.0", "", { "dependencies": { "@shikijs/types": "4.5.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.5" } }, "sha512-UM7ShlA8oz0OWxLLO8BmO9Ip6fVqdkt8yF0EH7nOCqHfrx1eEAzF0ZUVK7L+I8NEgeu1PEWSRlxaiPPeCb4iDg=="], + + "@shikijs/themes": ["@shikijs/themes@4.5.0", "", { "dependencies": { "@shikijs/types": "4.5.0" } }, "sha512-zGb87H3UBbpuI4yoh5UguB1XbU+2BDU3kflM7UfZ+Cy2hWo9lBtqjSVK20gmLY6ukYl040hAypGXMgud9vul8Q=="], + + "@shikijs/types": ["@shikijs/types@4.5.0", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.5" } }, "sha512-drtPrtD8N0DENyD2cyt6Ajy+IWsiCLgMxODwLTpvH1UsN6a9jf90tNTPjqwHvA+0Lzu9e0txk8DjfqH1p9UJRw=="], + + "@shikijs/vscode-textmate": ["@shikijs/vscode-textmate@10.1.0", "", {}, "sha512-cVBuhDQjBZaNMTwBquYfPydrUP+E3hE6oYGasx8h6ZrODIM7/r+gxLDXdd66oszbrggZHEntdE6j+5gYIVyMWQ=="], + + "@tabler/icons": ["@tabler/icons@3.37.1", "", {}, "sha512-neLCWkuyNHEPXCyYu6nbN4S3g/59BTa4qyITAugYVpq1YzYNDOZooW7/vRWH98ZItXAudxdKU8muFT7y1PqzuA=="], - "@types/json5": ["@types/json5@0.0.29", "", {}, "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ=="], + "@tabler/icons-react": ["@tabler/icons-react@3.37.1", "", { "dependencies": { "@tabler/icons": "" }, "peerDependencies": { "react": ">= 16" } }, "sha512-R7UE71Jji7i4Su56Y9zU1uYEBakUejuDJvyuYVmBuUoqp/x3Pn4cv2huarexR3P0GJ2eHg4rUj9l5zccqS6K/Q=="], + + "@tybys/wasm-util": ["@tybys/wasm-util@0.10.4", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-W3c4gRigFS0T/Ma4qIYF3GDAc5AQdHb1yL5znJT1Zv1YaD9Kitx656wBjvr19qbiosmZT8lWDM5BEMynUqX65A=="], - "@types/stylis": ["@types/stylis@4.2.7", "", {}, "sha512-VgDNokpBoKF+wrdvhAAfS55OMQpL6QRglwTwNC3kIgBrzZxA4WsFj+2eLfEA/uMUDzBcEhYmjSbwQakn/i3ajA=="], + "@types/esrecurse": ["@types/esrecurse@4.3.1", "", {}, "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw=="], - "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.56.1", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.56.1", "@typescript-eslint/type-utils": "8.56.1", "@typescript-eslint/utils": "8.56.1", "@typescript-eslint/visitor-keys": "8.56.1", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.56.1", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-Jz9ZztpB37dNC+HU2HI28Bs9QXpzCz+y/twHOwhyrIRdbuVDxSytJNDl6z/aAKlaRIwC7y8wJdkBv7FxYGgi0A=="], + "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], - "@typescript-eslint/parser": ["@typescript-eslint/parser@8.56.1", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.56.1", "@typescript-eslint/types": "8.56.1", "@typescript-eslint/typescript-estree": "8.56.1", "@typescript-eslint/visitor-keys": "8.56.1", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-klQbnPAAiGYFyI02+znpBRLyjL4/BrBd0nyWkdC0s/6xFLkXYQ8OoRrSkqacS1ddVxf/LDyODIKbQ5TgKAf/Fg=="], + "@types/estree-jsx": ["@types/estree-jsx@1.0.5", "", { "dependencies": { "@types/estree": "*" } }, "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg=="], - "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.56.1", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.56.1", "@typescript-eslint/types": "^8.56.1", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-TAdqQTzHNNvlVFfR+hu2PDJrURiwKsUvxFn1M0h95BB8ah5jejas08jUWG4dBA68jDMI988IvtfdAI53JzEHOQ=="], + "@types/hast": ["@types/hast@3.0.5", "", { "dependencies": { "@types/unist": "*" } }, "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g=="], - "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.56.1", "", { "dependencies": { "@typescript-eslint/types": "8.56.1", "@typescript-eslint/visitor-keys": "8.56.1" } }, "sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w=="], + "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], - "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.56.1", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-qOtCYzKEeyr3aR9f28mPJqBty7+DBqsdd63eO0yyDwc6vgThj2UjWfJIcsFeSucYydqcuudMOprZ+x1SpF3ZuQ=="], + "@types/mdast": ["@types/mdast@4.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA=="], - "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.56.1", "", { "dependencies": { "@typescript-eslint/types": "8.56.1", "@typescript-eslint/typescript-estree": "8.56.1", "@typescript-eslint/utils": "8.56.1", "debug": "^4.4.3", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-yB/7dxi7MgTtGhZdaHCemf7PuwrHMenHjmzgUW1aJpO+bBU43OycnM3Wn+DdvDO/8zzA9HlhaJ0AUGuvri4oGg=="], + "@types/nlcst": ["@types/nlcst@2.0.3", "", { "dependencies": { "@types/unist": "*" } }, "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA=="], - "@typescript-eslint/types": ["@typescript-eslint/types@8.56.1", "", {}, "sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw=="], + "@types/node": ["@types/node@24.19.2", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-93d49wCWJkCyN87MxLpNN6KXPCwFw7bVUg79mGUV1OS40JGWwVCr8n61DXCSqz7CV6/VfPkb7xec7uP2M+QHWQ=="], - "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.56.1", "", { "dependencies": { "@typescript-eslint/project-service": "8.56.1", "@typescript-eslint/tsconfig-utils": "8.56.1", "@typescript-eslint/types": "8.56.1", "@typescript-eslint/visitor-keys": "8.56.1", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg=="], + "@types/prop-types": ["@types/prop-types@15.7.15", "", {}, "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw=="], - "@typescript-eslint/utils": ["@typescript-eslint/utils@8.56.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.56.1", "@typescript-eslint/types": "8.56.1", "@typescript-eslint/typescript-estree": "8.56.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-HPAVNIME3tABJ61siYlHzSWCGtOoeP2RTIaHXFMPqjrQKCGB9OgUVdiNgH7TJS2JNIQ5qQ4RsAUDuGaGme/KOA=="], + "@types/react": ["@types/react@19.3.0", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg=="], - "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.56.1", "", { "dependencies": { "@typescript-eslint/types": "8.56.1", "eslint-visitor-keys": "^5.0.0" } }, "sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw=="], + "@types/react-dom": ["@types/react-dom@19.3.0", "", { "peerDependencies": { "@types/react": "^19.3.0" } }, "sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q=="], - "@unrs/resolver-binding-android-arm-eabi": ["@unrs/resolver-binding-android-arm-eabi@1.11.1", "", { "os": "android", "cpu": "arm" }, "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw=="], + "@types/sax": ["@types/sax@1.2.7", "", { "dependencies": { "@types/node": "*" } }, "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A=="], - "@unrs/resolver-binding-android-arm64": ["@unrs/resolver-binding-android-arm64@1.11.1", "", { "os": "android", "cpu": "arm64" }, "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g=="], + "@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], - "@unrs/resolver-binding-darwin-arm64": ["@unrs/resolver-binding-darwin-arm64@1.11.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g=="], + "@typescript-eslint/parser": ["@typescript-eslint/parser@8.72.1", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.72.1", "@typescript-eslint/types": "8.72.1", "@typescript-eslint/typescript-estree": "8.72.1", "@typescript-eslint/visitor-keys": "8.72.1", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-ZGwZP4OCfyA0AQTpEAMWz+rtX01DRhQWW5hB0ucKDEIX5U7jdmPSaMx94rQfaPAQzIYz2BimOgKOJtjfpRFQ9g=="], - "@unrs/resolver-binding-darwin-x64": ["@unrs/resolver-binding-darwin-x64@1.11.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ=="], + "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.72.1", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.72.1", "@typescript-eslint/types": "^8.72.1", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-fAuVMkwdO/huI8nyo/WKnNKf6Gag93S56Rh3Ts5mGcavwSdaN8tRg1gCeIGX8PF+nzp1BjGfO4gHhGzW1J6jTg=="], - "@unrs/resolver-binding-freebsd-x64": ["@unrs/resolver-binding-freebsd-x64@1.11.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw=="], + "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.72.1", "", { "dependencies": { "@typescript-eslint/types": "8.72.1", "@typescript-eslint/visitor-keys": "8.72.1" } }, "sha512-lC/t6eMCZZQAAKZEYGL6RDVSuFehpdmMT6h+nJIjIa6oylN/PwDgDVtEIbB7O9xFfZYtZAYLoLlDNWKJhtF+uQ=="], - "@unrs/resolver-binding-linux-arm-gnueabihf": ["@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1", "", { "os": "linux", "cpu": "arm" }, "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw=="], + "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.72.1", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-e4D5R5vpeAEPBxT2BAzsFQL3sbwyeeeo5+aczgNSRK1V734jE7pTqaGFU+fXapWEQwnZbpFaTn32+Z8DwS6OTg=="], - "@unrs/resolver-binding-linux-arm-musleabihf": ["@unrs/resolver-binding-linux-arm-musleabihf@1.11.1", "", { "os": "linux", "cpu": "arm" }, "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw=="], + "@typescript-eslint/types": ["@typescript-eslint/types@8.72.1", "", {}, "sha512-LmE5IhQet1BWOWEXqBrVtBPsMAOQ6Nzk35d+WLh3mk4EUF33sqlfxjio1MdYeSvKSG5skactKKuixBIKXhL4Rw=="], - "@unrs/resolver-binding-linux-arm64-gnu": ["@unrs/resolver-binding-linux-arm64-gnu@1.11.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ=="], + "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.72.1", "", { "dependencies": { "@typescript-eslint/project-service": "8.72.1", "@typescript-eslint/tsconfig-utils": "8.72.1", "@typescript-eslint/types": "8.72.1", "@typescript-eslint/visitor-keys": "8.72.1", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-DAlUoUV93hIvrtIQLwCbmZQYVZwOMhiHJrOVUUIWicFZaIYjTRqlY3I/NZevfkLmSqkNHRu2qYDcq9lrn16oOQ=="], - "@unrs/resolver-binding-linux-arm64-musl": ["@unrs/resolver-binding-linux-arm64-musl@1.11.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w=="], + "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.72.1", "", { "dependencies": { "@typescript-eslint/types": "8.72.1", "eslint-visitor-keys": "^5.0.0" } }, "sha512-SB8xqipSzZHUePCCLNeYxqnxq83X61/qzNhjQGbTfjxGZIeOEP7tBgWYX05Tcd6CgE02WdTJnh5b8kMZJ/+bnQ=="], - "@unrs/resolver-binding-linux-ppc64-gnu": ["@unrs/resolver-binding-linux-ppc64-gnu@1.11.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA=="], + "@ungap/structured-clone": ["@ungap/structured-clone@1.4.0", "", {}, "sha512-1mEZtMKPM09vDmQt5y7YvmN2+DFTP7Tg0EWXdic8/C6VRnpb33e4ghisCIE3WZjsE2N8mf+QV1Zqh7ZFYLWInQ=="], - "@unrs/resolver-binding-linux-riscv64-gnu": ["@unrs/resolver-binding-linux-riscv64-gnu@1.11.1", "", { "os": "linux", "cpu": "none" }, "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ=="], + "@vitejs/plugin-react": ["@vitejs/plugin-react@6.1.2", "", { "dependencies": { "@rolldown/pluginutils": "^1.0.1" }, "peerDependencies": { "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", "babel-plugin-react-compiler": "^1.0.0", "oxc-transform-react": "^0.152.0", "vite": "^8.0.0" }, "optionalPeers": ["@rolldown/plugin-babel", "babel-plugin-react-compiler", "oxc-transform-react"] }, "sha512-fhJNGUdscQa4HkI0xFxwonWyhnVReCPDbXI7FH7jmzpnVCrFQI7PRrhWecO263610vOrs9tr2Y4xcf8uAdFxbw=="], - "@unrs/resolver-binding-linux-riscv64-musl": ["@unrs/resolver-binding-linux-riscv64-musl@1.11.1", "", { "os": "linux", "cpu": "none" }, "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew=="], + "@volar/kit": ["@volar/kit@2.4.30", "", { "dependencies": { "@volar/language-service": "2.4.30", "@volar/typescript": "2.4.30", "typesafe-path": "^0.2.2", "vscode-languageserver-textdocument": "^1.0.11", "vscode-uri": "^3.0.8" }, "peerDependencies": { "typescript": "<7" } }, "sha512-VocLtumfXnqnPQEWc9Yx7uC1uOh9gyjVNlrn2+6Zx/z9aM6yTLhPK8lSqM9Ilu81XRa48I00lcYJWLi2BLxx8Q=="], - "@unrs/resolver-binding-linux-s390x-gnu": ["@unrs/resolver-binding-linux-s390x-gnu@1.11.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg=="], + "@volar/language-core": ["@volar/language-core@2.4.30", "", { "dependencies": { "@volar/source-map": "2.4.30" } }, "sha512-73fjwEV8wat6aOZ6U/y/hqtE30ocrIWECg67b0txGczOMNw+MffLmvJ5fnFfN9drVUEYZzLdaNo6VAy6G6avMw=="], - "@unrs/resolver-binding-linux-x64-gnu": ["@unrs/resolver-binding-linux-x64-gnu@1.11.1", "", { "os": "linux", "cpu": "x64" }, "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w=="], + "@volar/language-server": ["@volar/language-server@2.4.30", "", { "dependencies": { "@volar/language-core": "2.4.30", "@volar/language-service": "2.4.30", "@volar/typescript": "2.4.30", "path-browserify": "^1.0.1", "request-light": "^0.7.0", "vscode-languageserver": "^9.0.1", "vscode-languageserver-protocol": "^3.17.5", "vscode-languageserver-textdocument": "^1.0.11", "vscode-uri": "^3.0.8" }, "peerDependencies": { "typescript": "<7" }, "optionalPeers": ["typescript"] }, "sha512-tcP9fzzUBbsLIFHhgnRU4ncQjMn9G9Vax0ffkQmdCrXVEYqRroUepmyC5AVgiju5bCiLD6a55qen5iOTQHkb3g=="], - "@unrs/resolver-binding-linux-x64-musl": ["@unrs/resolver-binding-linux-x64-musl@1.11.1", "", { "os": "linux", "cpu": "x64" }, "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA=="], + "@volar/language-service": ["@volar/language-service@2.4.30", "", { "dependencies": { "@volar/language-core": "2.4.30", "vscode-languageserver-protocol": "^3.17.5", "vscode-languageserver-textdocument": "^1.0.11", "vscode-uri": "^3.0.8" }, "peerDependencies": { "typescript": "<7" }, "optionalPeers": ["typescript"] }, "sha512-w/xDsASiqC71ggCOm7sTDXDNk/l72XEptodeRC68tgZ0e5QM4hM3zAqBGC7mBctvhrpYwKfMG+t9xcUo2hEFtA=="], - "@unrs/resolver-binding-wasm32-wasi": ["@unrs/resolver-binding-wasm32-wasi@1.11.1", "", { "dependencies": { "@napi-rs/wasm-runtime": "^0.2.11" }, "cpu": "none" }, "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ=="], + "@volar/source-map": ["@volar/source-map@2.4.30", "", {}, "sha512-zym1ob/KwDDyN+0jGVtxwbxJSRRnUvv5HspCtz3yEfVVdCG4/dzxJktMGPAgemqRuVs81O0o/y0q3qOUErR8kg=="], - "@unrs/resolver-binding-win32-arm64-msvc": ["@unrs/resolver-binding-win32-arm64-msvc@1.11.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw=="], + "@volar/typescript": ["@volar/typescript@2.4.30", "", { "dependencies": { "@volar/language-core": "2.4.30", "@volar/language-service": "2.4.30", "path-browserify": "^1.0.1", "vscode-uri": "^3.0.8" }, "peerDependencies": { "typescript": "<7" }, "optionalPeers": ["typescript"] }, "sha512-/DgA5tgYFPfrLFuSjIMXMGHk1LQv2+P8eny6+BhGNzFJELWIW7UZlc56ZLIRFhLsPpMfIFxM8/HvOPBggrjTZg=="], - "@unrs/resolver-binding-win32-ia32-msvc": ["@unrs/resolver-binding-win32-ia32-msvc@1.11.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ=="], + "@vscode/emmet-helper": ["@vscode/emmet-helper@2.11.0", "", { "dependencies": { "emmet": "^2.4.3", "jsonc-parser": "^2.3.0", "vscode-languageserver-textdocument": "^1.0.1", "vscode-languageserver-types": "^3.15.1", "vscode-uri": "^3.0.8" } }, "sha512-QLxjQR3imPZPQltfbWRnHU6JecWTF1QSWhx3GAKQpslx7y3Dp6sIIXhKjiUJ/BR9FX8PVthjr9PD6pNwOJfAzw=="], - "@unrs/resolver-binding-win32-x64-msvc": ["@unrs/resolver-binding-win32-x64-msvc@1.11.1", "", { "os": "win32", "cpu": "x64" }, "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g=="], + "@vscode/l10n": ["@vscode/l10n@0.0.18", "", {}, "sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ=="], "acorn": ["acorn@8.16.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw=="], @@ -267,22 +336,28 @@ "ajv": ["ajv@6.14.0", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw=="], + "ajv-draft-04": ["ajv-draft-04@1.0.0", "", { "peerDependencies": { "ajv": "^8.5.0" }, "optionalPeers": ["ajv"] }, "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw=="], + + "am-i-vibing": ["am-i-vibing@0.5.0", "", { "dependencies": { "process-ancestry": "^0.1.0" }, "bin": { "am-i-vibing": "dist/cli.mjs" } }, "sha512-KLcsDhqf1XRrJmJr+9I/C0EX2K+sGrAGZFgkmd84c8TJO9zJBu+/kFInjazu1KfJWFhWDKdRWkpBzEs7s35DVA=="], + + "ansi-regex": ["ansi-regex@6.4.0", "", {}, "sha512-KzTVk2tCWAHtYrvvvaP8bJKJq2pVinhLcGEQdtLIYPbmNGNyYe8QwNaTUYQp2J7/vIsUKt5QCqAfUkYyG9DkOw=="], + "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="], + "arg": ["arg@5.0.2", "", {}, "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="], + "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], "aria-query": ["aria-query@5.3.2", "", {}, "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw=="], "array-buffer-byte-length": ["array-buffer-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "is-array-buffer": "^3.0.5" } }, "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw=="], - "array-includes": ["array-includes@3.1.9", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.0", "es-object-atoms": "^1.1.1", "get-intrinsic": "^1.3.0", "is-string": "^1.1.1", "math-intrinsics": "^1.1.0" } }, "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ=="], + "array-includes": ["array-includes@3.2.0", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.2", "es-object-atoms": "^1.1.2", "es-shim-unscopables": "^1.1.0", "is-string": "^1.1.1", "math-intrinsics": "^1.1.0" } }, "sha512-VXY5eFRarnXcYxwBjJzPmEhH55+rmP79/+ueDhi0F+TuqfHCItagIHqxeUZrmgrOPa31QTh9H85DjX3FfJ0FTg=="], "array.prototype.findlast": ["array.prototype.findlast@1.2.5", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-shim-unscopables": "^1.0.2" } }, "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ=="], - "array.prototype.findlastindex": ["array.prototype.findlastindex@1.2.6", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.23.9", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "es-shim-unscopables": "^1.1.0" } }, "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ=="], - "array.prototype.flat": ["array.prototype.flat@1.3.3", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-shim-unscopables": "^1.0.2" } }, "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg=="], "array.prototype.flatmap": ["array.prototype.flatmap@1.3.3", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-shim-unscopables": "^1.0.2" } }, "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg=="], @@ -291,31 +366,31 @@ "arraybuffer.prototype.slice": ["arraybuffer.prototype.slice@1.0.4", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "is-array-buffer": "^3.0.4" } }, "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ=="], - "ast-types-flow": ["ast-types-flow@0.0.8", "", {}, "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ=="], + "astro": ["astro@7.4.2", "", { "dependencies": { "@astrojs/compiler-rs": "^0.5.1", "@astrojs/internal-helpers": "0.13.0", "@astrojs/markdown-satteri": "0.4.5", "@astrojs/telemetry": "3.4.1", "@capsizecss/unpack": "^4.0.1", "@clack/prompts": "^1.8.1", "@oslojs/encoding": "^1.1.0", "am-i-vibing": "^0.5.0", "aria-query": "^5.3.2", "axobject-query": "^4.1.0", "ci-info": "^4.4.0", "clsx": "^2.1.1", "common-ancestor-path": "^2.0.0", "cookie": "^2.0.1", "devalue": "^6.0.2", "diff": "^9.0.0", "dset": "^3.1.4", "es-module-lexer": "^3.0.3", "flattie": "^1.1.1", "fontace": "~0.4.1", "get-tsconfig": "5.0.0-beta.6", "github-slugger": "^2.0.0", "html-escaper": "3.0.3", "http-cache-semantics": "^4.3.0", "jsonc-parser": "^3.3.1", "magic-string": "^1.4.3", "magicast": "^0.5.5", "mrmime": "^2.0.1", "neotraverse": "^1.0.1", "obug": "^3.0.0", "p-limit": "^7.3.3", "p-queue": "^9.3.5", "package-manager-detector": "^1.9.0", "piccolore": "^0.1.3", "picomatch": "^4.0.7", "rolldown": "^1.2.13", "shiki": "^4.5.0", "smol-toml": "^1.9.1", "svgo": "^4.1.0", "tinyclip": "^1.0.3", "tinyexec": "^1.3.1", "tinyglobby": "^0.2.17", "tinyps": "^0.5.0", "ultrahtml": "^1.7.0", "unifont": "^1.0.3", "unstorage": "^1.17.5", "verkit": "^0.5.0", "vite": "^8.3.4", "vitefu": "^1.1.3", "xxhash-wasm": "^1.1.0", "yargs-parser": "^22.0.0", "zod": "^4.6.6" }, "optionalDependencies": { "sharp": "^0.35.4" }, "peerDependencies": { "@astrojs/markdown-remark": "^7.3.0" }, "optionalPeers": ["@astrojs/markdown-remark"], "bin": { "astro": "./bin/astro.mjs" } }, "sha512-FAH4cdDlFaVnQGjazLTEIC5vJqGlo5XANc1wIbzQHIqAjJTll/RWTUs+SPNW1JdezG4YGxMZllaE5A41T2kzhA=="], + + "astro-eslint-parser": ["astro-eslint-parser@3.2.0", "", { "dependencies": { "@astrojs/compiler-rs": "^0.4.0 || ^0.5.0", "@typescript-eslint/scope-manager": "^8.61.0", "@typescript-eslint/types": "^8.61.0", "debug": "^4.4.3", "eslint-scope": "^9.1.2", "eslint-visitor-keys": "^5.0.1", "espree": "^11.2.0", "semver": "^7.8.4", "tinyglobby": "^0.2.17" } }, "sha512-WavQUarfgwSbpCq4xsdcIBdX5KArfI2d6DD8EIloJIMthnB1508iNpx4C77EhUyMd03LpEt8HAPzwF/cG0V39g=="], "async-function": ["async-function@1.0.0", "", {}, "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA=="], "available-typed-arrays": ["available-typed-arrays@1.0.7", "", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="], - "axe-core": ["axe-core@4.11.1", "", {}, "sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A=="], - "axobject-query": ["axobject-query@4.1.0", "", {}, "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="], - "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + "bail": ["bail@2.0.2", "", {}, "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="], - "baseline-browser-mapping": ["baseline-browser-mapping@2.10.0", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA=="], + "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="], + "boolbase": ["boolbase@1.0.0", "", {}, "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="], + "brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], - "browserslist": ["browserslist@4.28.1", "", { "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", "electron-to-chromium": "^1.5.263", "node-releases": "^2.0.27", "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" } }, "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA=="], - "bulma": ["bulma@0.9.4", "", {}, "sha512-86FlT5+1GrsgKbPLRRY7cGDg8fsJiP/jzTqXXVqiUZZ2aZT8uemEOHlU1CDU+TxklPEZ11HZNNWclRBBecP4CQ=="], - "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], + "call-bind": ["call-bind@1.0.9", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "get-intrinsic": "^1.3.0", "set-function-length": "^1.2.2" } }, "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ=="], "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], @@ -323,33 +398,53 @@ "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], - "camelize": ["camelize@1.0.1", "", {}, "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ=="], - - "caniuse-lite": ["caniuse-lite@1.0.30001774", "", {}, "sha512-DDdwPGz99nmIEv216hKSgLD+D4ikHQHjBC/seF98N9CPqRX4M5mSxT9eTV6oyisnJcuzxtZy4n17yKKQYmYQOA=="], + "ccount": ["ccount@2.0.1", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="], "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], - "chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], + "character-entities-html4": ["character-entities-html4@2.1.0", "", {}, "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA=="], + + "character-entities-legacy": ["character-entities-legacy@3.0.0", "", {}, "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ=="], + + "chokidar": ["chokidar@5.0.0", "", { "dependencies": { "readdirp": "^5.0.0" } }, "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw=="], + + "ci-info": ["ci-info@4.4.0", "", {}, "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg=="], + + "cliui": ["cliui@9.0.1", "", { "dependencies": { "string-width": "^7.2.0", "strip-ansi": "^7.1.0", "wrap-ansi": "^9.0.0" } }, "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w=="], - "client-only": ["client-only@0.0.1", "", {}, "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="], + "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + "comma-separated-tokens": ["comma-separated-tokens@2.0.3", "", {}, "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="], + + "commander": ["commander@11.1.0", "", {}, "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ=="], + + "common-ancestor-path": ["common-ancestor-path@2.0.0", "", {}, "sha512-dnN3ibLeoRf2HNC+OlCiNc5d2zxbLJXOtiZUudNFSXZrNSydxcCsSpRzXwfu7BBWCIfHPw+xTayeBvJCP/D8Ng=="], + "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], - "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], + "cookie": ["cookie@2.0.1", "", {}, "sha512-yuToqVvRrj6pfDXREyQAAv8SkAEk/8GS3jQRTiUMm66TVtBYmqQeoEjL2Lmq8Rpo6271vH76InTChTitEAm65w=="], + + "cookie-es": ["cookie-es@1.2.3", "", {}, "sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw=="], "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], - "css-color-keywords": ["css-color-keywords@1.0.0", "", {}, "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg=="], + "crossws": ["crossws@0.3.5", "", { "dependencies": { "uncrypto": "^0.1.3" } }, "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA=="], - "css-to-react-native": ["css-to-react-native@3.2.0", "", { "dependencies": { "camelize": "^1.0.0", "css-color-keywords": "^1.0.0", "postcss-value-parser": "^4.0.2" } }, "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ=="], + "css-select": ["css-select@6.0.0", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^7.0.0", "domhandler": "^5.0.3", "domutils": "^3.2.2", "nth-check": "^2.1.1" } }, "sha512-rZZVSLle8v0+EY8QAkDWrKhpgt6SA5OtHsgBnsj6ZaLb5dmDVOWUDtQitd9ydxxvEjhewNudS6eTVU7uOyzvXw=="], - "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], + "css-tree": ["css-tree@3.2.1", "", { "dependencies": { "mdn-data": "2.27.1", "source-map-js": "^1.2.1" } }, "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA=="], + + "css-what": ["css-what@7.0.0", "", {}, "sha512-wD5oz5xibMOPHzy13CyGmogB3phdvcDaB5t0W/Nr5Z2O/agcB8YwOz6e2Lsp10pNDzBoDO9nVa3RGs/2BttpHQ=="], + + "cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], - "damerau-levenshtein": ["damerau-levenshtein@1.0.8", "", {}, "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA=="], + "csso": ["csso@5.0.5", "", { "dependencies": { "css-tree": "~2.2.0" } }, "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ=="], + + "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], "data-view-buffer": ["data-view-buffer@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ=="], @@ -365,8 +460,20 @@ "define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="], + "defu": ["defu@6.1.7", "", {}, "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ=="], + + "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], + + "destr": ["destr@2.0.5", "", {}, "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA=="], + "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], + "devalue": ["devalue@6.0.3", "", {}, "sha512-3woMEITftG1wKeO/4d/QXH1DVKctTSZg3jNGPpjp9hNr5Hos8MCFF5McTML5ZtgKDObm2R591B0spRp2IVernA=="], + + "devlop": ["devlop@1.1.0", "", { "dependencies": { "dequal": "^2.0.0" } }, "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="], + + "diff": ["diff@9.0.0", "", {}, "sha512-svtcdpS8CgJyqAjEQIXdb3OjhFVVYjzGAPO8WGCmRbrml64SPw/jJD4GoE98aR7r25A0XcgrK3F02yw9R/vhQw=="], + "doctrine": ["doctrine@2.1.0", "", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw=="], "dom-serializer": ["dom-serializer@2.0.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", "entities": "^4.2.0" } }, "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg=="], @@ -377,29 +484,35 @@ "domutils": ["domutils@3.2.2", "", { "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3" } }, "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw=="], + "dset": ["dset@3.1.4", "", {}, "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA=="], + "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], - "electron-to-chromium": ["electron-to-chromium@1.5.302", "", {}, "sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg=="], + "emmet": ["emmet@2.4.11", "", { "dependencies": { "@emmetio/abbreviation": "^2.3.3", "@emmetio/css-abbreviation": "^2.1.8" } }, "sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ=="], - "emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], + "emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], - "entities": ["entities@7.0.1", "", {}, "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA=="], + "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], - "es-abstract": ["es-abstract@1.24.1", "", { "dependencies": { "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", "get-intrinsic": "^1.3.0", "get-proto": "^1.0.1", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "internal-slot": "^1.1.0", "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", "is-negative-zero": "^2.0.3", "is-regex": "^1.2.1", "is-set": "^2.0.3", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", "stop-iteration-iterator": "^1.1.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.3", "typed-array-byte-length": "^1.0.3", "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", "which-typed-array": "^1.1.19" } }, "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw=="], + "es-abstract": ["es-abstract@1.24.2", "", { "dependencies": { "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", "get-intrinsic": "^1.3.0", "get-proto": "^1.0.1", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "internal-slot": "^1.1.0", "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", "is-negative-zero": "^2.0.3", "is-regex": "^1.2.1", "is-set": "^2.0.3", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", "stop-iteration-iterator": "^1.1.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.3", "typed-array-byte-length": "^1.0.3", "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", "which-typed-array": "^1.1.19" } }, "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg=="], + + "es-abstract-get": ["es-abstract-get@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "es-object-atoms": "^1.1.2", "is-callable": "^1.2.7", "object-inspect": "^1.13.4" } }, "sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg=="], "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], - "es-iterator-helpers": ["es-iterator-helpers@1.2.2", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.1", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.1.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.3.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "iterator.prototype": "^1.1.5", "safe-array-concat": "^1.1.3" } }, "sha512-BrUQ0cPTB/IwXj23HtwHjS9n7O4h9FX94b4xc5zlTHxeLgTAdzYUDyy6KdExAl9lbN5rtfe44xpjpmj9grxs5w=="], + "es-iterator-helpers": ["es-iterator-helpers@1.4.0", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.2", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.1.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.3.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "iterator.prototype": "^1.1.5", "math-intrinsics": "^1.1.0" } }, "sha512-c/A0P0oxkACDc+cKWw8evLXK83oBKgn0qPOqCYT4x9uolpCIJAcYvJC9QYKNDRPsTeGyCrQ326jrvgZWdCdK5Q=="], + + "es-module-lexer": ["es-module-lexer@3.0.4", "", {}, "sha512-BldNY5mwkVu+cQ5Ymn3e6hB9Sx8XHx4ZevWbiUyZbfKxJxYO27Hf0wfzkxIaD5CAJMaGl3YspKELj0ff/7nCMA=="], - "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], + "es-object-atoms": ["es-object-atoms@1.1.2", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw=="], "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="], "es-shim-unscopables": ["es-shim-unscopables@1.1.0", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw=="], - "es-to-primitive": ["es-to-primitive@1.3.0", "", { "dependencies": { "is-callable": "^1.2.7", "is-date-object": "^1.0.5", "is-symbol": "^1.0.4" } }, "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g=="], + "es-to-primitive": ["es-to-primitive@1.3.4", "", { "dependencies": { "es-abstract-get": "^1.0.0", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "is-callable": "^1.2.7", "is-date-object": "^1.1.0", "is-symbol": "^1.1.1" } }, "sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw=="], "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], @@ -407,22 +520,10 @@ "eslint": ["eslint@9.39.3", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.1", "@eslint/config-helpers": "^0.4.2", "@eslint/core": "^0.17.0", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "9.39.3", "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.4.0", "eslint-visitor-keys": "^4.2.1", "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg=="], - "eslint-config-next": ["eslint-config-next@16.1.6", "", { "dependencies": { "@next/eslint-plugin-next": "16.1.6", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", "eslint-plugin-import": "^2.32.0", "eslint-plugin-jsx-a11y": "^6.10.0", "eslint-plugin-react": "^7.37.0", "eslint-plugin-react-hooks": "^7.0.0", "globals": "16.4.0", "typescript-eslint": "^8.46.0" }, "peerDependencies": { "eslint": ">=9.0.0", "typescript": ">=3.3.1" }, "optionalPeers": ["typescript"] }, "sha512-vKq40io2B0XtkkNDYyleATwblNt8xuh3FWp8SpSz3pt7P01OkBFlKsJZ2mWt5WsCySlDQLckb1zMY9yE9Qy0LA=="], - - "eslint-import-resolver-node": ["eslint-import-resolver-node@0.3.9", "", { "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", "resolve": "^1.22.4" } }, "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g=="], - - "eslint-import-resolver-typescript": ["eslint-import-resolver-typescript@3.10.1", "", { "dependencies": { "@nolyfill/is-core-module": "1.0.39", "debug": "^4.4.0", "get-tsconfig": "^4.10.0", "is-bun-module": "^2.0.0", "stable-hash": "^0.0.5", "tinyglobby": "^0.2.13", "unrs-resolver": "^1.6.2" }, "peerDependencies": { "eslint": "*", "eslint-plugin-import": "*", "eslint-plugin-import-x": "*" }, "optionalPeers": ["eslint-plugin-import", "eslint-plugin-import-x"] }, "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ=="], - - "eslint-module-utils": ["eslint-module-utils@2.12.1", "", { "dependencies": { "debug": "^3.2.7" } }, "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw=="], - - "eslint-plugin-import": ["eslint-plugin-import@2.32.0", "", { "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", "array.prototype.findlastindex": "^1.2.6", "array.prototype.flat": "^1.3.3", "array.prototype.flatmap": "^1.3.3", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", "eslint-module-utils": "^2.12.1", "hasown": "^2.0.2", "is-core-module": "^2.16.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "object.groupby": "^1.0.3", "object.values": "^1.2.1", "semver": "^6.3.1", "string.prototype.trimend": "^1.0.9", "tsconfig-paths": "^3.15.0" }, "peerDependencies": { "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA=="], - - "eslint-plugin-jsx-a11y": ["eslint-plugin-jsx-a11y@6.10.2", "", { "dependencies": { "aria-query": "^5.3.2", "array-includes": "^3.1.8", "array.prototype.flatmap": "^1.3.2", "ast-types-flow": "^0.0.8", "axe-core": "^4.10.0", "axobject-query": "^4.1.0", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", "hasown": "^2.0.2", "jsx-ast-utils": "^3.3.5", "language-tags": "^1.0.9", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "safe-regex-test": "^1.0.3", "string.prototype.includes": "^2.0.1" }, "peerDependencies": { "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" } }, "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q=="], + "eslint-plugin-astro": ["eslint-plugin-astro@3.2.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.5.1", "@jridgewell/sourcemap-codec": "^1.5.0", "@typescript-eslint/types": "^8.61.0", "astro-eslint-parser": "^3.0.0", "espree": "^11.0.0", "globals": "^17.0.0", "postcss": "^8.5.3", "postcss-selector-parser": "^7.1.0", "synckit": "^0.11.13" }, "peerDependencies": { "@typescript-eslint/parser": ">=8.61.0", "eslint": ">=10.0.0", "eslint-plugin-jsx-a11y": ">=6.10.2", "eslint-plugin-jsx-a11y-x": ">=0.2.0", "typescript-eslint": ">=8.61.0" }, "optionalPeers": ["@typescript-eslint/parser", "eslint-plugin-jsx-a11y", "eslint-plugin-jsx-a11y-x", "typescript-eslint"] }, "sha512-IgU7LIkpEg0r6bQGwc3Ck5jHgkUk3rOrEfRhUxDtMx/M0GD3SG/turMtvwj989KRR12Wt1l89faZ5ynjvVL7hg=="], "eslint-plugin-react": ["eslint-plugin-react@7.37.5", "", { "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", "array.prototype.flatmap": "^1.3.3", "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", "es-iterator-helpers": "^1.2.1", "estraverse": "^5.3.0", "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", "object.entries": "^1.1.9", "object.fromentries": "^2.0.8", "object.values": "^1.2.1", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.5", "semver": "^6.3.1", "string.prototype.matchall": "^4.0.12", "string.prototype.repeat": "^1.0.0" }, "peerDependencies": { "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA=="], - "eslint-plugin-react-hooks": ["eslint-plugin-react-hooks@7.0.1", "", { "dependencies": { "@babel/core": "^7.24.4", "@babel/parser": "^7.24.4", "hermes-parser": "^0.25.1", "zod": "^3.25.0 || ^4.0.0", "zod-validation-error": "^3.5.0 || ^4.0.0" }, "peerDependencies": { "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, "sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA=="], - "eslint-scope": ["eslint-scope@8.4.0", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg=="], "eslint-visitor-keys": ["eslint-visitor-keys@4.2.1", "", {}, "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ=="], @@ -437,15 +538,23 @@ "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], - "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], + "eventemitter3": ["eventemitter3@5.0.4", "", {}, "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw=="], - "fast-glob": ["fast-glob@3.3.1", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" } }, "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg=="], + "extend": ["extend@3.0.2", "", {}, "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="], + + "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="], "fast-levenshtein": ["fast-levenshtein@2.0.6", "", {}, "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="], - "fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="], + "fast-string-truncated-width": ["fast-string-truncated-width@3.0.3", "", {}, "sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g=="], + + "fast-string-width": ["fast-string-width@3.0.2", "", { "dependencies": { "fast-string-truncated-width": "^3.0.2" } }, "sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg=="], + + "fast-uri": ["fast-uri@3.1.9", "", {}, "sha512-hS/0Wt3Ya043oKXs0sIxrMpKQITXhMLIrVAKKXi4gozGC9v7YRWVnXIZzjNPTO02M9BdxLCWqK1yRXgNziVyJQ=="], + + "fast-wrap-ansi": ["fast-wrap-ansi@0.2.2", "", { "dependencies": { "fast-string-width": "^3.0.2" } }, "sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q=="], "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], @@ -459,19 +568,29 @@ "flatted": ["flatted@3.3.3", "", {}, "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg=="], + "flattie": ["flattie@1.1.1", "", {}, "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ=="], + + "fnv1a-64": ["fnv1a-64@0.1.2", "", {}, "sha512-mJbcILTPybAR1jdOwt/lVv8N2cffeJFFP+gVbSAwLEx1ujXH27RpPd8Rokec/KX9c76UYIB6Co+H4lQzxPnJfA=="], + + "fontace": ["fontace@0.4.1", "", { "dependencies": { "fontkitten": "^1.0.2" } }, "sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw=="], + + "fontkitten": ["fontkitten@1.0.3", "", { "dependencies": { "tiny-inflate": "^1.0.3" } }, "sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw=="], + "for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="], "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], - "function.prototype.name": ["function.prototype.name@1.1.8", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "functions-have-names": "^1.2.3", "hasown": "^2.0.2", "is-callable": "^1.2.7" } }, "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q=="], + "function.prototype.name": ["function.prototype.name@1.2.0", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", "has-property-descriptors": "^1.0.2", "hasown": "^2.0.4", "is-callable": "^1.2.7", "is-document.all": "^1.0.0" } }, "sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew=="], "functions-have-names": ["functions-have-names@1.2.3", "", {}, "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="], "generator-function": ["generator-function@2.0.1", "", {}, "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g=="], - "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], + "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], + + "get-east-asian-width": ["get-east-asian-width@1.7.0", "", {}, "sha512-XjH1AECxf0giL2V1aU8vKyRR2ppRUb5c0EvT7zuJTokQ74bNo52zOtghqdWIqrhUD79fo3x0WfKZdOqxF6LG1Q=="], "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], @@ -479,16 +598,20 @@ "get-symbol-description": ["get-symbol-description@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6" } }, "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg=="], - "get-tsconfig": ["get-tsconfig@4.13.6", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw=="], + "get-tsconfig": ["get-tsconfig@5.0.0-beta.6", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-X6fBC0pmImC70gvX2zm56go9hx0MyoGVdG0tUCkg/D+Xnh5TJsOZ7iDbOdI3PvmtrDxnu1YdDufpK2QJX1Meqw=="], + + "github-slugger": ["github-slugger@2.0.0", "", {}, "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw=="], "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], - "globals": ["globals@16.4.0", "", {}, "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw=="], + "globals": ["globals@17.13.0", "", {}, "sha512-RwMTC61u7hrG3ZJMkZQOK4JLJrKS8QtoTii63EmWvFXHqycY9FObBJQCbsLxSO8kjKhWE5kV1GC+Vb1g3RI0Zg=="], "globalthis": ["globalthis@1.0.4", "", { "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ=="], "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], + "h3": ["h3@1.15.11", "", { "dependencies": { "cookie-es": "^1.2.3", "crossws": "^0.3.5", "defu": "^6.1.6", "destr": "^2.0.5", "iron-webcrypto": "^1.2.1", "node-mock-http": "^1.0.4", "radix3": "^1.1.2", "ufo": "^1.6.3", "uncrypto": "^0.1.3" } }, "sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg=="], + "has-bigints": ["has-bigints@1.1.0", "", {}, "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg=="], "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], @@ -501,17 +624,17 @@ "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], - "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + "hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], - "hermes-estree": ["hermes-estree@0.25.1", "", {}, "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw=="], + "hast-util-to-html": ["hast-util-to-html@9.0.5", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-whitespace": "^3.0.0", "html-void-elements": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "stringify-entities": "^4.0.0", "zwitch": "^2.0.4" } }, "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw=="], - "hermes-parser": ["hermes-parser@0.25.1", "", { "dependencies": { "hermes-estree": "0.25.1" } }, "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA=="], + "hast-util-whitespace": ["hast-util-whitespace@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw=="], - "html-dom-parser": ["html-dom-parser@5.1.8", "", { "dependencies": { "domhandler": "5.0.3", "htmlparser2": "10.1.0" } }, "sha512-MCIUng//mF2qTtGHXJWr6OLfHWmg3Pm8ezpfiltF83tizPWY17JxT4dRLE8lykJ5bChJELoY3onQKPbufJHxYA=="], + "html-escaper": ["html-escaper@3.0.3", "", {}, "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ=="], - "html-react-parser": ["html-react-parser@5.2.17", "", { "dependencies": { "domhandler": "5.0.3", "html-dom-parser": "5.1.8", "react-property": "2.0.2", "style-to-js": "1.1.21" }, "peerDependencies": { "@types/react": "0.14 || 15 || 16 || 17 || 18 || 19", "react": "0.14 || 15 || 16 || 17 || 18 || 19" }, "optionalPeers": ["@types/react"] }, "sha512-m+K/7Moq1jodAB4VL0RXSOmtwLUYoAsikZhwd+hGQe5Vtw2dbWfpFd60poxojMU0Tsh9w59mN1QLEcoHz0Dx9w=="], + "html-void-elements": ["html-void-elements@3.0.0", "", {}, "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg=="], - "htmlparser2": ["htmlparser2@10.1.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.2.2", "entities": "^7.0.1" } }, "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ=="], + "http-cache-semantics": ["http-cache-semantics@4.3.0", "", {}, "sha512-M5t5LlJpS1UHMjvwRQVdFHvPISGeLAxNcrWuJkeGh0KxsqCHZ1O3NXZU/8x7cD0BDcGW8kapxMKTvwlqrNkHkA=="], "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], @@ -521,10 +644,10 @@ "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], - "inline-style-parser": ["inline-style-parser@0.2.7", "", {}, "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA=="], - "internal-slot": ["internal-slot@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw=="], + "iron-webcrypto": ["iron-webcrypto@1.2.1", "", {}, "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg=="], + "is-array-buffer": ["is-array-buffer@3.0.5", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A=="], "is-async-function": ["is-async-function@2.1.1", "", { "dependencies": { "async-function": "^1.0.0", "call-bound": "^1.0.3", "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ=="], @@ -535,16 +658,18 @@ "is-boolean-object": ["is-boolean-object@1.2.2", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A=="], - "is-bun-module": ["is-bun-module@2.0.0", "", { "dependencies": { "semver": "^7.7.1" } }, "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ=="], - "is-callable": ["is-callable@1.2.7", "", {}, "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="], - "is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="], + "is-core-module": ["is-core-module@2.17.0", "", { "dependencies": { "hasown": "^2.0.4" } }, "sha512-J/vG0zBCbIKOQFfufSwyXdMrsohyJIUNkrnmo6WZGzoM7tr/lsbfW5b2BvisL6zsyMzK9UxV9L6c7AoFbyXHOA=="], "is-data-view": ["is-data-view@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" } }, "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw=="], "is-date-object": ["is-date-object@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg=="], + "is-docker": ["is-docker@4.0.0", "", { "bin": { "is-docker": "cli.js" } }, "sha512-LHE+wROyG/Y/0ZnbktRCoTix2c1RhgWaZraMZ8o1Q7zCh0VSrICJQO5oqIIISrcSBtrXv0o233w1IYwsWCjTzA=="], + + "is-document.all": ["is-document.all@1.0.0", "", { "dependencies": { "call-bound": "^1.0.4" } }, "sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g=="], + "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], "is-finalizationregistry": ["is-finalizationregistry@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg=="], @@ -561,6 +686,8 @@ "is-number-object": ["is-number-object@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw=="], + "is-plain-obj": ["is-plain-obj@4.1.0", "", {}, "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="], + "is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], "is-set": ["is-set@2.0.3", "", {}, "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg=="], @@ -589,64 +716,102 @@ "js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="], - "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], - "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], "json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], "json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "", {}, "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="], - "json5": ["json5@1.0.2", "", { "dependencies": { "minimist": "^1.2.0" }, "bin": { "json5": "lib/cli.js" } }, "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA=="], + "jsonc-parser": ["jsonc-parser@3.3.1", "", {}, "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ=="], "jsx-ast-utils": ["jsx-ast-utils@3.3.5", "", { "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", "object.assign": "^4.1.4", "object.values": "^1.1.6" } }, "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ=="], "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="], - "language-subtag-registry": ["language-subtag-registry@0.3.23", "", {}, "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ=="], - - "language-tags": ["language-tags@1.0.9", "", { "dependencies": { "language-subtag-registry": "^0.3.20" } }, "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA=="], + "kleur": ["kleur@4.1.5", "", {}, "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="], "levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="], + "lightningcss": ["lightningcss@1.33.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.33.0", "lightningcss-darwin-arm64": "1.33.0", "lightningcss-darwin-x64": "1.33.0", "lightningcss-freebsd-x64": "1.33.0", "lightningcss-linux-arm-gnueabihf": "1.33.0", "lightningcss-linux-arm64-gnu": "1.33.0", "lightningcss-linux-arm64-musl": "1.33.0", "lightningcss-linux-x64-gnu": "1.33.0", "lightningcss-linux-x64-musl": "1.33.0", "lightningcss-win32-arm64-msvc": "1.33.0", "lightningcss-win32-x64-msvc": "1.33.0" } }, "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA=="], + + "lightningcss-android-arm64": ["lightningcss-android-arm64@1.33.0", "", { "os": "android", "cpu": "arm64" }, "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg=="], + + "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.33.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg=="], + + "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.33.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ=="], + + "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.33.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg=="], + + "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.33.0", "", { "os": "linux", "cpu": "arm" }, "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ=="], + + "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.33.0", "", { "os": "linux", "cpu": "arm64", "libc": "glibc" }, "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg=="], + + "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.33.0", "", { "os": "linux", "cpu": "arm64", "libc": "musl" }, "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ=="], + + "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.33.0", "", { "os": "linux", "cpu": "x64", "libc": "glibc" }, "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg=="], + + "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.33.0", "", { "os": "linux", "cpu": "x64", "libc": "musl" }, "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw=="], + + "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.33.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA=="], + + "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.33.0", "", { "os": "win32", "cpu": "x64" }, "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA=="], + "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], - "lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], + "lru-cache": ["lru-cache@11.5.3", "", {}, "sha512-U4N8FgzmWxc8k1VH8Kr6lQg18U7Fjvby6wXHVRX/ZZ7IwWbRMgrRbP0Wrb5q5NVinryp4SQampHKdvtecItxUg=="], + + "magic-string": ["magic-string@1.4.5", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.6.0" } }, "sha512-oLLC2+YvQUfAa+vxoufE/yc1icb87M9iXIRqAoR/2EhE/8cb3SF/+Gi0c2By1B+5Vz2e2vQtUvHiu1+63Znh+w=="], + + "magicast": ["magicast@0.5.5", "", { "dependencies": { "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7", "source-map-js": "^1.2.1" } }, "sha512-UicdXN8zQ3JHlxVq+28afMXPr1z7WNY6+7EJnzTdQWkTAlMLF5fNCCKxJHBQwGaNGR11581EiQmQzx73+MvszA=="], "marked": ["marked@12.0.2", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q=="], "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], - "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], + "mdast-util-to-hast": ["mdast-util-to-hast@13.2.1", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@ungap/structured-clone": "^1.0.0", "devlop": "^1.0.0", "micromark-util-sanitize-uri": "^2.0.0", "trim-lines": "^3.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA=="], + + "mdn-data": ["mdn-data@2.27.1", "", {}, "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ=="], + + "micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], + + "micromark-util-encode": ["micromark-util-encode@2.0.1", "", {}, "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw=="], - "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], + "micromark-util-sanitize-uri": ["micromark-util-sanitize-uri@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ=="], + + "micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + + "micromark-util-types": ["micromark-util-types@2.0.3", "", {}, "sha512-oxB2Ik03hI0gv+VNn9tnh1t1YEe9MDPptViAEgfdf3YQHsn0pzGTgCdlSCJXcwhqm8phaEuM7zeEu3QQzVBrPg=="], "minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], - "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], + "mrmime": ["mrmime@2.0.1", "", {}, "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ=="], "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + "muggle-string": ["muggle-string@0.4.1", "", {}, "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ=="], - "napi-postinstall": ["napi-postinstall@0.3.4", "", { "bin": { "napi-postinstall": "lib/cli.js" } }, "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ=="], + "nanoid": ["nanoid@3.3.20", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ=="], "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], - "next": ["next@16.1.6", "", { "dependencies": { "@next/env": "16.1.6", "@swc/helpers": "0.5.15", "baseline-browser-mapping": "^2.8.3", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "16.1.6", "@next/swc-darwin-x64": "16.1.6", "@next/swc-linux-arm64-gnu": "16.1.6", "@next/swc-linux-arm64-musl": "16.1.6", "@next/swc-linux-x64-gnu": "16.1.6", "@next/swc-linux-x64-musl": "16.1.6", "@next/swc-win32-arm64-msvc": "16.1.6", "@next/swc-win32-x64-msvc": "16.1.6", "sharp": "^0.34.4" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-hkyRkcu5x/41KoqnROkfTm2pZVbKxvbZRuNvKXLRXxs3VfyO0WhY50TQS40EuKO9SW3rBj/sF3WbVwDACeMZyw=="], + "neotraverse": ["neotraverse@1.0.1", "", {}, "sha512-WmmLty1YWwJl9yZi77v2dVIV6X2kuYV8YYBI/G3LWGKdGHmHUvL1z7FW0iDvEvGAwNEoc5x1tOOOyDnf5jJw/w=="], - "next-sitemap": ["next-sitemap@4.2.3", "", { "dependencies": { "@corex/deepmerge": "^4.0.43", "@next/env": "^13.4.3", "fast-glob": "^3.2.12", "minimist": "^1.2.8" }, "peerDependencies": { "next": "*" }, "bin": { "next-sitemap": "bin/next-sitemap.mjs", "next-sitemap-cjs": "bin/next-sitemap.cjs" } }, "sha512-vjdCxeDuWDzldhCnyFCQipw5bfpl4HmZA7uoo3GAaYGjGgfL4Cxb1CiztPuWGmS+auYs7/8OekRS8C2cjdAsjQ=="], + "nlcst-to-string": ["nlcst-to-string@4.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0" } }, "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA=="], - "node-exports-info": ["node-exports-info@1.6.0", "", { "dependencies": { "array.prototype.flatmap": "^1.3.3", "es-errors": "^1.3.0", "object.entries": "^1.1.9", "semver": "^6.3.1" } }, "sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw=="], + "node-exports-info": ["node-exports-info@1.6.2", "", { "dependencies": { "array.prototype.flatmap": "^1.3.3", "es-errors": "^1.3.0", "object.entries": "^1.1.9", "semver": "^6.3.1" } }, "sha512-kXs9Go0cah0qHVV2v389IXQLdLCeE1xfFtjOAF+iobu0OIoG1pje8At2vMHyaPMiPMnG/LWP50twML21eMcAag=="], - "node-releases": ["node-releases@2.0.27", "", {}, "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="], + "node-fetch-native": ["node-fetch-native@1.6.7", "", {}, "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q=="], + + "node-mock-http": ["node-mock-http@1.0.5", "", {}, "sha512-KQyt/wLjG3TAc7DOUhpqWzgd4ERxR80JOlTK5VE5R1S12IaPVN5qkj4klBce9HPG1Njuup4Sb5bljaT34lIyjw=="], "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], + "nth-check": ["nth-check@2.1.1", "", { "dependencies": { "boolbase": "^1.0.0" } }, "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="], + "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], @@ -659,43 +824,67 @@ "object.fromentries": ["object.fromentries@2.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2", "es-object-atoms": "^1.0.0" } }, "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ=="], - "object.groupby": ["object.groupby@1.0.3", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2" } }, "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ=="], - "object.values": ["object.values@1.2.1", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA=="], + "obug": ["obug@3.0.0", "", {}, "sha512-5vvB5+W7ePv+p3uqxi+RcW1XAzLW0/hxt3/4X4Lc4qHudzOhmBiBwOY6DRob4WnanAEGvNcLjF+KNOufrUoEQw=="], + + "ofetch": ["ofetch@1.5.1", "", { "dependencies": { "destr": "^2.0.5", "node-fetch-native": "^1.6.7", "ufo": "^1.6.1" } }, "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA=="], + + "oniguruma-parser": ["oniguruma-parser@0.12.2", "", {}, "sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw=="], + + "oniguruma-to-es": ["oniguruma-to-es@4.3.6", "", { "dependencies": { "oniguruma-parser": "^0.12.2", "regex": "^6.1.0", "regex-recursion": "^6.0.2" } }, "sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA=="], + "optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="], - "own-keys": ["own-keys@1.0.1", "", { "dependencies": { "get-intrinsic": "^1.2.6", "object-keys": "^1.1.1", "safe-push-apply": "^1.0.0" } }, "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg=="], + "own-keys": ["own-keys@1.0.2", "", { "dependencies": { "call-bound": "^1.0.4", "get-intrinsic": "^1.3.0", "object-keys": "^1.1.1", "safe-push-apply": "^1.0.0" } }, "sha512-19YVAg7T+WTrxggPukVq7DjTv6+PJ867TmhCvBsYwmbFCsZd344rq2Ld1p0wo8f8Qrrhgp82c6FJRqdXWtSEhg=="], - "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], + "p-limit": ["p-limit@7.3.3", "", { "dependencies": { "yocto-queue": "^1.2.1" } }, "sha512-SKgVvDU5TNIxQ4r30U75BNLC6a+6GOEjngrk/ysM5+Zu3oJuk1SC5ApzIzY/7PjCEjoVPMWJ0zho/4QUiEB7TQ=="], "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], + "p-queue": ["p-queue@9.3.5", "", { "dependencies": { "eventemitter3": "^5.0.4", "p-timeout": "^7.0.0" } }, "sha512-Lki/zhXFVmDhesBUn/yHRLW9Bte7mE7xoFHzTR8sIomV7a2z+LxYAPkGvdfidNiu4fKSfjtawixxSHcZci5QcQ=="], + + "p-timeout": ["p-timeout@7.0.2", "", {}, "sha512-prbX4Z3YszrFNgH+MW5Zoeq3baXrMtP/MQnFeET90UB/GtGcGDQ5Usg9OCy6ETjTTntOw1SL2z9fMPUppN3Guw=="], + + "package-manager-detector": ["package-manager-detector@1.9.0", "", {}, "sha512-zAMfbta9nPA8AKkA4WdmNAT8R8s6Dk0/xwPsqNnRidMFcLo1YkLuPDTgs2f64XdzS8vbLNnoJ+uUIkgbz7oRHA=="], + "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="], + "path-browserify": ["path-browserify@1.0.1", "", {}, "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="], + "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], + "piccolore": ["piccolore@0.1.3", "", {}, "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw=="], + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], - "picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + "picomatch": ["picomatch@4.0.7", "", {}, "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA=="], "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="], - "postcss": ["postcss@8.4.49", "", { "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA=="], + "postcss": ["postcss@8.5.32", "", { "dependencies": { "nanoid": "^3.3.20", "picocolors": "^1.1.1", "source-map-js": "^1.2.2" } }, "sha512-LJlKCCAUFKOuZxipUdYw1NzIITEsPcgyOG9LkvRJvuKj/bRzbuRY0ARXvL0pWGpsZvn8jku+LMep2eU0seHp8g=="], - "postcss-value-parser": ["postcss-value-parser@4.2.0", "", {}, "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="], + "postcss-selector-parser": ["postcss-selector-parser@7.1.7", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-wWBro/7hJ40ye6TPiXkUQoXKCw23xSsjriUvqd7Uls9Sso3oLiON1flc18cCdnjgCRXw4fBVqUJJeOdDTh3P3g=="], "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], + "prettier": ["prettier@3.9.10", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-skGHTH1Yb9QvaTC4hWnRTzEYtCpApF0UMBPz+t/0ZPzP8ihefo/btKd+QA7pUE0fEwA1SbS/NmhyEcstdXOIdA=="], + + "prismjs": ["prismjs@1.30.0", "", {}, "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw=="], + + "process-ancestry": ["process-ancestry@0.1.0", "", {}, "sha512-tGqJW/UnclpYASFcM6Xh8D8l/BMtaQ9+CSG0vlJSJTcdMM4lDRv4c6H0Pdcsfted+bVczdYSfk2fdukg2gQkZg=="], + "prop-types": ["prop-types@15.8.1", "", { "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg=="], + "property-information": ["property-information@7.2.0", "", {}, "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg=="], + "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], - "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], + "radix3": ["radix3@1.1.2", "", {}, "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA=="], "react": ["react@19.2.4", "", {}, "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ=="], @@ -703,25 +892,33 @@ "react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="], - "react-property": ["react-property@2.0.2", "", {}, "sha512-+PbtI3VuDV0l6CleQMsx2gtK0JZbZKbpdu5ynr+lbsuvtmgbNcS3VM0tuY2QjFNOcWxvXeHjDpy42RO+4U2rug=="], - - "readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], + "readdirp": ["readdirp@5.1.1", "", {}, "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA=="], "reflect.getprototypeof": ["reflect.getprototypeof@1.0.10", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.9", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.7", "get-proto": "^1.0.1", "which-builtin-type": "^1.2.1" } }, "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw=="], + "regex": ["regex@6.1.0", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg=="], + + "regex-recursion": ["regex-recursion@6.0.2", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg=="], + + "regex-utilities": ["regex-utilities@2.3.0", "", {}, "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng=="], + "regexp.prototype.flags": ["regexp.prototype.flags@1.5.4", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "get-proto": "^1.0.1", "gopd": "^1.2.0", "set-function-name": "^2.0.2" } }, "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA=="], - "resolve": ["resolve@1.22.11", "", { "dependencies": { "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ=="], + "request-light": ["request-light@0.7.0", "", {}, "sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q=="], + + "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], + + "resolve": ["resolve@2.0.0-next.7", "", { "dependencies": { "es-errors": "^1.3.0", "is-core-module": "^2.16.2", "node-exports-info": "^1.6.0", "object-keys": "^1.1.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ=="], "resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="], - "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], + "retext-smartypants": ["retext-smartypants@6.2.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "nlcst-to-string": "^4.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ=="], - "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], + "rolldown": ["rolldown@1.2.15", "", { "dependencies": { "@oxc-project/types": "=0.155.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm-eabi": "1.2.15", "@rolldown/binding-android-arm64": "1.2.15", "@rolldown/binding-darwin-arm64": "1.2.15", "@rolldown/binding-darwin-x64": "1.2.15", "@rolldown/binding-freebsd-x64": "1.2.15", "@rolldown/binding-linux-arm-gnueabihf": "1.2.15", "@rolldown/binding-linux-arm64-gnu": "1.2.15", "@rolldown/binding-linux-arm64-musl": "1.2.15", "@rolldown/binding-linux-ppc64-gnu": "1.2.15", "@rolldown/binding-linux-s390x-gnu": "1.2.15", "@rolldown/binding-linux-x64-gnu": "1.2.15", "@rolldown/binding-linux-x64-musl": "1.2.15", "@rolldown/binding-openharmony-arm64": "1.2.15", "@rolldown/binding-win32-arm64-msvc": "1.2.15", "@rolldown/binding-win32-x64-msvc": "1.2.15" }, "bin": { "rolldown": "./bin/cli.mjs" } }, "sha512-6odND+fel5zVw3I4Yc2e69gvguDnX0CAAGiNDZSq4ik5WUcaLrkD2GLuog0XcODbor31hZ5ayEMgVDno+KPV5g=="], - "safe-array-concat": ["safe-array-concat@1.1.3", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "has-symbols": "^1.1.0", "isarray": "^2.0.5" } }, "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q=="], + "safe-array-concat": ["safe-array-concat@1.1.4", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "get-intrinsic": "^1.3.0", "has-symbols": "^1.1.0", "isarray": "^2.0.5" } }, "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg=="], "safe-push-apply": ["safe-push-apply@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "isarray": "^2.0.5" } }, "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA=="], @@ -729,6 +926,10 @@ "sass": ["sass@1.70.0", "", { "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", "source-map-js": ">=0.6.2 <2.0.0" }, "bin": { "sass": "sass.js" } }, "sha512-uUxNQ3zAHeAx5nRFskBnrWzDUJrrvpCPD5FNAoRvTi0WwremlheES3tg+56PaVtCs5QDRX5CBLxxKMDJMEa1WQ=="], + "satteri": ["satteri@0.10.5", "", { "dependencies": { "@types/estree-jsx": "^1.0.5", "@types/hast": "^3.0.5", "@types/mdast": "^4.0.4", "@types/unist": "^3.0.3" }, "optionalDependencies": { "@bruits/satteri-darwin-arm64": "0.10.5", "@bruits/satteri-darwin-x64": "0.10.5", "@bruits/satteri-linux-arm64-gnu": "0.10.5", "@bruits/satteri-linux-arm64-musl": "0.10.5", "@bruits/satteri-linux-x64-gnu": "0.10.5", "@bruits/satteri-linux-x64-musl": "0.10.5", "@bruits/satteri-wasm32-wasi": "0.10.5", "@bruits/satteri-win32-arm64-msvc": "0.10.5", "@bruits/satteri-win32-x64-msvc": "0.10.5" } }, "sha512-Ao1LKpAEa9Wdg0otgbVKViZHEq9ebdXe4DMrp3s9vQAU0HNIuHnFEuMuOcm0ZIXyV0Yzxj91NvhLpvXZJO/5ZQ=="], + + "sax": ["sax@1.6.1", "", {}, "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q=="], + "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="], "semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], @@ -739,65 +940,79 @@ "set-proto": ["set-proto@1.0.0", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0" } }, "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw=="], - "shallowequal": ["shallowequal@1.1.0", "", {}, "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ=="], - - "sharp": ["sharp@0.34.5", "", { "dependencies": { "@img/colour": "^1.0.0", "detect-libc": "^2.1.2", "semver": "^7.7.3" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.34.5", "@img/sharp-darwin-x64": "0.34.5", "@img/sharp-libvips-darwin-arm64": "1.2.4", "@img/sharp-libvips-darwin-x64": "1.2.4", "@img/sharp-libvips-linux-arm": "1.2.4", "@img/sharp-libvips-linux-arm64": "1.2.4", "@img/sharp-libvips-linux-ppc64": "1.2.4", "@img/sharp-libvips-linux-riscv64": "1.2.4", "@img/sharp-libvips-linux-s390x": "1.2.4", "@img/sharp-libvips-linux-x64": "1.2.4", "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", "@img/sharp-libvips-linuxmusl-x64": "1.2.4", "@img/sharp-linux-arm": "0.34.5", "@img/sharp-linux-arm64": "0.34.5", "@img/sharp-linux-ppc64": "0.34.5", "@img/sharp-linux-riscv64": "0.34.5", "@img/sharp-linux-s390x": "0.34.5", "@img/sharp-linux-x64": "0.34.5", "@img/sharp-linuxmusl-arm64": "0.34.5", "@img/sharp-linuxmusl-x64": "0.34.5", "@img/sharp-wasm32": "0.34.5", "@img/sharp-win32-arm64": "0.34.5", "@img/sharp-win32-ia32": "0.34.5", "@img/sharp-win32-x64": "0.34.5" } }, "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg=="], + "sharp": ["sharp@0.35.5", "", { "dependencies": { "@img/colour": "^1.1.0", "detect-libc": "^2.1.2", "semver": "^7.8.5" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.35.5", "@img/sharp-darwin-x64": "0.35.5", "@img/sharp-freebsd-wasm32": "0.35.5", "@img/sharp-libvips-darwin-arm64": "1.3.4", "@img/sharp-libvips-darwin-x64": "1.3.4", "@img/sharp-libvips-linux-arm": "1.3.4", "@img/sharp-libvips-linux-arm64": "1.3.4", "@img/sharp-libvips-linux-ppc64": "1.3.4", "@img/sharp-libvips-linux-riscv64": "1.3.4", "@img/sharp-libvips-linux-s390x": "1.3.4", "@img/sharp-libvips-linux-x64": "1.3.4", "@img/sharp-libvips-linuxmusl-arm64": "1.3.4", "@img/sharp-libvips-linuxmusl-x64": "1.3.4", "@img/sharp-linux-arm": "0.35.5", "@img/sharp-linux-arm64": "0.35.5", "@img/sharp-linux-ppc64": "0.35.5", "@img/sharp-linux-riscv64": "0.35.5", "@img/sharp-linux-s390x": "0.35.5", "@img/sharp-linux-x64": "0.35.5", "@img/sharp-linuxmusl-arm64": "0.35.5", "@img/sharp-linuxmusl-x64": "0.35.5", "@img/sharp-webcontainers-wasm32": "0.35.5", "@img/sharp-win32-arm64": "0.35.5", "@img/sharp-win32-ia32": "0.35.5", "@img/sharp-win32-x64": "0.35.5" }, "peerDependencies": { "@types/node": "*" }, "optionalPeers": ["@types/node"] }, "sha512-Ywn4OnzGukp7CDMrp08RQ50YKmuwG47brZgIVPTvBaaAfQlRlygrRqSrxdCiL9M+LlzLBiJ68IR1QqvzHyjC7g=="], "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], - "side-channel": ["side-channel@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="], + "shiki": ["shiki@4.5.0", "", { "dependencies": { "@shikijs/core": "4.5.0", "@shikijs/engine-javascript": "4.5.0", "@shikijs/engine-oniguruma": "4.5.0", "@shikijs/langs": "4.5.0", "@shikijs/themes": "4.5.0", "@shikijs/types": "4.5.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.5" } }, "sha512-OcRW72ngQvc+MSVWBRIovC/BTW589iUE/Vxav7VeM4RcY9MUjqB+IR6ILG1k9nuW6LiG/nct9uma4/MBtnZbmQ=="], + + "side-channel": ["side-channel@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.4", "side-channel-list": "^1.0.1", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ=="], - "side-channel-list": ["side-channel-list@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" } }, "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA=="], + "side-channel-list": ["side-channel-list@1.0.1", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.4" } }, "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w=="], "side-channel-map": ["side-channel-map@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" } }, "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA=="], "side-channel-weakmap": ["side-channel-weakmap@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" } }, "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="], + "sisteransi": ["sisteransi@1.0.5", "", {}, "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="], + + "sitemap": ["sitemap@9.0.1", "", { "dependencies": { "@types/node": "^24.9.2", "@types/sax": "^1.2.1", "arg": "^5.0.0", "sax": "^1.4.1" }, "bin": { "sitemap": "dist/esm/cli.js" } }, "sha512-S6hzjGJSG3d6if0YoF5kTyeRJvia6FSTBroE5fQ0bu1QNxyJqhhinfUsXi9fH3MgtXODWvwo2BDyQSnhPQ88uQ=="], + + "smol-toml": ["smol-toml@1.9.1", "", {}, "sha512-j7WyPdf0CJoutMzMoPLF/bVXHtKZIT9Rb4eGeEbWw8X2t5oirjPgpL+OpaENZrILYaXqYwnVH+qgUwVbl+pUJQ=="], + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], - "stable-hash": ["stable-hash@0.0.5", "", {}, "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA=="], + "space-separated-tokens": ["space-separated-tokens@2.0.2", "", {}, "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="], + + "std-env": ["std-env@4.3.0", "", {}, "sha512-OtU/EgQ1kIm5KwqQpBC6ZEMXrZRui11w8zgfTWp8cdO9B8OaPsbA8bTHO2P+HNo1VlUTGMVBwPhydu6poeXiag=="], "stop-iteration-iterator": ["stop-iteration-iterator@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "internal-slot": "^1.1.0" } }, "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ=="], - "string.prototype.includes": ["string.prototype.includes@2.0.1", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.3" } }, "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg=="], + "string-width": ["string-width@8.3.0", "", { "dependencies": { "get-east-asian-width": "^1.5.0", "strip-ansi": "^7.1.2" } }, "sha512-ZbmZM0JCihQN91dWnxoipT2KOEyHqEyfRXUyjuRhW8b/xnqPDoq4gWEVApTVa9db2wN8mmoikgFBbjh71+cGeQ=="], - "string.prototype.matchall": ["string.prototype.matchall@4.0.12", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.6", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "regexp.prototype.flags": "^1.5.3", "set-function-name": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA=="], + "string.prototype.matchall": ["string.prototype.matchall@4.1.0", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.2", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.2", "get-intrinsic": "^1.3.0", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "regexp.prototype.flags": "^1.5.4", "set-function-name": "^2.0.2", "side-channel": "^1.1.1" } }, "sha512-tHNHTxInrYLCga9O9YGxWA3G9/nnzQw8UGAyqGx3Ar1pSTTzIuM4woFSq4SowkXCjJIwq5sIiQvEfRI9tCH1qQ=="], "string.prototype.repeat": ["string.prototype.repeat@1.0.0", "", { "dependencies": { "define-properties": "^1.1.3", "es-abstract": "^1.17.5" } }, "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w=="], - "string.prototype.trim": ["string.prototype.trim@1.2.10", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "define-data-property": "^1.1.4", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-object-atoms": "^1.0.0", "has-property-descriptors": "^1.0.2" } }, "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA=="], + "string.prototype.trim": ["string.prototype.trim@1.2.11", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "define-data-property": "^1.1.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.2", "es-object-atoms": "^1.1.2", "has-property-descriptors": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w=="], - "string.prototype.trimend": ["string.prototype.trimend@1.0.9", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ=="], + "string.prototype.trimend": ["string.prototype.trimend@1.0.10", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-object-atoms": "^1.1.2" } }, "sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw=="], "string.prototype.trimstart": ["string.prototype.trimstart@1.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg=="], - "strip-bom": ["strip-bom@3.0.0", "", {}, "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA=="], + "stringify-entities": ["stringify-entities@4.0.4", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="], + + "strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], - "style-to-js": ["style-to-js@1.1.21", "", { "dependencies": { "style-to-object": "1.0.14" } }, "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ=="], + "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - "style-to-object": ["style-to-object@1.0.14", "", { "dependencies": { "inline-style-parser": "0.2.7" } }, "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw=="], + "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], - "styled-components": ["styled-components@6.3.11", "", { "dependencies": { "@emotion/is-prop-valid": "1.4.0", "@emotion/unitless": "0.10.0", "@types/stylis": "4.2.7", "css-to-react-native": "3.2.0", "csstype": "3.2.3", "postcss": "8.4.49", "shallowequal": "1.1.0", "stylis": "4.3.6", "tslib": "2.8.1" }, "peerDependencies": { "react": ">= 16.8.0", "react-dom": ">= 16.8.0" }, "optionalPeers": ["react-dom"] }, "sha512-opzgceGlQ5rdZdGwf9ddLW7EM2F4L7tgsgLn6fFzQ2JgE5EVQ4HZwNkcgB1p8WfOBx1GEZP3fa66ajJmtXhSrA=="], + "svgo": ["svgo@4.1.0", "", { "dependencies": { "commander": "^11.1.0", "css-select": "^6.0.0", "css-tree": "^3.0.1", "css-what": "^7.0.0", "csso": "^5.0.5", "picocolors": "^1.1.1", "sax": "1.6.1" }, "bin": { "svgo": "bin/svgo.js" } }, "sha512-bkxnTg1kSU0guhIBmibA6UUhrQmPVA1XsQLN+ylCd+UWzbnLkySOcXpyk1mrl05f+pcaCx2eHb+sp6BgMZWX+Q=="], - "styled-jsx": ["styled-jsx@5.1.6", "", { "dependencies": { "client-only": "0.0.1" }, "peerDependencies": { "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" } }, "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA=="], + "synckit": ["synckit@0.11.13", "", { "dependencies": { "@pkgr/core": "^0.3.6" } }, "sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg=="], - "stylis": ["stylis@4.3.6", "", {}, "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ=="], + "tiny-inflate": ["tiny-inflate@1.0.3", "", {}, "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw=="], - "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + "tinyclip": ["tinyclip@1.0.3", "", {}, "sha512-nTv2raKFMzGG6JJp0lpNDsRPdfFE6UHlu2rVEjXo8vkx1ZS3LW2CVXqIaLu8xZlu+6tbFs9V58Qc/Jmk/Ii7wA=="], - "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], + "tinyexec": ["tinyexec@1.3.1", "", {}, "sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA=="], - "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], + "tinyglobby": ["tinyglobby@0.2.17", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g=="], + + "tinyps": ["tinyps@0.5.1", "", {}, "sha512-B6Ykif5HflC3AdDkS4Zst/2muYVfeXoVMy+KorqH80s/1x4vunIORpNySH681X7fjj+dFM9MDKD6/Hsccjb87Q=="], "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], - "ts-api-utils": ["ts-api-utils@2.4.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA=="], + "trim-lines": ["trim-lines@3.0.1", "", {}, "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg=="], + + "trough": ["trough@2.2.0", "", {}, "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw=="], - "tsconfig-paths": ["tsconfig-paths@3.15.0", "", { "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg=="], + "ts-api-utils": ["ts-api-utils@2.5.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA=="], "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], @@ -807,22 +1022,92 @@ "typed-array-byte-length": ["typed-array-byte-length@1.0.3", "", { "dependencies": { "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.14" } }, "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg=="], - "typed-array-byte-offset": ["typed-array-byte-offset@1.0.4", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.15", "reflect.getprototypeof": "^1.0.9" } }, "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ=="], + "typed-array-byte-offset": ["typed-array-byte-offset@1.0.5", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.9", "for-each": "^0.3.5", "gopd": "^1.2.0", "is-typed-array": "^1.1.15", "reflect.getprototypeof": "^1.0.10" } }, "sha512-0FHJvLPqZ7KJzp17O13jfsAjsqazgrxBu2zEK95PmUz8lv2+GjRuxUInCr2Rk9Dms3ihN21zJ929ZO43yJ95QQ=="], + + "typed-array-length": ["typed-array-length@1.0.8", "", { "dependencies": { "call-bind": "^1.0.9", "for-each": "^0.3.5", "gopd": "^1.2.0", "is-typed-array": "^1.1.15", "possible-typed-array-names": "^1.1.0", "reflect.getprototypeof": "^1.0.10" } }, "sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g=="], + + "typesafe-path": ["typesafe-path@0.2.2", "", {}, "sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA=="], + + "typescript": ["typescript@6.0.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw=="], - "typed-array-length": ["typed-array-length@1.0.7", "", { "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "is-typed-array": "^1.1.13", "possible-typed-array-names": "^1.0.0", "reflect.getprototypeof": "^1.0.6" } }, "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg=="], + "typescript-auto-import-cache": ["typescript-auto-import-cache@0.3.6", "", { "dependencies": { "semver": "^7.3.8" } }, "sha512-RpuHXrknHdVdK7wv/8ug3Fr0WNsNi5l5aB8MYYuXhq2UH5lnEB1htJ1smhtD5VeCsGr2p8mUDtd83LCQDFVgjQ=="], - "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "ufo": ["ufo@1.6.4", "", {}, "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA=="], - "typescript-eslint": ["typescript-eslint@8.56.1", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.56.1", "@typescript-eslint/parser": "8.56.1", "@typescript-eslint/typescript-estree": "8.56.1", "@typescript-eslint/utils": "8.56.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-U4lM6pjmBX7J5wk4szltF7I1cGBHXZopnAXCMXb3+fZ3B/0Z3hq3wS/CCUB2NZBNAExK92mCU2tEohWuwVMsDQ=="], + "ultrahtml": ["ultrahtml@1.7.0", "", {}, "sha512-2xRd0VHoAQE4M+vF/DvFFB7pUV0ZxTW1TLi7lHQWnF/Sb5TPeEUV/l+hxcNnGO00ZXGnR0voCMmYRKQf+rvJ2g=="], "unbox-primitive": ["unbox-primitive@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "has-bigints": "^1.0.2", "has-symbols": "^1.1.0", "which-boxed-primitive": "^1.1.1" } }, "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw=="], - "unrs-resolver": ["unrs-resolver@1.11.1", "", { "dependencies": { "napi-postinstall": "^0.3.0" }, "optionalDependencies": { "@unrs/resolver-binding-android-arm-eabi": "1.11.1", "@unrs/resolver-binding-android-arm64": "1.11.1", "@unrs/resolver-binding-darwin-arm64": "1.11.1", "@unrs/resolver-binding-darwin-x64": "1.11.1", "@unrs/resolver-binding-freebsd-x64": "1.11.1", "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", "@unrs/resolver-binding-linux-x64-musl": "1.11.1", "@unrs/resolver-binding-wasm32-wasi": "1.11.1", "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" } }, "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg=="], + "uncrypto": ["uncrypto@0.1.3", "", {}, "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q=="], + + "undici": ["undici@8.12.3", "", {}, "sha512-+fdndUTwBP86cVjihTp21hZHo7d6oj1c/47XPA3lL8mM0XHs+C4EkcjmgRsFnFk2f/UONGDy9ItBItmXsLOQHw=="], + + "undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], + + "unified": ["unified@11.0.5", "", { "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", "devlop": "^1.0.0", "extend": "^3.0.0", "is-plain-obj": "^4.0.0", "trough": "^2.0.0", "vfile": "^6.0.0" } }, "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA=="], + + "unifont": ["unifont@1.0.3", "", { "dependencies": { "css-tree": "^3.1.0", "fnv1a-64": "^0.1.2", "std-env": "^4.2.0", "undici": "^8.0.0" } }, "sha512-XGnEwj5sWdCbiBX01mWLSBncS0yMRjnLygau3IfdOlfjMacNIQvTGW4VH7pWBq+gGWArfSef/CensMLjMmIr/A=="], + + "unist-util-is": ["unist-util-is@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g=="], + + "unist-util-position": ["unist-util-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA=="], - "update-browserslist-db": ["update-browserslist-db@1.2.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w=="], + "unist-util-stringify-position": ["unist-util-stringify-position@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ=="], + + "unist-util-visit": ["unist-util-visit@5.2.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.1.0" } }, "sha512-fpsYs/VVoZxfGY9/j3FQpZmN8wdLJaV1Pt38AaJNZu9uKIHcFU3halCdBveEq1HGKO1OEfJY65w1zvoFV1b3qQ=="], + + "unist-util-visit-parents": ["unist-util-visit-parents@6.1.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-vKXxz6O38sKDj1mtx/k2cWvkkFBuYGx6uGrlzBkVeWCRF/F8sdI0j3Wbkz/5rVNRRuVc8UrgRdbCxNhmYXgP3w=="], + + "unstorage": ["unstorage@1.17.6", "", { "dependencies": { "anymatch": "^3.1.3", "chokidar": "^5.0.0", "destr": "^2.0.5", "h3": "^1.15.11", "lru-cache": "^11.5.3", "node-fetch-native": "^1.6.7", "ofetch": "^1.5.1", "ufo": "^1.6.4" }, "peerDependencies": { "@azure/app-configuration": "^1.8.0", "@azure/cosmos": "^4.2.0", "@azure/data-tables": "^13.3.0", "@azure/identity": "^4.6.0", "@azure/keyvault-secrets": "^4.9.0", "@azure/storage-blob": "^12.26.0", "@capacitor/preferences": "^6 || ^7 || ^8", "@deno/kv": ">=0.9.0", "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0 || ^11.0.0", "@planetscale/database": "^1.19.0", "@upstash/redis": "^1.34.3", "@vercel/blob": ">=0.27.1", "@vercel/functions": "^2.2.12 || ^3.0.0", "@vercel/kv": "^1 || ^2 || ^3", "aws4fetch": "^1.0.20", "db0": ">=0.2.1", "idb-keyval": "^6.2.1", "ioredis": "^5.4.2", "uploadthing": "^7.4.4" }, "optionalPeers": ["@azure/app-configuration", "@azure/cosmos", "@azure/data-tables", "@azure/identity", "@azure/keyvault-secrets", "@azure/storage-blob", "@capacitor/preferences", "@deno/kv", "@netlify/blobs", "@planetscale/database", "@upstash/redis", "@vercel/blob", "@vercel/functions", "@vercel/kv", "aws4fetch", "db0", "idb-keyval", "ioredis", "uploadthing"] }, "sha512-gjKtcmn/KwZuJZO9o2sc0esAQnhmTw0LviDHwevTXbJMYs0dRTp8ZEEWXHU0vTpzbN3cA0yxlTeyXssMp3zDqw=="], "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], + "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], + + "verkit": ["verkit@0.5.0", "", {}, "sha512-u4J1hr6Y+C/hit34GwL3eIcUf3wngT8TlYUjK7tk0jxydKLAq3sYvifjdTDA6U3KCKRcQCQDGf/srjxfZF3l7g=="], + + "vfile": ["vfile@6.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="], + + "vfile-message": ["vfile-message@4.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw=="], + + "vite": ["vite@8.3.5", "", { "dependencies": { "lightningcss": "^1.33.0", "picomatch": "^4.0.7", "postcss": "^8.5.30", "rolldown": "~1.2.14", "tinyglobby": "^0.2.17" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.7.1 || ^0.8.0", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-z1YpjieJ9g0ebTmQpLBv/oq9E3F9EIlOe+7LahW8SrE3LTiG3udBRUXQOlYXP9b+IC2q2phHeVxj9xGlw34OEQ=="], + + "vitefu": ["vitefu@1.1.3", "", { "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" }, "optionalPeers": ["vite"] }, "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg=="], + + "volar-service-css": ["volar-service-css@0.0.71", "", { "dependencies": { "vscode-css-languageservice": "^6.3.0", "vscode-languageserver-textdocument": "^1.0.11", "vscode-uri": "^3.0.8" }, "peerDependencies": { "@volar/language-service": "~2.4.0" }, "optionalPeers": ["@volar/language-service"] }, "sha512-wRRFt9BpjMKCazcgOh67MSjUjiWUCAh99DyYSDIOTuxaRjEtDC7PpB0k1Y1wbJIW/pVtMUSVbpPo3UGSm0Byxw=="], + + "volar-service-emmet": ["volar-service-emmet@0.0.71", "", { "dependencies": { "@emmetio/css-parser": "^0.4.1", "@emmetio/html-matcher": "^1.3.0", "@vscode/emmet-helper": "^2.9.3", "vscode-uri": "^3.0.8" }, "peerDependencies": { "@volar/language-service": "~2.4.0" }, "optionalPeers": ["@volar/language-service"] }, "sha512-zqjzt6bN95e3CUstBm0PBFAJnrfz0ZAARka87fart46/gNCLLuP3Vujy8V/J8HEziTFLnfkgIASLFYPUhonJcA=="], + + "volar-service-html": ["volar-service-html@0.0.71", "", { "dependencies": { "vscode-html-languageservice": "^5.3.0", "vscode-languageserver-textdocument": "^1.0.11", "vscode-uri": "^3.0.8" }, "peerDependencies": { "@volar/language-service": "~2.4.0" }, "optionalPeers": ["@volar/language-service"] }, "sha512-e8tHPhgQ7ooLfudAEIku+kgd9pWkq3SSz8RbnQDI1+Eb8wbenkLGHqoirLqz5ORLV6wIMr2Iv08RWBG5eOcgpw=="], + + "volar-service-prettier": ["volar-service-prettier@0.0.71", "", { "dependencies": { "vscode-uri": "^3.0.8" }, "peerDependencies": { "@volar/language-service": "~2.4.0", "prettier": "^2.2 || ^3.0" }, "optionalPeers": ["@volar/language-service", "prettier"] }, "sha512-Rz7JVH3qD108UCdmIEiZvOBNljMt2nLFdbN8AXcDfn7xD9F5I2aCIsDVqBbXw21PsnxG0b7MfwtNF+zPS/NKUg=="], + + "volar-service-typescript": ["volar-service-typescript@0.0.71", "", { "dependencies": { "path-browserify": "^1.0.1", "semver": "^7.6.2", "typescript-auto-import-cache": "^0.3.5", "vscode-languageserver-textdocument": "^1.0.11", "vscode-nls": "^5.2.0", "vscode-uri": "^3.0.8" }, "peerDependencies": { "@volar/language-service": "~2.4.0" }, "optionalPeers": ["@volar/language-service"] }, "sha512-yTtM/BVT6hoyEYnDtaCyAtNhdNeS/mhTTABlBOdw3NNiRBUin3IznFJpgfjer4c6RYopiPjjQjc9VFhxVl1mLw=="], + + "volar-service-typescript-twoslash-queries": ["volar-service-typescript-twoslash-queries@0.0.71", "", { "dependencies": { "vscode-uri": "^3.0.8" }, "peerDependencies": { "@volar/language-service": "~2.4.0" }, "optionalPeers": ["@volar/language-service"] }, "sha512-9K2k72s4n7rV9s4bX0MyjbX9iBribvKZbBJKuEmTCZfeWJXs6Yh7bGpY4eoc7UufAjvpheBqwyZCOIPBvxCv0A=="], + + "volar-service-yaml": ["volar-service-yaml@0.0.71", "", { "dependencies": { "vscode-uri": "^3.0.8", "yaml-language-server": "~1.23.0" }, "peerDependencies": { "@volar/language-service": "~2.4.0" }, "optionalPeers": ["@volar/language-service"] }, "sha512-qYGWGuVpUTnZGu5P/CR4KLK4aIR8RrcVnmfZ2eRcj9q/I8VZCoC5yy9FtEvfNvnDp4MU17yhdJcvpQPIqhJS2Q=="], + + "vscode-css-languageservice": ["vscode-css-languageservice@6.3.10", "", { "dependencies": { "@vscode/l10n": "^0.0.18", "vscode-languageserver-textdocument": "^1.0.12", "vscode-languageserver-types": "3.17.5", "vscode-uri": "^3.1.0" } }, "sha512-eq5N9Er3fC4vA9zd9EFhyBG90wtCCuXgRSpAndaOgXMh1Wgep5lBgRIeDgjZBW9pa+332yC9+49cZMW8jcL3MA=="], + + "vscode-html-languageservice": ["vscode-html-languageservice@5.6.2", "", { "dependencies": { "@vscode/l10n": "^0.0.18", "vscode-languageserver-textdocument": "^1.0.12", "vscode-languageserver-types": "^3.17.5", "vscode-uri": "^3.1.0" } }, "sha512-ulCrSnFnfQ16YzvwnYUgEbUEl/ZG7u2eV27YhvLObSHKkb8fw1Z9cgsnUwjTEeDIdJDoTDTDpxuhQwoenoLNMg=="], + + "vscode-json-languageservice": ["vscode-json-languageservice@4.1.8", "", { "dependencies": { "jsonc-parser": "^3.0.0", "vscode-languageserver-textdocument": "^1.0.1", "vscode-languageserver-types": "^3.16.0", "vscode-nls": "^5.0.0", "vscode-uri": "^3.0.2" } }, "sha512-0vSpg6Xd9hfV+eZAaYN63xVVMOTmJ4GgHxXnkLCh+9RsQBkWKIghzLhW2B9ebfG+LQQg8uLtsQ2aUKjTgE+QOg=="], + + "vscode-jsonrpc": ["vscode-jsonrpc@8.2.0", "", {}, "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA=="], + + "vscode-languageserver": ["vscode-languageserver@9.0.1", "", { "dependencies": { "vscode-languageserver-protocol": "3.17.5" }, "bin": { "installServerIntoExtension": "bin/installServerIntoExtension" } }, "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g=="], + + "vscode-languageserver-protocol": ["vscode-languageserver-protocol@3.17.5", "", { "dependencies": { "vscode-jsonrpc": "8.2.0", "vscode-languageserver-types": "3.17.5" } }, "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg=="], + + "vscode-languageserver-textdocument": ["vscode-languageserver-textdocument@1.0.16", "", {}, "sha512-qeNEuOi9a3qkqRf7Gfez2WL2VwlBTLCNekHBGO9kxPVUp9XuY15yfTJ9jwvOwKI0I2MhUUfZq95NSp+LK1CLQg=="], + + "vscode-languageserver-types": ["vscode-languageserver-types@3.17.5", "", {}, "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg=="], + + "vscode-nls": ["vscode-nls@5.2.0", "", {}, "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng=="], + + "vscode-uri": ["vscode-uri@3.2.0", "", {}, "sha512-m2gXo3bn0G1kT9InzMf07fTbqMbGtyckj3bH5ktLO+1Ssv+yiATZ4dhwaQv9UZWxJh6E9IFGnQyjgWVDWVBDrg=="], + "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], "which-boxed-primitive": ["which-boxed-primitive@1.1.1", "", { "dependencies": { "is-bigint": "^1.1.0", "is-boolean-object": "^1.2.1", "is-number-object": "^1.1.1", "is-string": "^1.1.1", "is-symbol": "^1.1.1" } }, "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA=="], @@ -831,60 +1116,112 @@ "which-collection": ["which-collection@1.0.2", "", { "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", "is-weakmap": "^2.0.2", "is-weakset": "^2.0.3" } }, "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw=="], - "which-typed-array": ["which-typed-array@1.1.20", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" } }, "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg=="], + "which-typed-array": ["which-typed-array@1.1.24", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.9", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" } }, "sha512-wk4Mf4pR5mRP7eYuuTBCIQ9d0ud2Fv2jRLQpfgnRjbOxAFHmjKFValgTpitVKzJJS8ajnYQV2Du1SZ8j6b/EUQ=="], "word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="], - "yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], + "wrap-ansi": ["wrap-ansi@9.0.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww=="], + + "xxhash-wasm": ["xxhash-wasm@1.1.0", "", {}, "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA=="], - "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], + "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], + + "yaml": ["yaml@2.9.1", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw=="], + + "yaml-language-server": ["yaml-language-server@1.23.0", "", { "dependencies": { "@vscode/l10n": "^0.0.18", "ajv": "^8.17.1", "ajv-draft-04": "^1.0.0", "ajv-i18n": "^4.2.0", "prettier": "^3.8.1", "request-light": "^0.5.7", "vscode-json-languageservice": "4.1.8", "vscode-languageserver": "^9.0.0", "vscode-languageserver-textdocument": "^1.0.1", "vscode-languageserver-types": "^3.16.0", "vscode-uri": "^3.0.2", "yaml": "2.8.3" }, "bin": { "yaml-language-server": "bin/yaml-language-server" } }, "sha512-3qVyCOexLCWw06PQa5kRPwvMWMZ/eZeCRWUvgD6a0OkqL/4iCnxy2WumbWifa937Uo5xhyWJ0uxlU39ljhNh7A=="], + + "yargs": ["yargs@18.2.0", "", { "dependencies": { "cliui": "^9.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "string-width": "^8.2.1", "y18n": "^5.0.5", "yargs-parser": "^22.0.0" } }, "sha512-9OpKOLeaoNFecEp7P6iYbzze/5CqWoH7N3SMs/6y1XF4nMvFMspEGZzJ6uFi9MmQwXhyzqYoSEKO3tvA3Z/o2w=="], + + "yargs-parser": ["yargs-parser@22.0.0", "", {}, "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw=="], + + "yocto-queue": ["yocto-queue@1.2.2", "", {}, "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ=="], "zod": ["zod@4.3.6", "", {}, "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg=="], - "zod-validation-error": ["zod-validation-error@4.0.2", "", { "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" } }, "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ=="], + "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], + + "@astrojs/compiler-binding-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.2.6", "", { "dependencies": { "@tybys/wasm-util": "^0.10.3" }, "peerDependencies": { "@emnapi/core": "^1.7.1 || 2.0.0-beta.2", "@emnapi/runtime": "^1.7.1 || 2.0.0-beta.2" } }, "sha512-mRyDmEw9/fCDXCGfL1sbgIw/GUK0PVxRW4YwgPN61F3LQ+fSyoBFarJVzgGyhF6kRzEQZ0FejDqm4WLXSeqQmw=="], + + "@bruits/satteri-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.11.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.2", "tslib": "^2.4.0" } }, "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ=="], - "@babel/core/json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], + "@bruits/satteri-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.11.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw=="], + + "@bruits/satteri-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.2.6", "", { "dependencies": { "@tybys/wasm-util": "^0.10.3" }, "peerDependencies": { "@emnapi/core": "^1.7.1 || 2.0.0-beta.2", "@emnapi/runtime": "^1.7.1 || 2.0.0-beta.2" } }, "sha512-mRyDmEw9/fCDXCGfL1sbgIw/GUK0PVxRW4YwgPN61F3LQ+fSyoBFarJVzgGyhF6kRzEQZ0FejDqm4WLXSeqQmw=="], "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], "@eslint/eslintrc/globals": ["globals@14.0.0", "", {}, "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ=="], - "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], - - "@typescript-eslint/typescript-estree/minimatch": ["minimatch@10.2.4", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg=="], + "@typescript-eslint/typescript-estree/minimatch": ["minimatch@10.2.6", "", { "dependencies": { "brace-expansion": "^5.0.8" } }, "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A=="], - "@typescript-eslint/typescript-estree/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], + "@typescript-eslint/typescript-estree/semver": ["semver@7.8.5", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA=="], "@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="], - "chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + "@vscode/emmet-helper/jsonc-parser": ["jsonc-parser@2.3.1", "", {}, "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg=="], + + "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "astro/zod": ["zod@4.6.7", "", {}, "sha512-g8W2D2kU6a8untc053fX1uVBKzM7yqAxW/3zwk83+6RyF2+SKOuV+c0wBDhUwzV1PaGapmZH+rmcUzPf+3CGwg=="], + + "astro-eslint-parser/eslint-scope": ["eslint-scope@9.1.2", "", { "dependencies": { "@types/esrecurse": "^4.3.1", "@types/estree": "^1.0.8", "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ=="], + + "astro-eslint-parser/eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="], + + "astro-eslint-parser/espree": ["espree@11.2.0", "", { "dependencies": { "acorn": "^8.16.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^5.0.1" } }, "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw=="], - "dom-serializer/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], + "astro-eslint-parser/semver": ["semver@7.8.5", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA=="], - "eslint-import-resolver-node/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], + "cliui/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], - "eslint-module-utils/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], + "csso/css-tree": ["css-tree@2.2.1", "", { "dependencies": { "mdn-data": "2.0.28", "source-map-js": "^1.0.1" } }, "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA=="], - "eslint-plugin-import/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], + "eslint/@eslint/js": ["@eslint/js@9.39.3", "", {}, "sha512-1B1VkCq6FuUNlQvlBYb+1jDu/gV297TIs/OeiaSR9l1H27SVW55ONE1e1Vp16NqP683+xEGzxYtv4XCiDPaQiw=="], - "eslint-plugin-react/resolve": ["resolve@2.0.0-next.6", "", { "dependencies": { "es-errors": "^1.3.0", "is-core-module": "^2.16.1", "node-exports-info": "^1.6.0", "object-keys": "^1.1.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA=="], + "eslint-plugin-astro/espree": ["espree@11.2.0", "", { "dependencies": { "acorn": "^8.16.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^5.0.1" } }, "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw=="], - "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + "p-locate/p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], - "fdir/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + "postcss/source-map-js": ["source-map-js@1.2.2", "", {}, "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw=="], - "is-bun-module/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], + "sass/chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], - "next/@next/env": ["@next/env@16.1.6", "", {}, "sha512-N1ySLuZjnAtN3kFnwhAwPvZah8RJxKasD7x1f8shFqhncnWZn4JMfg37diLNuoHsLAlrDfM3g4mawVdtAG8XLQ=="], + "sharp/semver": ["semver@7.8.5", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA=="], - "next/postcss": ["postcss@8.4.31", "", { "dependencies": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } }, "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ=="], + "typescript-auto-import-cache/semver": ["semver@7.8.5", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA=="], - "sharp/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], + "volar-service-typescript/semver": ["semver@7.8.5", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA=="], - "tinyglobby/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + "wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], - "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@5.0.3", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA=="], + "wrap-ansi/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], + + "yaml-language-server/ajv": ["ajv@8.20.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA=="], + + "yaml-language-server/ajv-i18n": ["ajv-i18n@4.2.0", "", { "peerDependencies": { "ajv": "^8.0.0-beta.0" } }, "sha512-v/ei2UkCEeuKNXh8RToiFsUclmU+G57LO1Oo22OagNMENIw+Yb8eMwvHu7Vn9fmkjJyv6XclhJ8TbuigSglPkg=="], + + "yaml-language-server/request-light": ["request-light@0.5.8", "", {}, "sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg=="], + + "yaml-language-server/yaml": ["yaml@2.8.3", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg=="], + + "@bruits/satteri-wasm32-wasi/@emnapi/core/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA=="], + + "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@5.0.12", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ=="], + + "csso/css-tree/mdn-data": ["mdn-data@2.0.28", "", {}, "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g=="], + + "eslint-plugin-astro/espree/eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="], + + "p-locate/p-limit/yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], + + "sass/chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + + "sass/chokidar/readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], + + "yaml-language-server/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], "@typescript-eslint/typescript-estree/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + + "sass/chokidar/readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], } } diff --git a/components/navbar/index.jsx b/components/navbar/index.jsx deleted file mode 100644 index 41bba51..0000000 --- a/components/navbar/index.jsx +++ /dev/null @@ -1,77 +0,0 @@ -import { useState } from 'react' -import Link from 'next/link' -import { Profile } from '../../data' -import { IconFileDownload } from '@tabler/icons-react' - -function NavBar() { - const [menuIsOpen, setMenuIsOpen] = useState(false) - - const toggleMenu = () => setMenuIsOpen((prev) => !prev) - - const navbarMenuClassNames = ['navbar-menu', menuIsOpen ? 'open' : 'closed'].join(' ') - - return ( - - ) -} - -NavBar.propTypes = {} - -export default NavBar diff --git a/components/seo/index.jsx b/components/seo/index.jsx deleted file mode 100644 index a299651..0000000 --- a/components/seo/index.jsx +++ /dev/null @@ -1,41 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' -import Head from 'next/head' - -function SEO({ - title, - description, - image = '/images/cover.jpg', - url = 'https://luisjcenteno.dev', -}) { - - return ( - - {title} - - - - - - - - - - - - - - - - - ) -} - -SEO.propTypes = { - title: PropTypes.string, - description: PropTypes.string, - image: PropTypes.string, - url: PropTypes.string, -} - -export default SEO diff --git a/eslint.config.mjs b/eslint.config.mjs index e29b739..b0137cc 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -1,16 +1,55 @@ -import nextCoreWebVitals from "eslint-config-next/core-web-vitals"; +import js from '@eslint/js' +import astro from 'eslint-plugin-astro' +import react from 'eslint-plugin-react' +import globals from 'globals' +import * as astroParser from 'astro-eslint-parser' +import tsParser from '@typescript-eslint/parser' -const eslintConfig = [ - ...nextCoreWebVitals, - { - ignores: [ - "node_modules/**", - ".next/**", - "out/**", - "build/**", - "next-env.d.ts", - ], - }, -]; - -export default eslintConfig; +export default [ + js.configs.recommended, + ...astro.configs['flat/recommended'], + ...[ + react.configs.flat.recommended, + react.configs.flat['jsx-runtime'], + ].map((config) => ({ ...config, files: ['**/*.jsx'] })), + { + ignores: ['dist/**', '.astro/**', 'node_modules/**'], + }, + { + files: ['**/*.astro'], + languageOptions: { + parser: astroParser, + parserOptions: { + parser: { + ts: tsParser, + js: 'espree', + }, + }, + }, + }, + { + files: ['**/*.{js,jsx,mjs}'], + languageOptions: { + ecmaVersion: 'latest', + sourceType: 'module', + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + }, + globals: { + ...globals.browser, + ...globals.node, + }, + }, + settings: { + react: { + version: 'detect', + }, + }, + rules: { + 'no-unused-vars': ['warn', { argsIgnorePattern: '^_' }], + 'react/prop-types': 'off', + }, + }, +] diff --git a/hooks/index.js b/hooks/index.js deleted file mode 100644 index 40e4dde..0000000 --- a/hooks/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import useWindowSize from './useWindowSize' - -export { useWindowSize } diff --git a/hooks/useWindowSize.js b/hooks/useWindowSize.js deleted file mode 100644 index 2d58cd6..0000000 --- a/hooks/useWindowSize.js +++ /dev/null @@ -1,32 +0,0 @@ -import { useEffect, useState } from 'react' - -/** - * @typedef WindowSize - * @property {Number|String} width - Windows inner width - * @property {Number|String} height - Window inner height - */ - -/** - * This hook returns an object containing the window's width and height - * @returns {WindowSize} - */ -const useWindowSize = () => { - const [windowSize, setWindowSize] = useState({ width: undefined, height: undefined }) - - useEffect(() => { - const handleResize = () => { - setWindowSize({ width: window.innerWidth, height: window.innerHeight }) - } - - window.addEventListener('resize', handleResize) - - handleResize() - - // Remove event listener on cleanup - return () => window.removeEventListener('resize', handleResize) - }, [input]) - - return windowSize -} - -export default useWindowSize diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 0000000..a516166 --- /dev/null +++ b/jsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "astro/tsconfigs/base", + "compilerOptions": { + "jsx": "react-jsx", + "allowJs": true, + "baseUrl": ".", + "paths": { + "@/*": ["src/*"] + } + }, + "include": [".astro/types.d.ts", "src/**/*", "astro.config.mjs"] +} diff --git a/layouts/main-layout/index.jsx b/layouts/main-layout/index.jsx deleted file mode 100644 index e4c3436..0000000 --- a/layouts/main-layout/index.jsx +++ /dev/null @@ -1,15 +0,0 @@ -import React from 'react' -import NavBar from '../../components/navbar' - -function MainLayout(props) { - const { children } = props - - return ( -
- - {children} -
- ) -} - -export default MainLayout diff --git a/layouts/project-layout/index.jsx b/layouts/project-layout/index.jsx deleted file mode 100644 index ae06f53..0000000 --- a/layouts/project-layout/index.jsx +++ /dev/null @@ -1,39 +0,0 @@ -import React from 'react' -import parse from 'html-react-parser' -import NavBar from '../../components/navbar' -import SEO from '../../components/seo' -import { Profile } from '../../data' -import GithubButton from '../../components/github-button' - -function ProjectLayout({ className, project, content }) { - const githubLink = project.links?.find((link) => link.label === 'View on GitHub')?.url - const coverImage = typeof project.cover === 'string' ? project.cover : null - return ( -
- -
- {coverImage && ( -
- {/* eslint-disable-next-line @next/next/no-img-element */} - {`${project.name} -
- )} -
- - {content && parse(content)} - - {githubLink && ( -
- -
- )} -
-
-
- ) -} - -export default ProjectLayout diff --git a/next-sitemap.config.js b/next-sitemap.config.js deleted file mode 100644 index c28631f..0000000 --- a/next-sitemap.config.js +++ /dev/null @@ -1,6 +0,0 @@ -/** @type {import('next-sitemap').IConfig} */ -module.exports = { - siteUrl: process.env.NEXT_PUBLIC_SITE_URL || 'https://luisjcenteno.dev', - generateRobotsTxt: true, - outDir: 'out', -} diff --git a/next.config.js b/next.config.js deleted file mode 100644 index 622c8e2..0000000 --- a/next.config.js +++ /dev/null @@ -1,12 +0,0 @@ -const path = require('path') - -/** - * @type {import('next').NextConfig} - */ -module.exports = { - output: 'export', - poweredByHeader: false, - sassOptions: { - includePaths: [path.join(__dirname, 'styles')], - }, -} diff --git a/nginx/default.conf b/nginx/default.conf index e2bc10a..e10cdfc 100644 --- a/nginx/default.conf +++ b/nginx/default.conf @@ -5,9 +5,12 @@ server { root /usr/share/nginx/html; index index.html; server_tokens off; + absolute_redirect off; charset utf-8; client_max_body_size 1m; + error_page 404 /404.html; + gzip on; gzip_vary on; gzip_proxied any; @@ -23,34 +26,33 @@ server { application/rss+xml image/svg+xml; - location = /projects { - try_files /projects.html =404; + # Astro emits hashed assets in /_astro/. Use ^~ so the generic asset + # regex below does not override the immutable cache policy. + location ^~ /_astro/ { + access_log off; + add_header Cache-Control "public, max-age=31536000, immutable" always; + try_files $uri =404; } - location = /projects/ { - try_files /projects.html =404; + location = /sitemap.xml { + return 301 /sitemap-index.xml; } location / { - try_files $uri.html $uri $uri/index.html =404; - } - - location ~* ^/_next/static/.+\.(?:js|css|woff2?|ttf|eot|otf)$ { - access_log off; - expires 1y; - add_header Cache-Control "public, max-age=31536000, immutable" always; - try_files $uri =404; + # Serve directory output (/projects/index.html) directly in both + # /projects and /projects/ forms without an extra redirect. + # The $uri.html fallback keeps file output working too. + expires -1; + try_files $uri $uri/index.html $uri.html =404; } location ~* \.(?:js|css|png|jpg|jpeg|gif|webp|svg|ico)$ { - expires 7d; add_header Cache-Control "public, max-age=604800" always; try_files $uri =404; } location ~* \.html$ { expires -1; - add_header Cache-Control "no-cache" always; } location ~ /\.(?!well-known(?:/|$)) { diff --git a/package.json b/package.json index 05b3f84..36c275c 100644 --- a/package.json +++ b/package.json @@ -3,24 +3,34 @@ "version": "1.0.0", "private": true, "scripts": { - "dev": "next dev", - "build": "next build && next-sitemap", - "start": "next start" + "dev": "astro dev", + "build": "astro build", + "preview": "astro preview", + "check": "astro check", + "astro": "astro", + "lint": "eslint ." }, "dependencies": { + "@astrojs/react": "^7.1.1", + "@astrojs/sitemap": "^3.7.4", "@tabler/icons-react": "^3.37.1", + "astro": "^7.4.2", "bulma": "^0.9.4", - "eslint-config-next": "16.1.6", - "html-react-parser": "^5.2.17", "marked": "^12.0.0", - "next": "16.1.6", + "prop-types": "^15.8.1", "react": "19.2.4", "react-dom": "19.2.4", "sass": "1.70.0" }, "devDependencies": { + "@astrojs/check": "^0.9.12", + "@eslint/js": "^10.0.1", + "@types/prop-types": "^15.7.15", + "@typescript-eslint/parser": "^8.72.1", "eslint": "^9", - "next-sitemap": "^4.2.3", - "styled-components": "^6.3.11" + "eslint-plugin-astro": "^3.2.1", + "eslint-plugin-react": "^7.37.5", + "globals": "^17.13.0", + "typescript": "^6.0.0" } } diff --git a/pages/_app.js b/pages/_app.js deleted file mode 100644 index fe46bc0..0000000 --- a/pages/_app.js +++ /dev/null @@ -1,20 +0,0 @@ - -import '../styles/globals.scss' -import { StyleSheetManager } from 'styled-components'; -import Script from 'next/script' - -function shouldForwardProp(prop) { - // Filter out shake and beat props - return prop !== 'shake' && prop !== 'beat'; -} - -function MyApp({ Component, pageProps }) { - return ( - - diff --git a/components/profile-box/index.jsx b/src/components/profile-box/index.jsx similarity index 91% rename from components/profile-box/index.jsx rename to src/components/profile-box/index.jsx index 57c0e98..45a6391 100644 --- a/components/profile-box/index.jsx +++ b/src/components/profile-box/index.jsx @@ -1,5 +1,4 @@ import PropTypes from 'prop-types' -import Link from 'next/link' import { IconAt, IconMapPin } from '@tabler/icons-react' function ProfileBox({ @@ -38,9 +37,7 @@ function ProfileBox({
  • - - {email} - + {email}
  • diff --git a/components/project-card/index.jsx b/src/components/project-card/index.jsx similarity index 84% rename from components/project-card/index.jsx rename to src/components/project-card/index.jsx index 2fe1bfa..a5cdf17 100644 --- a/components/project-card/index.jsx +++ b/src/components/project-card/index.jsx @@ -1,8 +1,5 @@ -import React from 'react' import PropTypes from 'prop-types' -import DevIcon, { REACT } from '../dev-icon' -import Link from 'next/link' -import parse from 'html-react-parser' +import DevIcon from '../dev-icon' function ProjectCard({ name, @@ -20,7 +17,7 @@ function ProjectCard({ const renderLinks = () => links.map((link, index) => (
    - {link.label} - +
    )) @@ -37,8 +34,7 @@ function ProjectCard({
    - {/* eslint-disable-next-line @next/next/no-img-element */} - {name} + {name}
    @@ -49,7 +45,10 @@ function ProjectCard({
    {renderStack()}
    -
    {parse(description || '')}
    +
    {renderLinks()}
    diff --git a/components/projects-box/index.jsx b/src/components/projects-box/index.jsx similarity index 86% rename from components/projects-box/index.jsx rename to src/components/projects-box/index.jsx index 0123dbe..dd475b9 100644 --- a/components/projects-box/index.jsx +++ b/src/components/projects-box/index.jsx @@ -1,4 +1,3 @@ -import React from 'react' import PropTypes from 'prop-types' import ProjectCard from '../project-card' @@ -7,8 +6,8 @@ import ProjectCard from '../project-card' * Projects are sorted by their `order` value before rendering. * * @param {Object} props - Component props. - * @param {string} props.title - Heading displayed at the top of the projects box. - * @param {string} props.description - Supporting text shown below the title. + * @param {string} [props.title] - Heading displayed at the top of the projects box. + * @param {string} [props.description] - Supporting text shown below the title. * @param {Array} props.projects - List of project items to render. * @param {number} props.projects[].order - Sort priority (ascending) for display order. * @param {string} props.projects[].name - Project name. @@ -18,9 +17,9 @@ import ProjectCard from '../project-card' * @param {Array} [props.projects[].links] - External/internal links related to the project. * @returns {JSX.Element} A section element containing the projects list. */ -function ProjectsBox({ title, description, projects }) { +function ProjectsBox({ title = '', description = '', projects = [] }) { const renderProjects = () => - projects + [...projects] .sort((a, b) => a.order - b.order) .map((project, index) => (
    @@ -45,7 +44,7 @@ function ProjectsBox({ title, description, projects }) { } ProjectsBox.propTypes = { - title: PropTypes.string.isRequired, + title: PropTypes.string, description: PropTypes.string, projects: PropTypes.array, } diff --git a/components/timeline/index.jsx b/src/components/timeline/index.jsx similarity index 94% rename from components/timeline/index.jsx rename to src/components/timeline/index.jsx index bcb9d9f..230b52f 100644 --- a/components/timeline/index.jsx +++ b/src/components/timeline/index.jsx @@ -1,4 +1,3 @@ -import React from 'react' import PropTypes from 'prop-types' import Row from './row' diff --git a/components/timeline/row.jsx b/src/components/timeline/row.jsx similarity index 98% rename from components/timeline/row.jsx rename to src/components/timeline/row.jsx index 37c1908..4155049 100644 --- a/components/timeline/row.jsx +++ b/src/components/timeline/row.jsx @@ -1,4 +1,3 @@ -import React from 'react' import PropTypes from 'prop-types' function Row({ diff --git a/components/work-experience/index.jsx b/src/components/work-experience/index.jsx similarity index 94% rename from components/work-experience/index.jsx rename to src/components/work-experience/index.jsx index 9ba9b41..14366bf 100644 --- a/components/work-experience/index.jsx +++ b/src/components/work-experience/index.jsx @@ -1,4 +1,3 @@ -import React from 'react' import PropTypes from 'prop-types' import TimeLine from '../timeline' diff --git a/data/index.js b/src/data/index.js similarity index 98% rename from data/index.js rename to src/data/index.js index 5a50324..26b5993 100644 --- a/data/index.js +++ b/src/data/index.js @@ -13,6 +13,7 @@ import workExperience from './work-experience.json' * @property {Array} skils - Skills list * @property {String} email - Contact email * @property {String} location - Current location + * @property {String} cv - Resume URL */ /** diff --git a/data/profile.json b/src/data/profile.json similarity index 100% rename from data/profile.json rename to src/data/profile.json diff --git a/data/projects.json b/src/data/projects.json similarity index 100% rename from data/projects.json rename to src/data/projects.json diff --git a/data/work-experience.json b/src/data/work-experience.json similarity index 100% rename from data/work-experience.json rename to src/data/work-experience.json diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro new file mode 100644 index 0000000..93cb250 --- /dev/null +++ b/src/layouts/BaseLayout.astro @@ -0,0 +1,58 @@ +--- +import NavBar from '../components/navbar/Navbar.astro' +import '../styles/globals.scss' + +const { + title, + description, + image = '/images/cover.jpg', + className = '', + type = 'website', +} = Astro.props + +const site = Astro.site ?? new URL('https://luisjcenteno.dev') +const canonical = new URL(Astro.url.pathname, site) +const ogImage = new URL(image, site) +--- + + + + + + {title} + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + + diff --git a/src/layouts/ProjectLayout.astro b/src/layouts/ProjectLayout.astro new file mode 100644 index 0000000..c5f3210 --- /dev/null +++ b/src/layouts/ProjectLayout.astro @@ -0,0 +1,35 @@ +--- +import BaseLayout from './BaseLayout.astro' +import { Profile } from '../data' +import GithubButton from '../components/github-button' + +const { project, content, className = 'ProjectPage' } = Astro.props + +const links: Array<{ label: string; url: string }> = project.links ?? [] +const githubLink = links.find((link) => link.label === 'View on GitHub')?.url +const coverImage = typeof project.cover === 'string' ? project.cover : null +--- + +
    + {coverImage && ( +
    + {`${project.name} +
    + )} + +
    + + + {githubLink && ( +
    + +
    + )} +
    +
    +
    diff --git a/src/pages/404.astro b/src/pages/404.astro new file mode 100644 index 0000000..f6f34ad --- /dev/null +++ b/src/pages/404.astro @@ -0,0 +1,16 @@ +--- +import BaseLayout from '../layouts/BaseLayout.astro' +import { Profile } from '../data' +--- + +
    +

    404

    +

    This page does not exist.

    +

    + Go back home +

    +
    +
    diff --git a/src/pages/index.astro b/src/pages/index.astro new file mode 100644 index 0000000..ea25050 --- /dev/null +++ b/src/pages/index.astro @@ -0,0 +1,34 @@ +--- +import BaseLayout from '../layouts/BaseLayout.astro' +import ProfileBox from '../components/profile-box/index.jsx' +import AboutMeBox from '../components/about-me-box/index.jsx' +import ProjectsBox from '../components/projects-box/index.jsx' +import WorkExperience from '../components/work-experience/index.jsx' +import { Profile, Projects, WorkExp } from '../data' + +const title = `${Profile.name} | ${Profile.title}` +--- + +
    +
    +
    + +
    + +
    +
    + + + +
    +
    +
    +
    +
    diff --git a/src/pages/privacy.astro b/src/pages/privacy.astro new file mode 100644 index 0000000..8c311e6 --- /dev/null +++ b/src/pages/privacy.astro @@ -0,0 +1,66 @@ +--- +import BaseLayout from '../layouts/BaseLayout.astro' +import { Profile } from '../data' +--- + +
    +

    Privacy Policy

    + +

    + Effective Date: May 2024 +

    +

    + Living Company values your privacy and is committed to + protecting your personal information. This Privacy Policy outlines how + we collect, use, and protect your data. +

    + +

    Information Collection

    +

    + We may collect personal information such as your name, email address, + and contact details when you interact with our website or services. +

    + +

    Use of Information

    +

    + The information we collect is used solely to provide and improve our + services, communicate with you, and enhance your experience with Living + Company. +

    + +

    Data Protection

    +

    + We implement appropriate security measures to protect your personal + information from unauthorized access, alteration, or disclosure. +

    + +

    No Sale or Misuse of Data

    +

    + Living Company will never sell, trade, or misuse your personal + information. We are committed to maintaining your trust and ensuring + your data is used only for legitimate business purposes. +

    + +

    Contact Us

    +

    + If you have any questions or concerns about our Privacy Policy, please + contact us at contact@livingcompany.com. +

    + +

    Changes to Privacy Policy

    +

    + We may update this Privacy Policy from time to time. Any changes will be + posted on this page with an updated effective date. +

    +

    + By using our services, you agree to the terms of this Privacy Policy. +

    +

    + Living Company +

    +
    +
    diff --git a/src/pages/projects/[slug].astro b/src/pages/projects/[slug].astro new file mode 100644 index 0000000..740fb65 --- /dev/null +++ b/src/pages/projects/[slug].astro @@ -0,0 +1,15 @@ +--- +import ProjectLayout from '../../layouts/ProjectLayout.astro' +import { Projects } from '../../data' +import { getProjectData } from '../../utils' + +export function getStaticPaths() { + return Projects + .filter(({ slug }) => typeof slug === 'string' && slug.trim().length) + .map(({ slug }) => ({ params: { slug } })) +} + +const { slug } = Astro.params +const { project, content } = await getProjectData(slug) +--- + diff --git a/src/pages/projects/index.astro b/src/pages/projects/index.astro new file mode 100644 index 0000000..c5eb94f --- /dev/null +++ b/src/pages/projects/index.astro @@ -0,0 +1,33 @@ +--- +import BaseLayout from '../../layouts/BaseLayout.astro' +import ProjectCard from '../../components/project-card/index.jsx' +import { Profile, Projects } from '../../data' +--- + +
    +
    +

    Projects 🚀

    +

    + Explore these builds and reach out if one sparks your next idea. +

    + +
    + {Projects.map((project) => ( +
    + +
    + ))} +
    +
    +
    +
    diff --git a/src/pages/robots.txt.ts b/src/pages/robots.txt.ts new file mode 100644 index 0000000..0be233f --- /dev/null +++ b/src/pages/robots.txt.ts @@ -0,0 +1,11 @@ +import type { APIRoute } from 'astro' + +export const GET: APIRoute = ({ site }) => { + const base = site ?? new URL('https://luisjcenteno.dev') + const sitemap = new URL('sitemap-index.xml', base) + + return new Response( + `User-agent: *\nAllow: /\n\nSitemap: ${sitemap.href}\n`, + { headers: { 'Content-Type': 'text/plain; charset=utf-8' } } + ) +} diff --git a/styles/components/_components.scss b/src/styles/components/_components.scss similarity index 100% rename from styles/components/_components.scss rename to src/styles/components/_components.scss diff --git a/styles/components/_navbar.scss b/src/styles/components/_navbar.scss similarity index 100% rename from styles/components/_navbar.scss rename to src/styles/components/_navbar.scss diff --git a/styles/components/_profile-box.scss b/src/styles/components/_profile-box.scss similarity index 100% rename from styles/components/_profile-box.scss rename to src/styles/components/_profile-box.scss diff --git a/styles/components/_project-card.scss b/src/styles/components/_project-card.scss similarity index 100% rename from styles/components/_project-card.scss rename to src/styles/components/_project-card.scss diff --git a/styles/components/_timeline.scss b/src/styles/components/_timeline.scss similarity index 100% rename from styles/components/_timeline.scss rename to src/styles/components/_timeline.scss diff --git a/styles/globals.scss b/src/styles/globals.scss similarity index 92% rename from styles/globals.scss rename to src/styles/globals.scss index db1779b..053a072 100644 --- a/styles/globals.scss +++ b/src/styles/globals.scss @@ -1,7 +1,5 @@ @charset "utf-8"; -@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@200;300;400;500;700&display=swap'); - // Overrides $dark-primary: #1f2330; $dark-secondary: #2b3041; diff --git a/styles/pages/_home.scss b/src/styles/pages/_home.scss similarity index 100% rename from styles/pages/_home.scss rename to src/styles/pages/_home.scss diff --git a/styles/pages/_pages.scss b/src/styles/pages/_pages.scss similarity index 100% rename from styles/pages/_pages.scss rename to src/styles/pages/_pages.scss diff --git a/styles/pages/_privacy.scss b/src/styles/pages/_privacy.scss similarity index 100% rename from styles/pages/_privacy.scss rename to src/styles/pages/_privacy.scss diff --git a/styles/pages/_project.scss b/src/styles/pages/_project.scss similarity index 100% rename from styles/pages/_project.scss rename to src/styles/pages/_project.scss diff --git a/src/utils/getProjectContent.js b/src/utils/getProjectContent.js new file mode 100644 index 0000000..1ea044b --- /dev/null +++ b/src/utils/getProjectContent.js @@ -0,0 +1,21 @@ +import { marked } from 'marked' +import markdownFetch from './markdownFetch' + +/** + * Fetch and parse a markdown URL to HTML + * @param {String} contentURL + * @returns {Promise} + */ +const getProjectContent = async (contentURL) => { + const response = await markdownFetch(contentURL) + + if (!response.ok) { + throw new Error( + `Failed to fetch project content: ${contentURL} (${response.status})` + ) + } + + return marked.parse(await response.text()) +} + +export default getProjectContent diff --git a/src/utils/getProjectData.js b/src/utils/getProjectData.js new file mode 100644 index 0000000..624359c --- /dev/null +++ b/src/utils/getProjectData.js @@ -0,0 +1,19 @@ +import { getProjectBySlug } from '../data' +import getProjectContent from './getProjectContent' + +const getProjectData = async (slug) => { + const project = getProjectBySlug(slug) + + if (!project.content) { + throw new Error(`No markdown content configured for project "${slug}"`) + } + + const content = await getProjectContent(project.content) + + return { + project, + content, + } +} + +export default getProjectData diff --git a/src/utils/index.js b/src/utils/index.js new file mode 100644 index 0000000..2077bdf --- /dev/null +++ b/src/utils/index.js @@ -0,0 +1,5 @@ +import markdownFetch from './markdownFetch' +import getProjectContent from './getProjectContent' +import getProjectData from './getProjectData' + +export { markdownFetch, getProjectContent, getProjectData } diff --git a/utils/markdownFetch.js b/src/utils/markdownFetch.js similarity index 100% rename from utils/markdownFetch.js rename to src/utils/markdownFetch.js diff --git a/utils/getProjectContent.js b/utils/getProjectContent.js deleted file mode 100644 index 0f83944..0000000 --- a/utils/getProjectContent.js +++ /dev/null @@ -1,17 +0,0 @@ -import { ReactNode } from 'react' -import { marked } from 'marked' -import { markdownFetch } from '.' - -/** - * Fetch and parse markdown url to react component - * @param {String} contentURL - * @returns {Promise} - */ -const getProjectContent = async (contentURL) => { - const response = await markdownFetch(contentURL) - const rawContent = await response.text() || '' - const htmlContent = marked(rawContent) - return htmlContent -} - -export default getProjectContent diff --git a/utils/getProjectStaticProps.js b/utils/getProjectStaticProps.js deleted file mode 100644 index 53a7734..0000000 --- a/utils/getProjectStaticProps.js +++ /dev/null @@ -1,16 +0,0 @@ -import { getProjectBySlug } from "../data" -import getProjectContent from "./getProjectContent" - -const getProjectStaticProps = async (slug) => { - const project = getProjectBySlug(slug) - const content = await getProjectContent(project.content) - - return { - props: { - project, - content - } - } -} - -export default getProjectStaticProps \ No newline at end of file diff --git a/utils/index.js b/utils/index.js deleted file mode 100644 index ddf6822..0000000 --- a/utils/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import markdownFetch from './markdownFetch' -import getProjectContent from './getProjectContent' -import getProjectStaticProps from './getProjectStaticProps' - -export { markdownFetch, getProjectContent, getProjectStaticProps } From 0bb3ef81cde9f43e90b16a1b607d659a4659a8d6 Mon Sep 17 00:00:00 2001 From: Luis Centeno Date: Tue, 27 Oct 2026 15:41:49 -0600 Subject: [PATCH 2/6] Add Docker Compose setup --- .dockerignore | 1 + Dockerfile | 2 ++ README.md | 15 +++++++++++++++ compose.yaml | 25 +++++++++++++++++++++++++ 4 files changed, 43 insertions(+) create mode 100644 compose.yaml diff --git a/.dockerignore b/.dockerignore index e361b95..14ead1e 100644 --- a/.dockerignore +++ b/.dockerignore @@ -8,3 +8,4 @@ dist .vscode README.md ASTRO_MIGRATION_PLAN.md +compose.yaml diff --git a/Dockerfile b/Dockerfile index 79b8826..b40de23 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,6 +4,8 @@ COPY package.json bun.lock ./ RUN bun install --frozen-lockfile FROM deps AS builder +ARG SITE_URL=https://luisjcenteno.dev +ENV SITE_URL=$SITE_URL COPY . . RUN bun run build diff --git a/README.md b/README.md index 8da1db7..b5375cb 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,21 @@ bun run build # static output in dist/ bun run preview # preview the production build ``` +## Docker Compose + +```sh +docker compose up --build -d # http://localhost:8080 +docker compose logs -f +docker compose down +``` + +The compose stack builds the Astro site and serves it with Nginx. Override the published port +or canonical site URL with environment variables: + +```sh +PORT=3000 SITE_URL=https://staging.example.com docker compose up --build -d +``` + ## Deployment hardening - Static output is generated with `astro build` and served by Nginx in Docker. diff --git a/compose.yaml b/compose.yaml new file mode 100644 index 0000000..c130afe --- /dev/null +++ b/compose.yaml @@ -0,0 +1,25 @@ +name: luisjcenteno-portfolio + +services: + web: + build: + context: . + dockerfile: Dockerfile + args: + SITE_URL: ${SITE_URL:-https://luisjcenteno.dev} + image: luisjcenteno/portfolio:local + container_name: luisjcenteno-portfolio + ports: + - "${PORT:-8080}:80" + restart: unless-stopped + healthcheck: + test: ["CMD-SHELL", "wget -q -O /dev/null http://127.0.0.1/ || exit 1"] + interval: 30s + timeout: 5s + retries: 3 + start_period: 10s + logging: + driver: json-file + options: + max-size: "10m" + max-file: "3" From 765a537f03628670e9f8e8423b0aa2cc108db72b Mon Sep 17 00:00:00 2001 From: Luis Centeno Date: Tue, 27 Oct 2026 16:00:00 -0600 Subject: [PATCH 3/6] Complete Astro cleanups and harden deployment --- ASTRO_MIGRATION_PLAN.md | 12 +- Dockerfile | 6 +- README.md | 31 +- astro.config.mjs | 3 +- bun.lock | 276 +----------------- compose.yaml | 6 +- eslint.config.mjs | 18 +- jsconfig.json | 1 - nginx/default.conf | 3 +- package.json | 10 +- public/images/avatar.png | Bin 27762 -> 0 bytes public/scripts/nav.js | 14 + scripts/check-seo.mjs | 211 +++++++++++++ scripts/fetch-readmes.mjs | 28 ++ {public/images => src/assets}/avatar.jpeg | Bin .../assets}/projects/baby-tracker-banner.jpg | Bin .../assets}/projects/contractflow-banner.webp | Bin .../projects/memorias-de-vida-banner.jpg | Bin src/components/about-me-box/AboutMeBox.astro | 7 + src/components/about-me-box/index.jsx | 37 --- src/components/dev-icon/index.jsx | 66 ----- .../github-button/GithubButton.astro | 17 ++ src/components/github-button/index.jsx | 20 -- src/components/icon/Icon.astro | 55 ++++ src/components/navbar/Navbar.astro | 17 +- src/components/profile-box/ProfileBox.astro | 54 ++++ src/components/profile-box/index.jsx | 68 ----- src/components/project-card/ProjectCard.astro | 72 +++++ src/components/project-card/index.jsx | 75 ----- src/components/projects-box/ProjectsBox.astro | 26 ++ src/components/projects-box/index.jsx | 52 ---- src/components/timeline/Timeline.astro | 14 + src/components/timeline/TimelineRow.astro | 47 +++ src/components/timeline/index.jsx | 27 -- src/components/timeline/row.jsx | 67 ----- .../work-experience/WorkExperience.astro | 9 + src/components/work-experience/index.jsx | 23 -- src/data/covers.js | 16 + src/data/index.js | 3 +- src/data/profile.json | 3 +- src/data/projects.json | 6 +- src/data/readmes/adm2.md | 45 +++ src/data/readmes/baby-tracker.md | 45 +++ src/data/readmes/contractflow.md | 62 ++++ src/data/readmes/memorias-de-vida.md | 48 +++ src/data/readmes/photo-print-tool.md | 163 +++++++++++ src/layouts/ProjectLayout.astro | 30 +- src/pages/index.astro | 17 +- src/pages/privacy.astro | 12 +- src/pages/projects/index.astro | 5 +- src/utils/getProjectContent.js | 27 +- src/utils/getProjectData.js | 7 +- 52 files changed, 1057 insertions(+), 804 deletions(-) delete mode 100644 public/images/avatar.png create mode 100644 public/scripts/nav.js create mode 100644 scripts/check-seo.mjs create mode 100644 scripts/fetch-readmes.mjs rename {public/images => src/assets}/avatar.jpeg (100%) rename {public/images => src/assets}/projects/baby-tracker-banner.jpg (100%) rename {public/images => src/assets}/projects/contractflow-banner.webp (100%) rename {public/images => src/assets}/projects/memorias-de-vida-banner.jpg (100%) create mode 100644 src/components/about-me-box/AboutMeBox.astro delete mode 100644 src/components/about-me-box/index.jsx delete mode 100644 src/components/dev-icon/index.jsx create mode 100644 src/components/github-button/GithubButton.astro delete mode 100644 src/components/github-button/index.jsx create mode 100644 src/components/icon/Icon.astro create mode 100644 src/components/profile-box/ProfileBox.astro delete mode 100644 src/components/profile-box/index.jsx create mode 100644 src/components/project-card/ProjectCard.astro delete mode 100644 src/components/project-card/index.jsx create mode 100644 src/components/projects-box/ProjectsBox.astro delete mode 100644 src/components/projects-box/index.jsx create mode 100644 src/components/timeline/Timeline.astro create mode 100644 src/components/timeline/TimelineRow.astro delete mode 100644 src/components/timeline/index.jsx delete mode 100644 src/components/timeline/row.jsx create mode 100644 src/components/work-experience/WorkExperience.astro delete mode 100644 src/components/work-experience/index.jsx create mode 100644 src/data/covers.js create mode 100644 src/data/readmes/adm2.md create mode 100644 src/data/readmes/baby-tracker.md create mode 100644 src/data/readmes/contractflow.md create mode 100644 src/data/readmes/memorias-de-vida.md create mode 100644 src/data/readmes/photo-print-tool.md diff --git a/ASTRO_MIGRATION_PLAN.md b/ASTRO_MIGRATION_PLAN.md index ce0646a..2747038 100644 --- a/ASTRO_MIGRATION_PLAN.md +++ b/ASTRO_MIGRATION_PLAN.md @@ -2,10 +2,12 @@ > Project: `luisjcenteno.dev` (personal portfolio) > Current stack: Next.js 16 Pages Router, static export, Bulma/SCSS, React 19 -> Target: Astro 7 (static output) + React integration, reusing existing React components +> Target: Astro 7 static output (React components were reused initially, then removed) > -> **Status:** implemented on branch `migrate/astro` with Astro 7.4.2, -> `@astrojs/react` 7.1.1, and `@astrojs/sitemap` 3.7.4. +> **Status:** implemented on branch `migrate/astro` with Astro 7.4.2 and +> `@astrojs/sitemap` 3.7.4. Follow-up cleanups also completed: React was removed +> entirely, READMEs are vendored, local images use `astro:assets`, Nginx runs +> unprivileged, and a CSP is in place. --- @@ -1135,8 +1137,8 @@ Keeping these separable makes it easy to review and to bisect any visual regress ## 9. Optional follow-up: drop React entirely -After the site is stable, the presentational components can be rewritten as `.astro` -components. At that point: +**Completed.** The presentational components were rewritten as `.astro` +components, so: - `@astrojs/react`, `react`, and `react-dom` can be removed. - `@tabler/icons-react` can be replaced with inline SVGs or `@tabler/icons`. diff --git a/Dockerfile b/Dockerfile index b40de23..890b9d8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM oven/bun:1 AS deps +FROM oven/bun:1@sha256:1d22548f177f4ff38e0c15baa3c2c46c6c2060ba2d1bc573bb4720b407548f1d AS deps WORKDIR /app COPY package.json bun.lock ./ RUN bun install --frozen-lockfile @@ -9,9 +9,9 @@ ENV SITE_URL=$SITE_URL COPY . . RUN bun run build -FROM nginx:alpine AS runner +FROM nginxinc/nginx-unprivileged:alpine@sha256:b5047b9b76845eac124358373c6852377c52e4b05834a47647e955dd91cb8f1e AS runner WORKDIR /usr/share/nginx/html COPY --from=builder /app/dist . COPY nginx/default.conf /etc/nginx/conf.d/default.conf -EXPOSE 80 +EXPOSE 8080 CMD ["nginx", "-g", "daemon off;"] diff --git a/README.md b/README.md index b5375cb..4e38af9 100644 --- a/README.md +++ b/README.md @@ -4,17 +4,31 @@ ## Stack -- Astro (static output) with React components rendered at build time +- Astro static output with no client-side framework runtime - Bulma + SCSS -- Markdown project READMEs fetched during the build +- Project READMEs vendored locally for reproducible builds +- Optimized local images via `astro:assets` ## Development ```sh bun install -bun run dev # http://localhost:4321 -bun run build # static output in dist/ -bun run preview # preview the production build +bun run dev # http://localhost:4321 +bun run build # static output in dist/ +bun run preview # preview the production build +bun run check # Astro type/diagnostic check +bun run check:seo # title/meta/canonical/sitemap/link audit +bun run refresh:readmes +``` + +## Project content + +Project READMEs are downloaded into `src/data/readmes/` and rendered from the local copies. +This keeps Docker and CI builds independent of GitHub availability. To refresh them from the +URLs in `src/data/projects.json`: + +```sh +bun run refresh:readmes ``` ## Docker Compose @@ -25,8 +39,8 @@ docker compose logs -f docker compose down ``` -The compose stack builds the Astro site and serves it with Nginx. Override the published port -or canonical site URL with environment variables: +The compose stack builds the Astro site and serves it with an unprivileged Nginx container on +port `8080`. Override the published host port or canonical site URL with environment variables: ```sh PORT=3000 SITE_URL=https://staging.example.com docker compose up --build -d @@ -35,7 +49,10 @@ PORT=3000 SITE_URL=https://staging.example.com docker compose up --build -d ## Deployment hardening - Static output is generated with `astro build` and served by Nginx in Docker. +- Nginx runs as the unprivileged `nginx` user and listens on port `8080` inside the container. +- Base images are pinned by digest. - Custom Nginx rules live in `nginx/default.conf`. +- A Content Security Policy restricts scripts, styles, fonts, images, and analytics connections. - Common scanner probe paths like `.env`, `xmlrpc.php`, `wp-*`, and `*.php` return `404`. - Dotfiles are blocked except `/.well-known/*`. - Hash-based assets in `/_astro/` are cached immutably; HTML is served with `no-cache`. diff --git a/astro.config.mjs b/astro.config.mjs index deb6c7a..5cdf916 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -1,5 +1,4 @@ import { defineConfig } from 'astro/config' -import react from '@astrojs/react' import sitemap from '@astrojs/sitemap' export default defineConfig({ @@ -8,5 +7,5 @@ export default defineConfig({ build: { format: 'directory', }, - integrations: [react(), sitemap()], + integrations: [sitemap()], }) diff --git a/bun.lock b/bun.lock index d23d2d0..0b3a60a 100644 --- a/bun.lock +++ b/bun.lock @@ -5,25 +5,19 @@ "": { "name": "luisjcenteno.dev", "dependencies": { - "@astrojs/react": "^7.1.1", "@astrojs/sitemap": "^3.7.4", - "@tabler/icons-react": "^3.37.1", + "@tabler/icons": "^3.50.0", "astro": "^7.4.2", "bulma": "^0.9.4", "marked": "^12.0.0", - "prop-types": "^15.8.1", - "react": "19.2.4", - "react-dom": "19.2.4", "sass": "1.70.0", }, "devDependencies": { "@astrojs/check": "^0.9.12", "@eslint/js": "^10.0.1", - "@types/prop-types": "^15.7.15", "@typescript-eslint/parser": "^8.72.1", "eslint": "^9", "eslint-plugin-astro": "^3.2.1", - "eslint-plugin-react": "^7.37.5", "globals": "^17.13.0", "typescript": "^6.0.0", }, @@ -66,8 +60,6 @@ "@astrojs/prism": ["@astrojs/prism@4.1.1", "", { "dependencies": { "prismjs": "^1.30.0" } }, "sha512-sXlAXJX6t4QfuLg+CuCDzpg7NoxWcyb4paFprgtFppLeisCBmh935h+tJ5CWXfsXEoW2IDy/ihbRMtiu28Chjw=="], - "@astrojs/react": ["@astrojs/react@7.1.1", "", { "dependencies": { "@astrojs/internal-helpers": "0.13.0", "@vitejs/plugin-react": "^6.1.2", "devalue": "^6.0.2", "ultrahtml": "^1.7.0", "vite": "^8.3.4" }, "peerDependencies": { "@types/react": "^17.0.50 || ^18.0.21 || ^19.0.0", "@types/react-dom": "^17.0.17 || ^18.0.6 || ^19.0.0", "oxc-transform-react": "^0.145.0", "react": "^17.0.2 || ^18.0.0 || ^19.0.0", "react-dom": "^17.0.2 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["oxc-transform-react"] }, "sha512-jHan8UuXzFEbzcmsjCRrepm9Xc5XRz+Jt57MjfE568tbOEoDKVzeMuHf9YO0Y4hHwROX8iJmLzaiT3Yr5W0UbQ=="], - "@astrojs/sitemap": ["@astrojs/sitemap@3.7.4", "", { "dependencies": { "sitemap": "^9.0.0", "zod": "^4.3.6" } }, "sha512-LbKNC24bdUWcQf/pThB6qLlSqHojxGjZDURIzFocY8rlWnAn2t74nnhnK6S5x0NHriHoAduLEpVjRykmeGiVvA=="], "@astrojs/telemetry": ["@astrojs/telemetry@3.4.1", "", { "dependencies": { "ci-info": "^4.4.0", "dset": "^3.1.4", "is-docker": "^4.0.0", "package-manager-detector": "^1.9.0" } }, "sha512-SMkvMsGOpM0FMAoT5pzhgI3LZC0JSPWf7Evwop+fZ3N6UkusPM7lI+sOJjMNI5OJrVoiei1/AGo1cY7sikTc5A=="], @@ -264,9 +256,7 @@ "@shikijs/vscode-textmate": ["@shikijs/vscode-textmate@10.1.0", "", {}, "sha512-cVBuhDQjBZaNMTwBquYfPydrUP+E3hE6oYGasx8h6ZrODIM7/r+gxLDXdd66oszbrggZHEntdE6j+5gYIVyMWQ=="], - "@tabler/icons": ["@tabler/icons@3.37.1", "", {}, "sha512-neLCWkuyNHEPXCyYu6nbN4S3g/59BTa4qyITAugYVpq1YzYNDOZooW7/vRWH98ZItXAudxdKU8muFT7y1PqzuA=="], - - "@tabler/icons-react": ["@tabler/icons-react@3.37.1", "", { "dependencies": { "@tabler/icons": "" }, "peerDependencies": { "react": ">= 16" } }, "sha512-R7UE71Jji7i4Su56Y9zU1uYEBakUejuDJvyuYVmBuUoqp/x3Pn4cv2huarexR3P0GJ2eHg4rUj9l5zccqS6K/Q=="], + "@tabler/icons": ["@tabler/icons@3.50.0", "", {}, "sha512-HflLxyrH1cqC7s7jzQGSjpsTAVIoaf7+/yHjbdM59rJQBMjliibp+LYhDPFxOMcwa1M8DNpOk6ENzQiWn9a1Dg=="], "@tybys/wasm-util": ["@tybys/wasm-util@0.10.4", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-W3c4gRigFS0T/Ma4qIYF3GDAc5AQdHb1yL5znJT1Zv1YaD9Kitx656wBjvr19qbiosmZT8lWDM5BEMynUqX65A=="], @@ -286,12 +276,6 @@ "@types/node": ["@types/node@24.19.2", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-93d49wCWJkCyN87MxLpNN6KXPCwFw7bVUg79mGUV1OS40JGWwVCr8n61DXCSqz7CV6/VfPkb7xec7uP2M+QHWQ=="], - "@types/prop-types": ["@types/prop-types@15.7.15", "", {}, "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw=="], - - "@types/react": ["@types/react@19.3.0", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg=="], - - "@types/react-dom": ["@types/react-dom@19.3.0", "", { "peerDependencies": { "@types/react": "^19.3.0" } }, "sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q=="], - "@types/sax": ["@types/sax@1.2.7", "", { "dependencies": { "@types/node": "*" } }, "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A=="], "@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], @@ -312,8 +296,6 @@ "@ungap/structured-clone": ["@ungap/structured-clone@1.4.0", "", {}, "sha512-1mEZtMKPM09vDmQt5y7YvmN2+DFTP7Tg0EWXdic8/C6VRnpb33e4ghisCIE3WZjsE2N8mf+QV1Zqh7ZFYLWInQ=="], - "@vitejs/plugin-react": ["@vitejs/plugin-react@6.1.2", "", { "dependencies": { "@rolldown/pluginutils": "^1.0.1" }, "peerDependencies": { "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", "babel-plugin-react-compiler": "^1.0.0", "oxc-transform-react": "^0.152.0", "vite": "^8.0.0" }, "optionalPeers": ["@rolldown/plugin-babel", "babel-plugin-react-compiler", "oxc-transform-react"] }, "sha512-fhJNGUdscQa4HkI0xFxwonWyhnVReCPDbXI7FH7jmzpnVCrFQI7PRrhWecO263610vOrs9tr2Y4xcf8uAdFxbw=="], - "@volar/kit": ["@volar/kit@2.4.30", "", { "dependencies": { "@volar/language-service": "2.4.30", "@volar/typescript": "2.4.30", "typesafe-path": "^0.2.2", "vscode-languageserver-textdocument": "^1.0.11", "vscode-uri": "^3.0.8" }, "peerDependencies": { "typescript": "<7" } }, "sha512-VocLtumfXnqnPQEWc9Yx7uC1uOh9gyjVNlrn2+6Zx/z9aM6yTLhPK8lSqM9Ilu81XRa48I00lcYJWLi2BLxx8Q=="], "@volar/language-core": ["@volar/language-core@2.4.30", "", { "dependencies": { "@volar/source-map": "2.4.30" } }, "sha512-73fjwEV8wat6aOZ6U/y/hqtE30ocrIWECg67b0txGczOMNw+MffLmvJ5fnFfN9drVUEYZzLdaNo6VAy6G6avMw=="], @@ -352,28 +334,10 @@ "aria-query": ["aria-query@5.3.2", "", {}, "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw=="], - "array-buffer-byte-length": ["array-buffer-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "is-array-buffer": "^3.0.5" } }, "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw=="], - - "array-includes": ["array-includes@3.2.0", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.2", "es-object-atoms": "^1.1.2", "es-shim-unscopables": "^1.1.0", "is-string": "^1.1.1", "math-intrinsics": "^1.1.0" } }, "sha512-VXY5eFRarnXcYxwBjJzPmEhH55+rmP79/+ueDhi0F+TuqfHCItagIHqxeUZrmgrOPa31QTh9H85DjX3FfJ0FTg=="], - - "array.prototype.findlast": ["array.prototype.findlast@1.2.5", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-shim-unscopables": "^1.0.2" } }, "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ=="], - - "array.prototype.flat": ["array.prototype.flat@1.3.3", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-shim-unscopables": "^1.0.2" } }, "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg=="], - - "array.prototype.flatmap": ["array.prototype.flatmap@1.3.3", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-shim-unscopables": "^1.0.2" } }, "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg=="], - - "array.prototype.tosorted": ["array.prototype.tosorted@1.1.4", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.3", "es-errors": "^1.3.0", "es-shim-unscopables": "^1.0.2" } }, "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA=="], - - "arraybuffer.prototype.slice": ["arraybuffer.prototype.slice@1.0.4", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "is-array-buffer": "^3.0.4" } }, "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ=="], - "astro": ["astro@7.4.2", "", { "dependencies": { "@astrojs/compiler-rs": "^0.5.1", "@astrojs/internal-helpers": "0.13.0", "@astrojs/markdown-satteri": "0.4.5", "@astrojs/telemetry": "3.4.1", "@capsizecss/unpack": "^4.0.1", "@clack/prompts": "^1.8.1", "@oslojs/encoding": "^1.1.0", "am-i-vibing": "^0.5.0", "aria-query": "^5.3.2", "axobject-query": "^4.1.0", "ci-info": "^4.4.0", "clsx": "^2.1.1", "common-ancestor-path": "^2.0.0", "cookie": "^2.0.1", "devalue": "^6.0.2", "diff": "^9.0.0", "dset": "^3.1.4", "es-module-lexer": "^3.0.3", "flattie": "^1.1.1", "fontace": "~0.4.1", "get-tsconfig": "5.0.0-beta.6", "github-slugger": "^2.0.0", "html-escaper": "3.0.3", "http-cache-semantics": "^4.3.0", "jsonc-parser": "^3.3.1", "magic-string": "^1.4.3", "magicast": "^0.5.5", "mrmime": "^2.0.1", "neotraverse": "^1.0.1", "obug": "^3.0.0", "p-limit": "^7.3.3", "p-queue": "^9.3.5", "package-manager-detector": "^1.9.0", "piccolore": "^0.1.3", "picomatch": "^4.0.7", "rolldown": "^1.2.13", "shiki": "^4.5.0", "smol-toml": "^1.9.1", "svgo": "^4.1.0", "tinyclip": "^1.0.3", "tinyexec": "^1.3.1", "tinyglobby": "^0.2.17", "tinyps": "^0.5.0", "ultrahtml": "^1.7.0", "unifont": "^1.0.3", "unstorage": "^1.17.5", "verkit": "^0.5.0", "vite": "^8.3.4", "vitefu": "^1.1.3", "xxhash-wasm": "^1.1.0", "yargs-parser": "^22.0.0", "zod": "^4.6.6" }, "optionalDependencies": { "sharp": "^0.35.4" }, "peerDependencies": { "@astrojs/markdown-remark": "^7.3.0" }, "optionalPeers": ["@astrojs/markdown-remark"], "bin": { "astro": "./bin/astro.mjs" } }, "sha512-FAH4cdDlFaVnQGjazLTEIC5vJqGlo5XANc1wIbzQHIqAjJTll/RWTUs+SPNW1JdezG4YGxMZllaE5A41T2kzhA=="], "astro-eslint-parser": ["astro-eslint-parser@3.2.0", "", { "dependencies": { "@astrojs/compiler-rs": "^0.4.0 || ^0.5.0", "@typescript-eslint/scope-manager": "^8.61.0", "@typescript-eslint/types": "^8.61.0", "debug": "^4.4.3", "eslint-scope": "^9.1.2", "eslint-visitor-keys": "^5.0.1", "espree": "^11.2.0", "semver": "^7.8.4", "tinyglobby": "^0.2.17" } }, "sha512-WavQUarfgwSbpCq4xsdcIBdX5KArfI2d6DD8EIloJIMthnB1508iNpx4C77EhUyMd03LpEt8HAPzwF/cG0V39g=="], - "async-function": ["async-function@1.0.0", "", {}, "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA=="], - - "available-typed-arrays": ["available-typed-arrays@1.0.7", "", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="], - "axobject-query": ["axobject-query@4.1.0", "", {}, "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="], "bail": ["bail@2.0.2", "", {}, "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="], @@ -390,12 +354,6 @@ "bulma": ["bulma@0.9.4", "", {}, "sha512-86FlT5+1GrsgKbPLRRY7cGDg8fsJiP/jzTqXXVqiUZZ2aZT8uemEOHlU1CDU+TxklPEZ11HZNNWclRBBecP4CQ=="], - "call-bind": ["call-bind@1.0.9", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "get-intrinsic": "^1.3.0", "set-function-length": "^1.2.2" } }, "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ=="], - - "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], - - "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], - "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], "ccount": ["ccount@2.0.1", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="], @@ -444,22 +402,10 @@ "csso": ["csso@5.0.5", "", { "dependencies": { "css-tree": "~2.2.0" } }, "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ=="], - "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], - - "data-view-buffer": ["data-view-buffer@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ=="], - - "data-view-byte-length": ["data-view-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ=="], - - "data-view-byte-offset": ["data-view-byte-offset@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ=="], - "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], "deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="], - "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="], - - "define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="], - "defu": ["defu@6.1.7", "", {}, "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ=="], "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], @@ -474,8 +420,6 @@ "diff": ["diff@9.0.0", "", {}, "sha512-svtcdpS8CgJyqAjEQIXdb3OjhFVVYjzGAPO8WGCmRbrml64SPw/jJD4GoE98aR7r25A0XcgrK3F02yw9R/vhQw=="], - "doctrine": ["doctrine@2.1.0", "", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw=="], - "dom-serializer": ["dom-serializer@2.0.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", "entities": "^4.2.0" } }, "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg=="], "domelementtype": ["domelementtype@2.3.0", "", {}, "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="], @@ -486,34 +430,14 @@ "dset": ["dset@3.1.4", "", {}, "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA=="], - "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], - "emmet": ["emmet@2.4.11", "", { "dependencies": { "@emmetio/abbreviation": "^2.3.3", "@emmetio/css-abbreviation": "^2.1.8" } }, "sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ=="], "emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], - "es-abstract": ["es-abstract@1.24.2", "", { "dependencies": { "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", "get-intrinsic": "^1.3.0", "get-proto": "^1.0.1", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "internal-slot": "^1.1.0", "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", "is-negative-zero": "^2.0.3", "is-regex": "^1.2.1", "is-set": "^2.0.3", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", "stop-iteration-iterator": "^1.1.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.3", "typed-array-byte-length": "^1.0.3", "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", "which-typed-array": "^1.1.19" } }, "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg=="], - - "es-abstract-get": ["es-abstract-get@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "es-object-atoms": "^1.1.2", "is-callable": "^1.2.7", "object-inspect": "^1.13.4" } }, "sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg=="], - - "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], - - "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], - - "es-iterator-helpers": ["es-iterator-helpers@1.4.0", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.2", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.1.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.3.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "iterator.prototype": "^1.1.5", "math-intrinsics": "^1.1.0" } }, "sha512-c/A0P0oxkACDc+cKWw8evLXK83oBKgn0qPOqCYT4x9uolpCIJAcYvJC9QYKNDRPsTeGyCrQ326jrvgZWdCdK5Q=="], - "es-module-lexer": ["es-module-lexer@3.0.4", "", {}, "sha512-BldNY5mwkVu+cQ5Ymn3e6hB9Sx8XHx4ZevWbiUyZbfKxJxYO27Hf0wfzkxIaD5CAJMaGl3YspKELj0ff/7nCMA=="], - "es-object-atoms": ["es-object-atoms@1.1.2", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw=="], - - "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="], - - "es-shim-unscopables": ["es-shim-unscopables@1.1.0", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw=="], - - "es-to-primitive": ["es-to-primitive@1.3.4", "", { "dependencies": { "es-abstract-get": "^1.0.0", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "is-callable": "^1.2.7", "is-date-object": "^1.1.0", "is-symbol": "^1.1.1" } }, "sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw=="], - "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], @@ -522,8 +446,6 @@ "eslint-plugin-astro": ["eslint-plugin-astro@3.2.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.5.1", "@jridgewell/sourcemap-codec": "^1.5.0", "@typescript-eslint/types": "^8.61.0", "astro-eslint-parser": "^3.0.0", "espree": "^11.0.0", "globals": "^17.0.0", "postcss": "^8.5.3", "postcss-selector-parser": "^7.1.0", "synckit": "^0.11.13" }, "peerDependencies": { "@typescript-eslint/parser": ">=8.61.0", "eslint": ">=10.0.0", "eslint-plugin-jsx-a11y": ">=6.10.2", "eslint-plugin-jsx-a11y-x": ">=0.2.0", "typescript-eslint": ">=8.61.0" }, "optionalPeers": ["@typescript-eslint/parser", "eslint-plugin-jsx-a11y", "eslint-plugin-jsx-a11y-x", "typescript-eslint"] }, "sha512-IgU7LIkpEg0r6bQGwc3Ck5jHgkUk3rOrEfRhUxDtMx/M0GD3SG/turMtvwj989KRR12Wt1l89faZ5ynjvVL7hg=="], - "eslint-plugin-react": ["eslint-plugin-react@7.37.5", "", { "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", "array.prototype.flatmap": "^1.3.3", "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", "es-iterator-helpers": "^1.2.1", "estraverse": "^5.3.0", "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", "object.entries": "^1.1.9", "object.fromentries": "^2.0.8", "object.values": "^1.2.1", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.5", "semver": "^6.3.1", "string.prototype.matchall": "^4.0.12", "string.prototype.repeat": "^1.0.0" }, "peerDependencies": { "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA=="], - "eslint-scope": ["eslint-scope@8.4.0", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg=="], "eslint-visitor-keys": ["eslint-visitor-keys@4.2.1", "", {}, "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ=="], @@ -576,28 +498,12 @@ "fontkitten": ["fontkitten@1.0.3", "", { "dependencies": { "tiny-inflate": "^1.0.3" } }, "sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw=="], - "for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="], - "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], - "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], - - "function.prototype.name": ["function.prototype.name@1.2.0", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", "has-property-descriptors": "^1.0.2", "hasown": "^2.0.4", "is-callable": "^1.2.7", "is-document.all": "^1.0.0" } }, "sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew=="], - - "functions-have-names": ["functions-have-names@1.2.3", "", {}, "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="], - - "generator-function": ["generator-function@2.0.1", "", {}, "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g=="], - "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], "get-east-asian-width": ["get-east-asian-width@1.7.0", "", {}, "sha512-XjH1AECxf0giL2V1aU8vKyRR2ppRUb5c0EvT7zuJTokQ74bNo52zOtghqdWIqrhUD79fo3x0WfKZdOqxF6LG1Q=="], - "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], - - "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], - - "get-symbol-description": ["get-symbol-description@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6" } }, "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg=="], - "get-tsconfig": ["get-tsconfig@5.0.0-beta.6", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-X6fBC0pmImC70gvX2zm56go9hx0MyoGVdG0tUCkg/D+Xnh5TJsOZ7iDbOdI3PvmtrDxnu1YdDufpK2QJX1Meqw=="], "github-slugger": ["github-slugger@2.0.0", "", {}, "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw=="], @@ -606,26 +512,10 @@ "globals": ["globals@17.13.0", "", {}, "sha512-RwMTC61u7hrG3ZJMkZQOK4JLJrKS8QtoTii63EmWvFXHqycY9FObBJQCbsLxSO8kjKhWE5kV1GC+Vb1g3RI0Zg=="], - "globalthis": ["globalthis@1.0.4", "", { "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ=="], - - "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], - "h3": ["h3@1.15.11", "", { "dependencies": { "cookie-es": "^1.2.3", "crossws": "^0.3.5", "defu": "^6.1.6", "destr": "^2.0.5", "iron-webcrypto": "^1.2.1", "node-mock-http": "^1.0.4", "radix3": "^1.1.2", "ufo": "^1.6.3", "uncrypto": "^0.1.3" } }, "sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg=="], - "has-bigints": ["has-bigints@1.1.0", "", {}, "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg=="], - "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], - "has-property-descriptors": ["has-property-descriptors@1.0.2", "", { "dependencies": { "es-define-property": "^1.0.0" } }, "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg=="], - - "has-proto": ["has-proto@1.2.0", "", { "dependencies": { "dunder-proto": "^1.0.0" } }, "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ=="], - - "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], - - "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], - - "hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], - "hast-util-to-html": ["hast-util-to-html@9.0.5", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-whitespace": "^3.0.0", "html-void-elements": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "stringify-entities": "^4.0.0", "zwitch": "^2.0.4" } }, "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw=="], "hast-util-whitespace": ["hast-util-whitespace@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw=="], @@ -644,76 +534,22 @@ "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], - "internal-slot": ["internal-slot@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw=="], - "iron-webcrypto": ["iron-webcrypto@1.2.1", "", {}, "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg=="], - "is-array-buffer": ["is-array-buffer@3.0.5", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A=="], - - "is-async-function": ["is-async-function@2.1.1", "", { "dependencies": { "async-function": "^1.0.0", "call-bound": "^1.0.3", "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ=="], - - "is-bigint": ["is-bigint@1.1.0", "", { "dependencies": { "has-bigints": "^1.0.2" } }, "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ=="], - "is-binary-path": ["is-binary-path@2.1.0", "", { "dependencies": { "binary-extensions": "^2.0.0" } }, "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="], - "is-boolean-object": ["is-boolean-object@1.2.2", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A=="], - - "is-callable": ["is-callable@1.2.7", "", {}, "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="], - - "is-core-module": ["is-core-module@2.17.0", "", { "dependencies": { "hasown": "^2.0.4" } }, "sha512-J/vG0zBCbIKOQFfufSwyXdMrsohyJIUNkrnmo6WZGzoM7tr/lsbfW5b2BvisL6zsyMzK9UxV9L6c7AoFbyXHOA=="], - - "is-data-view": ["is-data-view@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" } }, "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw=="], - - "is-date-object": ["is-date-object@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg=="], - "is-docker": ["is-docker@4.0.0", "", { "bin": { "is-docker": "cli.js" } }, "sha512-LHE+wROyG/Y/0ZnbktRCoTix2c1RhgWaZraMZ8o1Q7zCh0VSrICJQO5oqIIISrcSBtrXv0o233w1IYwsWCjTzA=="], - "is-document.all": ["is-document.all@1.0.0", "", { "dependencies": { "call-bound": "^1.0.4" } }, "sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g=="], - "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], - "is-finalizationregistry": ["is-finalizationregistry@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg=="], - - "is-generator-function": ["is-generator-function@1.1.2", "", { "dependencies": { "call-bound": "^1.0.4", "generator-function": "^2.0.0", "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA=="], - "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], - "is-map": ["is-map@2.0.3", "", {}, "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw=="], - - "is-negative-zero": ["is-negative-zero@2.0.3", "", {}, "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw=="], - "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], - "is-number-object": ["is-number-object@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw=="], - "is-plain-obj": ["is-plain-obj@4.1.0", "", {}, "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="], - "is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], - - "is-set": ["is-set@2.0.3", "", {}, "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg=="], - - "is-shared-array-buffer": ["is-shared-array-buffer@1.0.4", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A=="], - - "is-string": ["is-string@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA=="], - - "is-symbol": ["is-symbol@1.1.1", "", { "dependencies": { "call-bound": "^1.0.2", "has-symbols": "^1.1.0", "safe-regex-test": "^1.1.0" } }, "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w=="], - - "is-typed-array": ["is-typed-array@1.1.15", "", { "dependencies": { "which-typed-array": "^1.1.16" } }, "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ=="], - - "is-weakmap": ["is-weakmap@2.0.2", "", {}, "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w=="], - - "is-weakref": ["is-weakref@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew=="], - - "is-weakset": ["is-weakset@2.0.4", "", { "dependencies": { "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ=="], - - "isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], - "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], - "iterator.prototype": ["iterator.prototype@1.1.5", "", { "dependencies": { "define-data-property": "^1.1.4", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.6", "get-proto": "^1.0.0", "has-symbols": "^1.1.0", "set-function-name": "^2.0.2" } }, "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g=="], - - "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], - "js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="], "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], @@ -724,8 +560,6 @@ "jsonc-parser": ["jsonc-parser@3.3.1", "", {}, "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ=="], - "jsx-ast-utils": ["jsx-ast-utils@3.3.5", "", { "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", "object.assign": "^4.1.4", "object.values": "^1.1.6" } }, "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ=="], - "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="], "kleur": ["kleur@4.1.5", "", {}, "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="], @@ -760,8 +594,6 @@ "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], - "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], - "lru-cache": ["lru-cache@11.5.3", "", {}, "sha512-U4N8FgzmWxc8k1VH8Kr6lQg18U7Fjvby6wXHVRX/ZZ7IwWbRMgrRbP0Wrb5q5NVinryp4SQampHKdvtecItxUg=="], "magic-string": ["magic-string@1.4.5", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.6.0" } }, "sha512-oLLC2+YvQUfAa+vxoufE/yc1icb87M9iXIRqAoR/2EhE/8cb3SF/+Gi0c2By1B+5Vz2e2vQtUvHiu1+63Znh+w=="], @@ -770,8 +602,6 @@ "marked": ["marked@12.0.2", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q=="], - "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], - "mdast-util-to-hast": ["mdast-util-to-hast@13.2.1", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@ungap/structured-clone": "^1.0.0", "devlop": "^1.0.0", "micromark-util-sanitize-uri": "^2.0.0", "trim-lines": "^3.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA=="], "mdn-data": ["mdn-data@2.27.1", "", {}, "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ=="], @@ -802,8 +632,6 @@ "nlcst-to-string": ["nlcst-to-string@4.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0" } }, "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA=="], - "node-exports-info": ["node-exports-info@1.6.2", "", { "dependencies": { "array.prototype.flatmap": "^1.3.3", "es-errors": "^1.3.0", "object.entries": "^1.1.9", "semver": "^6.3.1" } }, "sha512-kXs9Go0cah0qHVV2v389IXQLdLCeE1xfFtjOAF+iobu0OIoG1pje8At2vMHyaPMiPMnG/LWP50twML21eMcAag=="], - "node-fetch-native": ["node-fetch-native@1.6.7", "", {}, "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q=="], "node-mock-http": ["node-mock-http@1.0.5", "", {}, "sha512-KQyt/wLjG3TAc7DOUhpqWzgd4ERxR80JOlTK5VE5R1S12IaPVN5qkj4klBce9HPG1Njuup4Sb5bljaT34lIyjw=="], @@ -812,20 +640,6 @@ "nth-check": ["nth-check@2.1.1", "", { "dependencies": { "boolbase": "^1.0.0" } }, "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="], - "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], - - "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], - - "object-keys": ["object-keys@1.1.1", "", {}, "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="], - - "object.assign": ["object.assign@4.1.7", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0", "has-symbols": "^1.1.0", "object-keys": "^1.1.1" } }, "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw=="], - - "object.entries": ["object.entries@1.1.9", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-object-atoms": "^1.1.1" } }, "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw=="], - - "object.fromentries": ["object.fromentries@2.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2", "es-object-atoms": "^1.0.0" } }, "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ=="], - - "object.values": ["object.values@1.2.1", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA=="], - "obug": ["obug@3.0.0", "", {}, "sha512-5vvB5+W7ePv+p3uqxi+RcW1XAzLW0/hxt3/4X4Lc4qHudzOhmBiBwOY6DRob4WnanAEGvNcLjF+KNOufrUoEQw=="], "ofetch": ["ofetch@1.5.1", "", { "dependencies": { "destr": "^2.0.5", "node-fetch-native": "^1.6.7", "ufo": "^1.6.1" } }, "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA=="], @@ -836,8 +650,6 @@ "optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="], - "own-keys": ["own-keys@1.0.2", "", { "dependencies": { "call-bound": "^1.0.4", "get-intrinsic": "^1.3.0", "object-keys": "^1.1.1", "safe-push-apply": "^1.0.0" } }, "sha512-19YVAg7T+WTrxggPukVq7DjTv6+PJ867TmhCvBsYwmbFCsZd344rq2Ld1p0wo8f8Qrrhgp82c6FJRqdXWtSEhg=="], - "p-limit": ["p-limit@7.3.3", "", { "dependencies": { "yocto-queue": "^1.2.1" } }, "sha512-SKgVvDU5TNIxQ4r30U75BNLC6a+6GOEjngrk/ysM5+Zu3oJuk1SC5ApzIzY/7PjCEjoVPMWJ0zho/4QUiEB7TQ=="], "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], @@ -856,16 +668,12 @@ "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], - "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], - "piccolore": ["piccolore@0.1.3", "", {}, "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw=="], "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], "picomatch": ["picomatch@4.0.7", "", {}, "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA=="], - "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="], - "postcss": ["postcss@8.5.32", "", { "dependencies": { "nanoid": "^3.3.20", "picocolors": "^1.1.1", "source-map-js": "^1.2.2" } }, "sha512-LJlKCCAUFKOuZxipUdYw1NzIITEsPcgyOG9LkvRJvuKj/bRzbuRY0ARXvL0pWGpsZvn8jku+LMep2eU0seHp8g=="], "postcss-selector-parser": ["postcss-selector-parser@7.1.7", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-wWBro/7hJ40ye6TPiXkUQoXKCw23xSsjriUvqd7Uls9Sso3oLiON1flc18cCdnjgCRXw4fBVqUJJeOdDTh3P3g=="], @@ -878,38 +686,24 @@ "process-ancestry": ["process-ancestry@0.1.0", "", {}, "sha512-tGqJW/UnclpYASFcM6Xh8D8l/BMtaQ9+CSG0vlJSJTcdMM4lDRv4c6H0Pdcsfted+bVczdYSfk2fdukg2gQkZg=="], - "prop-types": ["prop-types@15.8.1", "", { "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg=="], - "property-information": ["property-information@7.2.0", "", {}, "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg=="], "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], "radix3": ["radix3@1.1.2", "", {}, "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA=="], - "react": ["react@19.2.4", "", {}, "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ=="], - - "react-dom": ["react-dom@19.2.4", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.4" } }, "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ=="], - - "react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="], - "readdirp": ["readdirp@5.1.1", "", {}, "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA=="], - "reflect.getprototypeof": ["reflect.getprototypeof@1.0.10", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.9", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.7", "get-proto": "^1.0.1", "which-builtin-type": "^1.2.1" } }, "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw=="], - "regex": ["regex@6.1.0", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg=="], "regex-recursion": ["regex-recursion@6.0.2", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg=="], "regex-utilities": ["regex-utilities@2.3.0", "", {}, "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng=="], - "regexp.prototype.flags": ["regexp.prototype.flags@1.5.4", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "get-proto": "^1.0.1", "gopd": "^1.2.0", "set-function-name": "^2.0.2" } }, "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA=="], - "request-light": ["request-light@0.7.0", "", {}, "sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q=="], "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], - "resolve": ["resolve@2.0.0-next.7", "", { "dependencies": { "es-errors": "^1.3.0", "is-core-module": "^2.16.2", "node-exports-info": "^1.6.0", "object-keys": "^1.1.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ=="], - "resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="], @@ -918,27 +712,13 @@ "rolldown": ["rolldown@1.2.15", "", { "dependencies": { "@oxc-project/types": "=0.155.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm-eabi": "1.2.15", "@rolldown/binding-android-arm64": "1.2.15", "@rolldown/binding-darwin-arm64": "1.2.15", "@rolldown/binding-darwin-x64": "1.2.15", "@rolldown/binding-freebsd-x64": "1.2.15", "@rolldown/binding-linux-arm-gnueabihf": "1.2.15", "@rolldown/binding-linux-arm64-gnu": "1.2.15", "@rolldown/binding-linux-arm64-musl": "1.2.15", "@rolldown/binding-linux-ppc64-gnu": "1.2.15", "@rolldown/binding-linux-s390x-gnu": "1.2.15", "@rolldown/binding-linux-x64-gnu": "1.2.15", "@rolldown/binding-linux-x64-musl": "1.2.15", "@rolldown/binding-openharmony-arm64": "1.2.15", "@rolldown/binding-win32-arm64-msvc": "1.2.15", "@rolldown/binding-win32-x64-msvc": "1.2.15" }, "bin": { "rolldown": "./bin/cli.mjs" } }, "sha512-6odND+fel5zVw3I4Yc2e69gvguDnX0CAAGiNDZSq4ik5WUcaLrkD2GLuog0XcODbor31hZ5ayEMgVDno+KPV5g=="], - "safe-array-concat": ["safe-array-concat@1.1.4", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "get-intrinsic": "^1.3.0", "has-symbols": "^1.1.0", "isarray": "^2.0.5" } }, "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg=="], - - "safe-push-apply": ["safe-push-apply@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "isarray": "^2.0.5" } }, "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA=="], - - "safe-regex-test": ["safe-regex-test@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" } }, "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw=="], - "sass": ["sass@1.70.0", "", { "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", "source-map-js": ">=0.6.2 <2.0.0" }, "bin": { "sass": "sass.js" } }, "sha512-uUxNQ3zAHeAx5nRFskBnrWzDUJrrvpCPD5FNAoRvTi0WwremlheES3tg+56PaVtCs5QDRX5CBLxxKMDJMEa1WQ=="], "satteri": ["satteri@0.10.5", "", { "dependencies": { "@types/estree-jsx": "^1.0.5", "@types/hast": "^3.0.5", "@types/mdast": "^4.0.4", "@types/unist": "^3.0.3" }, "optionalDependencies": { "@bruits/satteri-darwin-arm64": "0.10.5", "@bruits/satteri-darwin-x64": "0.10.5", "@bruits/satteri-linux-arm64-gnu": "0.10.5", "@bruits/satteri-linux-arm64-musl": "0.10.5", "@bruits/satteri-linux-x64-gnu": "0.10.5", "@bruits/satteri-linux-x64-musl": "0.10.5", "@bruits/satteri-wasm32-wasi": "0.10.5", "@bruits/satteri-win32-arm64-msvc": "0.10.5", "@bruits/satteri-win32-x64-msvc": "0.10.5" } }, "sha512-Ao1LKpAEa9Wdg0otgbVKViZHEq9ebdXe4DMrp3s9vQAU0HNIuHnFEuMuOcm0ZIXyV0Yzxj91NvhLpvXZJO/5ZQ=="], "sax": ["sax@1.6.1", "", {}, "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q=="], - "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="], - - "semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - - "set-function-length": ["set-function-length@1.2.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2" } }, "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg=="], - - "set-function-name": ["set-function-name@2.0.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", "has-property-descriptors": "^1.0.2" } }, "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ=="], - - "set-proto": ["set-proto@1.0.0", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0" } }, "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw=="], + "semver": ["semver@7.8.5", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA=="], "sharp": ["sharp@0.35.5", "", { "dependencies": { "@img/colour": "^1.1.0", "detect-libc": "^2.1.2", "semver": "^7.8.5" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.35.5", "@img/sharp-darwin-x64": "0.35.5", "@img/sharp-freebsd-wasm32": "0.35.5", "@img/sharp-libvips-darwin-arm64": "1.3.4", "@img/sharp-libvips-darwin-x64": "1.3.4", "@img/sharp-libvips-linux-arm": "1.3.4", "@img/sharp-libvips-linux-arm64": "1.3.4", "@img/sharp-libvips-linux-ppc64": "1.3.4", "@img/sharp-libvips-linux-riscv64": "1.3.4", "@img/sharp-libvips-linux-s390x": "1.3.4", "@img/sharp-libvips-linux-x64": "1.3.4", "@img/sharp-libvips-linuxmusl-arm64": "1.3.4", "@img/sharp-libvips-linuxmusl-x64": "1.3.4", "@img/sharp-linux-arm": "0.35.5", "@img/sharp-linux-arm64": "0.35.5", "@img/sharp-linux-ppc64": "0.35.5", "@img/sharp-linux-riscv64": "0.35.5", "@img/sharp-linux-s390x": "0.35.5", "@img/sharp-linux-x64": "0.35.5", "@img/sharp-linuxmusl-arm64": "0.35.5", "@img/sharp-linuxmusl-x64": "0.35.5", "@img/sharp-webcontainers-wasm32": "0.35.5", "@img/sharp-win32-arm64": "0.35.5", "@img/sharp-win32-ia32": "0.35.5", "@img/sharp-win32-x64": "0.35.5" }, "peerDependencies": { "@types/node": "*" }, "optionalPeers": ["@types/node"] }, "sha512-Ywn4OnzGukp7CDMrp08RQ50YKmuwG47brZgIVPTvBaaAfQlRlygrRqSrxdCiL9M+LlzLBiJ68IR1QqvzHyjC7g=="], @@ -948,14 +728,6 @@ "shiki": ["shiki@4.5.0", "", { "dependencies": { "@shikijs/core": "4.5.0", "@shikijs/engine-javascript": "4.5.0", "@shikijs/engine-oniguruma": "4.5.0", "@shikijs/langs": "4.5.0", "@shikijs/themes": "4.5.0", "@shikijs/types": "4.5.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.5" } }, "sha512-OcRW72ngQvc+MSVWBRIovC/BTW589iUE/Vxav7VeM4RcY9MUjqB+IR6ILG1k9nuW6LiG/nct9uma4/MBtnZbmQ=="], - "side-channel": ["side-channel@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.4", "side-channel-list": "^1.0.1", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ=="], - - "side-channel-list": ["side-channel-list@1.0.1", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.4" } }, "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w=="], - - "side-channel-map": ["side-channel-map@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" } }, "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA=="], - - "side-channel-weakmap": ["side-channel-weakmap@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" } }, "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="], - "sisteransi": ["sisteransi@1.0.5", "", {}, "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="], "sitemap": ["sitemap@9.0.1", "", { "dependencies": { "@types/node": "^24.9.2", "@types/sax": "^1.2.1", "arg": "^5.0.0", "sax": "^1.4.1" }, "bin": { "sitemap": "dist/esm/cli.js" } }, "sha512-S6hzjGJSG3d6if0YoF5kTyeRJvia6FSTBroE5fQ0bu1QNxyJqhhinfUsXi9fH3MgtXODWvwo2BDyQSnhPQ88uQ=="], @@ -968,20 +740,8 @@ "std-env": ["std-env@4.3.0", "", {}, "sha512-OtU/EgQ1kIm5KwqQpBC6ZEMXrZRui11w8zgfTWp8cdO9B8OaPsbA8bTHO2P+HNo1VlUTGMVBwPhydu6poeXiag=="], - "stop-iteration-iterator": ["stop-iteration-iterator@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "internal-slot": "^1.1.0" } }, "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ=="], - "string-width": ["string-width@8.3.0", "", { "dependencies": { "get-east-asian-width": "^1.5.0", "strip-ansi": "^7.1.2" } }, "sha512-ZbmZM0JCihQN91dWnxoipT2KOEyHqEyfRXUyjuRhW8b/xnqPDoq4gWEVApTVa9db2wN8mmoikgFBbjh71+cGeQ=="], - "string.prototype.matchall": ["string.prototype.matchall@4.1.0", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.2", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.2", "get-intrinsic": "^1.3.0", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "regexp.prototype.flags": "^1.5.4", "set-function-name": "^2.0.2", "side-channel": "^1.1.1" } }, "sha512-tHNHTxInrYLCga9O9YGxWA3G9/nnzQw8UGAyqGx3Ar1pSTTzIuM4woFSq4SowkXCjJIwq5sIiQvEfRI9tCH1qQ=="], - - "string.prototype.repeat": ["string.prototype.repeat@1.0.0", "", { "dependencies": { "define-properties": "^1.1.3", "es-abstract": "^1.17.5" } }, "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w=="], - - "string.prototype.trim": ["string.prototype.trim@1.2.11", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "define-data-property": "^1.1.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.2", "es-object-atoms": "^1.1.2", "has-property-descriptors": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w=="], - - "string.prototype.trimend": ["string.prototype.trimend@1.0.10", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-object-atoms": "^1.1.2" } }, "sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw=="], - - "string.prototype.trimstart": ["string.prototype.trimstart@1.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg=="], - "stringify-entities": ["stringify-entities@4.0.4", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="], "strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], @@ -990,8 +750,6 @@ "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], - "svgo": ["svgo@4.1.0", "", { "dependencies": { "commander": "^11.1.0", "css-select": "^6.0.0", "css-tree": "^3.0.1", "css-what": "^7.0.0", "csso": "^5.0.5", "picocolors": "^1.1.1", "sax": "1.6.1" }, "bin": { "svgo": "bin/svgo.js" } }, "sha512-bkxnTg1kSU0guhIBmibA6UUhrQmPVA1XsQLN+ylCd+UWzbnLkySOcXpyk1mrl05f+pcaCx2eHb+sp6BgMZWX+Q=="], "synckit": ["synckit@0.11.13", "", { "dependencies": { "@pkgr/core": "^0.3.6" } }, "sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg=="], @@ -1018,14 +776,6 @@ "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="], - "typed-array-buffer": ["typed-array-buffer@1.0.3", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-typed-array": "^1.1.14" } }, "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw=="], - - "typed-array-byte-length": ["typed-array-byte-length@1.0.3", "", { "dependencies": { "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.14" } }, "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg=="], - - "typed-array-byte-offset": ["typed-array-byte-offset@1.0.5", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.9", "for-each": "^0.3.5", "gopd": "^1.2.0", "is-typed-array": "^1.1.15", "reflect.getprototypeof": "^1.0.10" } }, "sha512-0FHJvLPqZ7KJzp17O13jfsAjsqazgrxBu2zEK95PmUz8lv2+GjRuxUInCr2Rk9Dms3ihN21zJ929ZO43yJ95QQ=="], - - "typed-array-length": ["typed-array-length@1.0.8", "", { "dependencies": { "call-bind": "^1.0.9", "for-each": "^0.3.5", "gopd": "^1.2.0", "is-typed-array": "^1.1.15", "possible-typed-array-names": "^1.1.0", "reflect.getprototypeof": "^1.0.10" } }, "sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g=="], - "typesafe-path": ["typesafe-path@0.2.2", "", {}, "sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA=="], "typescript": ["typescript@6.0.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw=="], @@ -1036,8 +786,6 @@ "ultrahtml": ["ultrahtml@1.7.0", "", {}, "sha512-2xRd0VHoAQE4M+vF/DvFFB7pUV0ZxTW1TLi7lHQWnF/Sb5TPeEUV/l+hxcNnGO00ZXGnR0voCMmYRKQf+rvJ2g=="], - "unbox-primitive": ["unbox-primitive@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "has-bigints": "^1.0.2", "has-symbols": "^1.1.0", "which-boxed-primitive": "^1.1.1" } }, "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw=="], - "uncrypto": ["uncrypto@0.1.3", "", {}, "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q=="], "undici": ["undici@8.12.3", "", {}, "sha512-+fdndUTwBP86cVjihTp21hZHo7d6oj1c/47XPA3lL8mM0XHs+C4EkcjmgRsFnFk2f/UONGDy9ItBItmXsLOQHw=="], @@ -1110,14 +858,6 @@ "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], - "which-boxed-primitive": ["which-boxed-primitive@1.1.1", "", { "dependencies": { "is-bigint": "^1.1.0", "is-boolean-object": "^1.2.1", "is-number-object": "^1.1.1", "is-string": "^1.1.1", "is-symbol": "^1.1.1" } }, "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA=="], - - "which-builtin-type": ["which-builtin-type@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", "is-date-object": "^1.1.0", "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", "is-regex": "^1.2.1", "is-weakref": "^1.0.2", "isarray": "^2.0.5", "which-boxed-primitive": "^1.1.0", "which-collection": "^1.0.2", "which-typed-array": "^1.1.16" } }, "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q=="], - - "which-collection": ["which-collection@1.0.2", "", { "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", "is-weakmap": "^2.0.2", "is-weakset": "^2.0.3" } }, "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw=="], - - "which-typed-array": ["which-typed-array@1.1.24", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.9", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" } }, "sha512-wk4Mf4pR5mRP7eYuuTBCIQ9d0ud2Fv2jRLQpfgnRjbOxAFHmjKFValgTpitVKzJJS8ajnYQV2Du1SZ8j6b/EUQ=="], - "word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="], "wrap-ansi": ["wrap-ansi@9.0.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww=="], @@ -1154,8 +894,6 @@ "@typescript-eslint/typescript-estree/minimatch": ["minimatch@10.2.6", "", { "dependencies": { "brace-expansion": "^5.0.8" } }, "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A=="], - "@typescript-eslint/typescript-estree/semver": ["semver@7.8.5", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA=="], - "@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="], "@vscode/emmet-helper/jsonc-parser": ["jsonc-parser@2.3.1", "", {}, "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg=="], @@ -1170,8 +908,6 @@ "astro-eslint-parser/espree": ["espree@11.2.0", "", { "dependencies": { "acorn": "^8.16.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^5.0.1" } }, "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw=="], - "astro-eslint-parser/semver": ["semver@7.8.5", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA=="], - "cliui/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], "csso/css-tree": ["css-tree@2.2.1", "", { "dependencies": { "mdn-data": "2.0.28", "source-map-js": "^1.0.1" } }, "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA=="], @@ -1186,12 +922,6 @@ "sass/chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], - "sharp/semver": ["semver@7.8.5", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA=="], - - "typescript-auto-import-cache/semver": ["semver@7.8.5", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA=="], - - "volar-service-typescript/semver": ["semver@7.8.5", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA=="], - "wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], "wrap-ansi/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], diff --git a/compose.yaml b/compose.yaml index c130afe..8db864e 100644 --- a/compose.yaml +++ b/compose.yaml @@ -10,10 +10,12 @@ services: image: luisjcenteno/portfolio:local container_name: luisjcenteno-portfolio ports: - - "${PORT:-8080}:80" + - "${PORT:-8080}:8080" restart: unless-stopped + security_opt: + - no-new-privileges:true healthcheck: - test: ["CMD-SHELL", "wget -q -O /dev/null http://127.0.0.1/ || exit 1"] + test: ["CMD-SHELL", "wget -q -O /dev/null http://127.0.0.1:8080/ || exit 1"] interval: 30s timeout: 5s retries: 3 diff --git a/eslint.config.mjs b/eslint.config.mjs index b0137cc..f3fb06d 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -1,6 +1,5 @@ import js from '@eslint/js' import astro from 'eslint-plugin-astro' -import react from 'eslint-plugin-react' import globals from 'globals' import * as astroParser from 'astro-eslint-parser' import tsParser from '@typescript-eslint/parser' @@ -8,10 +7,6 @@ import tsParser from '@typescript-eslint/parser' export default [ js.configs.recommended, ...astro.configs['flat/recommended'], - ...[ - react.configs.flat.recommended, - react.configs.flat['jsx-runtime'], - ].map((config) => ({ ...config, files: ['**/*.jsx'] })), { ignores: ['dist/**', '.astro/**', 'node_modules/**'], }, @@ -28,28 +23,17 @@ export default [ }, }, { - files: ['**/*.{js,jsx,mjs}'], + files: ['**/*.{js,mjs}'], languageOptions: { ecmaVersion: 'latest', sourceType: 'module', - parserOptions: { - ecmaFeatures: { - jsx: true, - }, - }, globals: { ...globals.browser, ...globals.node, }, }, - settings: { - react: { - version: 'detect', - }, - }, rules: { 'no-unused-vars': ['warn', { argsIgnorePattern: '^_' }], - 'react/prop-types': 'off', }, }, ] diff --git a/jsconfig.json b/jsconfig.json index a516166..7903f01 100644 --- a/jsconfig.json +++ b/jsconfig.json @@ -1,7 +1,6 @@ { "extends": "astro/tsconfigs/base", "compilerOptions": { - "jsx": "react-jsx", "allowJs": true, "baseUrl": ".", "paths": { diff --git a/nginx/default.conf b/nginx/default.conf index e10cdfc..33af5a9 100644 --- a/nginx/default.conf +++ b/nginx/default.conf @@ -1,5 +1,5 @@ server { - listen 80; + listen 8080; server_name _; root /usr/share/nginx/html; @@ -69,6 +69,7 @@ server { return 404; } + add_header Content-Security-Policy "default-src 'self'; base-uri 'self'; object-src 'none'; frame-ancestors 'none'; form-action 'self'; script-src 'self' https://analytics.luisjcenteno.dev; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com data:; img-src 'self' data: https:; connect-src 'self' https://analytics.luisjcenteno.dev" always; add_header X-Content-Type-Options nosniff always; add_header X-Frame-Options DENY always; add_header Referrer-Policy strict-origin-when-cross-origin always; diff --git a/package.json b/package.json index 36c275c..82ecf7a 100644 --- a/package.json +++ b/package.json @@ -7,29 +7,25 @@ "build": "astro build", "preview": "astro preview", "check": "astro check", + "check:seo": "node scripts/check-seo.mjs", + "refresh:readmes": "node scripts/fetch-readmes.mjs", "astro": "astro", "lint": "eslint ." }, "dependencies": { - "@astrojs/react": "^7.1.1", "@astrojs/sitemap": "^3.7.4", - "@tabler/icons-react": "^3.37.1", + "@tabler/icons": "^3.50.0", "astro": "^7.4.2", "bulma": "^0.9.4", "marked": "^12.0.0", - "prop-types": "^15.8.1", - "react": "19.2.4", - "react-dom": "19.2.4", "sass": "1.70.0" }, "devDependencies": { "@astrojs/check": "^0.9.12", "@eslint/js": "^10.0.1", - "@types/prop-types": "^15.7.15", "@typescript-eslint/parser": "^8.72.1", "eslint": "^9", "eslint-plugin-astro": "^3.2.1", - "eslint-plugin-react": "^7.37.5", "globals": "^17.13.0", "typescript": "^6.0.0" } diff --git a/public/images/avatar.png b/public/images/avatar.png deleted file mode 100644 index 98e919de72284b2df61dd4374ba2fdef5ec364d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27762 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 z 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 diff --git a/public/scripts/nav.js b/public/scripts/nav.js new file mode 100644 index 0000000..46363a5 --- /dev/null +++ b/public/scripts/nav.js @@ -0,0 +1,14 @@ +const burger = document.querySelector('.navbar-burger') + +if (burger) { + burger.addEventListener('click', () => { + const target = burger.getAttribute('data-target') + const menu = target ? document.getElementById(target) : null + + if (!menu) return + + const isOpen = menu.classList.toggle('open') + menu.classList.toggle('closed', !isOpen) + burger.setAttribute('aria-expanded', String(isOpen)) + }) +} diff --git a/scripts/check-seo.mjs b/scripts/check-seo.mjs new file mode 100644 index 0000000..ec27f34 --- /dev/null +++ b/scripts/check-seo.mjs @@ -0,0 +1,211 @@ +import { readFile, readdir } from 'node:fs/promises' +import { statSync } from 'node:fs' +import path from 'node:path' + +const root = process.cwd() +const args = process.argv.slice(2) +const urlFlag = args.indexOf('--url') +const liveBase = urlFlag >= 0 ? args[urlFlag + 1]?.replace(/\/$/, '') : null +const distArg = urlFlag >= 0 + ? args.find((arg, index) => !arg.startsWith('--') && index !== urlFlag + 1) + : args.find((arg) => !arg.startsWith('--')) +const distDir = path.resolve(root, distArg || 'dist') +const site = (process.env.SITE_URL || 'https://luisjcenteno.dev').replace(/\/$/, '') + +const attr = (tag, name) => { + const match = tag.match(new RegExp(`${name}\\s*=\\s*"([^"]*)"`, 'i')) + return match?.[1] +} + +const getMeta = (html) => { + const meta = {} + for (const tag of html.match(/]*>/gi) || []) { + const key = attr(tag, 'property') || attr(tag, 'name') + if (key) meta[key] = attr(tag, 'content') || '' + } + return meta +} + +const getCanonical = (html) => { + for (const tag of html.match(/]*>/gi) || []) { + if ((attr(tag, 'rel') || '').toLowerCase() === 'canonical') return attr(tag, 'href') + } + return null +} + +const getLinks = (html) => + (html.match(/]*>/gi) || []) + .map((tag) => attr(tag, 'href')) + .filter(Boolean) + +const normalizePath = (value) => { + const parsed = new URL(value, site) + return decodeURIComponent(parsed.pathname) +} + +const routeToFile = (route) => { + const clean = route.replace(/\/+$/, '') || '/' + const relative = clean.replace(/^\/+/, '') + const candidates = relative + ? [path.join(distDir, relative), path.join(distDir, `${relative}.html`), path.join(distDir, relative, 'index.html')] + : [path.join(distDir, 'index.html')] + + return candidates.find((candidate) => { + try { + return statSync(candidate).isFile() + } catch { + return false + } + }) +} + +const walkHtml = async (dir) => { + const entries = await readdir(dir, { withFileTypes: true }) + const files = [] + + for (const entry of entries) { + const fullPath = path.join(dir, entry.name) + if (entry.isDirectory()) files.push(...(await walkHtml(fullPath))) + else if (entry.name.endsWith('.html')) files.push(fullPath) + } + + return files +} + +const auditHtml = (html, label) => { + const issues = [] + const title = html.match(/]*>([\s\S]*?)<\/title>/i)?.[1]?.trim() + const meta = getMeta(html) + const canonical = getCanonical(html) + const lang = html.match(/]*lang="([^"]+)"/i)?.[1] + + if (!title) issues.push('missing ') + if (!lang) issues.push('missing <html lang>') + for (const key of ['description', 'og:title', 'og:description', 'og:image', 'twitter:card']) { + if (!meta[key]) issues.push(`missing ${key}`) + } + + if (!canonical) { + issues.push('missing canonical') + } else { + const parsed = new URL(canonical, site) + if (`${parsed.protocol}//${parsed.host}` !== new URL(site).origin) { + issues.push(`canonical host is ${parsed.origin}, expected ${site}`) + } + } + + return { issues, meta, canonical, links: getLinks(html), title, label } +} + +const checkLocal = async () => { + const files = await walkHtml(distDir) + const results = [] + const issues = [] + + for (const file of files) { + const html = await readFile(file, 'utf8') + const result = auditHtml(html, path.relative(distDir, file)) + results.push(result) + + for (const issue of result.issues) issues.push(`${result.label}: ${issue}`) + + if (result.canonical) { + const route = normalizePath(result.canonical) + if (!routeToFile(route)) { + issues.push(`${result.label}: canonical route ${route} has no output file`) + } + } + + for (const href of result.links) { + if (/^(https?:|mailto:|tel:|#|data:)/i.test(href)) continue + const route = normalizePath(href) + if (route === '/sitemap.xml' || route === '/404') continue + if (!routeToFile(route)) issues.push(`${result.label}: broken internal link ${href}`) + } + + if (html.includes('/_next/')) issues.push(`${result.label}: contains a /_next/ reference`) + } + + const sitemapPath = path.join(distDir, 'sitemap-0.xml') + let sitemapCount = 0 + try { + const sitemap = await readFile(sitemapPath, 'utf8') + const locations = [...sitemap.matchAll(/<loc>([^<]+)<\/loc>/g)].map((m) => m[1]) + sitemapCount = locations.length + for (const location of locations) { + const route = normalizePath(location) + if (!routeToFile(route)) issues.push(`sitemap: ${location} has no output file`) + } + } catch { + issues.push('missing sitemap-0.xml') + } + + try { + const robots = await readFile(path.join(distDir, 'robots.txt'), 'utf8') + if (!robots.includes(`${site}/sitemap-index.xml`)) { + issues.push('robots.txt does not point at sitemap-index.xml') + } + } catch { + issues.push('missing robots.txt') + } + + return { results, issues, sitemapCount } +} + +const checkLive = async () => { + const indexUrl = `${liveBase}/sitemap-index.xml` + const indexResponse = await fetch(indexUrl) + if (!indexResponse.ok) throw new Error(`${indexUrl} returned ${indexResponse.status}`) + + const index = await indexResponse.text() + const sitemapUrl = index.match(/<loc>([^<]+)<\/loc>/)?.[1] + if (!sitemapUrl) throw new Error('No sitemap URL found in sitemap-index.xml') + + const sitemap = await (await fetch(sitemapUrl)).text() + const urls = [...sitemap.matchAll(/<loc>([^<]+)<\/loc>/g)].map((m) => m[1]) + const issues = [] + + for (const url of urls) { + const response = await fetch(url, { redirect: 'follow' }) + const html = await response.text() + const result = auditHtml(html, url) + + if (!response.ok) issues.push(`${url}: HTTP ${response.status}`) + for (const issue of result.issues) issues.push(`${url}: ${issue}`) + + if (result.canonical) { + const expected = new URL(url) + const actual = new URL(result.canonical) + if (`${actual.origin}${actual.pathname.replace(/\/+$/, '')}` !== `${expected.origin}${expected.pathname.replace(/\/+$/, '')}`) { + issues.push(`${url}: canonical is ${result.canonical}`) + } + } + } + + return { count: urls.length, issues } +} + +try { + if (liveBase) { + const { count, issues } = await checkLive() + console.log(`Checked ${count} live pages from ${liveBase}`) + if (issues.length) { + console.error(issues.map((issue) => `✗ ${issue}`).join('\n')) + process.exitCode = 1 + } else { + console.log('✓ SEO checks passed') + } + } else { + const { results, issues, sitemapCount } = await checkLocal() + console.log(`Checked ${results.length} HTML pages and ${sitemapCount} sitemap URLs in ${distDir}`) + if (issues.length) { + console.error(issues.map((issue) => `✗ ${issue}`).join('\n')) + process.exitCode = 1 + } else { + console.log('✓ SEO checks passed') + } + } +} catch (error) { + console.error(`✗ ${error.message}`) + process.exitCode = 1 +} diff --git a/scripts/fetch-readmes.mjs b/scripts/fetch-readmes.mjs new file mode 100644 index 0000000..9ccd574 --- /dev/null +++ b/scripts/fetch-readmes.mjs @@ -0,0 +1,28 @@ +import { mkdir, readFile, writeFile } from 'node:fs/promises' +import path from 'node:path' + +const root = process.cwd() +const projectsPath = path.join(root, 'src', 'data', 'projects.json') +const outputDir = path.join(root, 'src', 'data', 'readmes') + +const projects = JSON.parse(await readFile(projectsPath, 'utf8')) + +await mkdir(outputDir, { recursive: true }) + +for (const project of projects) { + if (!project.slug || !project.content) continue + + const response = await fetch(project.content) + + if (!response.ok) { + throw new Error( + `Failed to fetch ${project.slug}: ${response.status} ${response.statusText}` + ) + } + + const markdown = await response.text() + const outputPath = path.join(outputDir, `${project.slug}.md`) + + await writeFile(outputPath, markdown) + console.log(`✓ ${project.slug}`) +} diff --git a/public/images/avatar.jpeg b/src/assets/avatar.jpeg similarity index 100% rename from public/images/avatar.jpeg rename to src/assets/avatar.jpeg diff --git a/public/images/projects/baby-tracker-banner.jpg b/src/assets/projects/baby-tracker-banner.jpg similarity index 100% rename from public/images/projects/baby-tracker-banner.jpg rename to src/assets/projects/baby-tracker-banner.jpg diff --git a/public/images/projects/contractflow-banner.webp b/src/assets/projects/contractflow-banner.webp similarity index 100% rename from public/images/projects/contractflow-banner.webp rename to src/assets/projects/contractflow-banner.webp diff --git a/public/images/projects/memorias-de-vida-banner.jpg b/src/assets/projects/memorias-de-vida-banner.jpg similarity index 100% rename from public/images/projects/memorias-de-vida-banner.jpg rename to src/assets/projects/memorias-de-vida-banner.jpg diff --git a/src/components/about-me-box/AboutMeBox.astro b/src/components/about-me-box/AboutMeBox.astro new file mode 100644 index 0000000..b76a04b --- /dev/null +++ b/src/components/about-me-box/AboutMeBox.astro @@ -0,0 +1,7 @@ +--- +const { title, description } = Astro.props +--- +<section class="AboutMeBox box"> + <h3 class="is-size-3 has-text-weight-bold">{title}</h3> + <p class="AboutMeBox-description">{description}</p> +</section> diff --git a/src/components/about-me-box/index.jsx b/src/components/about-me-box/index.jsx deleted file mode 100644 index 946f712..0000000 --- a/src/components/about-me-box/index.jsx +++ /dev/null @@ -1,37 +0,0 @@ -import PropTypes from 'prop-types' - -function AboutMeBox(props) { - const { title, description, callToAction } = props - - const renderCallToAction = () => - callToAction ? ( - <div className="AboutMeBox-callToAction mt-2"> - <button className="button is-primary" onClick={callToAction.action}> - {callToAction.icon ? callToAction.icon : null} - <span>{callToAction.label}</span> - </button> - </div> - ) : null - - return ( - <section className="AboutMeBox box"> - <h3 className="is-size-3 has-text-weight-bold">{title}</h3> - <p className="AboutMeBox-description">{description}</p> - - {renderCallToAction()} - </section> - ) -} - -AboutMeBox.propTypes = { - title: PropTypes.string.isRequired, - description: PropTypes.string, - callToAction: PropTypes.shape({ - label: PropTypes.string, - icon: PropTypes.node, - action: PropTypes.func, - }), -} - - -export default AboutMeBox diff --git a/src/components/dev-icon/index.jsx b/src/components/dev-icon/index.jsx deleted file mode 100644 index f0d76b4..0000000 --- a/src/components/dev-icon/index.jsx +++ /dev/null @@ -1,66 +0,0 @@ -import PropTypes from 'prop-types' -import { - IconBrandAndroid, - IconBrandAngular, - IconBrandApple, - IconBrandJavascript, - IconBrandNodejs, - IconBrandPython, - IconBrandReact, - IconBrandVue, - IconBrandGithub, - IconDatabase, - IconServer, -} from '@tabler/icons-react' - -function DevIcon({ - name, - color, - height, - width, -}) { - const logoProps = { - color, - height, - width - } - - const logos = { - react: <IconBrandReact {...logoProps} />, - vue: <IconBrandVue {...logoProps} />, - android: <IconBrandAndroid {...logoProps} />, - javascript: <IconBrandJavascript {...logoProps} />, - nodejs: <IconBrandNodejs {...logoProps} />, - angular: <IconBrandAngular {...logoProps} />, - python: <IconBrandPython {...logoProps} />, - apple: <IconBrandApple {...logoProps} />, - github: <IconBrandGithub {...logoProps} />, - express: <IconServer {...logoProps} />, - postgres: <IconDatabase {...logoProps} />, - } - - return logos[name] ?? null -} - -DevIcon.propTypes = { - name: PropTypes.string, - width: PropTypes.string, - height: PropTypes.string, - color: PropTypes.string -} - - -export default DevIcon - -// Export icon names -export const REACT = 'react' -export const VUE = 'vue' -export const ANDROID = 'android' -export const JAVASCRIPT = 'javascript' -export const NODEJS = 'nodejs' -export const ANGULAR = 'angular' -export const APPLE = 'apple' -export const PYTHON = 'python' -export const GITHUB = 'github' -export const EXPRESS = 'express' -export const POSTGRES = 'postgres' diff --git a/src/components/github-button/GithubButton.astro b/src/components/github-button/GithubButton.astro new file mode 100644 index 0000000..eb3d205 --- /dev/null +++ b/src/components/github-button/GithubButton.astro @@ -0,0 +1,17 @@ +--- +import Icon from '../icon/Icon.astro' + +const { url } = Astro.props +--- +<a + href={url} + target="_blank" + rel="noreferrer" + referrerpolicy="no-referrer" + class="button is-light is-rounded" +> + <span>View in GitHub</span> + <span class="icon is-medium"> + <Icon name="github" /> + </span> +</a> diff --git a/src/components/github-button/index.jsx b/src/components/github-button/index.jsx deleted file mode 100644 index 9a13e03..0000000 --- a/src/components/github-button/index.jsx +++ /dev/null @@ -1,20 +0,0 @@ -import DevIcon from '../dev-icon' - -const GithubButton = ({ url }) => { - return ( - <a - href={url} - target="_blank" - rel="noreferrer" - referrerPolicy="no-referrer" - className="button is-light is-rounded" - > - <span>View in GitHub</span> - <span className="icon is-medium"> - <DevIcon name="github" /> - </span> - </a> - ) -} - -export default GithubButton diff --git a/src/components/icon/Icon.astro b/src/components/icon/Icon.astro new file mode 100644 index 0000000..9f53fec --- /dev/null +++ b/src/components/icon/Icon.astro @@ -0,0 +1,55 @@ +--- +import brandAndroid from '@tabler/icons/outline/brand-android.svg?raw' +import brandAngular from '@tabler/icons/outline/brand-angular.svg?raw' +import brandApple from '@tabler/icons/outline/brand-apple.svg?raw' +import brandGithub from '@tabler/icons/outline/brand-github.svg?raw' +import brandJavascript from '@tabler/icons/outline/brand-javascript.svg?raw' +import brandNodejs from '@tabler/icons/outline/brand-nodejs.svg?raw' +import brandPython from '@tabler/icons/outline/brand-python.svg?raw' +import brandReact from '@tabler/icons/outline/brand-react.svg?raw' +import brandVue from '@tabler/icons/outline/brand-vue.svg?raw' +import database from '@tabler/icons/outline/database.svg?raw' +import download from '@tabler/icons/outline/download.svg?raw' +import mapPin from '@tabler/icons/outline/map-pin.svg?raw' +import server from '@tabler/icons/outline/server.svg?raw' +import at from '@tabler/icons/outline/at.svg?raw' + +const { name, width = 24, height = 24, color, class: className = '' } = Astro.props + +const icons: Record<string, string> = { + android: brandAndroid, + angular: brandAngular, + apple: brandApple, + at, + database, + download, + github: brandGithub, + javascript: brandJavascript, + 'map-pin': mapPin, + nodejs: brandNodejs, + postgres: database, + python: brandPython, + react: brandReact, + server, + vue: brandVue, + express: server, +} + +let svg = icons[name] + +if (svg) { + svg = svg + .replace(/class="[^"]*"/, '') + .replace( + '<svg', + `<svg${className ? ` class="${className}"` : ''} aria-hidden="true" focusable="false"` + ) + .replace(/width="[^"]*"/, `width="${width}"`) + .replace(/height="[^"]*"/, `height="${height}"`) + + if (color) { + svg = svg.replaceAll('currentColor', color) + } +} +--- +{svg && <Fragment set:html={svg} />} diff --git a/src/components/navbar/Navbar.astro b/src/components/navbar/Navbar.astro index d3e961e..ee53a56 100644 --- a/src/components/navbar/Navbar.astro +++ b/src/components/navbar/Navbar.astro @@ -73,19 +73,4 @@ import { Profile } from '../../data' </div> </nav> -<script> - const burger = document.querySelector('.navbar-burger') - - if (burger) { - burger.addEventListener('click', () => { - const target = burger.getAttribute('data-target') - const menu = target ? document.getElementById(target) : null - - if (!menu) return - - const isOpen = menu.classList.toggle('open') - menu.classList.toggle('closed', !isOpen) - burger.setAttribute('aria-expanded', String(isOpen)) - }) - } -</script> +<script is:inline src="/scripts/nav.js" defer></script> diff --git a/src/components/profile-box/ProfileBox.astro b/src/components/profile-box/ProfileBox.astro new file mode 100644 index 0000000..8b84490 --- /dev/null +++ b/src/components/profile-box/ProfileBox.astro @@ -0,0 +1,54 @@ +--- +import { Image } from 'astro:assets' +import Icon from '../icon/Icon.astro' + +const { + name, + role, + email, + country, + avatar, +} = Astro.props + +const skills: string[] = Astro.props.skills ?? [] +--- +<section class="box ProfileBox"> + <div class="ProfileBox-avatarContainer"> + <Image + src={avatar} + alt={`${name} | ${role}`} + class="ProfileBox-avatar" + width={200} + height={200} + format="webp" + quality={85} + /> + </div> + + <h1 class="ProfileBox-name is-size-2 has-text-weight-bold">{name}</h1> + <h2 class="ProfileBox-role is-size-5">{role}</h2> + + <div class="ProfileBox-contact"> + <span class="has-text-weight-bold">Contact</span> + <ul> + <li class="ProfileBox-listItem"> + <Icon name="at" width="22px" color="white" /> + <a href={`mailto:${email}`}>{email}</a> + </li> + + <li class="ProfileBox-listItem"> + <Icon name="map-pin" width="22px" color="white" /> + <span>{country}</span> + </li> + </ul> + </div> + + <div class="ProfileBox-skills"> + <span class="has-text-weight-bold">Skills</span> + <ul> + {skills.map((skill) => ( + <li class="ProfileBox-listItem">{skill}</li> + ))} + </ul> + </div> +</section> diff --git a/src/components/profile-box/index.jsx b/src/components/profile-box/index.jsx deleted file mode 100644 index 45a6391..0000000 --- a/src/components/profile-box/index.jsx +++ /dev/null @@ -1,68 +0,0 @@ -import PropTypes from 'prop-types' -import { IconAt, IconMapPin } from '@tabler/icons-react' - -function ProfileBox({ - name, - role, - email, - country, - skills, - avatar, -}) { - - const renderSkills = () => - skills.map((skill, index) => ( - <li key={'skill-' + index} className="ProfileBox-listItem"> - {skill} - </li> - )) - - return ( - <section className="box ProfileBox"> - <div className="ProfileBox-avatarContainer"> - <img - src={avatar} - alt={`${name} | ${role}`} - className="ProfileBox-avatar" - width={200} - height={200} - /> - </div> - - <h1 className="ProfileBox-name is-size-2 has-text-weight-bold">{name}</h1> - <h2 className="ProfileBox-role is-size-5">{role}</h2> - - <div className="ProfileBox-contact"> - <span className="has-text-weight-bold">Contact</span> - <ul> - <li className="ProfileBox-listItem"> - <IconAt width="22px" color="white" /> - <a href={`mailto:${email}`}>{email}</a> - </li> - - <li className="ProfileBox-listItem"> - <IconMapPin width="22px" color="white" /> - <span>{country}</span> - </li> - </ul> - </div> - - <div className="ProfileBox-skills"> - <span className="has-text-weight-bold">Skills</span> - <ul>{renderSkills()}</ul> - </div> - </section> - ) -} - - -ProfileBox.propTypes = { - name: PropTypes.string, - role: PropTypes.string, - email: PropTypes.string, - country: PropTypes.string, - skills: PropTypes.array, - avatar: PropTypes.string -} - -export default ProfileBox diff --git a/src/components/project-card/ProjectCard.astro b/src/components/project-card/ProjectCard.astro new file mode 100644 index 0000000..754a8ca --- /dev/null +++ b/src/components/project-card/ProjectCard.astro @@ -0,0 +1,72 @@ +--- +import { Image } from 'astro:assets' +import Icon from '../icon/Icon.astro' + +const { + name, + description, + image, +} = Astro.props + +const stack: string[] = Astro.props.stack ?? [] +const links: Array<{ label: string; url: string; target?: string; rel?: string }> = + Astro.props.links ?? [] +--- +<div class="ProjectCard card"> + <div class="card-image"> + <figure class="image is-16by9"> + {typeof image === 'object' && image !== null ? ( + <Image + src={image} + alt={name} + class="adjusted-image" + widths={[400, 800]} + sizes="(max-width: 768px) 100vw, 50vw" + format="webp" + quality={82} + loading="lazy" + decoding="async" + /> + ) : ( + <img + class="adjusted-image" + src={image} + alt={name} + loading="lazy" + decoding="async" + /> + )} + </figure> + </div> + + <div class="card-content"> + <div class="is-flex is-justify-content-space-between"> + <h4 class="has-text-weight-bold">{name}</h4> + + <div> + {stack.map((technology) => ( + <Icon name={technology} width="22px" height="22px" /> + ))} + </div> + </div> + + <div class="content" set:html={description || ''} /> + </div> + + <footer class="card-footer"> + {links.map((link) => ( + <div class="card-footer-item"> + <a + href={link.url} + class="has-text-centered" + target={link.target} + rel={link.rel} + data-umami-event={`project_${link.label.toLowerCase()}_click`} + data-umami-event-type="click" + > + {link.label} + </a> + </div> + ))} + </footer> +</div> diff --git a/src/components/project-card/index.jsx b/src/components/project-card/index.jsx deleted file mode 100644 index a5cdf17..0000000 --- a/src/components/project-card/index.jsx +++ /dev/null @@ -1,75 +0,0 @@ -import PropTypes from 'prop-types' -import DevIcon from '../dev-icon' - -function ProjectCard({ - name, - description, - image, - stack, - links, -}) { - - const renderStack = () => - stack.map((name, index) => ( - <DevIcon name={name} key={'tech-icon-' + index} width="22px" height="22px" /> - )) - - const renderLinks = () => - links.map((link, index) => ( - <div className="card-footer-item" key={'project-link-' + index}> - <a - href={link.url} - className="has-text-centered" - target={link.target} - rel={link.rel} - data-umami-event={`project_${link.label.toLowerCase()}_click`} - data-umami-event-type="click" - > - {link.label} - </a> - </div> - )) - - return ( - <div className="ProjectCard card"> - <div className="card-image"> - <figure className="image is-16by9"> - <img className="adjusted-image" src={image} alt={name} loading="lazy" /> - </figure> - </div> - - <div className="card-content"> - <div className="is-flex is-justify-content-space-between"> - <h4 className="has-text-weight-bold">{name}</h4> - - <div>{renderStack()}</div> - </div> - - <div - className="content" - dangerouslySetInnerHTML={{ __html: description || '' }} - /> - </div> - - <footer className="card-footer">{renderLinks()}</footer> - </div> - ) -} - -ProjectCard.propTypes = { - name: PropTypes.string, - description: PropTypes.string, - image: PropTypes.string, - stack: PropTypes.arrayOf(PropTypes.string), - links: PropTypes.arrayOf( - PropTypes.shape({ - label: PropTypes.string, - url: PropTypes.string, - target: PropTypes.string, - rel: PropTypes.string, - }) - ) -} - - -export default ProjectCard diff --git a/src/components/projects-box/ProjectsBox.astro b/src/components/projects-box/ProjectsBox.astro new file mode 100644 index 0000000..138d053 --- /dev/null +++ b/src/components/projects-box/ProjectsBox.astro @@ -0,0 +1,26 @@ +--- +import ProjectCard from '../project-card/ProjectCard.astro' +import { getProjectCover } from '../../data/covers' + +const { title = '', description = '', projects = [] } = Astro.props +const sortedProjects = [...projects].sort((a, b) => a.order - b.order) +--- +<section class="box"> + <h3 class="is-size-3 has-text-weight-bold">{title}</h3> + <p>{description}</p> + + <div class="columns is-mobile is-multiline mt-3"> + {sortedProjects.map((project) => ( + <div class="column is-half-desktop is-full-mobile"> + <ProjectCard + slug={project.slug} + name={project.name} + description={project.description} + image={getProjectCover(project.slug) ?? project.cover} + stack={project.stack} + links={project.links} + /> + </div> + ))} + </div> +</section> diff --git a/src/components/projects-box/index.jsx b/src/components/projects-box/index.jsx deleted file mode 100644 index dd475b9..0000000 --- a/src/components/projects-box/index.jsx +++ /dev/null @@ -1,52 +0,0 @@ -import PropTypes from 'prop-types' -import ProjectCard from '../project-card' - -/** - * Renders a boxed section containing a title, description, and a responsive grid of project cards. - * Projects are sorted by their `order` value before rendering. - * - * @param {Object} props - Component props. - * @param {string} [props.title] - Heading displayed at the top of the projects box. - * @param {string} [props.description] - Supporting text shown below the title. - * @param {Array<Object>} props.projects - List of project items to render. - * @param {number} props.projects[].order - Sort priority (ascending) for display order. - * @param {string} props.projects[].name - Project name. - * @param {string} props.projects[].description - Project summary. - * @param {string} props.projects[].cover - Cover image source/path. - * @param {Array<string>} [props.projects[].stack] - Technologies used in the project. - * @param {Array<Object>} [props.projects[].links] - External/internal links related to the project. - * @returns {JSX.Element} A section element containing the projects list. - */ -function ProjectsBox({ title = '', description = '', projects = [] }) { - const renderProjects = () => - [...projects] - .sort((a, b) => a.order - b.order) - .map((project, index) => ( - <div className="column is-half-desktop is-full-mobile" key={'project-' + index}> - <ProjectCard - name={project.name} - description={project.description} - image={project.cover} - stack={project.stack} - links={project.links} - /> - </div> - )) - - return ( - <section className="box"> - <h3 className="is-size-3 has-text-weight-bold">{title}</h3> - <p>{description}</p> - - <div className="columns is-mobile is-multiline mt-3">{renderProjects()}</div> - </section> - ) -} - -ProjectsBox.propTypes = { - title: PropTypes.string, - description: PropTypes.string, - projects: PropTypes.array, -} - -export default ProjectsBox diff --git a/src/components/timeline/Timeline.astro b/src/components/timeline/Timeline.astro new file mode 100644 index 0000000..a530dfc --- /dev/null +++ b/src/components/timeline/Timeline.astro @@ -0,0 +1,14 @@ +--- +import TimelineRow from './TimelineRow.astro' + +const rows: Array<Record<string, any>> = Astro.props.rows ?? [] +--- +<div class="Timeline"> + <ul> + {rows.map((row) => ( + <li> + <TimelineRow {...row} /> + </li> + ))} + </ul> +</div> diff --git a/src/components/timeline/TimelineRow.astro b/src/components/timeline/TimelineRow.astro new file mode 100644 index 0000000..a969c4c --- /dev/null +++ b/src/components/timeline/TimelineRow.astro @@ -0,0 +1,47 @@ +--- +const { + company, + role, + title, + subtitle, + date, + location, + website, + client, + highlights = [], +} = Astro.props + +const roleText = role || title +const companyText = company || subtitle +const points = Array.isArray(highlights) ? highlights : [] +--- +<div class="Timeline-row"> + <div class="Timeline-rowContainer"> + <div class="Timeline-rowContent"> + <h4 class="Timeline-rowHeading has-text-weight-semibold is-size-5"> + {website ? ( + <a href={website} target="_blank" rel="noopener noreferrer"> + {companyText} + </a> + ) : ( + companyText + )} + {roleText ? <span class="Timeline-separator"> | </span> : null} + {roleText ? <span class="Timeline-role">{roleText}</span> : null} + </h4> + <p class="Timeline-rowMeta is-size-7"> + <span>{date}</span> + {location ? <span class="Timeline-separator"> | </span> : null} + {location ? <span>{location}</span> : null} + </p> + {client ? <p class="Timeline-rowClient is-size-7">Client: {client}</p> : null} + {points.length > 0 ? ( + <ul class="Timeline-rowHighlights"> + {points.map((point) => ( + <li>{point}</li> + ))} + </ul> + ) : null} + </div> + </div> +</div> diff --git a/src/components/timeline/index.jsx b/src/components/timeline/index.jsx deleted file mode 100644 index 230b52f..0000000 --- a/src/components/timeline/index.jsx +++ /dev/null @@ -1,27 +0,0 @@ -import PropTypes from 'prop-types' -import Row from './row' - -function TimeLine({ - rows, -}) { - - const renderRows = () => - rows.map((row, index) => ( - <li key={'timeline-row-item' + index}> - <Row {...row} /> - </li> - )) - - return ( - <div className="Timeline"> - <ul>{renderRows()}</ul> - </div> - ) -} - -TimeLine.propTypes = { - rows: PropTypes.array, -} - - -export default TimeLine diff --git a/src/components/timeline/row.jsx b/src/components/timeline/row.jsx deleted file mode 100644 index 4155049..0000000 --- a/src/components/timeline/row.jsx +++ /dev/null @@ -1,67 +0,0 @@ -import PropTypes from 'prop-types' - -function Row({ - company, - role, - title, - subtitle, - date, - location, - website, - client, - highlights -}) { - const roleText = role || title - const companyText = company || subtitle - const points = Array.isArray(highlights) ? highlights : [] - - return ( - <div className="Timeline-row"> - <div className="Timeline-rowContainer"> - <div className="Timeline-rowContent"> - <h4 className="Timeline-rowHeading has-text-weight-semibold is-size-5"> - {website ? ( - <a href={website} target="_blank" rel="noopener noreferrer"> - {companyText} - </a> - ) : ( - companyText - )} - {roleText ? <span className="Timeline-separator"> | </span> : null} - {roleText ? <span className="Timeline-role">{roleText}</span> : null} - </h4> - <p className="Timeline-rowMeta is-size-7"> - <span>{date}</span> - {location ? <span className="Timeline-separator"> | </span> : null} - {location ? <span>{location}</span> : null} - </p> - {client ? ( - <p className="Timeline-rowClient is-size-7">Client: {client}</p> - ) : null} - {points.length > 0 ? ( - <ul className="Timeline-rowHighlights"> - {points.map((point, index) => ( - <li key={`${index}-${point}`}>{point}</li> - ))} - </ul> - ) : null} - </div> - </div> - </div> - ) -} - -Row.propTypes = { - company: PropTypes.string, - role: PropTypes.string, - title: PropTypes.string, - subtitle: PropTypes.string, - location: PropTypes.string, - date: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), - website: PropTypes.string, - client: PropTypes.string, - highlights: PropTypes.arrayOf(PropTypes.string) -} - - -export default Row diff --git a/src/components/work-experience/WorkExperience.astro b/src/components/work-experience/WorkExperience.astro new file mode 100644 index 0000000..25ca378 --- /dev/null +++ b/src/components/work-experience/WorkExperience.astro @@ -0,0 +1,9 @@ +--- +import Timeline from '../timeline/Timeline.astro' + +const { title = 'Work Experience', jobs = [] } = Astro.props +--- +<section class="box"> + <h3 class="is-size-3 has-text-weight-bold mb-4">{title}</h3> + <Timeline rows={jobs} /> +</section> diff --git a/src/components/work-experience/index.jsx b/src/components/work-experience/index.jsx deleted file mode 100644 index 14366bf..0000000 --- a/src/components/work-experience/index.jsx +++ /dev/null @@ -1,23 +0,0 @@ -import PropTypes from 'prop-types' -import TimeLine from '../timeline' - -function WorkExperience({ - title = 'Work Experience', - jobs, -}) { - - return ( - <section className="box"> - <h3 className="is-size-3 has-text-weight-bold mb-4">{title}</h3> - <TimeLine rows={jobs} /> - </section> - ) -} - -WorkExperience.propTypes = { - title: PropTypes.string, - jobs: PropTypes.array, -} - - -export default WorkExperience diff --git a/src/data/covers.js b/src/data/covers.js new file mode 100644 index 0000000..34783e8 --- /dev/null +++ b/src/data/covers.js @@ -0,0 +1,16 @@ +import babyTracker from '../assets/projects/baby-tracker-banner.jpg' +import contractflow from '../assets/projects/contractflow-banner.webp' +import memoriasDeVida from '../assets/projects/memorias-de-vida-banner.jpg' + +const covers = { + 'baby-tracker': babyTracker, + contractflow, + 'memorias-de-vida': memoriasDeVida, +} + +/** + * Returns the optimized local cover for a project, if it has one. + * Projects with remote covers fall back to the URL in projects.json. + * @param {String} slug + */ +export const getProjectCover = (slug) => covers[slug] ?? null diff --git a/src/data/index.js b/src/data/index.js index 26b5993..2c5f5bc 100644 --- a/src/data/index.js +++ b/src/data/index.js @@ -7,7 +7,6 @@ import workExperience from './work-experience.json' * @type {Object} * @property {String} name - Fullname * @property {String} title - Developer title - * @property {String} photo - Photo url * @property {String} about - About text * @property {String} short_desc - Short description * @property {Array<String>} skils - Skills list @@ -35,7 +34,7 @@ export const Profile = profile * @property {String} description - Project description text * @property {Array<String>} stack - Stack of techologies * @property {String} content - Content Link - * @property {String} cover - Cover URL + * @property {String|null} cover - Remote cover URL (local covers live in data/covers.js) * @property {Array<ProjectLink>} links - */ diff --git a/src/data/profile.json b/src/data/profile.json index f656c12..bde9288 100644 --- a/src/data/profile.json +++ b/src/data/profile.json @@ -1,7 +1,6 @@ { "name": "Luis J. Centeno", "title": "Sr. Software Engineer", - "photo": "/images/avatar.jpeg", "about": "Experienced full-stack web developer with 8 years of expertise in building dynamic, user-friendly web applications. Skilled in backend frameworks like Django, Ruby on Rails, and Node.js, as well as frontend technologies such as React, Vue, and Angular.\nProficient in CI/CD, testing, Git, and agile methodologies.\nThrives in remote, collaborative environments and is passionate about continuous learning and delivering exceptional user experiences.", "short_desc": "Passionate full-stack web developer with many years of experience in web development", "skils": [ @@ -14,4 +13,4 @@ "email": "luisjcenteno@live.com", "location": "Nicaragua", "cv": "https://drive.google.com/file/d/1l-GxNTBttE7hEadNLvAz85DRkBH2QuM6/view?usp=sharing" -} \ No newline at end of file +} diff --git a/src/data/projects.json b/src/data/projects.json index 38e8a83..60a68c2 100644 --- a/src/data/projects.json +++ b/src/data/projects.json @@ -27,7 +27,7 @@ "description": "BabyTracker is a web app built with React that helps parents keep track of their baby's daily activities and milestones.", "stack": ["react"], "content": "https://raw.githubusercontent.com/LuisHCK/baby-tracker/refs/heads/main/README.md", - "cover": "/images/projects/baby-tracker-banner.jpg", + "cover": null, "links": [ { "label": "View on GitHub", @@ -53,7 +53,7 @@ "description": "My wife's photo studio website, built with Nextjs and Tailwind CSS", "stack": ["react"], "content": "https://raw.githubusercontent.com/LuisHCK/mdv-next/refs/heads/main/README.md", - "cover": "/images/projects/memorias-de-vida-banner.jpg", + "cover": null, "links": [ { "label": "View on GitHub", @@ -78,7 +78,7 @@ "slug": "contractflow", "description": "Plan, budget, and track projects with confidence. Create, manage, and pay contractors with ease", "stack": ["express", "postgres"], - "cover": "/images/projects/contractflow-banner.webp", + "cover": null, "content": "https://raw.githubusercontent.com/LuisHCK/contractflow/refs/heads/main/README.md", "links": [ { diff --git a/src/data/readmes/adm2.md b/src/data/readmes/adm2.md new file mode 100644 index 0000000..2e27273 --- /dev/null +++ b/src/data/readmes/adm2.md @@ -0,0 +1,45 @@ +# ADM2 +ADM2 is a simple but useful tool to manage your small store. + +It's build using moden web technologies such as [VueJS](https://vuejs.org/), [BuefyJS](https://buefy.org/) and [Electron](https://www.electronjs.org/). + +Doesn't require internet connection, everything is stored on device using [IndexedDB](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API) + +## Features +- Product list management +- Stock management +- Smart POS system +- Invoice printing +- Report printing +- Cross platform support: Windows, Mac, Linux, Mobile, Web (comming soon) +- No internet connection required (but recommended to keep the app updated) +- Database backups + +## Screenshots + +![screenshot](https://raw.githubusercontent.com/LuisHCK/adm2/master/public/screenshots/4413dfd3-15a1-47f5-90cc-9c7356d7d64d.jpeg) + +![screenshot](https://raw.githubusercontent.com/LuisHCK/adm2/master/public/screenshots/30510e0b-5deb-4547-99c9-9b61aefb7587.jpeg) + +![screenshot](https://raw.githubusercontent.com/LuisHCK/adm2/master/public/screenshots/c17b8e0a-16f6-4b8f-ba0b-99fb47b90e87.jpeg) + +![screenshot](https://raw.githubusercontent.com/LuisHCK/adm2/master/public/screenshots/8be903b7-e593-4a6f-95a7-2ca7c30b9c0c.jpeg) + +![screenshot](https://raw.githubusercontent.com/LuisHCK/adm2/master/public/screenshots/71c31d91-5a99-44ff-911a-4ca07f1e87c6.jpeg) + +![screenshot](https://raw.githubusercontent.com/LuisHCK/adm2/develop/public/screenshots/Screenshot%20from%202021-07-20%2021-06-42.png) + +## Project setup +``` +yarn install +``` + +### Compiles and hot-reloads for development +``` +yarn run serve +``` + +### Compiles and hot-reloads for electron +``` +yarn run electron:serve +``` diff --git a/src/data/readmes/baby-tracker.md b/src/data/readmes/baby-tracker.md new file mode 100644 index 0000000..520a3ff --- /dev/null +++ b/src/data/readmes/baby-tracker.md @@ -0,0 +1,45 @@ +# Baby Tracker 👶 + +Welcome to **Baby Tracker**, the ultimate app designed to help you monitor and manage your little one's daily activities with ease. Whether you're tracking feedings, diapers, sleep, or baby growth, Baby Tracker has you covered! + +## 🚀 Key Features + +- **Feeding Tracking**: Log and monitor your baby's feeding times and quantities with ease. +- **Diaper Tracking**: Keep track of diaper changes to ensure your baby’s comfort and health. +- **Sleep Tracking**: Record sleep patterns to understand your baby's sleep routines. +- **Growth Monitoring**: Track your baby's growth over time with detailed charts and stats. +- **Historical Data**: Access and review historical data to spot trends and patterns in your baby’s development. + +## 🛠 Stack & Technologies + +- **Vite**: For fast and modern build tooling. +- **React**: A powerful library for building user interfaces. +- **Clerk**: Simplifies authentication with secure login and user management. +- **Supabase**: A reliable backend as a service for your app's database needs. +- **DexieJs**: Provides offline storage capabilities, ensuring your data is always accessible even without an internet connection. + +## 🌟 Features at a Glance + +- **Offline First**: Built with offline functionality to ensure a seamless experience no matter where you are. +- **User-Friendly Interface**: Designed with you in mind, Baby Tracker is intuitive and easy to navigate. + +## 📦 Installation +Install bun in your system: https://bun.sh + +To get started with Baby Tracker, clone the repository and follow these steps: + +```bash +[git clone https://github.com/yourusername/baby-tracker.git](https://github.com/LuisHCK/baby-tracker.git) +cd baby-tracker +bun install +bun run dev +``` + +## Screenshots + +| | | +| --- | --- | +| ![optim-localhost_5173_app(iPhone 14 Pro Max) (4)](https://github.com/user-attachments/assets/a7c19cf4-9976-4a85-9315-a0fe1b6027b5) | ![optim-localhost_5173_app(iPhone 14 Pro Max) (3)](https://github.com/user-attachments/assets/90c0746b-5e79-4d7a-953b-84893c43942e) | +| ![optim-localhost_5173_app(iPhone 14 Pro Max) (2)](https://github.com/user-attachments/assets/0b3b39af-176c-41eb-992b-19c67940d1bc) | ![optim-localhost_5173_app(iPhone 14 Pro Max)](https://github.com/user-attachments/assets/a001daf2-a1c9-4230-b55b-f89e69641f2b) | +| ![optim-localhost_5173_app(iPhone 14 Pro Max) (1)](https://github.com/user-attachments/assets/e3092160-78d6-4369-8890-7fb10e0d88f0) | ![localhost_5173_app_register_feed(iPhone 14 Pro Max)](https://github.com/user-attachments/assets/ca2e4481-aa7c-4b5e-9c9c-b09c7174d324) + | diff --git a/src/data/readmes/contractflow.md b/src/data/readmes/contractflow.md new file mode 100644 index 0000000..a8f8833 --- /dev/null +++ b/src/data/readmes/contractflow.md @@ -0,0 +1,62 @@ +# ContractFlow - Streamline Your Project Payments 🚀 + +## Description + +ContractFlow is a modern solution designed to simplify how you manage and track project payments. From planning and budgeting to creating and paying contractors, ContractFlow provides the tools you need to handle your projects with confidence and ease. + +## Features + +- **Project Planning**: Define project scopes, set budgets, and track progress. +- **Contractor Management**: Easily create, manage, and pay your contractors. +- **Payment Tracking**: Keep a close eye on all payments, ensuring accuracy and transparency. +- **Budgeting Tools**: Stay within budget with comprehensive cost estimation and tracking. + +<img width="1043" height="775" alt="ContractFlow-Demo-project-01-12-2026_11_43_AM" src="https://github.com/user-attachments/assets/a83cf24d-d385-424f-ab9a-1ee073d7b7a1" /> + +## Installation + +To get started with ContractFlow, follow these simple steps: + +1. Clone the repository: + + ```bash + git clone [repository-url] + ``` + +2. Install the dependencies: + + ```bash + bun install + ``` + +## Usage + +To run the application in development mode: + +```bash +bun run dev +``` + +### Password Reset CLI Tool + +For administrative purposes, you can reset user passwords directly from the command line: + +```bash +bun password-reset.js <email> <new-password> +``` + +Or using npm scripts: + +```bash +bun run password-reset <email> <new-password> +``` + +**Examples:** + +```bash +# Reset password for a specific user +bun password-reset.js user@example.com newSecurePass123 + +# Using the npm script +bun run password-reset admin@company.com Admin2026! +``` diff --git a/src/data/readmes/memorias-de-vida.md b/src/data/readmes/memorias-de-vida.md new file mode 100644 index 0000000..a0d37b4 --- /dev/null +++ b/src/data/readmes/memorias-de-vida.md @@ -0,0 +1,48 @@ +# Memorias de Vida - Photo Studio + +Welcome to the official repository for the Memorias de Vida website, a professional photo studio. This project is designed to showcase our work, manage client sessions, and streamline the reservation process. + +## ✨ Main Features + +Based on the project structure, here are the core features: + +* **📷 Photo Gallery:** A beautiful gallery to display photo sessions. Clients can view their private session galleries. +* **📦 Service Packages:** Clear presentation of different photography packages available. +* **📅 Reservation System:** An integrated form for clients to book their photo sessions. +* **🔒 Admin Dashboard:** A secure area for administrators to manage sessions, clients, and reservations. + +## 🚀 Project Architecture & Stack + +This project is built with a modern web stack, focusing on performance and developer experience. + +* **Framework:** [Next.js](https://nextjs.org/) (using the App Router) +* **Language:** [TypeScript](https://www.typescriptlang.org/) +* **Styling:** [Tailwind CSS](https://tailwindcss.com/) +* **UI Components:** [shadcn/ui](https://ui.shadcn.com/) +* **Backend & DB:** [PocketBase](https://pocketbase.io/) +* **Forms:** [React Hook Form](https://react-hook-form.com/) + +The architecture follows the standard Next.js App Router paradigm, with a clear separation of pages, components, and backend-related logic. + +## 🏁 Getting Started + +To get the development server running locally, follow these simple steps: + +1. **Clone the repository:** + ```bash + git clone https://github.com/LuisHCK/mdv-next.git + cd mdv-next + ``` + +2. **Install dependencies:** + ```bash + npm install + # or yarn install or pnpm install + ``` + +3. **Run the development server:** + ```bash + npm run dev + ``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. diff --git a/src/data/readmes/photo-print-tool.md b/src/data/readmes/photo-print-tool.md new file mode 100644 index 0000000..1d8fe6d --- /dev/null +++ b/src/data/readmes/photo-print-tool.md @@ -0,0 +1,163 @@ +# Photo Print Tool + +**Precise photo layouts for real print workflows.** +No account, no uploads, no data leaves your device — everything runs in your browser. + +![Photo-Print-Tool-Precise-Print-Layouts-02-27-2026_01_37_PM](https://github.com/user-attachments/assets/09866340-b85f-4395-ad63-969f820d0d07) + +> [Try it now](https://photoprint.memoriasdevidafoto.com/) — instant, no install, no sign-up. + +--- + +## Features + +### Exact physical dimensions +Design in millimetres, centimetres, or inches. Set paper size, margins, gaps, and cell dimensions with precision. The layout grid calculates everything automatically — no guesswork. + +### Multi-photo layouts per page +Choose from built-in presets (single, pair, four-up, contact sheet, passport/ID) or set custom rows and columns. Each photo slot is positioned and sized exactly. + +### Per-photo fit controls +Control how each photo fills its cell — **Fill** (covers the area, crops edges) or **Fit** (keeps the whole photo visible). Rotate individual photos and nudge their position for perfect framing. + +### Paper & layout presets +Built-in sizes for common photo papers (4×6, 5×7, 8×10, A4, Letter, etc.) and professional print stocks. Save your own presets locally and reuse them. + +### Print-preview zoom +Zoom in and out on the preview canvas to inspect alignment, spacing, and crop lines before you print. + +### Crop guides +Overlay cut guides around each photo — dashed lines, dotted lines, or crosshairs — to aid trimming after printing. + +### Low-quality warnings +The preview estimates effective PPI for each photo at the print size and warns when output may be soft. + +### Dark mode +Switch between light and dark themes. Remembered across sessions. + +### Multi-language UI +English (US) and Spanish (Latin America) — contributions welcome for more. + +--- + +## How it works + +1. **Import photos** from your device — no upload, no server. +2. **Choose paper size and layout** — pick a preset or set custom dimensions. +3. **Adjust per-photo fit and rotation** — fine-tune each slot. +4. **Print** — either from the browser (`window.print()`) or via the native desktop app. + +--- + +## Native Desktop App (macOS) + +The app also ships as a self-contained desktop binary for macOS that replaces the browser print dialog with direct CUPS printing. + +- Discovers all installed printers and their supported paper sizes, qualities, and media types +- Renders pages at native print resolution via offscreen WebKit +- Submits to CUPS with full printer capability negotiation +- Supports job cancellation + +Build from source (requires CMake, a C++17 compiler, and the CUPS SDK): + +```bash +bun run build:desktop # → desktop/build/photo-print.app (universal: arm64 + x86_64) +bun run package:desktop # → desktop/build/PhotoPrintTool.dmg +``` + +The build targets macOS 13+ and produces an ad-hoc signed `.app` bundle with the +web assets embedded under `Contents/Resources/dist`. There is no Developer ID +signature, so a downloaded copy must be opened once via right-click → **Open** to +get past Gatekeeper. + +--- + +## Privacy + +- **Zero uploads.** Your photos never leave your device — not to a server, not to a cloud. +- **No accounts.** No sign-up, no login, no user tracking beyond optional Umami analytics (opt-in via env variable). +- **Client-side only.** The PWA version runs entirely in your browser. The desktop version renders and prints locally. + +--- + +## Technical + +### Stack + +| Layer | Technology | +|---|---| +| Frontend | React 19 + TypeScript + Vite | +| Styling | Tailwind CSS 4 + shadcn/ui (Radix primitives) | +| i18n | i18next + react-i18next | +| Package manager | Bun | +| Desktop (macOS) | C++17 + webview/webview + CUPS + WKWebView | +| Build (desktop) | CMake | +| PWA | Vite PWA plugin (service worker, precache, offline) | + +### Run the web app + +```bash +bun install +bun run dev # → http://localhost:5173 +``` + +### Build for production + +```bash +bun run build # outputs to dist/ +``` + +### Build the desktop binary (macOS) + +```bash +bun run build:desktop +``` + +Requires: CMake, Xcode Command Line Tools (includes CUPS SDK, WebKit). + +### Lint + +```bash +bun run lint +``` + +### Check translations + +```bash +bun run scripts/check-translations.ts +``` + +### Docker + +#### Development + +```bash +docker build --target dev -t photo-print:dev . +docker run --rm -p 5173:5173 photo-print:dev +``` + +#### Production (Nginx) + +```bash +docker build --target production -t photo-print:prod . +docker run --rm -p 8080:8080 photo-print:prod +``` + +Open http://localhost:8080. + +### PWA + +The app registers a service worker on first visit that precaches all built assets for offline use. Updates apply automatically — the page reloads to activate the latest version. + +### Environment variables + +| Variable | Description | +|---|---| +| `VITE_UMAMI_URL` | Umami analytics script URL (optional) | +| `VITE_UMAMI_WEBSITE_ID` | Umami analytics website ID (optional) | + +Create a `.env` file in the project root to enable analytics. + +### Print note + +For accurate physical output, disable print scaling in the browser dialog — choose **Actual size** or **100%** rather than **Fit to page**. diff --git a/src/layouts/ProjectLayout.astro b/src/layouts/ProjectLayout.astro index c5f3210..3661caf 100644 --- a/src/layouts/ProjectLayout.astro +++ b/src/layouts/ProjectLayout.astro @@ -1,24 +1,46 @@ --- +import { Image } from 'astro:assets' import BaseLayout from './BaseLayout.astro' import { Profile } from '../data' -import GithubButton from '../components/github-button' +import { getProjectCover } from '../data/covers' +import GithubButton from '../components/github-button/GithubButton.astro' const { project, content, className = 'ProjectPage' } = Astro.props const links: Array<{ label: string; url: string }> = project.links ?? [] const githubLink = links.find((link) => link.label === 'View on GitHub')?.url -const coverImage = typeof project.cover === 'string' ? project.cover : null +const localCover = getProjectCover(project.slug) +const remoteCover = typeof project.cover === 'string' ? project.cover : null +const coverImage = localCover ?? remoteCover --- <BaseLayout title={`${Profile.name} | ${project.name}`} description={project.description} - image={coverImage ?? undefined} + image={remoteCover ?? undefined} className={className} > <div class="container is-max-desktop p-5"> {coverImage && ( <figure class="project__cover"> - <img src={coverImage} alt={`${project.name} cover image`} loading="lazy" /> + {localCover ? ( + <Image + src={localCover} + alt={`${project.name} cover image`} + widths={[640, 1280]} + sizes="(max-width: 768px) 100vw, 768px" + format="webp" + quality={85} + loading="lazy" + decoding="async" + /> + ) : ( + <img + src={remoteCover} + alt={`${project.name} cover image`} + loading="lazy" + decoding="async" + /> + )} </figure> )} diff --git a/src/pages/index.astro b/src/pages/index.astro index ea25050..d9dadad 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -1,10 +1,11 @@ --- import BaseLayout from '../layouts/BaseLayout.astro' -import ProfileBox from '../components/profile-box/index.jsx' -import AboutMeBox from '../components/about-me-box/index.jsx' -import ProjectsBox from '../components/projects-box/index.jsx' -import WorkExperience from '../components/work-experience/index.jsx' +import ProfileBox from '../components/profile-box/ProfileBox.astro' +import AboutMeBox from '../components/about-me-box/AboutMeBox.astro' +import ProjectsBox from '../components/projects-box/ProjectsBox.astro' +import WorkExperience from '../components/work-experience/WorkExperience.astro' import { Profile, Projects, WorkExp } from '../data' +import avatar from '../assets/avatar.jpeg' const title = `${Profile.name} | ${Profile.title}` --- @@ -14,7 +15,7 @@ const title = `${Profile.name} | ${Profile.title}` <div class="column is-one-third-desktop is-full-mobile HomePage-profileColumn"> <ProfileBox name={Profile.name} - avatar={Profile.photo} + avatar={avatar} role={Profile.title} email={Profile.email} country={Profile.location} @@ -26,7 +27,11 @@ const title = `${Profile.name} | ${Profile.title}` <div class="HomePage-scrollArea"> <AboutMeBox title={Profile.title} description={Profile.about} /> <WorkExperience jobs={WorkExp} /> - <ProjectsBox projects={Projects} /> + <ProjectsBox + title="Projects" + description="A selection of the things I've built and shipped." + projects={Projects} + /> </div> </div> </div> diff --git a/src/pages/privacy.astro b/src/pages/privacy.astro index 8c311e6..0b03467 100644 --- a/src/pages/privacy.astro +++ b/src/pages/privacy.astro @@ -14,7 +14,7 @@ import { Profile } from '../data' <strong>Effective Date:</strong> May 2024 </p> <p> - <strong>Living Company</strong> values your privacy and is committed to + <strong>{Profile.name}</strong> values your privacy and is committed to protecting your personal information. This Privacy Policy outlines how we collect, use, and protect your data. </p> @@ -28,8 +28,8 @@ import { Profile } from '../data' <h2 class="title is-4 mb-0">Use of Information</h2> <p> The information we collect is used solely to provide and improve our - services, communicate with you, and enhance your experience with Living - Company. + services, communicate with you, and enhance your experience with + {Profile.name}. </p> <h2 class="title is-4 mb-0">Data Protection</h2> @@ -40,7 +40,7 @@ import { Profile } from '../data' <h2 class="title is-4 mb-0">No Sale or Misuse of Data</h2> <p> - Living Company will never sell, trade, or misuse your personal + {Profile.name} will never sell, trade, or misuse your personal information. We are committed to maintaining your trust and ensuring your data is used only for legitimate business purposes. </p> @@ -48,7 +48,7 @@ import { Profile } from '../data' <h2 class="title is-4 mb-0">Contact Us</h2> <p> If you have any questions or concerns about our Privacy Policy, please - contact us at <a href="mailto:contact@livingcompany.com">contact@livingcompany.com</a>. + contact us at <a href={`mailto:${Profile.email}`}>{Profile.email}</a>. </p> <h2 class="title is-4 mb-0">Changes to Privacy Policy</h2> @@ -60,7 +60,7 @@ import { Profile } from '../data' By using our services, you agree to the terms of this Privacy Policy. </p> <p> - <strong>Living Company</strong> + <strong>{Profile.name}</strong> </p> </article> </BaseLayout> diff --git a/src/pages/projects/index.astro b/src/pages/projects/index.astro index c5eb94f..b327b58 100644 --- a/src/pages/projects/index.astro +++ b/src/pages/projects/index.astro @@ -1,7 +1,8 @@ --- import BaseLayout from '../../layouts/BaseLayout.astro' -import ProjectCard from '../../components/project-card/index.jsx' +import ProjectCard from '../../components/project-card/ProjectCard.astro' import { Profile, Projects } from '../../data' +import { getProjectCover } from '../../data/covers' --- <BaseLayout className="ProjectsPage" @@ -22,7 +23,7 @@ import { Profile, Projects } from '../../data' name={project.name} description={project.description} stack={project.stack} - image={project.cover} + image={getProjectCover(project.slug) ?? project.cover} links={project.links} /> </div> diff --git a/src/utils/getProjectContent.js b/src/utils/getProjectContent.js index 1ea044b..6ecbe6d 100644 --- a/src/utils/getProjectContent.js +++ b/src/utils/getProjectContent.js @@ -1,13 +1,32 @@ import { marked } from 'marked' -import markdownFetch from './markdownFetch' + +const localReadmes = import.meta.glob('../data/readmes/*.md', { + query: '?raw', + import: 'default', + eager: true, +}) /** - * Fetch and parse a markdown URL to HTML + * Parse a project README to HTML. + * Local copies are used first so production builds are reproducible. + * The remote URL remains the source for `bun run refresh:readmes`. + * + * @param {String} slug * @param {String} contentURL * @returns {Promise<string>} */ -const getProjectContent = async (contentURL) => { - const response = await markdownFetch(contentURL) +const getProjectContent = async (slug, contentURL) => { + const localContent = localReadmes[`../data/readmes/${slug}.md`] + + if (localContent) { + return marked.parse(localContent) + } + + if (!contentURL) { + throw new Error(`No markdown content configured for project "${slug}"`) + } + + const response = await fetch(contentURL) if (!response.ok) { throw new Error( diff --git a/src/utils/getProjectData.js b/src/utils/getProjectData.js index 624359c..fd2b297 100644 --- a/src/utils/getProjectData.js +++ b/src/utils/getProjectData.js @@ -3,12 +3,7 @@ import getProjectContent from './getProjectContent' const getProjectData = async (slug) => { const project = getProjectBySlug(slug) - - if (!project.content) { - throw new Error(`No markdown content configured for project "${slug}"`) - } - - const content = await getProjectContent(project.content) + const content = await getProjectContent(slug, project.content) return { project, From 6d2513dff829d6e958f5a3ab8ccb437a2c59d041 Mon Sep 17 00:00:00 2001 From: Luis Centeno <luisjcenteno@Luiss-MacBook-Air.local> Date: Tue, 27 Oct 2026 16:55:47 -0600 Subject: [PATCH 4/6] Add content collections, self-hosted assets, CI, and hardening --- .dockerignore | 5 + .github/dependabot.yml | 20 +++ .github/workflows/ci.yml | 68 ++++++++++ .gitignore | 3 + README.md | 49 +++++-- bun.lock | 13 +- compose.yaml | 9 ++ nginx/default.conf | 14 +- package.json | 12 +- playwright.config.ts | 30 ++++ public/scripts/nav.js | 32 ++++- public/site.webmanifest | 18 +++ scripts/check-seo.mjs | 19 +++ scripts/fetch-readmes.mjs | 28 ---- src/assets/projects/adm2-cover.jpg | Bin 0 -> 149190 bytes .../projects/photo-print-tool-cover.webp | Bin 0 -> 96680 bytes src/components/navbar/Navbar.astro | 7 + src/components/project-card/ProjectCard.astro | 34 ++--- src/components/projects-box/ProjectsBox.astro | 19 ++- src/content.config.ts | 27 ++++ .../readmes => content/projects}/adm2.md | 15 ++ .../projects}/baby-tracker.md | 19 +++ .../projects}/contractflow.md | 20 +++ .../projects}/memorias-de-vida.md | 19 +++ .../projects}/photo-print-tool.md | 19 +++ src/data/covers.js | 16 --- src/data/index.js | 44 +----- src/data/profile.json | 10 +- src/data/projects.js | 10 ++ src/data/projects.json | 128 ------------------ src/layouts/BaseLayout.astro | 46 ++++++- src/layouts/ProjectLayout.astro | 52 +++---- src/pages/index.astro | 8 +- src/pages/privacy.astro | 62 +++++---- src/pages/projects/[slug].astro | 23 ++-- src/pages/projects/index.astro | 18 +-- src/styles/components/_accessibility.scss | 23 ++++ src/styles/components/_components.scss | 1 + src/styles/components/_navbar.scss | 6 + src/utils/getProjectContent.js | 40 ------ src/utils/getProjectData.js | 14 -- src/utils/index.js | 5 - src/utils/markdownFetch.js | 10 -- tests/e2e/smoke.spec.ts | 128 ++++++++++++++++++ 44 files changed, 708 insertions(+), 435 deletions(-) create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/ci.yml create mode 100644 playwright.config.ts create mode 100644 public/site.webmanifest delete mode 100644 scripts/fetch-readmes.mjs create mode 100644 src/assets/projects/adm2-cover.jpg create mode 100644 src/assets/projects/photo-print-tool-cover.webp create mode 100644 src/content.config.ts rename src/{data/readmes => content/projects}/adm2.md (82%) rename src/{data/readmes => content/projects}/baby-tracker.md (82%) rename src/{data/readmes => content/projects}/contractflow.md (74%) rename src/{data/readmes => content/projects}/memorias-de-vida.md (78%) rename src/{data/readmes => content/projects}/photo-print-tool.md (89%) delete mode 100644 src/data/covers.js create mode 100644 src/data/projects.js delete mode 100644 src/data/projects.json create mode 100644 src/styles/components/_accessibility.scss delete mode 100644 src/utils/getProjectContent.js delete mode 100644 src/utils/getProjectData.js delete mode 100644 src/utils/index.js delete mode 100644 src/utils/markdownFetch.js create mode 100644 tests/e2e/smoke.spec.ts diff --git a/.dockerignore b/.dockerignore index 14ead1e..b9dff1b 100644 --- a/.dockerignore +++ b/.dockerignore @@ -9,3 +9,8 @@ dist README.md ASTRO_MIGRATION_PLAN.md compose.yaml +tests +playwright.config.ts +test-results +playwright-report +.github diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..b45e5c4 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,20 @@ +version: 2 + +updates: + - package-ecosystem: npm + directory: / + schedule: + interval: weekly + open-pull-requests-limit: 5 + + - package-ecosystem: docker + directory: / + schedule: + interval: weekly + open-pull-requests-limit: 5 + + - package-ecosystem: github-actions + directory: / + schedule: + interval: weekly + open-pull-requests-limit: 5 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..016505c --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,68 @@ +name: CI + +on: + push: + branches: + - master + - migrate/astro + pull_request: + +permissions: + contents: read + +jobs: + quality: + name: Check, lint, build, SEO + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Bun + uses: oven-sh/setup-bun@v2 + with: + bun-version: 1.4.4 + + - name: Install dependencies + run: bun install --frozen-lockfile + + - name: Astro diagnostics + run: bun run check + + - name: Lint + run: bun run lint + + - name: Build + run: bun run build + + - name: SEO and link audit + run: bun run check:seo + + - name: Validate Docker build + run: docker build . + + e2e: + name: Playwright smoke tests + runs-on: ubuntu-latest + needs: quality + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Bun + uses: oven-sh/setup-bun@v2 + with: + bun-version: 1.4.4 + + - name: Install dependencies + run: bun install --frozen-lockfile + + - name: Install Playwright browser + run: bunx playwright install --with-deps chromium + + - name: Run smoke tests + run: bun run test:e2e + + - name: Stop containers + if: always() + run: docker compose down diff --git a/.gitignore b/.gitignore index 1b01cfc..774505d 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,9 @@ # testing /coverage +/test-results/ +/playwright-report/ +/blob-report/ # next.js /.next/ diff --git a/README.md b/README.md index 4e38af9..9f4f38a 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,9 @@ ## Stack - Astro static output with no client-side framework runtime +- Astro content collections for projects - Bulma + SCSS -- Project READMEs vendored locally for reproducible builds +- Self-hosted Poppins fonts - Optimized local images via `astro:assets` ## Development @@ -17,20 +18,33 @@ bun run dev # http://localhost:4321 bun run build # static output in dist/ bun run preview # preview the production build bun run check # Astro type/diagnostic check -bun run check:seo # title/meta/canonical/sitemap/link audit -bun run refresh:readmes +bun run lint # ESLint +bun run check:seo # title/meta/canonical/JSON-LD/sitemap/link audit +bun run test:e2e # Playwright smoke tests (builds and serves via Docker Compose) ``` ## Project content -Project READMEs are downloaded into `src/data/readmes/` and rendered from the local copies. -This keeps Docker and CI builds independent of GitHub availability. To refresh them from the -URLs in `src/data/projects.json`: - -```sh -bun run refresh:readmes +Each project lives in `src/content/projects/<slug>.md`. The frontmatter contains the card +metadata and the Markdown body is the project page: + +```yaml +--- +name: 'Project name' +description: 'Card description' +order: 1 +stack: ['react'] +cover: '../../assets/projects/project-cover.jpg' +links: + - label: 'View on GitHub' + url: 'https://github.com/...' + target: '_blank' + rel: 'noreferrer' +--- ``` +Covers live in `src/assets/projects/` and are validated/optimized by the content schema. + ## Docker Compose ```sh @@ -39,8 +53,8 @@ docker compose logs -f docker compose down ``` -The compose stack builds the Astro site and serves it with an unprivileged Nginx container on -port `8080`. Override the published host port or canonical site URL with environment variables: +The stack builds the Astro site and serves it with an unprivileged Nginx container on port +`8080`. Override the published host port or canonical site URL with environment variables: ```sh PORT=3000 SITE_URL=https://staging.example.com docker compose up --build -d @@ -51,13 +65,24 @@ PORT=3000 SITE_URL=https://staging.example.com docker compose up --build -d - Static output is generated with `astro build` and served by Nginx in Docker. - Nginx runs as the unprivileged `nginx` user and listens on port `8080` inside the container. - Base images are pinned by digest. +- The container filesystem is read-only, all Linux capabilities are dropped, and + `no-new-privileges` is enabled. +- A Content Security Policy blocks inline scripts and restricts styles, fonts, images, and + analytics connections. +- HSTS is emitted by the container; terminate TLS at the reverse proxy and ensure the proxy + forwards HTTPS traffic. - Custom Nginx rules live in `nginx/default.conf`. -- A Content Security Policy restricts scripts, styles, fonts, images, and analytics connections. - Common scanner probe paths like `.env`, `xmlrpc.php`, `wp-*`, and `*.php` return `404`. - Dotfiles are blocked except `/.well-known/*`. - Hash-based assets in `/_astro/` are cached immutably; HTML is served with `no-cache`. - Unknown routes return the custom `404.html` page. +## CI and dependency updates + +- `.github/workflows/ci.yml` runs checks, lint, build, the SEO audit, Docker build validation, + and Playwright smoke tests on pushes and pull requests. +- `.github/dependabot.yml` keeps npm, Docker base images, and GitHub Actions current. + ## Sitemap automation - Sitemap files are generated automatically by `@astrojs/sitemap` during `bun run build`. diff --git a/bun.lock b/bun.lock index 0b3a60a..59a2a0d 100644 --- a/bun.lock +++ b/bun.lock @@ -6,15 +6,16 @@ "name": "luisjcenteno.dev", "dependencies": { "@astrojs/sitemap": "^3.7.4", + "@fontsource/poppins": "^5.3.0", "@tabler/icons": "^3.50.0", "astro": "^7.4.2", "bulma": "^0.9.4", - "marked": "^12.0.0", "sass": "1.70.0", }, "devDependencies": { "@astrojs/check": "^0.9.12", "@eslint/js": "^10.0.1", + "@playwright/test": "^1.64.1", "@typescript-eslint/parser": "^8.72.1", "eslint": "^9", "eslint-plugin-astro": "^3.2.1", @@ -136,6 +137,8 @@ "@eslint/plugin-kit": ["@eslint/plugin-kit@0.4.1", "", { "dependencies": { "@eslint/core": "^0.17.0", "levn": "^0.4.1" } }, "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA=="], + "@fontsource/poppins": ["@fontsource/poppins@5.3.0", "", {}, "sha512-cms1nM7U6SN8epIV1WMVOV8VsA645aSm3wHfzIQnkk188U341ThbJGSl2Sv54V29gnDbT2arMPfLzvVIIVCceQ=="], + "@humanfs/core": ["@humanfs/core@0.19.1", "", {}, "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="], "@humanfs/node": ["@humanfs/node@0.16.7", "", { "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.4.0" } }, "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ=="], @@ -208,6 +211,8 @@ "@pkgr/core": ["@pkgr/core@0.3.6", "", {}, "sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA=="], + "@playwright/test": ["@playwright/test@1.64.1", "", { "dependencies": { "playwright": "1.64.1" }, "bin": { "playwright": "cli.js" } }, "sha512-IaYGml/nSOiZWROfPtuIL7neuu9qDOZ3TNvNljUIrhDMxiGTgPjzj/g9p9RxpS2tSepPDRY+UwAaEeiKtUvIAg=="], + "@rolldown/binding-android-arm-eabi": ["@rolldown/binding-android-arm-eabi@1.2.15", "", { "os": "android", "cpu": "arm" }, "sha512-aLcgK9gIJ3YRvrrtfSBbRa27F5WrpiTaPulnFpsHPxpUHgFlSgnU4854MHwoRGEBhfRJDWCS2WQ7lIjskE9Olw=="], "@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.2.15", "", { "os": "android", "cpu": "arm64" }, "sha512-xD7DdZCrbThKuxNg7ooQmvp07ys4J/pnSEMTG3/OdOWl6daC67m/Q4fL78sRHMxTH/N4fGUbYhcPM0MF5WFHkg=="], @@ -600,8 +605,6 @@ "magicast": ["magicast@0.5.5", "", { "dependencies": { "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7", "source-map-js": "^1.2.1" } }, "sha512-UicdXN8zQ3JHlxVq+28afMXPr1z7WNY6+7EJnzTdQWkTAlMLF5fNCCKxJHBQwGaNGR11581EiQmQzx73+MvszA=="], - "marked": ["marked@12.0.2", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q=="], - "mdast-util-to-hast": ["mdast-util-to-hast@13.2.1", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@ungap/structured-clone": "^1.0.0", "devlop": "^1.0.0", "micromark-util-sanitize-uri": "^2.0.0", "trim-lines": "^3.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA=="], "mdn-data": ["mdn-data@2.27.1", "", {}, "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ=="], @@ -674,6 +677,10 @@ "picomatch": ["picomatch@4.0.7", "", {}, "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA=="], + "playwright": ["playwright@1.64.1", "", { "dependencies": { "playwright-core": "1.64.1" }, "bin": { "playwright": "cli.js" } }, "sha512-HCrVhHr5QQuwYoswEUGTb7gGp522yflbv/ST8nF4sFWGuLjQCt17Q/EubpGGSNKYn1tsTCPZxqHhHCfVURu7UA=="], + + "playwright-core": ["playwright-core@1.64.1", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-BC4s8y6SEVA6Q1rSxZTto8hI1KUI3xXlHGZgvGqP4IqPdI/a6FX9H29IDNz7vKo9l21b6LfYosScPL6M3xxyDQ=="], + "postcss": ["postcss@8.5.32", "", { "dependencies": { "nanoid": "^3.3.20", "picocolors": "^1.1.1", "source-map-js": "^1.2.2" } }, "sha512-LJlKCCAUFKOuZxipUdYw1NzIITEsPcgyOG9LkvRJvuKj/bRzbuRY0ARXvL0pWGpsZvn8jku+LMep2eU0seHp8g=="], "postcss-selector-parser": ["postcss-selector-parser@7.1.7", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-wWBro/7hJ40ye6TPiXkUQoXKCw23xSsjriUvqd7Uls9Sso3oLiON1flc18cCdnjgCRXw4fBVqUJJeOdDTh3P3g=="], diff --git a/compose.yaml b/compose.yaml index 8db864e..7468798 100644 --- a/compose.yaml +++ b/compose.yaml @@ -12,8 +12,17 @@ services: ports: - "${PORT:-8080}:8080" restart: unless-stopped + init: true + read_only: true security_opt: - no-new-privileges:true + cap_drop: + - ALL + tmpfs: + - /var/cache/nginx + - /var/run + - /tmp + stop_grace_period: 10s healthcheck: test: ["CMD-SHELL", "wget -q -O /dev/null http://127.0.0.1:8080/ || exit 1"] interval: 30s diff --git a/nginx/default.conf b/nginx/default.conf index 33af5a9..59c1fb3 100644 --- a/nginx/default.conf +++ b/nginx/default.conf @@ -38,10 +38,15 @@ server { return 301 /sitemap-index.xml; } + # Canonical URLs never have a trailing slash. Redirect the slash form + # instead of serving duplicate URLs. + location ~ ^(.+)/$ { + return 301 $1; + } + location / { - # Serve directory output (/projects/index.html) directly in both - # /projects and /projects/ forms without an extra redirect. - # The $uri.html fallback keeps file output working too. + # Serve directory output (/projects/index.html). The $uri.html + # fallback keeps file output working too. expires -1; try_files $uri $uri/index.html $uri.html =404; } @@ -69,7 +74,8 @@ server { return 404; } - add_header Content-Security-Policy "default-src 'self'; base-uri 'self'; object-src 'none'; frame-ancestors 'none'; form-action 'self'; script-src 'self' https://analytics.luisjcenteno.dev; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com data:; img-src 'self' data: https:; connect-src 'self' https://analytics.luisjcenteno.dev" always; + add_header Strict-Transport-Security "max-age=31536000" always; + add_header Content-Security-Policy "default-src 'self'; base-uri 'self'; object-src 'none'; frame-ancestors 'none'; form-action 'self'; script-src 'self' https://analytics.luisjcenteno.dev; style-src 'self'; style-src-attr 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://raw.githubusercontent.com https://github.com https://*.githubusercontent.com https://*.s3.amazonaws.com; connect-src 'self' https://analytics.luisjcenteno.dev" always; add_header X-Content-Type-Options nosniff always; add_header X-Frame-Options DENY always; add_header Referrer-Policy strict-origin-when-cross-origin always; diff --git a/package.json b/package.json index 82ecf7a..86b303b 100644 --- a/package.json +++ b/package.json @@ -8,25 +8,31 @@ "preview": "astro preview", "check": "astro check", "check:seo": "node scripts/check-seo.mjs", - "refresh:readmes": "node scripts/fetch-readmes.mjs", "astro": "astro", - "lint": "eslint ." + "lint": "eslint .", + "test:e2e": "playwright test" }, "dependencies": { "@astrojs/sitemap": "^3.7.4", + "@fontsource/poppins": "^5.3.0", "@tabler/icons": "^3.50.0", "astro": "^7.4.2", "bulma": "^0.9.4", - "marked": "^12.0.0", "sass": "1.70.0" }, "devDependencies": { "@astrojs/check": "^0.9.12", "@eslint/js": "^10.0.1", + "@playwright/test": "^1.64.1", "@typescript-eslint/parser": "^8.72.1", "eslint": "^9", "eslint-plugin-astro": "^3.2.1", "globals": "^17.13.0", "typescript": "^6.0.0" + }, + "packageManager": "bun@1.4.4", + "engines": { + "node": ">=22.23.4", + "bun": ">=1.4.4" } } diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 0000000..511fcd7 --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,30 @@ +import { defineConfig, devices } from '@playwright/test' + +const baseURL = process.env.BASE_URL ?? 'http://127.0.0.1:8080' +const useExternalServer = Boolean(process.env.BASE_URL) + +export default defineConfig({ + testDir: './tests/e2e', + fullyParallel: true, + forbidOnly: Boolean(process.env.CI), + retries: process.env.CI ? 2 : 0, + reporter: process.env.CI ? [['github'], ['list']] : 'list', + use: { + baseURL, + trace: 'on-first-retry', + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + webServer: useExternalServer + ? undefined + : { + command: 'docker compose up --build', + url: baseURL, + reuseExistingServer: !process.env.CI, + timeout: 180_000, + }, +}) diff --git a/public/scripts/nav.js b/public/scripts/nav.js index 46363a5..83d0df2 100644 --- a/public/scripts/nav.js +++ b/public/scripts/nav.js @@ -1,14 +1,32 @@ const burger = document.querySelector('.navbar-burger') if (burger) { - burger.addEventListener('click', () => { - const target = burger.getAttribute('data-target') - const menu = target ? document.getElementById(target) : null + const target = burger.getAttribute('data-target') + const menu = target ? document.getElementById(target) : null - if (!menu) return - - const isOpen = menu.classList.toggle('open') + const setOpen = (isOpen, { focus = false } = {}) => { + menu.classList.toggle('open', isOpen) menu.classList.toggle('closed', !isOpen) burger.setAttribute('aria-expanded', String(isOpen)) - }) + + if (focus && isOpen) { + menu.querySelector('a')?.focus() + } + + if (!isOpen) { + burger.focus() + } + } + + if (menu) { + burger.addEventListener('click', () => { + setOpen(!menu.classList.contains('open'), { focus: true }) + }) + + document.addEventListener('keydown', (event) => { + if (event.key === 'Escape' && menu.classList.contains('open')) { + setOpen(false) + } + }) + } } diff --git a/public/site.webmanifest b/public/site.webmanifest new file mode 100644 index 0000000..3f2aef0 --- /dev/null +++ b/public/site.webmanifest @@ -0,0 +1,18 @@ +{ + "name": "Luis J. Centeno | Sr. Software Engineer", + "short_name": "Luis J. Centeno", + "description": "Portfolio of Luis J. Centeno, Sr. Software Engineer", + "start_url": "/", + "scope": "/", + "display": "standalone", + "background_color": "#2b3041", + "theme_color": "#1f2330", + "icons": [ + { + "src": "/images/logo.png", + "sizes": "200x200", + "type": "image/png", + "purpose": "any" + } + ] +} diff --git a/scripts/check-seo.mjs b/scripts/check-seo.mjs index ec27f34..1208bfe 100644 --- a/scripts/check-seo.mjs +++ b/scripts/check-seo.mjs @@ -94,6 +94,19 @@ const auditHtml = (html, label) => { } } + const jsonLd = html.match(/<script[^>]*type="application\/ld\+json"[^>]*>([\s\S]*?)<\/script>/i)?.[1] + if (!jsonLd) { + issues.push('missing JSON-LD') + } else { + try { + JSON.parse(jsonLd) + } catch { + issues.push('invalid JSON-LD') + } + } + + if (!meta['og:site_name']) issues.push('missing og:site_name') + return { issues, meta, canonical, links: getLinks(html), title, label } } @@ -149,6 +162,12 @@ const checkLocal = async () => { issues.push('missing robots.txt') } + try { + JSON.parse(await readFile(path.join(distDir, 'site.webmanifest'), 'utf8')) + } catch { + issues.push('missing or invalid site.webmanifest') + } + return { results, issues, sitemapCount } } diff --git a/scripts/fetch-readmes.mjs b/scripts/fetch-readmes.mjs deleted file mode 100644 index 9ccd574..0000000 --- a/scripts/fetch-readmes.mjs +++ /dev/null @@ -1,28 +0,0 @@ -import { mkdir, readFile, writeFile } from 'node:fs/promises' -import path from 'node:path' - -const root = process.cwd() -const projectsPath = path.join(root, 'src', 'data', 'projects.json') -const outputDir = path.join(root, 'src', 'data', 'readmes') - -const projects = JSON.parse(await readFile(projectsPath, 'utf8')) - -await mkdir(outputDir, { recursive: true }) - -for (const project of projects) { - if (!project.slug || !project.content) continue - - const response = await fetch(project.content) - - if (!response.ok) { - throw new Error( - `Failed to fetch ${project.slug}: ${response.status} ${response.statusText}` - ) - } - - const markdown = await response.text() - const outputPath = path.join(outputDir, `${project.slug}.md`) - - await writeFile(outputPath, markdown) - console.log(`✓ ${project.slug}`) -} diff --git a/src/assets/projects/adm2-cover.jpg b/src/assets/projects/adm2-cover.jpg new file mode 100644 index 0000000000000000000000000000000000000000..38150c2260d6a486c6edaa1d280e48a5752746f0 GIT binary patch literal 149190 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 DLTSbu literal 0 HcmV?d00001 diff --git a/src/assets/projects/photo-print-tool-cover.webp b/src/assets/projects/photo-print-tool-cover.webp new file mode 100644 index 0000000000000000000000000000000000000000..a3bfb12f2807ec440559175ce84b10fc282f0561 GIT binary patch literal 96680 zcma%>1CV5El;_K~UDah<UAAqTUAAqb%eIX!+qT_hblJ-7_xiornc3Oc%{X!6#?8o^ zH@`gk&i|(*DJGWZ0Su%rDx{#Mz)6(!`<#&zA{&_c3_JpiPnZ6?cws?)G4V3ALLO{{ zrR{x<YDwhX-p@G;zVp*DHNRx@QXjHY*mEkdiiz{9DM{7CPUqEb=MvjT#s}aJ;c@O? z>fM-`SL^y~`YyGcGYW{OJ*(|kA3*$}exCQ2ACb?YAEO^-&oCeH06^8l>D5hc%=V|R z=sV<7&o%!+PY=Kmuysy&(4+Ag^tSR!_~f_O^XfPF!UB*UXsPjY19*MdmFrLTp!o*9 zQ@q4I<!%EUyMF@0033IO?+llOt^5M~!vNX0sL!w`mJ5>GofE%(K$~9*AoUaUN%(x? zvgg;w<V%|^;Vt0&HOve0f#E)Pmw&`>6afFWb@%q9e-0S;-2j9D004?pyH&qszn1s* z&vO9ali~#Nmf-|&=+_O%03>{(0stR?AN=QlbpZd{+G+BW{tMv~VB6RFBfyXLv;K47 z9q~o}9dOVC0KC830XRONUgI8efAFn#w*%Tfy*|``#Q^}l`iHqoep>)<01Key1M;t1 z`tSoj#y?N}-T>;?sc%$(^AEze0DBeveW{#4ZPvWfyp$<QsuQwCDHu;^>-oU{;o>X- z4<i*VNo`Ro5JtkSSSWAZVFgcH<vj3`>=&nGT@}ZHyozYk#9-RhG~fjv`$|#EGKrLs zzRPDF{S^bRvmcg%@`7|33d*z6W=UxGC~L*wykLJWCO5%2Zvyo1yHX_=MpSL0R5mD2 zgtMfG*zbO1sF@dGwa#k{U}1;APk9tUwQiq!-75`9W3#VcxUBL51>QD#o`#XTUm4sJ zwi$P|Npo<Mr9;Y+qcM=o-R5c($(dtgv!;-FIB#+RxHJMI6OYZdtKV{B-DF)v^og#i z8E%UI%VQPmni}JFSREO-8_?1q;O7~=EW`;lvG%3pkZsY-Ar^z#m?{|MuW=&$FnwOL z>BikBJ<ms^M#W=7Xf&U9NIzt}hU)gN>pB*#sZl+DC%pyU?z?8qwStsUE2bkEs?k~$ z$f!M*`{-w>Dd|8aW~9(C-}3#UDBKpHc7ir0s53S@wDUSQC>%V)3T(?(ak0PDgP{_g zvX8iXJ<2j(rI5-%R4E|%%IYo|0S(Qrl|&JZZvc0r?s`@+okCMZ0Vslrdbj)^mN-KJ z3-7W(_V~_YFKvXGn%(7bePLiD)~u;W0kdQ2{>-gkgL48s#RLA%crR`5|I1Q5(9?p* zfR}#e%%vhwiab#4`&<>Mc6Dr{uNNQ|R46Mcy>Ht|m$b5Ybdlv25-861|9C^;D_YSn z7K})R<K&T26&)*}vU{4t$ta(0sWU65^0kQ6{<s$_sc@>kz^;(e&mc|#_#l^8WSx6K zd`nC{3NP;25&8D5lxw>$qp0}hfBLZa7P6UjttIsnqm9U_oWvhn=EOE&yaT=Nj7P8u zlq$6_IK?7ssi>W_zn(;g4XVKc3n#-6PKPi~B`?I2&<^$^wWjzV?AskSXs-0pn$Xhd zYAQlP=k)0A=^%H8im|*+$krdv2C}kAuLxj42Hrz7_m4NOGM(G-V`PgmoM^!BM*GX# zRD2KoKBNc&hI4x-O7r7qW+nB8a_mLUf!mb#L~jv63II4N|2s4?N*xYeTtX@kjKvq5 z-4;=#8HBQh2CB(R__{~m<tN{<<`30+y>xley@PtodKMVhR=E{99H!6j<VYm(iXxJi zSp2Tqe*!J>a41fzpGk92N6@IHAeqqLCu)f(hhN<YBvjR4`c#-nr{+S;g~6$*2cEIK z_=%XWkIlNjWoIyYYJ{bYgRICS6*w1)`+p1U4_{IF?@wv%B{)i;@Dm=obbPAKI$T$W zsYGcywk@}|q;LDoIL!TOjCkN3G<(CW2{wHxtTkpEv9f2pU@3~><*xOp`|gJ`r(r<v z56P&Z+uIqu&%%)Q=ArrVCoe?ny9c9};m`m}ZT5I_;G8MyY-8*qWUK))i*|fS^@m>U zDGa(cFkF5kXK)bcqb}%x+<ifkp5MzbocwQE`IBo>`vuabH4?6}$#s~X^vB8(8zTwA z+53QP^=Cb>SvpQGU(H^rXv&jFNz1>a`$Q_yLs7`5k9MOkn2C^wmVaO1GmJ{#1Ty?P zB;tNBlXxc7ltmp7fQx>zmjBL|k_pVdRHX*%HI<)gi6Z45Rl@a`V*QR{{dRVe{b@gF z5kR44Ig2zO;SqK=u8}2)8RxuV10Abcr?D87subyuAmICCmZ03{OY>6ky(m)SZV<z+ zC-yEg(?&ys9k$0xl}6~GXn#WBlIzSj{HG-CA)3{BxoWquwzpTnj)M4!hT8V=rNzxb zV4~52yKK?6TZ8bf-%(o?K}9Cuq_eiZ=ENCTIv9^pvh2{X95?RQWzv}G-6OZ|+4!GK zKa<x?HmxBdB!Et0_?1N6!5kh!c~t;+_bN@}dEXq>Bsp1;cjPt^#Mcic?elL}{wHy= zcn0(?EGY(%{jz0@9BPY1ZyB*FcCVOLTE9<j;sTLESFbUhW<<^6@@$QlrT((|Z)8aV zE$8BVv(Gwg=XGZSx4eN3$=%Z$W*we%85{3MbgPm^ug?KU(KE|^BtGTZ#gZtaY~FK- zb(2^iOrg+IW#NCWgZO%`O!7*ln~jQrwG80-pcAtay-3O^-=glP&{qVPJB+KBt%fsS zP{ER1@fE8xY&5v=dKNsf<h>AjJW#j!ZhbF5U&3t5h8%sHDOa6%yvUZPFV}sea@2-8 zguuf=M1;XmqBFCvcCXZrhJ^T}RMNxP60!}zDg973svikZ^oyYilG}Z8)W)#;WQ~O9 zA^V}Px`)8Id9VsDx1sL4U1ICuQyBD3Cd{Aq<v*PSmqL#+Bwp)G-{kX+I)f^6N1$Pi zELnc@h%{6*<B^Ev+rtl(IM>QCN>kB{Lm`Q46*oxaS}sik#D%(#6JRKu{^eYMnTXfk zc3&XX|B>#wFc)wtkWVhZ0mD5y=E%eSv*IMqN5~67$5sg96zlsmqr))hj-uKz!7y`d ziAXHt1nuk)_Ts0wHEDdHn!3dt5Z@*cZap={G@bLa=kv2)$6HU1QI1W%DW-|*hTXv2 zBKTzI8<<|VbxZ~Vbe4g~%=fPyaN3V4qmKd%s2sPVK>G;4!XHv}Hy{7#c|0Tb7GNnl zG+SHq`$SLo=59;W_s?I8WGp_$@7<RBoaAd9v080f=<EHUj7-~}#km{t1K$aGdcy4x zSZKWc^J`Ia!76y@z;Al>C)N}!xSJrUQjbI(S#%EX#*-o+^1Gm{{WZ3Rb}wt)m2`X$ zRzO+k59Bs#h9oaN*?j~hZhV)9_lI~6(q4mgP-~mQ3~aY-wJhXFPF{|d>T?(QNQ|YN z>k7^2**!xI%(KhCyDrkFg!!Qt5~~o;?j)XaAMCPkqw|gefPaN~oI>+$lNGoIu+_fj zcXK6_D->lZa-LRlio2D*;f>-x>{{<^Asp80hPH8i84P*C9UpOFImw#lH9Pk}AW2K7 zTpANlIYdh9oGr}e+ix-9oN{Y(h){tm+~#Svjde8+8J-9s_<9V2Pq*pPco{M;mMhA@ zMTi8W6U0#QL2)WR137h{aQ1=z17$gGq0}_R!Tp<UrEi>Q*vv=_c4w<{7Xc>q2IK|S z(L(L)HXr&h!T?a_WMJ3AUu_qV*jIr@8QGA$t{D$E=Fo<K82x%%)QuC;_mo@R6E(nD zB=(~bsLO@dypdm@<`I*RV(*XJJ?!5-#W!PY!)?W%-W>QFuBH1t8<2(0e5ZPI=jq&& z=JYT}sE<Uu^52pReG`o$>FY|jR(o5~-{y^%kCd|KxL%1QTJ-pLwZ{Z^!7mK@mm5yg z2F(rqFy=<r#RNJYi=hcEU4`>69$9FOVx7WKr!hq4ef6fuks;9}jkewVlwHeE?;G&s zO+jh05-W$m)veFk<K5rasw4=Zw1j9{c!5K$FfEe@2}=WrJF9HsV9BO6!6qm@@{-1O znp32Zsez3>7>sgG$*|GLQSBHXX(9g3-U#6$D2eW4=!74_eBwGGqx*$EW-4KFapN1F z_SA%ecBk3UaS@K3P39thwW@qk^EOoL_v8mej>D`$U$?@ssoOS?_V*Fcmqg=*Cf1XB zxnzmu+n^(^3X_jb35BCl)4Rc`vC{<+YtoTnr;wsG&&FsIC7RQg#?`zY3G-Mj7LJb; zaqLZ`ai`?o7Zeq3o=(*W>Aa9Ig+HF6;iH{cC#K>eNNySFl4KXlR6hNA2CgUV*MytL zPom^-cp%M~guZF+FyY$c!8#825Bvm2(@7%HYc}(nnh=#x&0Lst&qAw5#ktbgw}1Za z5*Q0c1CFjt5Hmb1c)yM7?c6}WtRGb1RQWMh%aZBHro!inkgds_3(0g<2}69_N2*4@ z#pKNMLG;q~YQ&%qZA<YX_wd2iEs}Q&N|;xo2%?bUvK*fan@NxRg;--5#;Ll#l44Zj zewDHyo6N5^>bvQ$nDmkKpDud%wp38Yr*#2vZ7!^dtPekpW1>4>F~)n;1Gc_g*do`W zUy@OEEyVh}o@TSlCAQ~obTlbb?A439wc;IQV0qfxs)W325O~RF3&bGZ&H_JY$+Usl z;wYCyblWQ1T{f<c2+H^lLz~#A|BMhOWHY8N9ZhB6jZFBYU`1^v==Bh{yV}TQw4sI- zLATG=EFcxYx=CnOYzQ^Ehg!7Kgq_glDlITU5cpjgy={NjbnZD{&9V^GAZSH>3TiF{ z1Q4VwTxDHn`Km|Kn8CuY$>M@InT}7Jl=%_YS@odg#cI3XT4`VnYlpw-qJXu5o7}nY zr}tK)TT)<k$eMm`V^Pb?#v%fcm*4~t*u(G2jPo1U>?b<<CJRH!dWl|6O|P)YA?TrG zD?_5T6IRKW0~o3@r37XffbO8@f)QAt*_)>VS512Z3{Lz@#+e8-%jOr+LCBtgnJDHp zW-lN6!d>;dTh@Cg0hou2n#eL)nBy*r#pol-6(z9W@=|wNk4yb12z0sVFT`hmy0svE z@vh&!6_m66s=Yh#(m5d%uiTz+Gp~DlR67Y2B;yjVPn|!M<Pqbz`Tb7AOK>8Q_);ro zE7Sn^SDu%X1p-hz0|C>ywVHA#Ny`bf$NN&aFsN;YJy&k(3~*0c$-`%HoN{h(6<bNY zm`e9-g_Q$0NPz1SV4A41U}j*BkTl}%!WCJi1R{`u-*g-lE1$^Jt8`n6<vR#p%*6vq z&(f4TXBbCdNus_Su?aalpjCI#oj1I(gLK?UW9WeRhWAvnO-{w8@0!vX%N|V$(~rq# z1FAgRsAD0oP{9kWdnlrotF(M^4jjH_>j&%C%Pf4*DIi-xU<ZfWcNe7dSkL7nXhg4p z2b&$5TlkmHAka_)C|J`SYnmeCQLV+7PGvTtD$D%%;cfMLv195KeJh!tB1m(F&)F6~ zS3NF+gTR-df3jWLhlMMVPrc5umX6Z7fh3=M>uFfMRnH@qSfKHIHmyVArL~TVb9>OA zST3W0!<u{W1vWPj1%R1i{3=wuS&st&l15HpEx*_MZYejo*VezPS7=H7ebn8;CF=&$ z*EMTV`GLdhtJEoGB=t{u4#;owHR>aujU?IvM9UeYnT|biBGkCr5!5&fQg}Ih3c!}i z9OKJ_?wzDWtjo@iuaay;s4Sq2HLD_`%ndm!jd{V++PeU~9|KP)2Ns<gOYB`|p<)!k z8FDu$WOH#1sF^9x>QHJnAMcn9S;i&+Ipu3Z29mD*)8^IGS8ddx`8m>>&6uip;Y*Yf zQ~tKnoTs}_;Ml#67Y~xJcsWa#wW#E%S)Mx><k8@!s>!r>U6Xcu!w<YDRxbBSOd~H? z^ire@y|}dVfw`im>`A}e<@lu`p(HfFwSrgmzFyF{4`qGTPU3M=Z>te%SlN*IpaVt= zlmZ)ir!|Ei=HjE7<M}lUZa_6tCJf#3DJZ?{Bw%N$?2P}Y;#+f8TZoO+EAk{GcF?&- z{IwEH%L=0~$nMxseJWm7HelF-ZimF`8OFf(P-Sssijnbk2BmABFgV)6xvsLCj4cq; zd}IVsVLs_jD8!Bjv->PotzQg#lr+<XMxBHAy2N|fwmsu9xJ~@(9wan8D71><%z@nl z-vx~0P%wtE-~}rE_waxihjG#G2-0KOzZOX{uo01vIC%gxv6dT8=uYXMe8Dafa0{OM z<;WYer3Q5O08g3W6e=;0VBWo90rEn{^A6mzwz6~mcv$l&OOi}{9e|6gG+Cur$K4D| z-gK%ohhrhrd(ji;R3X0nK6p1itk-T~ewhUsW9*YV7X{Pt{7d)UB@8K#SddIJH|NDV zum{SVmp5vExv`mFSp@_<Rs5JSY_m#`B^e*F4<hayCtrR+0b{+$oOY8K<A%ho*%Cp- zrzJv6PnfYwF&$~-Ia5p^=|RAt3)c7E0DolI@7}v-IlG$`p`{9aV`eWo#i#^Sy#f;S zzJQus=LCk-#Bzr_;dy2u9RKq{qKhl9O!BkFMpc=hj65~{*H<zYSA&heD=qh2Fyop; zLLe>%Ep3?G8sZ9H#dhBN&~4_Ky&Pnn@amTfq(>+(Fy26d-et(>fjWaodyE!f^$miZ zeoyt;Z%<+V6VzX7llO@glVIf%>KEb>O@x!X6HzTL79D7hipxY`h+{S{Hj{l>h=I9t z`O=oYw8vfm>?3T}$ibwYZNO2hP{%FuCOo3V^33w#tB;snv+xa|ohri%C@gfuHIfs# zNKqoU53=B-%VH^iG^2I}H$n1s1#+)&km&`Y0$K-FM{uM*U;spf;QjqyhXD=8ezV@+ z_VVjQOFP2B;=@s|aoTr9K5BK748IAyhX>D^s1=LZLZXb7#SUnj0?Dzxq}$9PI+!8= zXxd=ArA?Z=ZP%~Ia}vRqn^gU`m>-xUtQZM9H5QeNbvmgTl)M8#b!#Y>Wx_z>p;L?2 z7>)IePl1^z(TS`r+QAHr%@P&TIAIwX(L)8jdoakizv@4`0W=+@$L-tfz~OPwqgPzB z%=$s1!W?SUqOFmKD)m2ws$UyickeZa3hpzdT)UX49#qq5KM*TV#7{4+Vi4e@;_-hL zE>WRWyB<gD_|f#Z_5F}s3}ui4$b07Y)>QUkOkNJFA`f7-!4A5S1!0I}m%(HDqG%BS z#{6P9dZ?C69_6hrhpNtKZ?#BZ_O{<k?Cvkc_~C$ERPcGIaUEnaI%1K}WMsf6gFxKR zmN=<1ITnYJ5g*UaSUHp?I0qi>q$}@8C}c^?1o1Zbi6kyIoMaV>dFuy&=g1%=qRP8) zoFzTO$TMbC^-nW@2xTsEXiF6zFEKx#_pR6`Jzx#!9e3r7s_37r@dU9!!2naoX6vWL zH50w|f#8Fbz_X@G4w%;>^o-rh>Z&L75*Z~qF%)`Imi*dFgx%fufQoTt5iDP26y;FS zt(oV@6LcX0Lh8q{2LAw4>_~wm_UcPJJ_pWJ45-2bJtG^vYMw8>i7cyJ|AP68c|?3T zWL0Ii*|XxuS#=-wR3{JKiwJjo%t6<64E9b&rg4VqqB>}e!q+oY7HN4vPtcA2+Fn)W zj6E4_WI}a*hb~wA$HY2u4dxd8%(8z`hesNmY|y}NIi$S;6^#$m8{K<!Gz>|=F=LKd zfUJULEPom=uZNhlCmP<cH0Cq5?GFb0lBxx8&Hn6@>oz1B9R|Im_urEWP4B(1zPYM9 z{Y`!-Q*L~uWvYR-cS?*<mu(F~%iQK!KeJ#pvO#YSI+z(#4c5)tuS(Xh_tqClmngG0 zk`PhHEhz|S`d=Ve@J@^`$vNnsk$bXjJ#6xGB*T9>ty0rVOC*Lk92S8zMFQ6^ch*|0 zy3MWTNHs!3gEE5TX19h|mTcac)KREHK!28(2)Yuirqb%{qj|`(E{R%cSdOdQru#0o z2GUL^E%}r^a{6>2adXtAhx`QBH4FI>Ez4b)Ec1?Hxa|ievQuqM{1%U{F%nfKld`hP z7`VT*+Vy2oi*|akf{&gG<JQ%Cz?3^la0B@eY$T~KXtV$|o%y-iaIGTWp9g*^*VNKE zX}#ml&E<ZWs`pq8C&a9p2i4DhjmNW0qJk+Q0O+AK9;(Pc_f)Hg_OGF-rDE!qwQPnT z@0Xl@+O|yL@YKZ*zDV1j<vY;6#-S3ETCAFu`RDnwNtQ5q{PRra8ne1I3<F=wGab08 z+dv`I%7>!*7P-N0eEU&GVYjqz(b|JmcISB@a++h@@C*ns%?!oO1V)=y>GiBQCX$E^ zIgN05Gd#)=N`~VNQk?~estU8|bF$V}H@IM9>|=%y5rZtJ-F6nKaHN3pb`>p3Dn$tF z4`gAXHs4=BZSK>U=(r=Y1G-|DXLYUZTQ7iiFy6GGvweT2)JYYYrQ{ru&Ozp5LI%C) z=w?Wp83eJ0vp6G?q8&ZR-id3#qb{TUwXad!^KOVs|62ga{2G!1AMj4sLV6UbT^6U~ zmZiRr#{0@QW6w{r$AY+&yw0shOBzfFgA6|aRNiAw|DEQ!-eYltCg0;nAt|&{kDR4j zp|e8nTV@!>3e4G@``u@r3Tp;p{M(94%Mk}A)|2hM_WLgsk1PTz&S<jCFYq<*hgf@_ zcsg_{d3+n76rxM2G&^;x=pEdXQlO_H?9RgK$&_XX#FfZz%_Y163gg|XmwvVQw7{vf z1)8>DX=&Sy4~IS|`FA+P@w#fhVQGEP3M5zD^ji_?{VB#z#K>V(F$Wx|NCjl6oRAHC zE42%v28wq<eGwGt^*%^%&nA_0mitd<#(&Q=`({aS&ceF|cU24o8V`78X3pA)3L24o z{B8qfy#>UXEEEkldM#~Bn(-uybmrG)zF)Ta7De%g#hNdD2NJMpR_%b>OD1oH;|#BP zVIVwXo3E@lx$qtwa){Wn70j1c^7EDrbI+bele)jIjN6f_PEAqzf-trYyi8cr@<UY| z1nEhkXD^9Xrhkd2^KiW8Am|Wg%F$>xZMBM7Ij_|snYx8KI*9JkED%b<j<Zc^b=c9% z3Ot#}lLlb;-O9Y5*_c53*#<2%DT^h7YP=e6@5NC3oHhc=1VRiy<%B?jYLeI(3iTnb z4kQfw6b$USIpC@SSCJi6C$K^CUVTy(^ZEA#^0x$3A6<7vak}H)kX)&u31Igy<d4X` zdR}%No|S<mysuFY><~oqC1Jbex1O?Qg?>FscEXLeQzvP~P*)FtY;OIyi~LcH$*dv| zAxaf<T01E1xptN_fD1&kS0u|1JWL44d@&uYN+|S!Iplgyn@Rw|(YA45;WTfngNvBu z@z-0dHuz+nDS}ExJ=8~+%_CcI%rtbZwI@jXsvruRG?cSqsbCj^xFbp@jFH=oEO_WA zN@*+sxO*6o)3K2x;|tNC6;G&g*1F~-EJj(f8W?EbY$I<GYK$i{xpF*bu!&hfUGNb* zG@;-nTTZfKqCpkR^NGv}QkGBoR|xAi9X`#!bZ3{d9+nzD?KoZeYF$g?PGGg^D0RPs zIUgmdxxQ(i&FtI<<-~dB$^LCWO>5tIBqe)T#GS@%Y#4!~z1p3h9F}vg-lUfNGuW($ zDILNvKZ0345d=kltTK5A%{Wiv8Pur~ojon4sSB<Z1<e<tv`64RTZ9{|GgLEB7lJVh zZLP}@9_84ofjeZy&3*SySYip@&TINxU^mZMpm;@5GRWD8AH+($Qa#4pJ#56Sd;%B# zupT}-{bNqJ7x;jrK#eP}H-}2Br`(hMMF<A9qn7T^gygh!nAnYb9)EBrhidg4cQeRl z=m|Fdl6{AN1hA7X^7-rt*Ha!E?Q-4YeKiFy)E!G3e~9F<7^$5kddXi5rGpm-=eEzq z3+Sist7pp`;uCESSSCX`j5pgkk^U3cOXQ}5m$Vd0LRH9HcSt7>R=^+eGMPmDN*hh| zR?KBkztHgYwZwg|L)k|=VYx{J=L>qeUGBsK+(8t^f05|CjUgMUoS6s#wRvC{3pJXr zJ3LC%;oD*d^J~mh+N+QfeW_oso@sHiPY27ARq!#*;M@5KhD8!bGz6B;f4Bb}``qn} z<&)7nC{AHM-s8w`3M-Si|5cEiG%t{16XaZ!RB6pPpW?3=<_M~*h&jpw3n>t7RYCj$ z8K4*dG82C%#OE!t;g{__HNhbSxg@Vu2W%&3%7swh(q)bU1dFpQVcuTWfVTz5JLd$U z>|;M@S#QAPrr<%(^kJ4^I3fm8D^tI^%>b%~MXcqN5|><)?X63Zy~e+?l&OYxY9ch^ zYSUTQEIw>eCLR)v>o$Y@eMqU<XnIa%+<Z{ieoSQj*=S{~=ZX@wfd^xV<dsC<j8N5= zc81nC+7#*V*fv;b_dEP|-t=t=925s*CBO=su*JdW{zXJ17G6%@hf-@NWI*6#fd1WW zJyndZo<k(GOpb!e!awq+842y*a>Z|XS3spLMnVTGd#~Ptx$n`o`N<Jdm0@E{4XTk1 zV0_nRHlp%u)~e%NRJBcqrgcZfC?Y_Sfuy`t<JQ}ATDQZEOg!_h0)x`syO+Q2>V6TY z@ydT%^r>kt*AMG-Tbcq|Po~Ywo4X2O$0X_!SF4o&l_T)0_IIlc4`=HNl2fvclEY0x zPEymRLg{YwsHJVvLEj6wBAE~FNB@tNM-1Cemy{!K_o9KX3v#b%6L7X{4nW{QRj-!u zvNGfSA)43mH>*7fjlPlijF0Xw=+~v5Jk;|?_GAa51tdJ#O_@~GklT(b3gd}n+A!>Z z!_Q{KqgQ5U!n9Xc7=w;_H%Rhn-D=p*zeLjiz9MCSP?j%td!?t_f#tqHo|S-I0(!(B zKY-b3R_MQhB=<{w7bLjSWgyWi?!u8f^?A$}rsUoSigIH4(0l~>V!T_~Rv4Apf=<m` zz^HjojQRu3o(v9M=a}iUt^L=#I_II8<RO)cbS#&0T^6)yBx?f(kyBPb$_rgnIFb9> zu>h?T18!qcJtIz&?}-$HB=#f21Rjo36psy87xyMD0^ZHBo`R7RH6|!5`j;ORLPDH| z*NX{kV#MrKcz~fjA)1qywM!w^shm0SR;nVLUKUaV%>8PPI4$G;DMj{wq<2*srs+_= z{pgm9?5A9r-S6b9C9hi`1u&mC+4^`^b6C%}jwkDE)Q>0gdLMMnK_2$TK%VLlEpb$L zqSHPo=4exT*ugsQ%nR{p3#&zI;7K?M#>6@I*YBgQz`WEvx*Z@IL;9O&ahXbS7D)$6 zR0TQ}p$tOxiLvSv1n7Dq)e?NnEV-0l6Yb%D%Si27{@UZns@}0wjfFM!$MM*E!ztP@ zXy6(mUl{T0{CYdM-(ns3m7~8(C^ean+o<(=OIYS@itQ_Ym%~XYDIj;5#4`tt3SXtW zIb>VACve#PlfkWzFf`b1eOG6pIyWc7V4_<V$C|B!T|%}WU6m0<rs1F8_PEdq<lj`? z2x5<6<-0n6VhmFF-8kV990ui=szARq4r3wtFtff>4tjBq7?D%(#Ez$K76LjK+3G9A z8s(1>W1O`0HS-ZaQ4HCHCw6z|;&tvR|G_5KpoRqQ^5Y@MmrxKnX^5V8Vj7#f06FQ| ziwpJ+JyXIuOF+e>Pu30?^$d;0edu=4k2hR4Nf1h^)j?*EO0$%(67vnzh))NCMi_r& zxk)npY-;9Wv9PmwSTVVA`}(U1MlCDY-Dq)AVzl)?phjH0C(l2ke{4T>(m==NXhR?a zlv|F6+w3t@fFT9P<@G{*2FNXJrF5aXKj-ZrAbgl*!MX2Ax65l`hCIngCgPr|6UvG; z4811`;fS%eWkapEa9E(<i8AYto(l0DPC?4#)-&34AN}t}Ar;5F;a{oxj-Er7C|7FX z?eJhJT;BrTLK{PKs=0w)fTCa3pW0Wb&h1wc%Z^$dEC5AiB4k=B@b*I1xU@A*L{+2% zk1?ki=IG~c;wdv_tUk_aq;Wc<l^uz9{a+<16DxS|IAM)Gstp%<?2n<}Cz==hi>olC zJG5IkN1PDuU!~+dG5NlxRjjj1ckW^t%+ON60>4ud!7-)~b;YSe7Jcw=B$QMho{3SR zpuHVrx+?Mb+bNpv&A09!@KD77roO01l8{iZr%yFotBx*wFG_A@k^ZBr4S!+!df>7$ zFvJ;d%YpQSTON1+HRnyjyFE#D4}Q$QspU}<YG^q&zBkR+IAd~vwYt1%Ll-ZAmtzM~ zVySvW@+E#O=VLlEwb@tY^9F_?-hD}N`k%i`HmiREq7ST`|I##L>Ly_ci=JN2@VPAE zwLdB0oByGIDU*6}6v=nk?CWdoQk`k(WC7JHgE>|CUtA(xH;IJQpu}er7ZY(mzw&z0 zr^DD6w2_m@M2M=r!pqx}!XbeQPv`!T!aX(4(Ds&0Z<TD#d)Nu?E&CzzE`r#`G4a4Y zSCcASkimIkQ}Y5yK#NSoq@Cm!e*f_QmKvqnuBM9GW_Xxa{NGOU9|e)N$1PVle9%|b z`<%%S$Rm)i!#>R8m1kjTmf6LId8Q3-5B&T&1Sv!w$iI%PUhGpr?7h&yw3s**v^U8H zJgYbU=`|Uo@rAOus<J41&)0Mix<>**@1OY+0^uxyWddWbykNi>@>gZYg*MUZLAF?$ z5i_OVZ0~5-A??XSH5Or_KG;x-|0wWMa2u)JdyYbL9?FJ&)E(EZmxybUyG7DK)r@$x zLfa?X8qLHW6fr2}1Mtge0_Q2jK=2(VF<KgiU<<iJ=ikqw)E=8VBF6ELqp!<6Z;>E6 z)MKr4>%PD7{Gp%<YLA8}Er!3=thct8Bw&Cm@+~wzHM9#Wk=)v$s@0;VGT^k4YL}S% zPOMC4F}s;dE|elI#YO<ALJfRKk%tCRJ6ZbYSN?^nq|LvX>==SFMZIY|v)BR&X8C_A z@b#@Hts$r}8N#1BV0jKQ50hKVOS#eJ0w`A-g;4tW%5meT#j3~37D%sTDV4${k|Z&o zMU2W`n+TA{rnmmUJ};N^nLM$hl<KQMg*!?t)z+EyT(nKe2k&lT0uX?w#;nVjbF^TL zRre72lGNh&J{x45^Gg%$A<1phX4N)UJ$ao;7$_6A+w!a5)9Jr3us@4R#K2%ggU7r& zlw7{{^@a}}aoS2N(ofz}AT<<>il%eyxu(|}sGg3EkAm7<^7~kzbcrtYi+9U2_9(*$ zK<f}$-*|Q{R`!9ChsKmu;14{~*R)cvBmfW2N`oP%Msqu<1JBIi*6xAa#f%JshG!a5 z>5l5L4c7Ex`VU|seWYWXAwWEaf@w8{x~VoXuqMC+mkikooz$SN7zghamme({SzV}H zzHZC-zW&vtXAlzuxYU#`J0naocRZ`LSg8cx|I;3l#=nT;=nu8Qnr0NJOyMQ`t27#M zBdJmtuWX*qI1ger{u)@afhSbMIc8_z_Q;=y!TTQ^E(&V`;SPNZ^^6?^NUm6MAWJ3? z;R~Z^qrZMEMMM4o!|IlBJKj;FWs#ehxNr;$`HwRTB%Y|e$k9nw<=~+dWu>kl9pvPx z+-<Ty#2Y=UZ8_e3w!2gp#@84;V9K=$ijOBTRY*rkJ+F}8UVXf*m}2PpE~{Kz^DhmQ zGQBv~J)nl6sdG@RW-#;hcB>d;H3ZpiFj^yGo!o1iA0)d%hv^L)V_^$0T6M)wTUGIV zScDAm9ecd(&>E196CLqDY8;<2#K%N276-Rh^m%9i&l$i5r1^M@r%(vQzyCWJn_IPU zL1?7{9fJQr2DVs{VQ-6;x8uM2rN8_vb+UDf)nBoMIYX_x4Y$6zQ)i|QM%O7LJ56*A zcVVnhrn>_kfmbpX1i=RQ<ADI&cH#2*v1u}6&X3rvs$$coudlb$!aZV^{WQCjbu=I7 z#f3kH`mfNquV17Zs61k|`??Dz;?I1T-I8<N^H6HZQ24qWQpRTHBjRx#iuD7=51VH+ zz{{KPjGP8`=eMx%7rat1%skLJ<l?;#k_!A&IOO*<;)(@R@um4;rZ$HSmqESVl(sqc z#Sv6J6-)eGm?z3M_Tc57G68!bc-JCY_4$><_T+~WbD}cfA95&7s)tL(EJu#g)HccH z{rP>sn@p$z$ab+HlW8YS{y{RC6jdt2&Ua4|cMucl_`#L6eBC1XTc9)af%u?4Q|RwR z_&4B)lN|)6Tu8-#-Ehm=&`dAG&?NORu-dbOTrF4rvu2HgiC!jEYg&9hXuBpd{<r{0 zEa_Je$GJ~a1S4OC1ER?MRX>Sd%XrZJnpdMSuI9Xpd&s5KRF?98&YgWP3)%U=etHDh zW_;MO_%0^c$&^2GzhOQ8VaSvk@lH%O8J9wtfeH&Zu7B0KaAkg}G6)34_V2Ob=ZrB~ zy`dPoka1e(zs6a45mZ<Q&^=l*Ewt`!Hl_R?c&xHZ5su?I&Szbnmkn*z!uTuv(_+!+ zQkP=Mr^K>V-u)#e|7DEvy36AK<%>;S^s3J^@D7WOp3s(d0;?{KEGuA=`;}F0dFV$! z>w)BAgq`)l?zws%K@b8o3w$oOe%5CbMQZRjyH0?a_^>!1|Jk|drErCCx+MMSJA%>5 z$L<G@WVGTZPyPYDM59f^Je0)TR<mFbvW;aJQ5M!<lnUhehN-->5UoZp*Wypq@{tZ6 z26#&hFg|aSfl;Jp^vh#yjBFKKjo1Em>f+dZIegX7Z#I~W{F)X^O0DYCYJrGfre!N+ zov{bAEY^rU5N)wCBe2ljc*TaKpH}vbK~Ss4fCr3(!$Ea9Ovw8z3)Kk->1@-IL-rtH z-%p4Q2-SQbv)unY^q;w!3bpU%FD#?|rwnDVR$$0wi5&>&w;|1|k{w#S)1wg@$RL`g zuiqnj-J7my-TZ`L2_PqdbU=TGm+%Or8b$m5ja)GjSmPniM<@ZHWs}5TjCrbEm^+xf z2FC$j$^R`J@|afWfk<`GiEt*u^Z3G_NfxD-%#Cd;T4o^$dY(Ej=ys|F3!j{paG<Qy z_9#>nv_!Air-n?K>3xfac=cox{QeHh)xp2|-$ka2zbgWaCp?u^*FVT^abq*H?H)WU zM?&1W!`0Qza+>MDnh3g@dhJi$(8h(;yt6MmC@fTI3++v(bX}Ex!W>O_xKzqm#wBeU ze~7cfJ)$*7rT-|5tOfP0oBxojuMCn+rTR1E7t7_tS7rDFUQ&%V{0(#+gL-t^Zc+X% zx3`<8XuxePJqe?g_oViYu%Kl|J(`}JUdw1}E!V7n*8Tr=f1PP;RTr<uQ;-Y^Hni8= zY9GR<#zRyf$d?lYLqz>Vf!Uf`W=AhhPUg{XK~8DMi#e@U;e}s}x;9#^I^UQE2L3jk zQze$czrw-tKVar!G4p>amlUlrE%&(Cz)Ssgd41?hy@BKV2qN5H205mFEEPTdPgYGr zd-*RL7|Eh}m-pXn>i=mrBC~L}+zKQAl7OuLsXk2F2PpBd;iWN@o}T^h!2A=Qe;sk7 z;LWW~YV(16Qab(v!A6f6{ucnBa{&ts?oiBk%jNauU`mgkG&6fpBVwBd0ymXqJ+ABh zBKyd&;k9JwqLp4I{D@v#P>h&K)AYJ4LupWBr7{RYl2>Hpbk3poo4KXa`1K!*WFvCQ zzep<)g$u4|pW9i;Dg`nxi+~;3R^#cZ&(^b9bE)gi)?_&ZK+vawBmSih!g8S-P09?+ z+{&#=-YF)`{sR;ND^%d&xvlz!8`evbwK}4dE|LOP&+e$E`7^ypFN~n$J1lYxPor~K zVn=J82Z+;>AzU12J!!9{vW73y*MO<$xRAj<Pt=N@VBH+x@$(g(n=J^GH7&d^Q8lkj z5eaefC1oEcWZUzG6PqmPuU<`P*F?E5MLsP%YTzSvgFN86LBH#AMY8<AtCctRp|1Hp zR}<@S#d6c7>T4VpY8*N#-0$Eh1;b{a;Q%o&-i8A`^aSmK^Lz6Gq=W)g{P@o<W)uQR zjH1~{Y@xt<se$!h9@3hEu-<F{0cgymXXW?3{#ejC?#$l~^T%!e>v32t{a?WOH|9L^ z_8(#Tf8qE4N2ve*>mnZz(C23c(C=5r7vZr3ekVFXTuoUKeTE2{T=H2~XzUvw)*nH$ zI*;ibFFb)>Nl-JvZ=gPa9gE00?=9rB9+ee{9#hY6XpkDsVJdT4&#j^@IG!DNOQSy= z%k5(#hZy<lHkRPg6P_~9huh%qN#*BOqGB%Ryb;!se+cP!>b@7?*%@rIil-Kv>r& zEkfVk*=;0_Fdkkd$E1FPw~rl5M!J?fGg=*|CoB|OfDHAqkQJ~mdhI+-{~;<tX#OLJ zqOd+fuEv?q)A0$JMv<;^>lORFbp6iP&>9aWun=gn`BRgB?fblOIo6H8uf_c7b2hM9 zqOlNuVbvkEzy!iFyUtGhQ)l9*3mWj~*cKL?XI`Wyxy+^@K9R5ZG0dt$&_jbCqoq)H z42Gv}FU6<>4yHB@1-Pl3Xor-kslvS%GU86mdh>z1d#b5KsZjLK5+E?JqJm?fU+gdK zWG73tm5Yk^1pMF*1r#vAa44fP9CLY0(Q`k!K&ePNMarC8azLsr5WFQaapp{ClJ~XE zBW9{E<!a_!@Q2~CNro0&fze!YD}61K_;-QP(mi6li!wXpg_}B~eCJSc?YRu}TDVt$ zw7svT#BsF|VQI!Kiz-T65k{`?)Xwm6J!f70sYJNVY}#?V-#E?S-p(yyp6<|wCC+tg z<r4&gx*=wXs}&VKyvPD4-$tae9R=5P=&s5c@ke%=>r4&BNVAi9z8g~i2nH2|Ilp7P z^)R{s>5J}I0pAJAyR4PQL5i!z(s$aI`A(tK?8}o*U!Kp(cPuFUypGVqK>vvS0|f$x zY_QfA>Z?|OsZ;SgIeXbD=j52y;D)X%l*fjW`rZRqE=zrsh)WzOo}^219k|Q+^GI8? ziLG&JRFa@t(z5*T5)@FN`)W0)4>PYD&Z!m+TYxW<b3?OqBFX1LS8(>T{fB1t+4s9! zR{z2QBg%8#HP;kku0TOPB`^sL$UMWE%P1k;3}+^X7<T>2{rE@KUp*yd>{YbhKtR~E z#Wmxf^0zoLnP&%uXDE6mxKo=y#qGg`_7=0LTGgBpesX3mavC@o%M#-nv%%c)7Qw$~ zv$4L5r+4gp*I+>FHNlE=T@bdGhAO$KRx_hGQ}f;nZb_7!!jK`6(<zrm8$Thy!C^GM z`X>MDln!A`MR=mZqKZ>k(Ahnic;E}30MIj!D=D;4ayorL23O2y_6o2?fS#o!^K{uA zCP7|~mbt%}X-SECW2;T`l8`q=erto?ui2jV>tldAYXO|{6jJA23gci*0Yrm8PW*_R z1;UR4;Ni3@r(7}`q5IPHbavu{8jNkhMG_+@$p?gJJ--B07iLfA`KoYjI7J0ZY)V}* zTx4hy7)}wg^DCiP31FO`L(hI_U?pyk5q^ZfQ1I*Y2aWVa`b9Sacz(*<#P=>}&wyQF z=*B@1Wn+|nEfvlPZ;9k%QNQk^mpo!d9=<)QL9aqOP%)NV6Lyt97v101`$_4iDQZpu zddlcuod6zO9|x>^h%){JxyD2Ljk>pYAO~LCUVsT9r|a93Mb34*(b8zsBZrvB_v6tw zQcqLW%_>SRrlUC{7^h>EXN+nAJZk?cm*w2#rz!@Ke00dtLLNO7{{TtN@fR4bgHTAb zw%FwuAz+Yibyg6<8@PM4M;2|!eLQ@JqHN+Bk9m_6X{Eza0+cXFJhi%svf~zAg8e;9 z5{4vNriKb8Z4U7w*6mcXR!{zFVX(z7KPtQY5h|9!fIuQ))sYD}IXdJJV!o`)ZxM)a zO))qsVV`xK@nwf;?C2AJzwm#2Pki?$VC$}Dqz%L7Q<_$_$gqNne!trEAl&q{-n+k4 zB*JOfULh$|Tm5K%LOZGM9ic+PNjvzYr}vqFcKm4xZRIp)mb$I&X+<yRtA7VVm=G=~ zXeJzBHMk4}w|qu7lVNB|$1@KCKK{wP2)-V{QIPV>j-TNg(I_k92q(vwNUq@vWv#3> z!p@)>%k=V*G7nmB=Wf>b>Uf;v;G_`URUJCt_F^3JiP~jvnDIlOn?nNZ{zo7dG!5)q z<!kKk=$Lap*)#`0&>RfQonJT5hB|6qFoR4zK$4`0F2Cd=Ca<Bvr}xvm`%BHv8^+j) z9_tt0XnS|&3E;Pj6EMN~F+xFba}GSm*p|WVI)su1^gOHy>6)4wl?RsV!{jkkDNmO# z&8RWh+@~-S`R~uvA$GbC$JJO{ck6x{$4zXbK}Z~|*GWy$r-t|646QVKw<5?LanxEE z#L@2UWgRk2;yaRX>wwBm=jPTQ5_ZJ&AEpObZE!W2)7iMvs8dj&dRlZS1#fl@oLcky zF^P(+P*ytSJy3lTC#K>SzRpB%WXmB%DG=@N9tmASZqZ=%@vNMo+1bSg!!?rN(+)o) zzzj4`1zBkIbwquGetpImE=SlBhq9|>&CKzU*0(k+T90I2Y%*(vo<jU&j{V-jL$*Fx zb>Z5dp}VM>kG#Lg*p1p{ijY|~tVThrxG<|D7b!|${BctxO?5kmN`n~8j?<GqQ<PFj zj&^N)9u?Gmx&uWHZssjL`Tau-zWYba`#F1`Vnnb#*g!pP!=U>URMQOe*$S06Xezq< zoff?()p>ED4jdYnm2ea#sa_)--fT4p6u%m#)elPy8$jOOOk1z~%o}9HEg;#$Kv^)o zWlIRHi6`6w!aMOLZ822dxyF%UE$cG@sS&uHdP;UhR&Y%{LddjfO)_l6`a<_DI^orA z-NfHRg8w0=kq%?nrC2F=ejCRZ{>SKr{>ijxuybmrtlY%S@^ujc5~N(~UIKzerbHqf zo_>i3r^qZ;SLX!b2X{x-)dQO)>C&E_A1^Pru8UzMWAMsX7ns%b=uZ-)noyY_%X<(0 zYUX?d1r<$OJm4FdJD!BFqV^gR9(ySV033Br|CarlXwqT_+fSX(67xvY8xRA82m|GT zT|M27fEGx#N^XZX{P`H`o-iB*OM9FS3=$;es&rw$lCe4y?!Ie~;QRg09hGMFY!zsE z_itlh3kCWM8TJ?&A${jM6Jct?3>b9;{h9`ITBi;(UMat{DaEEm>I4qhZ>zzCSoCOX z0yL<SdM{2;NaT2b(Gsnx0oAjj!$W85@%p#&5hH9Gvf8IV#z9@yVs~?er>o|@ng|7) z^|2ya%wQ`QZ%f|yKkc%tUGchf(xtlv0;WR2Wf&oWK&4_VR`e}6#(~fWLRW|EQtCTY zQB?KSCE^TH!>+~s=qD&$E}yf9R1N!co^cF#9^3o~ADX@2ol(ElusLqP1xB(*<tSO( z!D4^sIb;dxuI2UU+4y1ZxEkDk@p0*|p7``#adu9>C{pgr2u*5ZEMM{MxjqwQ#)Fv< zZ8jp^8CZE{!=0v^%-zV&Q|(3Tx8-IPI?Bzd^@EnDTwpr;gA%`A)<l%<VRpTGuL}88 zpW|bP^7kX`PHOpHWa639v^MMu*JHbYsEV}(WyNA_ix;Nc$VvI9JDD2vfS9~l2nSXA z{s<87@5;pG4XUzU?@)dM6G>Qetct06sYu_zPde@I5U(@yi_A9at-noJ+K^>JfT?GE zs{y)|#<&K{sQFlGyof0!)3YcxBg(;uUi%8i3x7J0Aynu4GnA`8cqQJ;yb4KIjY*8J zj*BW+*Q(~jj%bTHvb4_Qh8Jet=E(^`Pl)0NLBqN5vixl2FV5c^US5?&XKjyOE_Mti zN`pZ)A6;(3{3BZe@meqy+v&v3=m?AQvKyN|fh5NhPqu<3YvEsV_H5{hNG)&!Z5?zP z!W?|)p!V2?juOgKj*#3PF?+w@EgZZZ%ih~6$i6x<T8=UOGQWmj(?$ZD*&km5pL`nf z%!<0r``xji!ebSAA+WMt!jX7Ywp|L7NdxcETBf`TZH1t!>nl?1nM$EUdr0F0eO*<6 zmfvLejJf4~fWhyAuvAd})Wr?76iL22S~)&0%>LQ5(dWKDW<t_92dBMFbj8h8{FJk% zERDIwp?YE6owwXI#v;aQwsGlajUKAFfk`Pp0YjrD0^^6-Q!vD5X6)AjcNbZND-a6E z2kXf#CsMq^u1P0``$pFwEGO*ziXaW-^u-ywi)lAp6mr7S#C4Kl@bFF$9#@OYoqAW4 z5r|IRVuCfWeg0w9p*=xU5<DM?7+;XTTzuy~{SE1m(PqDwrw}B3|2%Kuq~%kmnAFC# z(aTme(V_vQCoLjI07aZ8J_0)6&JUfaKk%0=x%X#``)V22!i0rcXR+3(j}Vdyju16X z^H1r|My+KcbaL`%qofZLDciT5#Hz}a8`3&U!K&@eZ-jD8y`~{!WY<YEy#mQ2b63eb z$Z8t3&|GS+RdJNmg%riiqtGZqm!_?$ZEZS4A4!+&A;mw(_@gdFR478F%UjSyvEiKM z19uw&l~_KYJVJNuwA9Cw?J}kzp?s97qvbu6s5aj)y8MhKh%Ct`wsFZ}8nX1enFSrv zQ|3zfd-Yh$j0s?9kA1XM$@EYs-i;Lny-4?VS}r|WbD9GZI%rk`qNL%2Pc<C-g{b+L zpoA`Pa4O~~Q6NX>QLKzK)ko1iXq6V|kQf_Q#?#*w^1W26(c~7~7gPI2*)HbnIHXA? zE(KA<sg~9rTfbz7d0)-M+I2yEagN8rCL_fgxiB4F-hunL+G}`m58;Sw^-vR}f4h3# z&P}Bz;Mp%w`3@26@mgGF4x$s>ZwwyvYbJwcDa6g2?{rq;?AYf4n)x(BT(ryI(@LEl za>{u-!L<PjC}2<7=nLb;bKx%VRC+!57MpZu@WKUnb9qaK1Wbcn6qJvjWw4R)#*YcT zt_gTTKP&)#IljlK(yXfBXFDW?IqMc0m*I(S+x}?$9Qkd20t=Od+chwVNK(uQrt;<0 zy_eAZez*~S{j<*UQlaTbnN)T1^mm^DFJV&Ki-Ce^gaTjX2^Lu%wljBLcg;JbR}dTn zfb7SeB(##z-i-gxWg=rJ+jgCPu4mj!T3Cx+1J}(x?Ay+IAfT2_ch~m|ZV^2A8%(2_ zR$jR6Whl68L6ksj*aqYKFj0#@$i0s4IZ~bP{0nS68~v~^P<l3S?p)H&q>noG`2Nf@ z4h#WyX;=ckH@xUJ&U!!j8gtOs*xnbf3xyK@+64niB`&IeQIS6PXTgH5A?c5fo^u~q z1tWRu{rla24lJ^xVK2Y906Mm~Ck60Fi<XiQr$MTs_3Ra61X-_RhF6*z5X<7R^)Ssd z;<Sz7w{tyB9hc~>y@)!o80<+16Z<`dzQkj|gnI<@ZlytiP=}|yTSf&oUKaB)uObvJ zm`USxR%)(~>Y8Q!%tdBDM$^lK7=892a}EKHxNV(jlY-^K4HnFJg&2rbC^uzkdTQJE z%4Xyc%%3tbcf>3}@88LQ-S4|%yG#vmH3_%|saJUM8m37m#6IV*TGjS}cpaj{u}z3q zxQ`I>5%*__1jRhL`oGW;EB|VRu^nl)!|C*tENDF<*7la(-)O|=aSB>(H`97&G{%Ba z7a26y8G@Spyw;K#IjvkqVw32i#`KL|#*DJF)K#1H>)T-Ntm^lWKk^zCoE_a<MC)S! zAF8A^QW5oWEFkp7e&`h^J!}D1*##o7i5<4enXKnP()H6$w<Vme;YD9Rjo@bZzMRm% z$VGT{`_*A&WXWP!y~6<#T*ZO)V~bVBh#WN463qUDcffCQQC4tNxo&SY>`v~YKjW@d zlfXOSy9Sc&R;`_HXy9le3228untQ|Wo-v?5l~kV;c0zOpYkWL>aY25WB<6TBTdYmD zVhC!&qqhPy+pZ8CYjux8-ZdY)&g)yj>~clRLeG_1Wkso$S$9zF8Sk+BVCDi)ZMcb3 zTPd>=rl4u6CH0}svb&h{&yw>Gi+3yF_=d4DtMeu1iQEQ<0CTz*RJjP(wvgMwe1g>E zwhT*-I-y6tUx>DbZ4G|XdiacUHgKNVVMWg(Eqj5h=#5to?|R0Q)xQ9wL-Il|`K?SV zuRDP050mvmlZH6&(1ODm@NhM%9qosnUzZR!=j(%?4zQDG{t`~WjqjOg%xyW-pcNhA z1o{oFh+11%A=-d9WyK=0!K%zfLG6-ssP2j|U-|=MlJG1Y+QkWyZ^-Hk$aoMe?MN*N zu>-3zJksJPh-zrN72OGNI_tLgr`6Oa()u}fDIfm}I6%k0K5d1L3wVAdFW;uH6(FQ} z2F`@^5S`$41c1#<`_Sdv`DV>Q`Wx2SHR7Wf7c8^#zOWV5a=k0$E=+Yg0Ftm1<)UD4 z>#eGPw~Mu7=QqZ3wuJctxagNft3@v{Whq=X|LRdXpw74VG{7o$a#L!=VVhxhuaQ<^ z5`B|M-iTZgu{4>g#W#`v+^Ddr?c~!t6gn@dc|XI$H^Q}2cB{~~_*$>-L0$!t=h|tY zUwfE~&2zQC{=4t-G@vaw%QNQhzZXJ@PMDWC?(ODXuQ~3CLU@Zzw(EC3$>n*vWa*T@ z6$XWe3UPwLU7GaJ+tqkL=A9PrQG?e*J=3QpS~Th7R~qutBEBRG8XOJo+yP6Q2dLaB zS0XfGCsVf`qU<LY#P`4?JR5RP+gkMU=x#t>KmZG1<XO4Hzv#+oWEr1)4w!RWzOtbo zH+%_lh}(}N?dakDdl$QAMCtfm9S;`*NgnE=J|ii23l}YWC*bre;$V-k9WzA_5SSqQ zMSNXi-LwBTP`%PqU*>tUj#$f}0=!m3d@kMBc11X8e;J^Mq42W`bL#qhtDIS~n6gx> zY&w}9E$i*bJYt`F^j!7kOx<0N6;SOZZu{s<^mm*+%lKjoy0-8Kz^dG;bvYk6pAv$) za;kigih*8YRSif-;$!dj!qNj^&Spuym({psHc?ccO6OvBc-k!MCXXa$z1Xb(Hu)rO zBAq%X#2{PVWurze;dS3X0wf^eQ&I(5Td#(F^8^}eYa3tVT=^HG3{;r_H>Azi@}+OC zBXh*}YXH%WAqMIp9yK}I07bbadga;YT2Nd);mp44UXQ^vHP(ynnmJU<ET$R${dHN} zW{7Z{BA+h+7Xg8XH+%v)Vsg>17;F<?Aui$#TS?;auqWrl`F@P>x5wwN^C8r&w^%vz z=88*=fyqa_XUiStO%$=I{T;gypX@n$t2S*A!)(&5?XZn!sK?E$!HUF35m*R`(-1{) zR)19v5lyj@_{A`VA_R~$tera*&>cAxDC0h>DT15H?A*kkcvrUZgX5Z6LxC+TFN?V^ z)Sotv<tEr9iB(iK5ixAUNr)IET9Jc3^3Zmy0Ey>?1w!%_m=&&xsykYHrL%cQJ#gKh z5b;xuH%N{Ew`!463bpHpMc_|u;$aRCFO$NnhqmAJ-7!xky`$hIW-DNaAcV4V*)3Qn zRQqruL0y-f(Kj+eNfAw5swUZx?|gR7#yil)vdsKEa%BjUg{ZDd3+yNlsnoPrw(@U} zVY1c|WlzfW)ux~fw1r?0<Wh#>u0&<=cP09i0Oosz8ysU}QW)Yq6<<b{?wE5C`u@C* zt7^KzW7P?#Dk&zI9Vs*)Bk8Y-*G6_%ac==X9$-1QvMLxf7|C8m57l~-Se9pCB)Q*+ z0EG{X&o{1l`_ZM&2=Qo^64RZu7Cl|MnH{oeeCN1_fgTI(lCCQ)Iv|8<USv*Bq->(= z=`lUY6K?&zgRf~#&9(lhO;`Vj<>ZNa8-Kp&8BHRXPKGl!`NA2_pCa@yG-Yfd^&`&e z=)CQH7MUQ$nodW`2CG@|CE$Ldaqt0txk{zN0P2~Gq>A5b-+SdHu&+o7-3q8;KTYGV z4U`-uIVE|od2sS@x){sSgqJILJC_$-3?Bf2H_XrArO6F0u0}h#b!++Mpt_!-yysr{ zz5L8q7Xf%tGrxY=?p_jhiMX%<|138-s}5JD5uYoVkK{wi{~H}5>?_?l9GJfP;MYr2 zmkD;HH44jbsu{2q9oKThvUm)O6Rt=QNo=)<=<30ihBMn+K3BsJDAY9`(>M{cVbB`L zAgWMw@1HC$-imKi$^&c+5?arsU#LC|S^sCxob-9}x&(smCRlQ(;5=OZV*rWC(?7bm zZq4z5bu#G_AuyU7=A`i4$@FT|vRB1=Q2M?zK;~@~_+_T+TmV2fuaDv6w0#O80v=l5 z@LqCA75-U(59#cO{awSYZuATXNTcMN%<6{+-9EAs2_0J`Rdg1AnTst|mZ!Ns-8X_{ z2A6daa4gTRsN&=}dm6`lzV5FwX@12|@HX|4is9u{`V|o=YrzlQ<UW_*>}AnVGTYx3 zD-U4v%m}>s;_^T^C516dHaJ(fOFK0MXrxkin~N#!mBZ>`kEi!|D3Iq_HS4AvDdF|R zN2jSRh;b0<*stX~Ik9rzzgL!E8yf<zT<ZHJz5lw*>S32~;spR+AFA8Z*_c($eD>V) z!zU4Zbb2iDB84sbL3<m+99J4BKoq+m!(kQ7ER4`J85*pO#8vExFDEVZ2P(Q%X1$Ab zJwpsdTTQPnLg_+lTb=R8EhY^w5;D<XIOB&@~_{sSrb?z;Ectun1w{5XKA7GU50 zYls%qYnM7d=E)~6`F=&;^eD&tj`q1YbHm4&Vy)8Cr-#WDXg~z0tOW`W>=ccsXySeQ z5!+q~(wui&TfH*`sO4+7-snHFcrZZTRPFo@g4mD|yJxsE$Yz5aaZkxZ=}|gHLtu9Q zGzuir&W;*R3_jjJ1U!y-R8AUY>Fn~EjbYCvk9a*NHu_+PLwwx-kF12A^-d70ec0i? z!msh$vRpk=*}`87Q$!YWrQ$BPN(0y!yhN7gxWcx3L9c7~?j8UE1c3ZoQ5(Qr9X#2~ zsyy))UoZJ-Y&nww`^_(Bi38{p{M5dVtZj_dG0#vCT2PC!h|RVlEw9TE&aXJIw#3ZA z5bg{Q8brd-j_^pF{Hq_`b0a8glCz`V^r7>f2l5G6SnAMq-jW%SIFW$n{@Tc~-{Eki zr>rQ2;*duP5ZNPiSFN>hxxA)u{QR01$yr{^1t{^fvu(z*&!q{=dWpDR9$k?_VV78_ zy0i-Mx)Me1X<TM>7fs=vf0g?VGIqfcmX~La550RNS$xKqu8Uti?gO@${$3imux}E* z(7C$6B>Vrrl^)R1dDjjyGF7N7QA+C8q3pQ~R*B!G?o(Po-?19GT_zQF%tH$FEjH@y zpltwfF4hsa+>QnyK7rr^oA%L&170r;qhsuxk`3X(Lfbu&fhCK)J3LSlWy~ERGqkLN zHOzF!k$gvF`8x&LF=ACAO;Iss@K%7GKOm3c?BY}*E@K;|kNk^Ld(WMHn*Gq>-vtEe zu_nA?(4emlg)v`PVnxK&Cj3(5a{;0KH6h6C;Q%VQb0>&fc}A1YtcB%%$X9Lx@qAU; zYyljn6*6N*T8B(pOdO$-CL2J4Z&u#iMBgC%XI)u_A$lXhfEuu2L1N$F37O&Wg&(%_ z3peAEKn?SYc1)1g*v?|Qe4!+DNwk^CB*a6U^)u^rP=>on%OCli0tt2|i>ju0zhJ^W z0^Mh4n=p`M^}?woX&qUdjcqIV$k6(+yL}pPNMBfW%yBOzb^mbYJ{>OphC3`?BHshf zwO*VVIh%Qc@TiZMiNd#LhBr(e5YBJYWvX>#<j$xrx`U+WRKG-k?ETOtZNk5^#zXzp zY=T^E7aS}mINwH`^omkdcy&v;OQkEDdS1N_@$(@pVL5M6Hw(kdvG=3xNaR(gPuz3W zt2zhphalsfYU{0=FS1gHJIy~k`Qt=`!7FaHOw8R?%Ico4^K)3`h=)Y!593IrPd)CX z4;JTrrQ1Il=@1SHZBAl%lw8~-YI-CcnOH2$SW=D@Ea>@Fnh3!_xV1~0DbbrXRWw~! zvwUl(&jOE-Y<d{0&cty~UZ7tqjuSQn^!vIvu{7Izt2hrwDbS+xM3Rn{ffv=D>eyzn zJhf(8a}Y%|4?Xyr{&N(_1zl09Os|M$VXdD7dMF~QyEL>9B}^(EvjVmdFU$VP0L#e- z%kl)t;DptwhQ62*RoWu&_xRYgw0Y}u!U1F#UuHpYoD(jl)9y5>bZ3AWu*0`1hvq== zY*=3U=}g%SWL!72?kh(If$RopoxWExI?sF~#Oh_H<kgEVM{4=9GulzqA#XQ)o;2Lq zAD)Da46JvBdJE!*lKf<)4YX$o?e90NqQ!ossEqGjS*`+u)t}nh6+xw?4~Vj}^(7Mo zXzr+T>2)=cfjT1TNn4BG4cO!u7+ya=MnLIQ`O+~dLQ}`dR9qH!p}MCOO+|S`6hmVr z_?-WRe4Go<BWpiO+*SQdZS0o=WCwH7VUHLt1+f_zx*w1I<ntur0MsUz7NCZIvevH@ zQRzUssn*vQOYqS)6yIDrrO@x-71dA9&BC1BICcS77V>Oh)2(vT{&5gzCWJyL4S8e( zhc!=gf41en<zyxgr3p-aAIPM6f9Mny9_5q_jbB^t-Po3GypHzL6`NRCEx4W4RCSXz z=9(L^KxuFxNk%r?JO~Fre`K@WJdm%H;RrvU!%*ii8>W@q#2=T9b^*`Vbd`&&y%d)1 ztwxmCI#JJCc0Dew%%~1`YHnfO3>r;I3RRPNK)HBIBa*1)CKL9+AhD1TCb~K&_xv2d zf{afm<itq5&XxuyE_ZNRmYQrx|K!Y<g?3ht2_phd7k5lYvIbOhi(|;m+{Z~d-Y7u> z5r^HW5st^}2aA2p&L?u=mKE;<Jns&(1J!hy%EXu_HnMUP$;u}Y`@b2c@h0m^pgmhc zHoNr<FY@oI#OH1-$4$o&sj!+rZ2$jzx?pM*5YwXKJBa9wlSex;<rgcQ0^UGM3jhI+ z7NW_mCy=ZM)+qek>*H_9fL;2@dx#j_)lVSlNUO*7yXhG&tSUEcYMBCU5L6*~0x4;R zM7UHcVC88cR;Yx<#&V=cKVI)#W?U=HHe7h;+{X=aN0Y>XB-4qVUkLgc(tfppr_8^Q zR<|7((OCR%1L-s!C7(PC3Lma`wVJCZPf>~h0~k5*Ys^IDe@hRFXe;(N>Am%@)Zje` z?9Z^%OB#3gaezB^Y+ecGG=>s|iL^UWGm`>#U7Q5{kuDqSv0)j<!W&yRsS}Cwkx*q3 zqVksd#nk=-e5EAPZv)@St}AcuCRsIdnJvd&iZ(-`_lyYX0^$o#W(}iElao44Q~TEI zq}0_Znmnos{>}n5?1KP(#vVGEA}tDsdywUTfYEl4Cr~___<Z7l$s??<9ey(b&<YDm zf8Cv*c#IF1USIsSf**dvk4z%}*)m^Vu&O6!w}uS)Yf1^>&0yOxR{2`9yOm3`m)65I z&)Kb(kLy6~NdNB8wnEjN=;$xGLocG8ETo8tHo%+1J6n@P@?k*Y?+_zz*&yFqYLoo` zk8M@qimD(zIzIy;6EH-O+4?ZfAa=;=kXMI8QAl*=>+9dF7$!J-UC)=FZvtta!-}Wh zow}SVjQ9XF%!h9gLTwLbsy^(YCYN=R%8~`pRUqh)-YXW42S<2XPPg}@?g&pF&Ddlq z=&4kw{y?fQ0o-kOZQf?)483c^+8YIuo~Slxbgmkz(O;=bcVQ0_lJFwu_P>ZcG;(`$ zW!zL)t6Opz7On=!h0aH|73_W+lrTLnUbRL+Y-dK8!DUW$E4BkhE>nf=QE8V1*dlmv z0W;$;WJK`;hZ`UO%N<xzuw;|q{;?=P0gf>UZ1o)E<u1hM<Nmin<{jcSMN@HP@46is zl>PRS_+KX7ZL3|97jrUACFx*0@ekGL9Dg0adb>oRyAIlw_2nYp11`?}Kf#@yr?9}C z^iu@>#Qq2KM>P8piKFx!<)9acf5cR|M%Y#`Z*}$XBEWqJuPwj(bWc}r6bU5lnD!+_ zIrV{JQAT&>dLI4$#~u$m3K>=)k%!C+e`;cqhN&aml!`lVP~5R(k=cOj8tzU~EV6Zz z%GxDz65Dp9sQ~d9u?T;53%9&!U1Q{^PL*h1!mh(jFXRVQcr9_zB|3^gTpVKMO(n|2 zX8*;h+%O9yao!YQk0lv!5U2jX(bA^_oAC7xlhNgw$@aN{cL-yjtCD`C`W#+kUh`MI zFG6tyP6^8pI#7<@<Lcg@K;SWnxvB$eJ6T$E2!iS28K+W`9+86PU|wZ>Ic|=0I?Fve z?hUZlfma?7+4X&&{hkC$Td`@8sF{e!@gCZU>+emc`ACb58TQ~`S2ki!2!l4<E_#Cd zSNg9Jdz0OIfp&F`Pu95<<0#)~m{qys&8Q#Hgvm6?6WmPA;}2j16|k0ed{w85Vlje^ zrbuH^CX&S|j0Z^#Eq%`GX^#b~P!t}`L2oeoy47l)0h;_+9}|*4SuVLR{2#8(g07Bb zBvL>MG<R$paoET3hOgTjStW`O-RrgwXN|mE&qtd6vsB|@^^0tP0<UwnUob#p?YCj1 z=Xa$j7<;E1@nI^78!m%mfNDtAy&rD85&{;nKKIoKXQ_n1HakG}b?W5QN0WP=Skge# z7>xY5ggqQ_crjcgP}VoG=-!=R5d;eY#^^gTiGle$wwc*sn3MLDHV0@Ixi}c|`!fwq z3VtvV@kn5f9~#~;UQQf6jVJP$v&n~U)EKVqfgjsI5Paa8E}0b&qxzZ!U@mjplqldC zXZZ-Jc=<qAaKgXTsgI!+`(v{VS?{DrOJky?-)$*C=0Gyv+H<BNoYvvjvdaz-sTU2g z+#^k1o`P5`k?veTF?MQLBDvJ|+yIhhMFCH~No*>Z>+bVY^0Dpmy@l5)ps$-EzZVZ^ z0&sv$eXz%?MJItY)6lMn^LDmemoxyaJis~37%A^FN4TZuO#4#R^;-F1Q?m!<a&b(y z;WmM#Zp9x}fZJUp{>;Lz{DT<<xIPu*nuo#mA=772qD$-DW(6q@_XDS;S8A3R2k5WG z@UG=<hZnNlEHQZMz_`L!{<r$`6)bXhd}S|~whM&1j?(Z&8!&px%BBBdKTNcXGhXIH zg-hW0!POjPusvD4b$#8x)vVIfWv4TU8Kc9+E~$okkV+fneW(q`)DEwvTSyv9xUXrC zS5zzQX}q##!E3udlu>!YUznDa7Ewz(xiNr*CJBSm<*$2gcr=75<ZdcI!~R|@?Cptv z)k=w4&bU`1PDD}u){u`C)*39HYH6t8Nb;`(+%+Opo!@===yZV*kvth0tTQ<|fW5=c ztSfmZrK(JeYt=20Kwh+}Q9>vUod^_z%FW4O7U>gp(0M1C&&s<)lu%TsY0<9zA~Qdb z`Gm@#kAy$Tcz8bE+Y#|*Az#8N`6J0>`BH>;$vFC6Y6|U1+D-s0A&@r53@>m!#gP=M z#MRRWB~rF2TENkx8wNfo%{itZ?T=T)Q4ua(`KwO&6bxF=53NGv51dZIT~K&Rqa?O{ zOxNu$1ZBf%<$;2{>0IzkHexEdg+r_o-p?~z#rlbi9azF$!d{yRcb-Uf5Q89@Nhr}6 zUA1n13uKTpLEE4!#L9%faelIa_+RU}G1mHvk_rDIR_bJTL)Xm=twuOq?vlnD^<+@l zUN97JeBS8tv>JQ^9Hy)ZQxfrnlv?ba1XnCgqHcT-@Gt!z-pG<b{rX3n4H#AG${OON zCE%=1(`CMD0hWm#Qe<dyzDKbF2y27~xzJ;E@rhhhtgY04P*hAID2rG8(JPoYnj@#A zR?_CTk}K;>2YGlgxj9wG42Ccyz|^aGje|KrFOEOjr~l3lA<#3wj5t)Sa&%Q=m>j}% z4lT}4u3&_7A;w*rhZkpw4<5rm(?6Nk=+;_<#fJ7y+0HP-qL!vM)FtHG^*=Izh$HWl zU(ASOj|<Ww=JlO0BYwz4qD>p{$qg+34u8=Rd-i2iKQ{yMQCY;)ID%sQA6AO^KzYXT zv&()PsHyO23z4;i%%u-#$0k44s)vfEo+AOUG0=e=H>GG`XOP}8Fi2S&f+d)W9Yi7R zAf9zJNEsVlW;h7a*eRu+8sNu$5Vb|CtDM}mASyx}t&$IE+Kj~}kAg-#QpC8$S2jT_ zhvX#LL4l#P*W@@gxQ$;tPUz>tWB!Aj)5yn>)z5$a$1Rz>qu8+y7)uxqMHy~TC*92g z!t?fmASdp=za~hYc|=^WLP!GW`OuQ0{aCUfspuiWA^U0TPR+KkzfUPC*P*4B+jZZ( zELQT6?!(xIl)?c9Bm#xlD}&jJ+dVsWi#5$Y<SzmuUQ7x^EpNT3yK3p41iVfZ1M80S zOIxqaTb{p-GbF-S;2br0x@|e)KBNx|ee6#d2i$Qs<{g5B(#FcWY!0M)KW`$e5J46? zZ9Ta3tMplrY{APi3@$ed;CT4=6pvhL?8orTYxYP&4eI-t|DX>|)+jVQ;Aw-L{whKR zni5?*g=;4Ie1c29oV#vDr02&)|1cMzP@M%isl!Lm=u6Gan1hfvPO9WL>uO>!{14Y` z^3*XPIk4U|@}AuQ=O~2}pV&T9^g#fYhj^-Ts*k)prAkmmMgTB8Zgyw6JVE`i$z)g$ z1Lsvz^QMU+=8{M_DR`U{R6xu-XevHsw9-pd%FanjQ1bKp4(T&&$%&#X?JI!s#=%j_ zz!a9j^wyu%rTv_dkNqK$$Gg5Hs}BhBWAzornW22IRO?z`VU5j6Yv4ehaeQ-7A?|P+ z2H)Jl;c5Qht6ZREBBb1AN;ZtttMeT>(<^ySJ%fYrybQ$(RVPnvlhk@%pYFMkfN5tw z{`vv4F37eob);=az)VY<L~#1H5$^f%eBibq@`p3xQN|A(sBu5iy<Q>4P6AEir3p)* zW<EDq-G+Sc;oVEpvs;hD3I1C(F)rNo-P%B;-|uDL5M<M{ZyYg=P(Q5Rgs(U5_8vN0 z6T^PKyX(xT1}WZib5%|6^P?u=VP+oW@H=ta3y?#wJEVz;&~U^_UO`RtYMhdC4e0!2 zugln&BTF?wdA9DLzm(JA2TzV3Vl=h*;?>GRPsX~#vraPI|M`Y}M%9#v^>g*RNW@mr z9$sInb)plR3*ut;o3fAXr7d(Qx3lzou;=onn;H2??uPW|BQ6r4-aMdckA8TUsMUq} zY|o%e`J90bU|~#*8PBOs$2Sh@7;f+Lg>4YtX=U?)_mhR`Kk@scuDdo>roMR1XQJ&J zy+Snse|=qXlnm#m{}V`g<O|f2i$bKQTor#aA~};tx@}kfgnzLsv*E#$Uo*7maMiop zvG8y2rSD2Ns6HxZRO@`#p_#;QxZ@PE1^e3=f411yO{=;`;74*>k12F&W)iVY5B>pE zF*%%>_yuiX5k98;Su;C@k;b%lYZL$9A$SZnI&!{jHG9KAyE>7n3-kRtV*Y5QRNm_Q zJX7O5OlwLdlT*&Fb+7>+s-^ae(<Y%RBhK5kJ6IA)#a!^T<fl37q7@p0@5?bQaGm~; ze9oxqBr`?FKYrbG^4@jRtzu!OPt~iel)eh1-Sk^f;=%}sYFa_6F8wf;Zp6#<-`pn? zk7MAz68fe^UPCmgnE#l9gMZjJ#k(b<=B(S?DmVX-odp*VeL+LZ%vS)jO<@X44eCQZ zNAH?x!J*7usz!tR&>8IZy}5?VrkA*E{7{_+nd55%d`l-41uaL?Vvp`9T5{&pDtAuK zJ!mi3FLqlX?2Y;$JJUukHWR%Ou=&oO!p%pSWPEk<c;|BuVatZEk!V%u(aoPkgM4e2 z{#y<Z$0Aj@(tn=L!`JjFksoMltY1uJ{oh!syysljPlCNSIqu^2-3H}Oy=M2?)0e=V zX=(w@Eb*x6p#`B4>Tgx{w~T=e(>(*r@A1@_JhNvg3Il6yv%@x1$%pA;!<l1#VgBr2 z-ayWU-6jTr$N$snp|c04x)=P5;_wD9<`E5U`Fd0pl-&BI7<NjA$Fv5!g<apRRJIa+ zTox1{K&5RTsGQP#-{5HnMt)=cU%1tXBE2K=YpWoCUCeHDw|uH}p;P5|`3xVF)2v^R z^0BvZ*x8G)8!Teng>bZ@ez-kRp-&wDti0E#fvfKFzNlJJo?n`65?$jhy*hsD3D+OI z_pfViy}4Q$Z^YUU&oT`J&livb>oVe7Dhj>^4t$-=o8y^Mg%b}z9tqwB#$^f+5AXm0 z000000009h=fD6b04k0R)9#&8UH~>6nKk;)bkWhSIg|+yPtO*<^_g(&tFNXuI>wu1 z+w06OD*pr8MGKuu%#|lB?Ei`zXyI--Im0=@ccxg3M$hOe@H&AS2y-5Zy@2#s`0#jZ zhc#d;P}=xucCshDE|pPFgdFp#Q4_kKJ)Y6oRE0mXP5&|3R#f-}E#oVgoIzsAf7%9Q zn>Ic20oUhN!^Hm7S#*>_{9C76A&y^DK+Wb4fRoqEU+YsfiZ|}E1-Zr;EA!Vd{rZ+S zM3dLh8(I`eKY?i_lfHfjOr;!zC=mk9yN~NUllL(z;0x1>-QJj`Dw&;PIJ)Sj_$FXT zleM%roX_TGgQm>yc{ub(K!{W&e;w=<5^2!DW<_{A)XA(U&}8mhnU%)fLT(1I0b}W) z0000000002K~0N5Cn=uX%RwpZ2zBm*MSAP5+up@{fB*mhG`Frwud0$B4ya%!o}Prs zH29q))o%hR-~jL10RAf9JeHXM8E$2YfcUlzuKhfpp#&ablb2gp@y3f*Py6sl0r%J9 zFFq=U&@tYkRL-IR@2&d6maJk$mv=w9{7icH#t%60z)%$OJ^}yJmd)7}4$K3pY4Nve zx*<^~*W%wU9S{#uY93ylUmKB&ZO^Z;;|Dj}faYv;-7028F<&+Wf(wgd48??+ddVoH zp(mSwkmICrBMA*DnSRreziJPV$_ramRC?f%cN}IS=hI{Q32xiNr~)~|KhsJsajV~Z zM8vc4S;-s4-eJmYaaT5e$R{O(T<F1at&X%4ta|H$TzO=r{*4GATg0vh(J<21IqDkV zl`Ae<V%yv_?|oHNL-{aJlJY=vt+X$N)~ga-$%8kMYZD7x@<|Umei?Y>Be(;!(^MZd zc)yO+O^d5CzXIVQxQiezaQVy{5e=uZ`Iwn9XhlT#5zFLHz!>65mig(&l40vGtWFnm zQRrvIoo-bCT58Mi3fH%~=}0qsQ&)DK*%NQHr7b!f!Oyl3iOmBeQlUEVqGz}oLM2u} zJCCs$VStb*aVoxMf;E#{(PIU3GQ6eCK{|Ir{YS&x$|O_#3L$>&V-^^oQ7L6=g<Eks zVCqM5kT+3p6tq9A=j^%OLeRJlwg^Uun8u*CD^jUK^^U2ZgRkO2in#mND?cvw_gS#* z&R5e9-~DuEpU(8VZ{!`fu3|mvZ@@H}7i1P%LYZb-p95(ZdWQl!>JxlSaB5Jl?~Ix5 zHfsw*(VwSNHR&}63Yg)j6<#!<`1Zn_j10&YPx`du)TG~M#gG`szDK5tvcyRTiF2Rh zL8WdeG6mnC&3c(s8y(08Y0n6|NvqzIR4Xgsj4IB}>9KfqS+%F#?qlJ%&p-kB$4Om* zafY(tiwMF`Wf<a*Ts-$^I8*g$IE^CqOV@J{lPZ>qCZw%i)>LBUE#kJz(Q>Eym$;p! z0)oP#UC2BLye!V?dKKG16UfevizO}5w!=uGU^92UW~IE86fu{HExTX{p3U!v$aFR> zkxU)ofGPnIhrPKfocA&#fpSc-h(7mS^qDZe&EoAmOj;J_rHS4?Z*s%IKZ0v%%p$#Q z5a7C#)`_I;WzKmng$^vU(8kX>!)jAUoAoNoh--9A!kWqo?cd(MDaP+qE1g|U<#Sa~ zJj&74*lJ@5+z$X0>gu&%=j+bneLG#6*C_b4H%@eWJTTpOSf5A_&gHhy=7n-0BOn`X zV_Fp*U6G}UPqJ(qe^bpGxfjUQIY?3J?%G=#s-hg~3-YVUTW9f|{wa3nW}#SIQ{l#l z9|-}}p1R^nF5#^5^<<D>ZgG1tsb8{|0yPHY-g(-9qB&28QY)sOJlt`5J-b>CTo^nK zi=qC@k~MvdFbvOq{D8-rUJpe56FSU$Y~8v3CW`JQT-L2x57txNot)-GQK|ei<X71j zZE_Qs+t<D-tyhEwi)glsT^VHq{<nBP7+AQ?V$gjHrnqBNgNlwJ#x3Gu{|X@+(=eP7 zQAy3b(76)qzKT}y<qw2RAZum((F=xDwsERr{n_}oOiTS!MT9Cxa_s>zb#by4Z+n@l zR_4gZe9-COFQ%vIqsDRnotmxDny7W8gNB}tV%wq4zXpYXJ`-<RG5Xe|kc(Nn_<spo zwz2{(?VcYi^UXx(VnZ%YLp9n`J5Ycj?4^{1cd9HCMp2kA0_w&lLi9o~xrn|Q=LMc4 zU3V=?lahkawY*v1>fk}>C_DytA_fmrn~Bk3WXSXnIYvJ{<;})x=C++=ggz*=Kh|t} zcx``43n#3^i@eFUTmnp>0IXTy_j+N`ItXJ@cIP`>4ibRvlI}O*L;`})eCsUk`o=Ay zRALNA2R9+QYR-9{ze&TZl7DASEw(Eky}$L+RHUWZl+H|T=~ggHYnaoEyGQJ?3Xmdf zl7_xyvz-PZuBgm^ymr-R<>8eoJXla9re)Q~`(chT9J{nd_8^6@?igHLAtDcxgK|43 zH9KhdjGnUsw{}Y@s)YMs&|s#CW4alQ7Fj}-8+5?ea_atLF5$;yme^eNEa)35{QrT! zjzR8wL+fpS;@{do9DMt!{S9^m$A#H22R<BBb-|XQ*O4p{bEKmF%?h2Uf;ujd&Ce(H z=Frms&|p|<+3^-C0<t-?vyb(7x5(=g<^SCf1YaF0Rpj$+t!EVgJy;th{fvdU{p*!= z+&RU766anZ!KsIC*>5&EIzi*u_rO*Jwe?<^sv5jM5{h~jdE4Z({I2wZZvEDvAJbTH zxPbcGU?h`6FCW9ju>rMI+}hpXgYD(<J+I}T?yx_rb($-qQe(%CI-6noR|iaDw<NL0 z6+W0nKKjG5s1Eaf=^9&}9LkKRx#&^`!-SGHr>O9c;j>gw<bSTMaW@;VZ?2Pry0sg9 z5>YKQDtZx!7hbI;d<)lGD<{j{TaS*MPlyqNH|&bRJh%*XR*V>%e!bw_yRUq`-UGfz zV5S^uN37i%{ib1MI=s5|j3YBDS%}$er5wyICKftk|8BQ?{$%+Y`h?J;@~^8irqFow z&`yha1Wicaeeeopo$YVf;J2~v1Odl$q~;92eC~6Qn%Oa%&J>h4;&^_*?0Rid1X}17 zj+lycQ|FGBuG?vrj?nejL|l8%pzcLPTo1_b0sFrG&`p;L`1gXv;H}p9f0Xld#Lm`$ zA_^^nn|kBsaa#h6&+H(1oUvRK0dtEm?>1Qng892bc-_smtbP4SU5Zqsg@%Fb)0`4G z%Ypd4wsyCgumtOQX}?zsII3h=%8NeOb*MCwDKJHrsf#hEXrM>d%7cctaAiP|xbU$2 zRj~f_J5F&D)3)%13dx341E-(T0xe7T(MUgt6P7bavE#=;0Aad-j^%WtT;_oHtUKUN z6)rWQ7L}sGH?(vUGaE$NNa&l2drRg>Xtd`t<SKZpn*d-s|9k<$@qP)IeVav%Cc9Gb zpwuKs>uP*Gz0RAhT5DRU9ZX!IDP{C+EqDc=AcWqcqGkenTE2ip>aF*khv#KD{LHnS zoKHR;I~6+bj0)x2P&~`f2N(Q=2a>}E>bKEE3}<$Kh4zg$PDHlpcga12Voc%{+g{~4 zyyJSAec<W99G%K)QkeksJ|%9SwTd)IdqOdXL^D-?hb=#E-S{fu@F-_21ZSXfTh@8@ zGt$cwx58l4fe_rCM9_87HSA&RI8}URrjF48Sf{0Qf^`H;YzvMyvvUln&=m{$pA%Rf zYa4Oky9c8O5lcN~_eS4d-|c{Ex3VPL?8pw?ApUw{Se17t?EsgS(pQ#>in0sl=OaQ) z%%jwtby}$FpvZ&PZ{Z|f^m?9ej&6%rJsnZP)5G-ZoqzyLkD5eoSpSCVrB!czU}X8l zEiKTD9Qr40-|)%oidiUEK)TGM4<mQhiFk{ydttZVm{(-&(#aK}9y(jc8Hf@(T*A4j zfFBUF+s~1RWbfSko&bm1b~ceq9_X%OClQRM0>)IZxGB*tYVW=vD+K#<{4y`T`Q0UW z`twvk$7EN|KIyR8Y*R=${#rd-fOt<R!VMc#fFUveB@xN99d^H+u7du|gEcOLZldu6 zYV~|uIZqFPndJsws33-w8C9rUG8zGkQumoFFhh-cvcU7FA9`8W#R1(s@FbS1V32H^ z%Uy@su8aBVZB;#p;DN#`&}=|?mZnxVhmTotoZdbW&ywqZhJis%_Y@K8Vu=b^&P=&G zybzMxMIujM!lY`Ck9nnWv`p-%mpT6=PaRVo<)tHab9hBdbG;98(Jbu#yY^BIzn9ue zd_TVM_P=wJd<ym_=#+jEC`Y7A;>|h`wc7vvm<vv4Y#eI|T4RTyK9-1tQi6#Omf<`G zkHghANeNdZ-f{9Q5I-0O_2qBy46!Pa6Q^-nI^CN&>=Q}a1$Kcflg_9m$Y$WL5s)>b z5@XUC5UGwI0&h!Qxv&~hy*oF6mYl7F=>Hl#Ht|H%?yEaNZ~mX6zwE$T5##)a-#=4t zI9V}9)&L*;y8sIbPWdG*+?TkA@^O+-Mib^F&XSJz!sK(e*jlZe@u_f^EU4hHnS+I! zz0~zjX9IbTev!fM#2t|4MKO4mYsBGH53i~?VmfO>u7}eL*2R)&SjLC7yQv|iZ1jx* z{=DzxGG@fpWPzAhMe%OvstVhNairl;aIwxrSIV|Fo2@ZaI*BcwOT4|Q4B`Po!P@R7 z&!2zP?2b>u;KQ<ErZ9o{kKt~>?#mv$uMkU^dYQ~BAhggPjnJt?sEi(sk9WT@tWa!5 zyKiBB2CEa<KXwSBEf?d}yq!O8@X)D~xFC|EPEtz-fks)R>O9B2?_CqAN^}nevuxK0 zd@*51*sjE=>>;F;5A5&P|DdRz%n<ZF3n7@-q(fecZG?|fb46+&M@dw*F?gwmPXI<( zz|xm|{n7$nUgq`iOl=u{SSRv3ADNdqL55wVU<f&f1jIl?TP5E%mhs5ai9$`^(>Bf{ z2}MR9I6|S)+yP9n?4|5i9BVlVn*VPyvAUHro>H;6{L9a847o%z%(w%SS#ZZfh~9ct zhD?Z?vSUz>3~5O<<yy3l0H`bGJ?@&?BQ43n_>(C!W*nwev#i}@qm}Xnz|ae5=y3Ld z7BUq^J+MVHr6u(s$M_8jT@9(@@dGu{*@7pzrn%hmaEZ@;c~6^meL!T3)pOxfWx_QG z5#zdj!2-kHJn7M2;YJj+r|8B1&&caLrfPpgV~%$tp%^NS7|re53l^`<*z9;51?>wT zT8oN}S$d#!un;J970cfGr3KYaTtfi<v~Ls@!b}q`mjZjaSv)Oi!afDV^z0o5+ll~f z)6GvGEr;igOI(F7W+{YZv8<-z9YYc2r@^dkR}trjeCNZEPuB82IFw+t?Gb;&=@-0x zd@aB#IQMJSuG!&XW6&A09KlpDKJu>gkNx=u2Y@}(`tkZ!MQ1ppS%|TMgX^9YcJ?Hi z2^)5J69d@Bi{jbnTaKMGTsFFDJJ8ZH`dhv*%DyIvYih?aax&^r#KY=$Kw_4?^2D8& z!2hBP3a~l(h!HwNKK4tAdx>Bs??hFF3Ce<c7it!x7PZ>bh+^iKz4uY>+6*SFQR0KD zDen*eLz?bqh<JbOQ4)c>n%9S>EDC~lwz775QC7)k!)c(M-0uoP$XM6;DHNW#4PxDz z%4q(%KupTG{}3cn`rfC#hS<VdL*qdP5lFi{RXtt+izJdc<vHr*KX7H}K@fb1k~KdR zBLd+H)&751pEad_w&P!cM%}mO#bRIE9H=WJX)xrSTnq2&pxgKIY}?I5=r`K%vF*&T zu#^Q6_f=MBa9W$mtgnhLJoMes$T0%&^8HGUmcx!_f{=gwI_zjnoXb=T>It|Mi##1T zbmMwWW5W7rhD2-AhK({@%uVxOxncBGYO%uThiO}8FDhJ6)kH=Lrz#=Rkxm&%a4D2~ zHI##mWO6}3R#fnt*Qc4D#xiZ!%4O(6<v&&v@p24X9qowcEqj&SLg-#TtG2%d4k9;h z&TAK0>Y1IzgZvV6F(FeMbVKn&Z=m%3Q<l1vB;emx*>+T&C^?IK?_o(uY>F$-R=J(S zlY#coVdJe>`Csghb(SO@h@olosPjUuQqUKjusANOjOlUpJj+6%6%kAyt?3JEk9C;w zIsYhT7^Q~^Kqax8g~kZP6E<P|G=J@R^JMesT`jENfq<YC7<?<M4-c|BOa7SuX0dH+ zj#~NBJaRq@p$fQo|M|QWXj^=v{6qaq{*YZH9B{DuW(@zUALZ{_134Cc$J_iH5Egh} zk}w|_Cw3PBH-()QJl$?09BoUqU8crEJPrTS{R0}Z2Zr55auchh5iqDu86<8PM0P1- z+vAWGbCoIhEh-xM8dSHSdD1s-xyv!dLiq>ea4ikw6CbHCF~hje3L9E#SN~`9lvB<0 z>0d{DcKT)IF^rn%;sXWlxgt0#D^B^QeY7xnfhP}n{}RlIOY-bqI>pK^jWyaX(+m!t zZFN{dBmff&)OM2lTy>IcnV`i7o!#;mI0t6!?i>FS$$e044kcKeZQh)KzR7ej>bMw| z2?JLqX-+)#3L7@Cgk0ui543dcK<$7+cH1GL2#g1Du6;Cd;hl0NunwX!w#dkB3?1-3 zvP#aH{oOzTl^Fx)>8VXVT3GUEY~TP&V!0JOrhu+G<fMs~&t)MQgyt~dudRzPH1Zj9 zT|WQTy7(`b9H8k-g$$UO`&f-F*N;2*ob>?RE^4qB0Wd_O6Z3)1qPL0L7fb3dgZ>N* z^_7PtwL67H&@MqKT$pe{<zE77NUuE)vj89SJ`GdVNG3a(9XC5^SYRozyfzZ*orja0 z!lt7S*MqIv04{!4H7L0~<cM86klDwGy>8o8Mw6;VNE!`{pi#d+fj%vX>TPv4sUx77 z{vh|+7;s-yF6b&CHj_xamfLbBI{9dajV!T4Bo9gD?fKwboJ|^C-+W<oN+$z<C5W8v z((zwZaMgLX)1xnUH0E`hUb;%8iCI!nsvI@K*UakY0yvNTIBRYc=hk|;qr$j34;AjR zK))Pe)ba|l>?VzhsRd^KN*CFxspZIT|AY|7wd#xb>>1gK*`izC3{<vESqy&*UMvqK z4}|h<)~woxQ<rPXJAaFGG=<T<skC&Uwr9)zvS2c6k154SRQ#?T%w9%#*{G4At}@5L zhW4v+VD%gjet~Ab>ybu{hH|cYAz;O-MX2;SRBlC#`o`oz1MHJ)@uXu!5{rg=pljOM za(0E`eCw7=kMr145*KUUSu47CFAqpU>`}m~&xDIU{>tiz%YKUae^}s*3XJq<j2G*l zGDU_n?nQ1HT#yOt8y>>_xevrIfxA?pAFfGemxYUiHU$+2>?Wt*DQ6^E3!~2(6kZJE zPp$%J#kE6@Rt$Pa9!$r^(>tL0I?jMXnrtQuM2#EE_ZY9uf%kk|HeBL{xLFi<AIA@r z5uY0$Prt1+!p&{wZAu0$ZRK`&A@QS}dLi+V7|*0ekDgY@4l{m)+54FU_Mm)~b9Nbj z8FQp_UjPU2B3Q=}BpufOCh=|`<b)+veospXG}Y*i+fpP3xT7S09^zL!ikW_pmTq_d zSVa|sU=J5FbCAAoCAhiqlE9u2T+jb$Y(md+Q{l{?-$Q>-!jc$xNg<vgqkqmY&BeC@ zx2q&Qtw7kI?8DCn%~H`4^Go6sbn|qxV)N7&^s!%}7!5#3Em?SMd;|0{4lh?x;C{b| zBGJ$ooTDT=a%;<PsQ&oKN4H$_NV@}P=%ZnDd5%{)6-=AIMe<D+xWhY}?FvEz!!7ME z`V8PH1J7`-4N@6xs*frm_*v@Mu#>4smz4^SofoZ#ruXVrucgvZi{a9^%%`<}tK~z& z7jYQJ6rF%@hrv{OEn`wdHRegnai99_8Lxt>62e}gd*=G9M*=2h?OG+_KFso{zJhS? zl_*9$-+iIGNI6F|amev>l56o6;&uE^+EcJM?Wx-Zh-EK9Z~Y6mY6oVEzx{=%6;}g( z3PYQEpCh4YssN<AXvXn6zmvXxgoVC6InSjP%EiJ<_XSn()F5}RAvb3w9Bre|`e(=X z%kQjlD^>talfN4+l_X?tJ&J76P(}_t5aJg36LRm}sN<WbV%%8e!%myJ5S%k2j460I zS%~cbWA0l7kYz|?(>JjRTipy~PG%f>rxJOQGKhu5X+F0?&$bc?MTE5c<!IY0w3S-G zrGAo<75@Z*bFCnxs-&5Zh~>}R1|Q4a;6&QBhwx*Bd)7=3{sMb9IP5ku$NF3_e3V;= zw-6)FAu)-U|Hs%UUV26x{5|u2F3PhR+3xgM6^oJgu0Eh0fF9syKH|r>pF#eg*0oVe zxjW_eq7So9=2{8q#d}JebpGTV;|f7{dgJ}}e7)m;K<@tnYcb8IKZW|JRZIYWPe)WJ zMTcG=rmMG@?7D`?-y`_%G00YNI|0Xv*sMo&s>FwhEJgPQ$%a^lQj7A7Cb?Ql8fGdJ zmz%zt4<7Ap{GvJ+F-Rla0qaX4w^Kh8m@1~MZE-^YxElCP#jDu^Hp(o_n8%<M^l_g6 zw=^wI8qu`;-+dsEKTY1IL!!*kj?ek4h<0=~f(Ta_5bHLp`)V06bjX|1!R}|F4r5M= znnwcvcA<wfT19t_QfKrhA%$#`KhG@j>F<}9!8BbJMr-S{Q-W*-LD~hFdkb)h^Ybaj zHh@#TXiy-mpT}{}&4F&Iu`j@nMv98}HDRrGp#0<`oo@TPwc$3V;CyhJQCsMS=l`c2 ziz+H!d1dJX#~Wg=K}%v@(IejUeNVdGH|CY9s$*N%`+xy4m#>`46+@9`Hi?-{XYTD; zjv;8pJmtBie*UF&1s*EB?5;KX7BSKJPun`-Sd-hq?03@L-Y<P#fgV;Ki0^GF4Dos4 zHT8OZ#KX$wBExwE)hwIGWk%Gr<9Cf4&f_N)$a)`FRSdh$i334pbX$`!sp1SW83^;& z>CSxSgvXo%*=F_FENoq;u__DED@DQQnR%gYwwpa!Cqg@MMmVRU&(D;GXCoX@H7nal z-sdO&*W*b|q1s)ivBifUIJnK;cK{dN=f^HK$Yu<v>a(FDEd4GB%~iC!>!gOA%;6<n z*NU1pS$X3Wb$|v=B#XVEq>JH<qok5Emon`2oAu}qX9Ria0*JBK)$7^00)=217$_*1 z_EafzWQheZ&}(<zeSqRn&NuQi+I<JycXhn1$=bwmEW@nT56_F0FlIX1ThkB{(H)m{ zZ~ObqB|n8X-k0Ta91(eq*x}ULkyFB0f_Hy#!mu~>1-s1Dk+!nnp^ZqlyJ9hpbszR( z@=H+MkK|{MYX2mF=F{)k%jBbB$#y~D!A0o{jZ%AuSsSAp$Ck8#Cq^+OZ6ctC)_~-1 z7Gs0<ZbP&+lDPM)b|}5#n=CT`Rxs`cbPhL6tJcU_`$wJ?Tb-Z&Oh;{+fn7e%WmYrq z|8$I#hHum(8FY$mkBfx&?qM*>qY6J!$K#q*d<6+UGdQ{%{#9KSep&6v9sH=0F<8#z z;Y7Ihu=}<h>4{0CP*64p%fT7QI2O{4OccmLzzfP@_n1pr*C^tsJh_{GwFp93YQhDO z;+;fePClgHma1s4c#L`&Q;q2i`)rPHqQy8&Xf)*WAhhae$0;{R?sv~AfKS(PI%3&v zx`nsM^d1`#DC5@~SVEH8U}Na{O-%wc+f`*^e=}V36=vY-niAo$6}&~pdk@A5-vuza zDE{H>1w#b8w$9l3xq$nrurya&=|CrK%@Cc}cd-|LyJN##|I-o!BGNZhSfX_On$3M~ zOD3%>gW3RxtGTCBtv4-Cge~|9-+Dg$wXE=()$*DRe50HAb_~{RD5#bGJ<)zy)(jVb zrNA_U;-xo+^k@EC0=4t2&cRszDqy4#3&+*5_W?HCxW)A)t!iPP?b)oFE?15Fe51Gg z(!apGLUq9qln0`ipou~OIKvT`5|=p&vGR6{UV1@>Y-RB~gs3wO;MBLka#ABssqrkx zEplOQ*Z#d4YiUw7s!nsubhah6<S{}aB>yZtk2M-HhMl~*v46D0B@aRoxu_UDNv(es zdQpC*e`ZZ*10(a)r+U7KDawoZYsKh89AIce>=bNQ?R!r+fxpgGp8s40;Wl2p90it? z&4dx;2e6Z~@AoGtwCPrzo-UGSF_nu+?x+YlRynOB2dJD_w!k-0I9YA7%6U1Zr46vv z+NQ-d0;LIzLtP`EQs(G@EZ0M22vE$fQXV)PZx=z0(V_3PO^?q<eZ3O+>-r$9nwO?p zQ^_&aI^MfD;U?6yp>qNQC8pWP8;k4Q$!*37GHHp(Uw5Y;?%RH{Y!KytViaLQUY5Iw zm1x4N!5_)aTLn(i0Si@PM(hSCaK4x)oK7*b;LeNMk#`+edOnNjGM>WT{mer!>-J4D z@raGR7&X+=m&Bx#<$oXuUCK#804O!)Kvn;eJ+I>8*@(=+kT1jppx>?6_oT)I1GVyT z`b0h5!{ro%7|A6?aUBbZuX(0AWBIo~<@0hFSN}n1T$boNfP-OkFE`;;{s-(?EMo0j zy~I^b>-P9)d95Xwo@P=2g)+RAQ)P@cJKJ3GTnf>Uhu%bbicy7BvHxOpzsv7I9zqV7 z000^vjEi+yN(SN!$Ttw$Ff!#h=A?VNOec#QyN^BFINLsV<Dk9zIwHldw!)zRr;iw4 z(GSVF*Jr0JBvd``MS_e74Ce8hv}i<G{6JBRWW7-U(+busev2+C^@b2(y-8>J8ty;_ z;j8}{;|7(XKpu#UaJept#peE*{`yGyO3i{YF(>KE$oCJKsiJydxFrB!?xR(g0FtD^ zXT7`k{kct|1m;|HK5lq(kS8FZMMaCsmM2AoJrTZ9`<Vm^1Y;$yB{xy;d?cG9K-+}? zr6DoVjeiruXh34`FVh+&0x|L;-SG4woLo3yQ~>dQ$0g_Mu<Nz%|Jf5qjI9RD)r~ac z>CdC{CLU49@ptL@e6=eWH(JGE^jFV)im2J#bn@NPlEp~RWK3kg`i<FM6L~NkCN*9; z4n(!HX6j+-HzfsQJSHqL;nZ=?EvA3?OHdmZ@5#k6O6ji10uJGN&O()uZ0A&xgoF>Y z2-~{c4i(e{wy1d<-!*>XOGvsX$d1k_(Dh%cJB3f)yBs4H-*4}@qhVD+o26|Jz*)ay zi`hX!>`;#BrCn+U;sm>{R0DEi0H5ds6m9d#*hk3*3B$Tdi%V7H3nK8;%IhU$H^U<> zs60WoagkTuywTuH6}MHqcS377VWwmRW_e@t{ffBW7yxn}<Z4L;v5HD@{mztrnlV+p z(3~zc#zP*}^1mI6cdyQ?+zG=nZPoE<bd8th40hBF9scJxxOE!JSvkm}&ntl(1{+S< z`MQ6c=IkQz#PeREa#RSv8>Xu<S&>!y*gJLB@DPF!Me?ROt_%6-%z|YTsoqKq@bH(w z-0G(gd}SQ(GpsObj;1Go=A`YsYNpN9xtd7|ru%g{0Bw_n_rKD7-4lKhyPI^-*Wby0 z{e<G7Gy#3zi0o~tCvVSJ7P@E=H?r+hoVs3qoE~x&C657R6Fz^6u8!WC>)9hKEXDLQ znv8)3B4v7|7?VAk09W2G$}iqdC-W7y>b`OhBuBHn0!IGY6YQZ+cG78X3?C)Yj;kmU z%9}J+gZI#H0z?juxda00pz{^#lZIh{?$%)Y@Q1644|L!L@J5?P;fyEz2SIl{AB{Iy z%C};9i@K^}>?cn#_OLrspg4mgQ=8Jh^}QQ1WybKvTSo#z%m?TOiSVUUZ4Q8t?kg!X zKEf9F?0a0oPYmKsZk;?<<{HbW`wL^|E~f#y2s=nb;Hvf0FWX<j6gRs69fO141lF$g zQyZCW6Jl3l5bgA(q|}Vp?SaEUGEOb!;4Lt}0M8S(FpyRRkzbAl&YiaO07F2$zty1P z-ptOI+9oD02rRwqW|XTg-C+`e_mNnGLX$9Wa*loScV_!idlp53{gAMjWAHAE_6KYZ zw>OGKx>GvR6Hd;0@W`!3t^@l(jLj=kaBc*L4>=hvY5+U{e2e){P;-g5jKH1C|BYT` z_Tb9KaQ-;cywD+~`B^fk1RCBdh(b)1(*RG9{~v_diDWUr`NdwB$xjMAn=^GRKHdx& zFDqnUdiE~|+3YpZE<_n^GiT&^M3hWHj138RD$oW!?`j2>;GZW{tnS@UkGzF_LPNw+ zqP|utZ^zxO9PO&TxiQ)R1;Sg*Pyn<#hy*!<wXlg6`i21>3#f+mF4+I~B7_}Q+{OQr zX@7iua;qJdM<87wfDc}`^JBfg-0x$Bqw)<qWrt<BFZ+wE#K@-(fE@~=Nb{(L$%vU@ z8BMz#q!1_J{81&geJMqM*I?og$#`0V2?Q~CdTq5L-@(V^iUF~>4q%>nlZ)x`Z071( zWeBy{POtm?V@`~jHTalkXcblo)YWecoO9ILi=6BhOjLbzcN>FAr#qYbfT%J{y_^x4 z*i}kM)EZdXPzm)U9|^{+R26uQL1NE7RI>=zX6@_Alce9wF3d-`Vb;j<mhV233rGVK zulEkKelyC&v&)KXb%lPYgl?xnBj{>R*vX=su;vv`u8LF9=-K`UxypRMKg-=Bw$4Ou z&*elRwjt9)DQcdw%unJ0V(xIPt{7Te=6P@4Z4z-{u*ljRUva;d#!}*uq95&8P~;m# z7^GYCfg}~m49yy9Vz-|Hh1d#tzKQMUe1!hj?fdnr%#CMiSpU!Ei%R+C6sM>sydbox zj@$rEwsB%5RS693UQk`D|Ch5COuLsO9-n7VGBS?WZsgRa?>KdxefmEAyyR!~Pp_Cz z5s^SDBv!kMY?buU{6@Ud|25LlDrQ^E5~urp@}VlAv%NGg#E*4L-y5#Kv-b$DC6|0} zGSsB*4&>s+z<n^UFpM>xvXB57TC`Py0>{hB_Ew&68IyC2f{I?bNw8UUyWPfrlZ%4$ ztJ}Wv8sEMMa8)n6ZEw>Fyv#3$oG?s!Q2J@ckyjpdgnIxny$eNVTV&Y>E)zfwSn%oJ zogWF$YW%!I)H!lIe!SSOzeqt-@D9EU_-A<$I6eG_<m<DGhUYy)KI1ZVr4kfN*iD0F zT9Ia*H+@yi$(jSQUbm#dEhd7@lCkqcsWm+D3RHl|Z*P6C<OPS(sMgHxJXn_YU+L@Z zj=M^^2vuyo-W#(#o{vteW!Aa}x0Q!&x`Z@%LE4*T))ZkbAq^^MhJzgA;YL1nI}Bhd z?6_XG#dLQ|(f*aB6Hlo>jQY({vs#y-K(NIM4~u=!FtH9ULJ&xet{tRj%?_+J=$umz z5hpuJH}Lc&UWw#lyF3))>`+8BY^`ohGw?yd+H`n&Z}Ld0FhBa^Q^Rn4H=H`Al|N6A zc<L=1IlSWsrTwNr-dgxebC_RFAgfkDGoNg(7tgZ&!j-E#>j{Nm3qZIt7`}75NmLss znl(SBoTYk_0!9mAY}xHUp%1BkTqNCRJa5TvDyW}AFGG|{u7`KBy0nSbTp_@1lSm@t z{cyxUd~8u8lSu;JSDa1d|HL7UJ?ZPbCI#4>)8C?KYNs+f5acBg(08wG{~24-_JfDx zdk}$UmnDe(0f?yHpQ1X>_f~eLmpfu3GB0@&x=CV)i3Vq8ud#Dx_VV&ut?R}$wJxkj zHkIABz{safJ<d%}?C5W-wIux3W#q!Su=<@B9C&F$e$0eifA~>f_NJYuY7<P5TsLQ^ zTszEF+&?ftGA#K~;LM(PM@81-VngFVKbmoR`HHl$CS5J}t85ieo*n?!e~wpa7)Vh# zA=-zn_XW)!b4UY~N)`Z`Jp+bn4qxj~aw(dOZwU!Vao_kCWQq<)UdNld-4rwK%bR+d z!?ojx(UOiCe6U+V6G6QzDW&-;w(S~EwM~CsPtA4!YR5~Q(46^=`qLi(MWXYX_it1l zTpMX|kVAJ#2W)1tDaWa`u6Qu~q16!PhL3PsC7;S(g>mS8H;z<Rc;nUY)110N0lJQJ z`7ysHt)nDPW{tDr>z^-{7T7DOZB9gkN%ZyPn0MbLu0e0Lf&ObGs7&23IxS)JtF_ie z4MyN{NpwD`z`*<%{7V{8#|-m!^)r;QZ$71_#-*$FRg2fmu6*?2g6R%sV$GBP#^4zf zp62}7fA=Fk$fsR3&W3vF5R2zyrkWIPoGKEQ>ZuIzL&j>bZ=&K{d-^#kteS3Gslws) z{YcX*6|i&Cb^|OzwP9u=c8(|=2VG9&nlA7eh?|)~Fda>}WbbMnA|z-MO}`QIFKZVp z-P$>{+vLC$*_3OQqysA76T?qse1oDTosA?(hSsr3U*PbZKiBfiZ^!OqM?Uzhzfz2f zfxv}`Jk}k>%-ge?D0L4MLe6Whb*0?-Ay>;gkkx!*6mJ(cw|JHuS@d%=>@H=73~HO) zF$Kyx?c4gXoX;2Qp;EVKptfTxzgBvV$Q&f=@RuByO1zu7W8FM1Vs<={U&~>d+Ycg_ zPST<W(DVAVCRUgJm28j^{L4`csCw4RHfbvv7W0-YqYIkLX3MPrJ2=C}L<#qIHk*;E z%89#J;bWApxjr1`kspstU1*LiaU44U>X{iG{}Zf7?eg+)FBThJ5)X79+-aQbkc}{2 z9&TM{7&f#G6R}L;I9Z$t(9Y|%8~xdGdX!GB3CURU6{Z@#%9CqQQy+DG(XstEy41r? z%goIe{kvmAx8nsz&PoREHF?H$W04HOJ=sL<PH(Xg3=YtQK-Z_2$Faon-A6l!WG`dG zhu)WLreMf;191VE2wq7`YU>TC9u_GqGj8Sj#%pHZc^EUI7_)>EDNT0D`p8vOf2wdA z4T`<RW9HBUrsH^PfHDQ*=MZApaXK;5^PtymKN{IKu&Tp@_O(FEd7AF#kqE(bJe&J| zEW9Y~mSm{OAckG+g<>0ci$QyP*2^ZDx>zq@JA)^FH3lI-GE_1gON4+IEd2?{bHC_< zXMbv>m=PJ{xLog(2XB}|x_O?|m@j>BH<vZx5t}uzCl9|$0mdB9?p(K{*mXrr=ESx% z6&32XD|zN46J&}$MJ`W_nw1%4tVfQUOSQMHl}cT2jMKvb`l}!$r<t@x(T-oQr{hY9 zjI{ENY+OjR1mG%x|ExVfd**n2h)Do^P^)i&=YeAWrj&-S<47n{GX;*h3%-C4o*mPK z0c%a;6eszgszDX>=)|E(r_0QIojGP@^Z$?O_pJvGSS6&wVY_$v<wabI6c=H8w)u}B zOATYi0g&I&U~iH;t6O+KLYyD$^I2|qtax|uSno`RIQA2p#lMK}jbd&Tm{!XvIQTiw z#40rWv-)UWmX0;_{v}^<VC7L%_DC+wG$)`%6X>gxCR$&dAnczQaAB##euV}>Ivle5 zgjnJ(VCZc5-uA^$S&V!1zdMtOnHUU^!w2{|w^gjpg9r*Lw<rV~+v@R<<ufS9Nr_<L zwB5(DjmFgK3|?`Kl77>cEW6r(<j`l&ZyS+o6?of8CUjs}VXDXBdkbrKs%6JH8dIWM z2X(^&1;*Y0=T1XDJdEkc+83enLCv{8@^AFG$w|D;m8Lv>oIMC+qH~};;?G^h+waMr z<q-m~^I=zt7oy6=Ur5<^FEb}@=UuzI4RBl@tN(=X!!BzRjy#Mg$i6mN3S)8Oyp2J; zlP8yBt*2sAyg_>0iZS`u34~SIDODPYE(nsy%_^QvAR8Zni#^NlAGrGH4ESHY+0$Vx zW&OXUlhKpK@Er$=`{twGU7y(s;v>xY6P~{+WxWIXJf1;Os%F=?O~Rd4Rmw_KWrOf@ z?vqA}6TMKHy+jT2b9AOYjP@%3RmxBZk+^+|*krxTW~|$Z??UE*;zL@`N>kl;wCH4L zIo~`iXRJNX4-Z*79PLIC5vgAVL+@17e%iqBP3lS659^m<etl!Yfg4p~!ERfPEDX4o zkjTAhISTBN_aNLGPHAf+;{qbz;9cR^5`(8G0$072hGyiKnfV2<9^=%f63KNM8?*|W zv3?`r6#b`wP^MbVppXnuH$m*-&dTNEq;)BsJp2lj-vbr=U!}wP$&^ow<*`v@^B4SA z2{C2+i!G&vJ^Y{Xl#88!0VI<iN}-gSD>Xt{PXMo`gb{@penGL@Bq{FN$K-q^yK)o% z;W$nN^1V_AGoY@>x}({NjZZJHU6^An(zCP!mAq~I0v{{TdBsH2qrTzO`Eeg(3R<f@ z(-%v?JM;2@eA%z-kE!bOcl(siqQk1xGoH$Xd#l+D0?8SUs^un#o<85G%5TVftN`_C z)7g~Dr#*6NCv{1jI~Bv=2hU9!zadSV{<Rzi{38^KTKgW`(Vs3+_taI0zcz(P2F~L4 z$Opu%q+*xO)7sMPN%i}w%B#uK072x~wKr%Xg(qRXPh<f2?HiSGC|Tz5JFl98JH+UQ zc~n+o+NiFa_W<^~=cA*epQqT$Uv5r;Poktk{wk|)nR5;1PL?$$79D8O>$S{7E-RU& z4XE~MWit=Q`VS}qSG|>nW|}~YNzk`!eSnQZMSD<~b#nEJLl6-cw3RFf>#?#osdz6- zxP!T~OBg0SD0lT;qXfTmGS@hpy#tQmB}y~b+11cbUp2(x+^yTJGZM;_5^1uX^O^6@ z=@RRyAWqh9!@C#gIsBu{*hzy7VW}iZ!kj5%nhL1yiA)@a)0uGDvxf=&v(bb)o)YmM zHj4k`e<5eFe&F)f7ecog9~cKQxT%`GayjQjQgxF<UkKO1O7`htiow~emcI5<{3McN zu2gZF;)5ZYJ0X@sP8+n@Fu}pT!=97gwtJ|Ja+Ie4HO@nm20v;FV3uFy&a9cZXfz35 zlqq_DthzNZlkL4@z;1G{<mWlkbc+>=ZY!9TN%!C3UZ3U#%Q`0(5(d;T#??5vxN>Ey zFu%_gh;icDl`Dsx?hG{cojX>^i^a?%Q1h-+2D#1#%EMVT=}Eux(J$=_pqd<VcK1zn zM)mD7&fj`doz}Nj?XBjI2zVNb(zn8~<e%Fwsoshp#Dj*ARJ!~qNpH5F&ZV2wU^Ey_ zAyN3_vfx-2!0xc+xf^jVPY>hN8PsxBd|p;@NS)kSRT@xG&pV*4R%%W8WqyQ4>x(iK z8~z?7goJqonZv5MQqj`<EU$38A447f5aNLD`1A)AbDJ-xjlQs&KJ6_#-6h~lz8-v> zI8lj3&7pL;96(EVyd;@VMPdPZ%4Q(A;k^s((LW7B*f6w(QN|jcyP^@!f*4NO&K!HA zusM~OUy*|*z$S$=Vs3k6+{+v|%EOl70&E!YXi6&ih=yt~L4K!fvVxf?G!+rpHYDS8 znW?~{#isWuB4rkW?_mnCnq+fd@J4jmW~_^r@9+U5w{fQ8wQC`adY%Rgaz^}0VhJRm zVBYT2rOMC??C%@U>PZX(Mcp4yKBa&?0iOJUw%Q>)u=a*syNUP8JY3tBca~OT4q-_+ zCb~nzZ$U^;r5h$37#*zy>M1d@hG8Jq3$)@-OyypUP7UJUn_nJO#m}C0Fd}5vI+yLH zXMyIPuZq{{eP?9^L1G_WFBH8;%b=MkPGlZMVB+BRXm)1wqh!W_@5jm#epqJ1z}k*k zYk=0BaizP4ZZwTU>xR;TcMh9NZ&=@TH@<dkP3yNp5Kt5(7FY|}0iyn$A!yx9JS@<n z_#+6SF=E6|?MzkM^_zQ+xCRvx3?ibB&!nPk6NC`=BhK*-5kL_!a{oq2$XL%cTTm2G z(X{ITf*-8eHrEOKdQ}b;b5q;;{g7H&ZscNtgF@c;MoI(Vw(OyAhqfT1W7z3R?8L&r zkSxBR7NRtnAOD5LuvWKD4M_MK>lE)7LbB~b4&>nM&GY3j38+j`HdzUW>O>eDERIPZ zNcb;)=Unvrpm{j7R+Anzt`kW$Dg#GuPT*|o<;QJT#Trt>T!^9-vJl3)^x22V=|GkT z5ZOjODj8L=-mNjy&F!JBAbwVqBgl>dl$lWHT^*)M59V?XS=e#%D3njlMDG{P<Ik>X zLh*4<Bf5B<WkSL{ij|4)<WV&Hjb(2Ir~}16E)D8Ric&-AanQPmxz;ZATx4S6;p3Ap zHG2-@nShkE!<J_S+Sq@oo#ekr^Q#}Un_qXn@!L(TA;(_{Vygm{4v?+bv*6u_dq`Ch zAg{v$ONq&+rDq+q4xRJIg7ZNNLO6RZEevdEW*{#8uU--Lkr_#+h24K`;-Yz)s}0W< zY6rQ830#fKe|1!f9t0jbEPPpb)kQAjAF?#>(kO5<=ye*%0p=N5pH=-3tE`S79F0a% z;OvQlKcj&gKb*@dn3=mwaZ$vkANnrMYPj;h<~#Yi6tuy<=VyD8ksBbVCdgMQ^|7xv zxOxnva$~Q*w#PlwU&AliRT>H|MzM!o`R#ipBak(%zU5Mo=!9vNMaBsZ;5UX{XToMt zOyn7H?OE<AU*^4eG^q!%wS`(~mgH|vMXDRB;h!8)GBtuqb^*4h!z%*l+(TzvEkL0; zV~q~S?XnDlF=5#dsB*Pbet<B$VBEFw2M|;l)D?J}c6QiClV}HY0i9PA%DAIkH@vu) zEcaM_aYO3%g^KeFi+U>0R|^%eKOaZSwNTU1RVbxr7EAsV|G6R4X#k%UZ*&j{RC}ZE zBcEup&PJ(h4C^Q8Xw4rpp4O<Ykh&d#d~+{b!Gf4Xm)g6B>qs^rZeq;Il1!PT%m#%d zx%JGOMMa%2pP5+_ERz|LNWo1Rn!r96;?wg+%0L_>s~-um2;4a=%%JMKU=$A`CJxbx z_rjkIE;)`062S=RzM@9hw|tQBxS$=9$lP)!srt!(ODV~-g=IjB>!-<%=g^&yZpy}6 zmg>g7V@HM#609Q(LkvwS$0~uV-sBqoYp6%E=mHS($Ib7V7I^6*!1mH7PedIjuG_g; z1|kX7zoHWJ9C$h5ajDTNy6c1^HLZ8>s%EX<H7J^$fK9L)Q6{>CSq1$AG6B8u;dh^O za$hMm)B~(TdWrXv-Kf;<l#B%8AITph;XAX946*P&z6>_Vq;l(PV(I3#e^$DzKdVSI zKCVlI$`5YtDg2i^2O-!9PimXhPD`$53NcRhByvL{ueG;Av4?{;z>^XP^$I1*o%ig3 ze5gBaMJw)D%zmhulmmuO-RdfyxvTDM6);|@KkQCK@D}07OM8A)I>_s6#y|6MX9QG3 z9RIg?pW20Xk+53fwG)=(G=^Y3B7JaqYJbdnIBy%*v3h-$OYcDje^;l#n#;jILN)?H z=d@07%&+3$#~>)0{Mw#_nd3_h|H*c0F2NX1LsrSw%q8?J{^gQCR+d+s2;WW$J2nyn z2+|{rBH2Qwvq;o$rw>B;(&J+cbRHMx);99h#Q-LK*mmGzza#wfy$%yxgT*{`^D{yH z30Rz)xU$g2%PQ9(P3-mfJ2Ts>uVOj5)x|&Ia`DhX_MoY08crNDkut_&+_YuT7g<)f z-!!dt;54M7zdIi?O}P->b3d7$4x2N*<m1yZDs23a;-Rz3b0F^nI$__qAMsMsvQIX+ z1d$eyaT#l|t{ZYp2C|Op+m?kc@=QEFse*3b@J#>}sS=d>I-?7RJwxc*X#5c{J30tl zF*=?+ev-}p3ntCqLSkwE<{ub8iRd2YTo_Y4A}=C}wKvcRk8GJT?Jai~jyn)*JA4Tu zw$4#q5%e$T4t9jjQLpGH#YV39=YvFSw5oXxmrVEs8f2FykJLFmx?mFgBVP23OZa;# zZkn(g+jZS<bAiPzbKgQ2#W1S-YYa)$4N%-!;7pRw19A?y0iXYuFd{Seejtk$2Sm)G zAQaTQMj5c-6sNm~G|=n80YsIG>Sk^D+BmT=PKK?Cxh?s?>0(HmKqm~l0V*4&f|3C% z+!~nC5p(7vb8$c2kx~F-4F(7HdO*ye8RC>tx(&-zRa6q=ljv6*mEE0E>??9(W~1CK z?;Vw|>y~nd^iM2D%>Bni4r}kBQF7Iu7nu~3j*q)<63n3*`D;*{^J<BJ-rPFKnu~-Y z8{eRrK9J>Vg$~iT6&87JbXh4(AK<94$>9KD@A?im&Jvg1;hf}zgnuVcJ&P-<sjd8d zjZyR&3C8HkA5CmdGWn4&Z{Pp5h9AUVy!&L(_h?_MpE1DV%|20nuirn{Y2+!AUYq~u zRVH`iCFNVY8UOQIoqNzb)AiT4%<66vX5s#;i^y_a`vdWYudmAJ9@KHcIWUM0aGeDK z{J^h#rww7N@(;;9S$XBTg>luQujjxB0bDEk;L;4w6qgBhidB=OH=AvPeMz<2F-cDx zWh=hITw661raF#wSlHPY;-euTd5O|%pFDazd@GeDxi7l+xipp!?p@hk@EgIIo<RRb z%cfQU@Jcfop9l9G?`IcUyv}^Za1pK4YufmT&Vq1!1v&%#&k-i+rw2Tq8a}b6>qUnT zf?3JV)1D54Ky*ifY>mg%{xm2Bu%Py0{O=k}U11UM^DHD|9j$<d5=d)Ay+V5aK`Zxd zk(651YK$p?CP&TLDXw3Cr0@DKMT)8ZD2$LE^Xqir88}WCB^#;+2viBH{<4Wdei#no zVz(2Zx#rsG+39^|XO_-m9JzVZ0}NG<>P8%F0P=KkA_ui32nC;-a9ebF*~yHOGo$k) zl#9E=Uv#Jf-JI|ykVPC(>TKy4qdrZka7Mruw6I8u62j^U5E;{A?H)WfnOHgPBv)lA zP{~M(@@Y3|c4<Ly0<A+<bWU`=n*UCF0?)OQW}6@>+9o_~)m68XZ`b*jm>40gTNC^f z_MhP_AUO$Vkm%-`Ap<ivSEh+&j|qO|aniV5@eX##ox~cD9(<Oo)Lo%e+?1&lTF^17 zRiKQq)$t`%DEx47J}*6vIt38Z_b<ww)$x*@q^1jT=iPwQBYp7ND1@NrjZST55ZtSs zkz%QLmI{xmg7UD0YmQd=R$BWY*{-<aO43>s8OC(j8kB_5UNp6Q%%>9i2$m475~&XP zCx4@3e>y$jjRACGkM&Ia>rrKSuNOr04I<&3Gkh<PjAaiE>Tz3y+*hfnwGk)dl0!OW zh(xT$J@P`YlJw|#WK8deX?!0R)CgChuzpm<0f_9FqR#&|+D{?l9&@3PL@eawMO@;n z?F!0&bC`_{`Hozy{C8D|=w9FJ#W?J+OJ_P%Niz_q)KlD&TAOZNUU4|ucoI|0SR6+( z?xb&KOBCBeRq}&l!(2<nRJ`^Xk0?q&?f?>R6e1u0#a?Ys?bOogdiCgz{*CB=2(PV9 z0I#^P!dU%qXk{~)>d-$paZX*!_ESCE3*917G5Sxwn&>eKng#gtJ4)cw>IU(wq)vpI z+8@(Uh7^^r>jz6T^Rynzf~<z?UuY9TrDW;@1e#%h`(Ci+$Dn&C!;3zZZ&?NZCNNa0 z9>s-%b(fyzCtcPW;%bntOLhi2bArWo1fP_fM9S(V2{9NoJ*bYM8-Ll({X(5YZ*X6| z*@?a}hl}u*F1Z6UZLn9CJMCxM1Ia6qfNhCup(nk%wtQ;*zX(hK#YDAUOAM!$u&Do- z4}HXx$&d2*<}rOHM+<?>ry6tlE*y;Et6Rl@v|Y}V^~OJnmHNT+th-u(c?s*(aBE>w zx7c|1MFkWSBav6+eX9<YeZjef9R*2$t&+E<o=Y8yQ=XnS9=#wlr}EJOPSQFuXxQJE z^4ywJAu4Gm0qjJx+&TuLc6UG^rta>xhJTE|Sv+=Xs{dby?e7;TC=V#fuKj+60U(jU zqMX-}&}b(K73KfEJA<<+WIJU(9U#1OHnqpw75x3q#QkKW&q=Z>M*7a;oyjJu8j;Os zohKZ}lS}*)WHdZTIPtf<MYKh?k5|qQ<Fm#F1J5r$Mt1coD)KeUc>FN9FLnrwd->3a z*a8fL*tXDv0{Zu5vYoA<Tyn;7X)I-YN~t{TN6c=Tl!v=2MNyIrOwBxxX1@&$B;34~ zrV=*?3gzy&w&h@%Rmj(Ig;%knGfyWulu25k=b7HNeV091GZ2Iws1Z_F#iQoHA)<a6 z@<t_jF$;?GZ7qeN98$6LD$Hb}UluU|^0(>zSkY7ea%?QPh%!l8EScHEi*EXzBqL7i zidBImlZ>!J?;>kg5s=cT^bob@W^IpjwT?#V{#+NArC67st&lfV@!GIW)K_OC!E+08 z*1<>lS_@pzi0KnkWs2hVKk2L#*Cp`SK6o(JT8>CBOiCP-*12{*&WHgG)wyBrx%xnX z-dnSA9fJpRve#iZ!`NcCqVQ>!8|_pQ2QltjG?~_-pPdN>kSho6hrwMoY6}$9pFPqR zNe*k<^cKnnODbL?gOu#YDadzr<H$1x+7fv#p+ebTE=e0y(Ki*`^&XHY=j>XJoj|Qq zjVp*7-lClBn`O(=V(TnSy-h1_aE&f{Yc@R(&YK9NOAW&bwo)R2q4CC~a||?77d^wi zLripgnIK5<3aFVDy#oMs_utqm7S_C@biG+5l-=Kk!9B@MbLBT@+WT2$-E3ddFfs1< zfDaJWMAC|0NqkT6UDJbIMyDT{YT|6(l)?{)n)8o>2r>pC*b+9o^n?b6k-AiMv!?-g zf&xZOIJT?J##uE(=b#-+d7biLL^k)H4&l9?2RT5JG?=6?GZ!eJGEIh{vsQCO?QM1y z%BDmkC+Pj^G%PWzIEAUp=H^!%$0(*{h3>$aJ=AL*8`%t;?Y02kK|Pv_s$MG=2%))_ zhT>%o-g{SNZzf?;itw7Bo#W7{XboH<_-@UjcQO1uCtL9}GT@?GCD<F32)!14&e7D$ za2@^+b}C|fu6iuR76N<+gt}javXnVluMxk&f6lvph_WPN7w%pu25d?&G$llCZ@ouC zP!nF#y8MY81l=%2MT=aaX`uj%A&<3;NKLa6Fxhe7Y_ALN*4S?%KYArdjhm49yANFe z0eW|-yuKB=9z0fw=SG7OCvDIg1M@0(ncUbh*g+p@EfA+}`pkeV=9@Y1r@*;on-`Im zFYpZ%xhj+b?iJX#vHG6MA;-ymaFQ5qy%uJCFp3!1oL^3RLk*U2EF<eVz6Dk)lsSp< z*S03MyHUafYsspRiLj~wvn%oJmk&8T{@WX5IhnpoHh{yKduT1)rwrm>nYCsG6>%sn z$zWnXwQ^H9bp<zMy*Nsnk;BiVwfgtcS$v3-P2&jdLaN#2{x39tXN<l^9MXX(9$B^% z6%*3Jb=4P~k<e0w`239~Tne$}bVvUHFQWp-N6Io0PIQIjY-G(MGhDlcwv$a`-uotB zpfC*kmOg1umXY(jW3ZedjSzQp+D+A@PIT5>`8$%$tagZl5yKr*94Av%utu-4C&nup zl+tI+IiKzzu>_P1I}W00t7*5Lajeiu3Z>o3!M9qQA}MWT(=66PN$jW(v7SiJtAVxy z$vdo_p=LIezb3{79AdG~w|D3)bHd77O^hoQeFOD-kT3scbd98ANCx~-XMP4T4e#Nj zDD#D*K6<qqb3v%f4|@z7VRhrFvepG|;Bsue8n5|EeUa;VYD$LoR`r~4zcb9Ls#LUw z=mVuH-8H-5yAseFZ6(7^lZmXXE=;kvQ<NmThjYM>*2tm}CR{hm0qebV&vsR1R09?# z?H#d%y96^+LFIJuYBhk+CB|z9dH&lav~?^zv%O%W9NT`F7O-wBsCeAZ6W7~HfQs-J zTx6<mps-tPL3r!8zspuQbC3Hen@;+gNSr5`b&XY`sW&mj&oRa|YQuV6f&UfH1pr-? zP*=EK)K{Fuh8*dU%`GmpmlWAbOJFcI!Q`9{t$YSVpbV`Xud>swd;1y47L9Qji$*r7 zsfn9)Z*MtyhDZL)Dh9nt!s(^lVeodvq)#TwZ0ue)%{;4@*yRT<bRHdzHs{!%qhW!) zYIdQ!=V(b*Wg-mW%?Lt-A#!gBZY{;zHeg92oDAEi{BwO+YW=De=568EPe*jnBFbWr zDINiDa(;H|xgAJR`M;fV{n^I8-vq$Rvf5WH2=y@Vx!!_@ByqQ&Uy;0js|)Cvf;>mY zy4)|rZk7&svSi>2fMMH-nCIHej#FI^*kge;p*2(+TOh2OGJSG?WB%U>jG=+`;n*VD zekK$Sr9w@XWrv9D&pY_=_GVj}5O~luGgKt$RlZDd5$hMJ^}hNCfU;j%k8jTVUkwH| z1qee^djN!W94Y*fb)?jMt->Qg0o4x=NT}lN(A>haW5a;I8EPwwIar#y3w5|PFvj<M zY2fW5m(qIM4BHgZYKf}u122&Pnb}upv*T^rMPntr9jhlQtS5F&pH7R4jR%9?hId7z z1y`2T7mx95ZWg)C7MxHKD3-fMu!o}@cLrsy)o=tY3HNtqgbEMGt907l$7-}KfFD#B zTeK))=4$B%spoGW&z`?nM%pKO=EDAcKCfxHV>1xu@zkn}5KNVHMm4}{MW0HRAq9A^ zn0Hx|Ixykb7DPva>1XZwhn@kLLduGP22L?|JW&3Xp$VlwR&BZR{6egORLYkIaW^~B zOAOvYqn@9whOmn4VOw@!K7G_JJh$uL2+Ne8Z((kw`7~xV)bL32PZ>-Q@YfSs#i3ri zupelVm3^vr_x~@17r_Ojz=7pp=d469pdx|HTn_{9JW$G15h<o!!bjK}RpqG$cjW0H zW74zQ=|T>lyZ&7;!CEnEl+u6}(6%gYqX0P~*U`NjcpQJ?9cl?=mWK5#$2sSV7BbT< z9U-bhgnnto5Dro&tloATYD6GspX7wIUbn;{7<((M0<n;-!M&#a_QB!H2Lg;@e>8=I zlP78@Tg48M<B+jewNCjuWM@(?HAUt7D-mYd>DuKm;n6A%)6XcQlT5}Fv?m&&q0V@3 zFQ}zak58C2J=f!2{d@pU*ZpN`gQx*0k`&hNj{ESQO8<*d9F^y0vg81vW@T?vXY4QH zXSr2TkGPF)Fp4OY<FNr}SQ-vGV1L@GuRf|Hhv|KbA*#hp`d#W4+a(TDH`v^sk4->X zX6;4eZpW`?IehroPkhup6sK}|{IhU7t}#_%$jH~}YS1@8)ZB=14^5%}FdH2h_mv4# zjXeV~ARYBwII?ISzc~!OH*4E=lTS|1cqpv?Qzt_c3AK#h!)>;`jvV9dZNPW~QB62x zpbeppj_UFfXc#Ydn(TYEh$ljEhhvHt%a>PW_1>$wn7Y?){6X)r+BT7(kzTguuZr<# zLhWG3Vgliguu=!7l6l7@a^@Q%^}m}u{LH6GGlT>lJOt{OO&vvb`z*r2{#?h(Oa#XW z19Nx=@k-@|MTkh`@$C7hiIWAvlwb$I-_}%Oi!7iA&E9|DMlLXB$I612-UcCZJ>g@K zDG~?Y*0}VA*^+ZwvRpE^MazjyCg;Cp!;T>rEt<*$k0{d4#(t0mPI|~OS?@G(OiD~e z&R!iceO?DrBV{h5VGQeKh_eXI8Re9cnJ0O!Rq@a=bDXeTPdMyX^U9j4Zv)}xG56ME z$)#W>G+l5uMN;>^$x3M09kLcb(mFynovn6W+XXeT$G`lwh@@W1imnMOYs{ypyH#`p z&2coX7=>;&u+4|e`T9rEv~4|>c_>%zB7-=#+{y>>$HOqBx{U%ar<xB`P!UYWsQWfU zLto8Ibhy+8p~pm%(|PnlgBJvb3*>iNIWQvHtnN(0O24!aB~Q)T9jI$j*H&&bX{?7V zy{SW~4mp(7`F)qis|APii5s0APCMutIga<QwuWU#jjtfvOLWzzA(k|DExPG75w&|0 zj#&bU0FQU=oj(fx^;2sDOI7>1)V}v<y+Wg-ayyLxQ#POiPO}f?ClI-70&#Fo0WsEx z+Y>-J!NZu68JZ`t8^(YdKIwtVaJ?%Rb_%HMH}|9g<p(#)vS<&!<_`*%5dn7`x^YqV zVsBq+lR~Rv5DM$-HBaN_vb2MZeV$;u-`HRSr+}>H$&<UzGGWPh5TwkXj6b7m2A$f` z|E~r!qdsArkW3>FPXdow!|uIE2P?31GXmCY+~?mps_K8<pWw0vH>qU)N9Znj5`3f& zrqdY+h_Tz$fm}x=aYYc+Ja*taARQ;Cy+|^UrD}*x@*0th1ESh^q`#F|aX<9dE?CBT zN2+VgW;K-7F~xKjn1mp1F}i!ds3h=Ed-#e5cPA>XngKoc!m<L__Z7NuWJGe8(*P?W z>E)>1+7cqX&mEPf68RQTdzy#ycgp=tT)EEvPPzPIgIFw$4^@?b=TedLm+|QDZva^Z z0#iQ^Xg^VJb_9Rvq|DH{-O*kJlq;0*x&AgR6ea?@@)j`|$$?HVwr>_`MHvj_5bwCZ zuE@cVS6V8w1uvTOIiiydPEN&%gY@M!VF6ThT1HIBVb`*N9D5!WFEhJpG+OvnwD(=O z0ecXs+3+i#6p0(Av`N2`eA|WqGoNR+^f@lypQiqXL^*8>u4hE_BU}(g1cc~U{A1`Y z+f5<Zh>8%#P&<duqx6x1j8>iOjwJP26lodC;}3yk7VJwdEf}u2C8$X#tck(1r})@( z-ZW^yNo<4!&@04G$JDXo*SU*Ue$mLb?(P(ERFpdrjWyPOOIts4{YHlvsm}vCRo-=f z(_7qL%`(?F_MpQ6o|b(uRYC`)P#$CX1EZcJHqYd!{zx!!(pIR!IE44>B@N4(=#tBb zRpRlGDLSl<%#HN;N$mSOEO>(jR5b1aoA!q{L9~0M-3quCd&-9Fm1&66KfiuVbyO~1 zjJaqVx)F*99San9_jAejU;|hTAbYFQePZgndR_r8o@A4KUoVUniGsGnAqvJ2JwHRu z_-j(m^5wP5Kw$0(Sb`rG_(MV_GA^FttO)k+8kkAO3dnB_g0*JH;4T_jW@u*){4PKy zF5UXacTL%onE<J$&6FZaZik-nSD{o&43%6nK;BUTa~GUE*DzwaGGk-oUZzKRJ|2C~ zmG_3%%He4jkDc%k7rE82<`gIi45neQUn1@L(kT{-pxLh+VL`{vnF=Dd{Z7?!dL?HR z2@0`Sym&ptwz@dGxMDX6Hi>C+rT&v{Om9pj3%Yg1Jcjfvlh|7fTJvGh><n$x!`kEs zKkf5T$9CSGZlfrZd|e*_!F{9HJq?F|ZI4|l?ym-MA^eKf4z0Azb(3d`XE$H7GzmmI z#o!xH#-I*sxP^?cjLK&^xEEe*S3!X^<W6sQ0)9(Us?AUxK8$7ArSz-Ds_`E*yVt=? zeCEiip5yY5-FzwXU-^6CyG75%@{4hlFD_)O{r&)O0XZ0UOGrC#PcSig6%6A1@No)b zm<jZW&xn`*2m6ZRR^qdSKx8Tx2}ROa;P3Y)Ul=_R5dL$YmT#1vew*rHP6A_bwQ`E^ z$SHdXTRW^ac2_78p4IT<e^UsP5<bpMzs`*|NUpMMAyybN$NK2*GTViFWfR3e^^UCA zVVki9J2TW>c5J0t3-1x`SFy-hW0_Nu>NtBOjZfydySF!4%UJ{c(x01=u2Bin2u;c3 z?Wy3C>sRNAdlDH~GF<Em90Mn_KVWcP9E_O(+?nA0?yWuajl}M83QR3-;y4J4N&mE! zcmBJrn-%wQWh|7Sx+WN74#%m|(O=sKe9isAYFao;qUj>beasAhEKZ8KIMWBz_RVW8 z(?*8(-frGD7{MY|3+g|~V0e;^b1wp*^Jmw3GA!Hx=pWJkoP8J8*B)LdKb1j#f^94+ z?{muHJt!G*QmJ+NX<x;UTPm}3RItM#E>V%~qg<tV`@)@EMlhPwiz&gr1IVpyx(cv= zH$Gfux}w$ngWO%6jG57X?5iYtS}4U?V*v!Bbp>P>`Y~f1p8V(M@?lk!nPbKGL|FjX z*jGdov))~(=%qcNk`qtCeGequeYM%*=SpMfsWJ_nQ-Q{^$nG&4c8P`P=z@`Rt*%|S zbdX=99@Z-8ZG?96+Ph7n!_%sr(LGJeg~dQ)y5mxq_^(-humAlwx4X8WAE-^=zbl9C z0CVQyHdD0YXtVyOkG|vO?kH)|DK5XQFkWPh2`wHK3|EOQvAH5wAc)xmatHnU5UIug zkR&i6z?UVY>RdtWPTIW!lt^W~dl&MSk{O@SIv2MQ$=B-HSBlSip&U8hu}JXG;|^1~ zx3G-j`97tmOUi!#*?(lz&m8rc{BP!oh-_cVx`~<d`~`*HT77teqofbpqtbAS1h9?2 z)UW*~7TA<AXMLCZiMClzmGIAfBCoVEGVZ4nerwP2{zOhtR~O3HBVT^o8Ot@>xoFoh zsv_58k+*oWr7vw+Y~T><x_kvr3#A9kJRSyd=l(64Q*jS)${Sd8q)9?*Az@b}`P(&P zi%;L3@VcMpT-Iyer$y}`V>R8`)<*BFVjKN5rF=9+OtA;e7Rm4i9dwGNwf#QkkGTo} z30q&>U-CcrHaQXJTHg>wzSo;R0TU1gl7sBWh8VI<iY)M0z29M=7SA9GY+0Xg{XVD# z5iO9?)hcO*gNKRqelOw-bNxLsUSmqdnrL3?Up>MHTpa-ME*H%ZnrkRo5l;3IOVM9S z2RIrYP<SwRkd_L96;{q<g{x8q;>VpH9BTd6^-Sh+AB!C8U;)K?){MfF5R%@-_dz-{ z#3d(%@ltXoVYLXB14#Yj+yNAsDzxt!uCq*#wjo?~dbnsSeM@PG>n(^3WK)?{G!D8k z(9FNc%Or(<y_L@ZwdPMOVpTr*-@U@gT^&XM0z(I{<C5{rT(J*#9sZmmw1LBTW~CF} z8yQX97hyaO$YB62@wwCwj=<J0S{ynirCJQMgv>$TlysPLsCn9P@&lREl+0tEut0Q9 z)T354Z$AA100qb@nG|g?;ws+WTgTobgkf7%p_fsMn4<iHvOg?z?5!1AeBj8?kAqH} znQqTTi!E_`QJx+J;Py$DOC2t`J^<|DUVn1u?RsP14!_iD0HwZ^?q#`MqHg`4n?YlD zhkMVgBA>$#>O(_kue}5c!OCvEXuikhI0!;gHt<D8QWIwYxt5{`Xrd#XvkEwpz>F0Y zvMYVN1F>al=jZyd3?&?0TuGPl=apBMj(xXx$U7X2d(3MVmuNg;3BSF@sIJzearZ|W zFVq!M(K1?ekaY{{s*AV7DKz=TnNjf1yGjS<mlosIj;bL!XqG;$bHGQCzf%P{lau{Z zH(I^?QBc?5Qao8WpIQ)m8&lDSI^HZlE3{P^gpob+Y20(;!=LvkZsmD{w-LmS2n&A` zs|Er4lj+{y+=%OM1^6q^{S5{0EuL+mxp9hO7@1r>OG#luA7pb>pnxBzSpQtpMd!Bc z-tY2t3P+-c2rBwq5jQ<LDN5EK%Drt3ypJV7V<{_*<cTqA-7)cFhq<tHZuu!RXp@k` z_?qCqy#K6nj?-OqW{nfkTu=Bn9kL~1GEV^<D((z;cIPHJ%12clK1Dy$5euM6jbLkV zezbU!dVK&|hIRf}8vvj9Igx8?#8ndxZVrHC#6FL~RkEAE8~MikL7Sfypf6$FkB`Yc zW(UiSKi8N}_nQ(>4Wrv<*g7shz<J7c|J^3DZ_g0XM&6Us<;^|ACCrh~d18U`rrFKD z>;Jv&+0@=3jGc^lvwn@p`=B4By7>0POt04Y%T&1?@8g8$^$F}Qy_NSwwG|E5>(%e= zp$~`+Q@4pA9_)9ZCT0q|4XFKY(X*!iUnX}|*d(=j<Qr2PV2_IhWyq|*2_|UU7IAYB znfiGGsF=CCq)vO0)CHh@&udDujmy#7V!Hm&(TW+Z&c94R!Vuv<b9XPZ&^A9_$BB+l zHFMjlXEaT&cojJHf$nxIJwk`K9@KWYUY)MC%q*Az^jFdsiXjCT>GR!xvw1ITwii1O z1?9~#)<VZhgx%@;w`?#F2x3WdEBecZC2D&8^994@h^nP{T`57w@M%MBD74;Glo&og ztaNBvnTeRVhZ(Xv(G5hWfL6gM5OZb;3T`Fz<SA?0TQA<w&F$iBMgZJa?1#6K4?q)a z30Wv9iPub|qIFl#2#yi#HB=8DEm2g2Pn1hOa@(QY0`M1{2D)2dZ0YYx#q%iPr&c}j zdkn8)d_l^dp(It+WD9tdm+q3QzhUN-jU0A&&1r*~k-Eqkl(&N#4WvUzP5^pr7rr_f z`-7D*xpfC;QcSQhhaN6?nrIEH+d@oA`I@00i7N5o$h`i`C*2TfMV4ED#~k-eR)$qc z*%>GLxIhiYMV>iw-<)5=ikPsqE!HlkQy>>*k@-QE(v*?|s_N{ME)_bTjPSVSOxkmI zj*e%ALnfxNt+k*2_{Ukd^Ro=(>6qSL1OSAcK|AMP_yOguzX$Din;l8)pB<XJuL2-o z+0uuNG#Z@T8cT^}RJwgF5!Dq>OIdrq%e+S7P9;a`F^vEKLs+4=Y)GO)oa4q>4!YR6 zSxjQ{d#(b(!9Mx9Mr(fJiUI7Vb3G9xVRKTox6R?MJn7(`B$eQ`avB;rtIAgE@9aw2 zvSKt<WvocfO+0o|Cef|or(z8xjs0*8GydSsWT+xFTF%_CAFodT_%NJDCN};}*B!+= zINHM@gnK}FPzq~lP?-9bXPHd>MCjNL5I8Tu(h}8=O<%oe-F7`viVn;&0k!e3-Y>fI z@l<i8t0qVeN2C1u==;={k(ukni(!eVM?er!Bh?|nHn^S=3%91q68PY$e+<m#i_?*H zxOLx3;QIR(F5xQN)Go|5zjm&O%hfJ^)FM5_YzM#Jt$QCpT9}Il7&k6kn*!dXn?a9` z8MaTH)Kd?zmQY1$;iVfWb=8=~_%&k+E9A^<1}GT7l9ivq`ngL+*;3~JxiYAaQ-4=s zm$o#a&7!YtGm}Gpn992b^XJ0eI9l{{*a04CZ>|FavX+Ofl<LuijWoZg*)Lrb4)A>X z`y;7g?-Kf;UJeHbkID#^ty{cw*~QRQA2Z!-NlC*O8QUlMv2e%ZZmuAzjrK*2H-aE+ zrv2MkOgR&TPwiX|6-h6%X%jz9!0yq9t#yKBL~kaJyM0}}OhhHaw2+cY%Nuu$iNic7 zF?(Jh`RRU@^Bn~z{~|%3xWMqgQ9_^fsmY{zb&A=JDFNp%Y@Z9T(5b|3_+2$0HjN7O zEFit-W}S5PpldSuBav8^#HieVG1fI-R$iS9hZyBCFO}Ea9etQYdIsk@Oq(*E;%0e2 zF+}%8GZ=mRQ8Rb@6j+TtEQK_eZW*yQw=umRm3I3TvP{$^auc7<m23}>OwzN(=^2&# zm~pj9prA{#@kr*PKZk(3l85JTjd{Wc02yG2VQ9j7&oO?WincS6;8FrrRU@(sv-Ogv z`J1T=iLkw1huyHtD}`OIx+ZDveUD|L(v{ch)+=VXZCWvFhJS+0Sq9)k=BnEBAlN7P z-U*;+%=XgxH9B5!^i)WErzq<qCwEc$JtLF}cF9Y}owJBiMMvx;OGNAM<<}`X?anHT z8*7bv5Y?3(-&#$YVzapieyae#CqcxsE7ShdA~G%CryM8C;&dFb3_BWQ8TG0di~T){ zdqT%~evXi1c~hg)%g~$3&K4FnFOvRx`?fxAP@3h^$iMTO+}9t67k=yCkl;rL0oibB z00(oQy2(+4x8tkl6b6Gqz??sb;cxxQ0|^0|vfw;ieEEs7gRc!Rw%M0v(??_|6(7FK z8`}a+=A`dw1X`aDuPFtQsyOe4SdALfzog@)^3pb0Y-@D(3}EJYRolKWN_}_UIjV}* z4zE#^yh5|`EN`(nf1F+*YFNe9y%7APTcmLC|5BKe=w(--0dWu{FBX*clDH$@rrktg zO6snJx_oi$uQd$NDx%$n_cXzZv;z9eg%C*8^|GQxbM-<%w%|8nKpP@Nr8JE!Twxp= z3GR|H;eZL6C`#$ro<4xpb9;P8qGb*5!mZ_4=<GSNe{+b3G8nvDYVCWE4|<MoPM*-L z2`%nPIUFbN<2u{XNYi-z+VEYOCPaZiH!((!`azb@9!r_kymNpQBwAB?{Y)Z}F)Pq% zbS`Y^6S2M-%w>{zqU<Oyc~twVuJ}TQQHKW%xc7{xr~d+y+!Dj!=*>zofn&8HKpw4x zYqC*R)7^ctm6eOu2Tz?zNDp`7C6V)^K`BmMna8e<Dqudlj<L7ak?}lxU7yAjc0FHu zJ>5XiO*Dn{O=}+({U=}61Cr+BToOPBq1J<^(@SlN$M0|bbd@P7c4ae@8+uiY658f8 z;_lJ=EIhCC6__~e_}s9X(00Zz-aBfu^7~CW1znvDBoj@DmfwJ@=}1X0o;*aXwj4@B zZrL0OBK0sSV54bSR8lLkmZh(`b<$^mC4-MJpaHAjV1NlB(?#D(q@WgLmFalPY`Xqq zF5q$2ov?F}Erqn4zv)m>JSM@4fOS8`#k@1!!+|<GvS%6q^;DMfT>`$z>4Og%ejPEp zr8II3tj^Hu#_oEWPoojvNMvJ2CzqCn-|D+qIPsG_`pQ4(fY{2IwC2Z7W~Kxk46d{$ z-UUn5Ez~wU@OX{9cloflAVh}YESTMfpO72kpVB<2Wbnt)h*^;k3qrd+Hw{>bOQKe9 z0q<CMz?G2@(ivY)F87IVwUFTv<V~``9RNs>SI9^`z{F#z$Gi)>4N#RMEQ#pg?5#Dl z{DaOD#&qKq1!@eR4bFXnL`~v9T#-=#81d_zgqeS+raU>LyteUOdHi8s;B4k<QIaK# z`_S9NkX`fh=DjIb%4ajP1JDvB*;XBxyO%<v`dfS7!k{GaePHIgnptu;?rB3iYMs%Z zEfCJ-;e35VXn%LelSEMNHPkwp{2N;E3IW1<_vfSdDddq>wfy!n>TAXo&6MK@Qp^FY zV{<JQA=b84W+Kd&R2=#OsfvmCFR^z9Y`*!}Rs5{Ejl)24iICTJsTfEth%bzZZh9e! z^o~9MGKay$q<Cr$uAnQs1jE>^7Wf?<D~j^0F|wS(NmuVxi00d<2%I>8Qgx^8Sbl=f z`C+-u*+L~*_W#%UNMf0p3mWC%i^t9Ld<GjMPA(0pWq2=~Zw9tTKifYm8_ie>N`*~O ze<sTp%)Q-xs*oUtEW}IME}0U~v6r}md}6xy5%^%M^LcD5$_XXPove(#HftrB9uA<T zm{OSfaks3(yLPfcqo&F)Hk(lTm#vwvf=S)@*)fJD;*QtL8)PA0GsVB9FI3WNPGQ=J zQ)GdQ0oD`_V$0ad1w-Lw7JLg<x^k-w0;Nl=H0+&Lmc0?}Y!%^wv@>`)J$9*U3s!5A zk;HIIt!h1`08+2l1UI27U@iUbU8heOuSW+6d!L4C5rGiU4tE=S&}QS@F2!!kLNTYC zc4MjS?RP_EGRP39^a9WQ<mJ-zAPoTP?52|wuOwAD5-GaY`2|MC?I-ynkZ|hM^g*}X zU(3nHh!95qdZVKe3f_Tudm`bX1jCoY`%6iSSZk*tl6%qVLF$c>JzY<fjNl_?cGb*t z%aKD*vMoMhH(rqU^>1F(kfer5B`FT3r=P^<B~$`J?9k%06CE<oba>HU`@3$&@b2oe zziTr3p<K&dnoQ@WnnMX4K5F#zHWsG;ai*7`1FM?EkrQ|>R?6PQ>{#z=S^`!zXr{$? zV7ag^ZNFg?C)R06iQS3(jPp~@j66FLE@oabP;$olA-C$HGTP5&5RVofJvGNFG}BEZ zX}|9`mpZvRn;;%xJ`M|za*~hiEjk!~TvKHIwC4#kd|9*Un<z#T^)T2AW{*;hu5rwG z^QJijI0Y*=%zJ}I$be#nqoJ=$KWfXn1M|?LnJc~Nu@+TFjR!j<iH7Y=Tp6^LTQ_I< zRrAo64fo1$h2@a|w{}Y=07XE$zp4GD^_8?8oN`xo7_6oM-C5=3-=~%*bHKNzMg;;J zn-`6V?3Oe345n*X@QH|TIr6?{`=pJwVh@luWHtB5;X3?vW(<8lLYSlc^)B{+$2>ce zcYXz<{v6#!0tc&Sj1OJ4c7dx)#Zb=4Y!Mz<vD^UNL^F47l)rQ8VbQ_2jslMZW=Ti} zJ=G6JDgug^{jQEhk(QG(3L<TcULIqjA#7GyPwh#ZxA-a<*T&yS#nl$ppL_{4us^Ad zSLxmnd&#E7kWKyF`$Yg0_q4hsp0bPD=bmheT^<oJ$WR;g<w2F-nsIDTag7oK7i|0G zR_P2JoS$WH!uA%!DCKrvRdiuoK_VwSO(t8A+GL|mA9nc&QQW_Kvwazp{AmVTzns6+ zq$$)_y(;_Xe$aJ#sCLcoT`MYNw6{!U!D$7f25?ns4F%Cu|BfB{sp*2dMco*ik8X;x zbWP!j<b)rq;Mm$ppKvHr80O>{hv5@jyPs8RU}gbQXYtM+%*3U1mUtL?R?Q+N?$Jqq zn<VLz9n9J=qG>eXVUt9o31g$sS_~drGwBv$UX^-nf1znn7OZr=!HKkTdDMd9Cnjx5 z(RhZKPD*&+#IW#x_A!T+r5shCI<tpd9WhZ>e}%uDX7oDpioUzcBZMP|ni+xoj||Yp zG7zzBRsNn8f`+B18(;XX*=M)4ysZJd53AE)>O-pTnENFz`^4v_#0Q1ES<p0{;>>~# z;?^n6y2>F33WN53Lp@&1O{t9#9OLoL=eg-#tou>X6KqvpW?6UMupae6H|k@iC@Gke zsL1DCEiZ5Cr7(o`-OtPh?Tq?2qh8f^1p{zRW&Fe0%AmKT<AaT<Gx6Fh5Rd*|xwy2H z?IrzOHsGNa?=!;5W+(8biI`NTj~)ouWYxc^AIz$g6-``lECS2btbGf7-TQ|vPE?H} zsIP*V<_X7N%E{_10ghgs88hrmiS2G>&=bHERFP`qoztnCrlQ^6+<GVu*3$^F+9@V{ z_K#(?$6$h*b+!{vIV=beF#VS$pR4*?6DO3Tm-rnrr9{Xu23~>}Y6x(>r6i1D--{qL zs#qqd&qM|;X9Ox4rh%4%+ctm*2jv~Af}YpV4%O-i_hAhsb{(!0tnX+>=p3+E0jNx8 z>&IJ`eE}WpkHAD=O#Vy^av;M@g%X$5(zRz$A1v`RXGC4}HXhV0s7SH8LnhoJ&w`MY zGoT*jL{Cr9{B0S#od(-T44>KHg}1+?Zp9i1vOLQ~4*W~OdE`ZI(!gcRq5UW2=_TMR zonL(Jj=ja%GqiXW4o?tWCYNzJM74HO^6%>ijasX}uO{C~Z&Wll6<LGi<yZyd{4F9B zRfo0QLme1*zguK9#l_P^UY?`cT@>IL9jN+}`xN)#HFeJ6<$@QgoR?f@S*gzcp9D|D zU&*~{W~a=YL*L&(T_ScBUG7gnl3O!0rOHqZS*^*r5tE&2@MmYR1PN@@=IwJoh;2rP zy|wg0>_v2uJBg#P4TzOep_%Zre<J=M-ILw@QYUAYArme`CX_L^%)_eKIO-)bcUj(1 zO~fu_au%Ot38?Q?(F;@ujX@Z1g&hw8-QDrblD1S-&P2k_dbCZonab%^H(NW2U;O0V zQ(+B~zxnP>=LiP4)E!fPsQKtV8AO_Q<5PB8Vx2b%&`T{a#69_!cJ=z?#ps?_RP|96 z`DvLl<A+Ws=`hZ@{&svdj;XOUNx984z28GZz+$sq5M{S!eM2%i{st(E2(Q0B1?Q^w zv@>FCZ$bPc*l<s47}7bkymW??l}#^ix@*J^!V+#{IiZ7mr{)~mCMN3?oBSD%8<0uO z4zqlOw${<@$RsbSf>%SZ%u`_>b3k0?Sv8(*%yylW{BW?BL%MralPgN`wdhQzNh)x$ z3r0L8$#$<!WMd>&ddmIip;72&zne<~GgU6y%taa3jV#+}3r>zetTOoj-ap+B{{bw8 zCYL`>RWtt@*5eD0t7@+CJ}X|!cbEJrBYQ@^rYW^b(!Z)2Y3ogDDD-AKyitSSb`pG= z`uT_d+RbArg4cA{cHeG6G8L70&bI#U>x|-Uo(M=L*A%a#B#K0>c!+!^6WJE}vYSW* zzZb_&RYStIbPe=|fzHj2GP?&Axs(1<M^k?Q>#b_VT%GdqR&{smh>%o^A%#jr*1a|z zv;~+M_6zKB!Lra6C6Arf*%2;>!PeY`?Li*LfRbLUPc-s2!~YyTpBd0f93l-Vj$Nx5 z-nqey^M{)f_2s&l(ru56KQEaFMsw<fL{2WJ3d85JPyqC}7I$0*ruQ7P8mY0kKZFi^ zc<UrB-?e_1CZnP4PP<M}FD6<}uJ;00mwYiDwmCdN$M;FkN^c%i(i)oF*@%fnTb{4@ zPB<>Xf013?1tY)V_P{6I4?hjszH*%?QA&Bh7seVXi}MRt?l5pVP+nXNhY_kF`08V2 zHAuY$_>trV%!Rs`i7FB=$HY(U-axerc-NW|3d(z=z@W;wYP0xk9inN1oD1RVTvEvD z=_U8Hm9G%~p<aul6P$gjWj3nqc_P$MphL^i%vh@Z?ol?!H_}az`ayN1Bl2hPito#p zLFUn5t$BMh>SU5MvmYBK*Zcjec&Z?-F%h@iaC41kdrn5Eiv82^R2*<7TTMOL;4POQ zogI_`Go^G?2B>uEXFQLm1^k-9yOxJalEDgv%UJ6ov`BcBF6;kmZ`Rm(gREd=f1a3# z9?LE^EKTXW6B(am!g88#{z`}dKY~CES)lAi<abWY=sk3sxTE9@|2K*$Xye@gGj^wc z3AWb=i=X9CCZ+TguA~)wGrklit`BX`K5)Ck0MGW_&s@J1qaHfH-#vI{7wb<<nNFmV zEb_i$G+qA|3wZF>g$#907We4+z(BwV=Biob_J1H!8&aAC8vd3jNLo(bk2)t2vpe0z zs4J#U%c_TT5-^JMtI9={1Gm{L#1KWiqYir2HPXR?%p<|Qwyt6_YHG#_ro<A#&D}?J zMo;VpUT9u>3mo7gt38dt8Sl#rs<6GOUew3oRf%BN>j5}?K6Q*(+kxGrIjO62yKRlv z76o0si3%_%|1k%gp)q!wpvQa)wZd7}%N$FK=b7|JN@`1y8N6=dR>x$E)DN>E<5540 zHd!a}kKB!{r&47WFAm)(QgGCc5+0kvdv*H(%rrr`=Uw+A-j*vk_Uev>>M-by##dOB z>o^W^!41I!QnD67&#C|aL(lnLNzamLngWOa@i0r*(65qKm4E-tXV$W8f9en(|M&*J z#iF&XLONhE)4v163Z`^ppk~C50aGk(OSE04#zQ+rP-)y0rpZmU)xpy9ui(2Tyiu(x z74nE)^6Q*%7#ONsNCrgBsqjy5Rd+=QEcT!<EmsyH3aE|<ja>gascz=<OnNnXigSgi zanSBrd|FcM0y>Umn~uqLm|<!4v3Ang9TOD7jn4hw4OSV&K;M`0{-5v#hp+G;01R=p z)@6I-m_otsYfg4Y`<0b4?(r-U((IK!f*c@3v_HE>ELbFXNy8&G#tJj(0z0r*e8|`Y zWaK)^!5O6DY42cSKZ~;7_Tkc{DNbbR!d2w^vT(_QU<;!!xlAu%X1&zUhgUu)4lx+( zz5^e?_^^L#`HcV5O4iu1wEZ3+<DaPm8dAllT@R^cuR~!r5tDv3Qn-FVC-Lha`q=G6 zTVk&56#|}j9EDrc^sZ@-yqt1H<Sd{OLmc2DH(PK-jiUh~MYi>wyP3N4PqU6uK%aGa zL%ihFC+e`;B>K;QQkcsBLpPy(8JXh*<i$KURMgp#*&)?BkYOPy@-vcx-iKRNh-q^w zx2k~ttH;m!_VP)l>Tb03;Zw+p1v>&sJPhUyT?@`4M<#^;Yzl<@EowT|IaI$l21iPc z+?GJI0Df_8jOX}X_8IqU@%Wv_zR1~j|M4pq+n5Sie7-KhyV`lp6&ZELpgXT{0OsWv zuW{kw&drQp4_M)dnFqm)yv*9MTHuo7R~7dQJ$l%|8Gyl)Qmu+>QS;E0i!Iq|v`86Z zW47_KzegwbggLr7r`?ME=OqBu{;5_A^nUgPS+G622X4-QNFI#GAdT>XYmqeU*@OEa z0TC{tWd7#h0<4UcI=c~+p_SXY3lKkpJ$b>N2!CI!bmHNc)!`EU8kMlnqy5kgQjQvs z<FgJSS#m0AV^?0nR^^D?QO_N}E^p^9B8K4rUtP2>GTw0KK?ouV&<P;<)7BNx(?s^T zwriywx@fgmT}`ygfqi0upj;~cL{8$Lx%~<*&FRt>SKpW?b!%2C7Ns2F9zk}DW0{9A z0O7Go+uWE93P*!JV@GWqwqHK?KbGPmKz_#UON^`sIxlcGU2(Q40VJ=h_ubG0OA(Se zkp(BTM$3?#6b_{9Pi=FD%xK0uUGzJ?hi>$w0G!A{m`K`!j8>B^XEM<xtmB8h=ACM_ zBp+kQitZ+DDlQk9W1vl?3ZqQ&afrDJf7+V!u@a@ZB*G^$QRxeWJOD@cLdjH-pZX;% zO_4JlxcvQR)kSe63_2>d$q%F8?@p9a&>>}Yu~zMpsLPM78AJL2Zj-9b{RmZ#cZ~Jd zp_Vwx6z<&l56JKfHH|Eo#h@SeIXjY97}WkGUAbKq9-nJDmH!N8)ox%X6?ZLCryhtC zNpE=YgyrC-EV%O8i=>;OoW8|w;5bhhcgEnC0oV&9j<B)Yx%0f)*ROxCJ`4y;<z>=2 z5V~Vb_}|6Jd?D{KOB*QOzncej4;VM$!ZW71IgWYpGn0PD!NK)@i>(PV`BQ)QA}Wl4 z^68OnSc~J?%Yn29PLDB5VgTa=OI(h-pUDU^a6b-Te({g-EabbW8j6hwjsb{2PaxD- z57(w&OJVn>23uPZ{P}N7Fgy06Mc+B6Jq-2`!Hn6hm~Zbb=M*`nWWwx_%20uB#Jo>f z+LibR4<|z2X=aW_HxRu~K3gdKRZ&LtIfk(#JV%LC-BR~_0rr-mUJNzge(bwLXXn+Q z*VlfDBca~A5c(CHZ^uJFtijpRg)m?Hus@r2Bk(Z=of(a#DE25xdDE9J8X`AY)_BLE z{6e8RA3!*-VTof1Oe7NjcUV|_gp!jdA`<e@)`pykv{l4rHNw^I|2yT>mm;;0(|3&b zl7ymUNS$eW8p0UiAeaznUiv`p=N)_bK1ZB&T4=pH_SAE8QhQUasm3Q|z^`(^MS#0c z?pw_M813`NSz!v|jQB#jE(473pOkI47uKH@<e9hYces1M{gx=RdyX&FcAG(10d(bA zh+89u^?X}Oar>T7`03zbKXZFci;rNHhn_S{Ku8+<z!SzL8N1Oq{_^o<F>BAfQ_Q!H zMFd<ztkBqYA+#c4uEk5gzfTONpq7y<9Jc)GzJ{szf+im0G0N_My?KyBB{~0l7{@q7 zi`*$A`7zN=OM-T!(WjLW=$N4)sO#u!DRA%Z{Ly+%5m=7>bk`k@56<}M_nSSjen-82 za;0dc<k}kvLojISVHtmf=2GAZo*uH>k9Xzmq>}|nGToSQS_H309PEG$2HoO<01>AN zJQu2=#4F)K?qdj~D#B+48ON8pCs3_XCBSC+5K=f)B{NW9Kn2z0aT&(G0Q$mF0eN*; zis#A}msm9Jcr7XyQEbtJe_}X6q|3MU8K6g9Apa$4fg?sTk1VNF8#!J@Dfykj^c>+! zW_-k1j-*l9Vn>wah!P77e`(Iyvp6S4so-_|T0sNXJ1a4x>GQljz!QHfk?#{`n{{*Y z#l|HJ2e2UcPo!*zH-46D*wE2d;GAlO>VF}bZ6w+`WYnK9rze~h9zeHJwtyN04^B~3 z0K8n9f2tCQUO>s7*_ImfeewZL1`a7a@<QRpYTIvtBA_jG0!){XGhsC{8NpG;bb97N z<V=G=B2veZUecxQK;_d-)djfgl^!tfpffGRPCEWr=!0^~DoEw4$bu0Fn>Zqy`5Ybi zqd+S3Ql^QC6|G;J87I%l)%UPYLdAII4BUYuQx+U`JxBLsAwQre%Ha~O2Qq7ZSX89{ zbB<2%0Bhkl7Q68vNCFXa@s{pqfx$EfBs3#$GspV<O~NPz%&rWSvwO6Phx;V0a+AtL zk~UfJ!zg3i&_|n>z|BL?yh+QUMrLE)UW`6uw>m0)b&s73r)Jm#oA@bNX{gE=&k$H9 z?Q<QTU3*Yw1VW46n1nb5o5D>w1RwwIg)S>Q-Jx`SbegQnE)`l?2B%sJ0fdcZP@aL1 z7mZ~ye}~{u7?-Q`gDycT*~!L+|9ZEG@SW6dJHkNwl)u$Vn8ai|Zopx4eiEOJY!GuI zlH5ur8Ij&vgdx%Hi+WEVb8$$vq-sFJFp>4r#RwNQ**u!~?p7gb&gswKqLGX2!3X>y zI?fghs3u8P&BEU|e92M#cKVc%74|L^8a}ABha?~0kxu*mk-}KH=d!5yS5sI0ZS>2g zaRTsoYv5@?K>+IqWSNA>`*_Xhgy)Snn^!M(P4kZ|N#D;|<t7$kSqBI6m|!u*zmOU{ zoVv~FU#jNY`YVaAiy0l?Tr{ls>AQKy{VV`p=WNr{I%FCsn4}uNpbeO2C0SQ@LJ8Ct z6aLrapd%$ajKduJR1zYW$oWYLLEMmQtaUUCPsplu^I(?|36_L{2Tn363C!{M4Nby@ zR1l+fm4w_w9i5)~Yy4@6Loy4%a6FxCxkMb-+z`c~q*UoJVwC*Zs8c1#Zwc~*Y*?A? zJXyO&wii%Mh%xXa8cRX&`B(fS4Sb!g`SqeKgnVnM!l;965e#cSo<2sL7-XD=+lQ@k zp+`?@BOQYiF@F})tMZfHs~ztNI(AHuTN(@k&4>8%qnfvj%xvhRvYowTABU@>zgb?p zqak_#!M{~O^&HFaddlZ)!pkVAV8PV_?*Y2vijHgdZ)I%pItxZ6be(vXP$OwFA{S|$ z#-=;TK~Ry^{HkJ)%XahF;$`e7^(7J~o=Oi{g(m#UzWxh+F=Y2tz5}BDT;v86JRx%c zW1w*;VCz+mW56#QJ8lY!N<DP?Pi|}nq3OZzG|l_U2kY0usHGY(%vCNQ#|M2E$6s@T z{X-y)T{{2o-3+;vq%P9|<*jZn;5<>+H*iu1$pBmS3}N#ZL<W1TkNfk1tT?e!g+Z9$ zc4Ux-KBkAv{ZC*F)#s1p2wmBO7Yblnd*kcQm_^vpiiy>6Onxz_;}p=-jp2uLnfHhr zNFpO&P-=(?Jd;l+|LpHv9SlvSV}yV8sU~v0<f)yaU5bE~_{ak~&Pr*EAZjW%lw6Sw z59Q4G$Pj@UiTshZPk4jiHYF!nYJO8_5+rDa`EAR2!}jE}UwN6WW0n-#twxzbT4gML z_Wvr}2nHkc&GCibXk;G~@HTS#gp_Bjn;G7^q2N6O{!LQSDQ@3!S1iwBzT5j2CvVEB z!!<GW_ccQ0#_;hKz_m+4j`APXUE(t=CMM0gL7d-YXsnK4&|ZyT<7mUu{$yeD;>RS@ zz|%X})RQJOP+3qeqLR-x#Sx3jhHsd<7yhZeIrJhR0cvC8-*&n`Ktn_rbc)vtd7pBg zj7mWL7P!t97C`c^3Jj?G2L0sKZ5SpV;$7=sWi)TNJ({}k!>`4cc8~6O$5Z)92g4!> zw&8WuIfBa&oZ=+BmfjP4W~_7g^PMH?2*}{4Rj0%>X{v$!@=Ui~d0A5xVd)xUKWtDl za`<D`tR#SX$P|K<?>e=05Rj;BTGa4ZV6Y<@`*d;ttibyQzVBhsfq@_U-b^6Avrg>J z8SB2pC(y&yAc4q9&06(}LBJ>Kot@9sZ-HA{syLniu0?{k6J3$C$ig9Jrq^uihXrlF zAK&7@@5$Nff&&bjvOMyeL94>-IEcM+V+Q@}Z|wb-xU{V=O!O5`7Ufz3uQWH<W{g$F zWNG@&-B7n4kTs(08$vGG9WvUU2g#^&&w11H0(0&opXZ_ZC3AVl5<ZpgdNB3xT>b^m zY|pydhnVlf5gA>18BE}mN>9@`)M1Hl`iqpm<Xo-Ozo&R&%5OSS27-JjC>B$`C%B;0 z-zb^%cFg%o*ga2-_wElMvoN+OzDmu@5jU^Dr+-}CbcI5XLyiR8us$hy=#^IoBnKHI z?8)|~wT&y#7dSu<D4HGK<=EY*Z$W^Zgl>f->>tRotm~Pst?7qL=_t-YsE`wtmf5Nh z|Ej7iot(IVm!&@eSYS#a?66o7QT>1z?qMMyn6uH(b0#}zFerUvUs$t}`k|@36F0pa z36s39C-+EQokN~Kay6Ws8g^r(OtruoL7*+)*c*loXl?UygDCHhspAkbNaJUO9sPyY zT%|IE7G2dXI8TZzo}hhs?rIE1E$=v7p{T;BZNZF^gO2ILzAw+$$w3x<%&*>aFua_g z?4*c7@cxGcb7j!jAR8miv`&D0eCqws1o)pte0|A^HIvoEfJ}_&u-T|9v=gmG;R;>! z5L>PFO_O~GE6Gm?lw9-;r2f)viyKUWCVbu$;H7GMa<&{Foco1-9uSoP=DB6A9Zw+w z==NLSf_r-^>Yr$P6P2Log&18z3xOic($=#Y9A``kmbm+uMUt^WIL^PX&2qm8@9X5Z zo1^o$ldd?{_pdTfq`wksd_TDUf(so%>k2`7!LL-QVME88bT){DU*JH1R3uyP=n5$| zKrw&usf;0!G|gJ{w;{FPK7>tMg)Qz|!f9XB9%y!8%FHNLOt_KLrMC9ZoKDzS{TCRI zNVO1&yw4u9P)nBgY2|3=jEMV6C`8y|ZISZ3uEB!b88ohq`ug^mZQ0-vSlr?U@hG4C z3D)0@YDK%RcHYW`-Yv3PmNoHJg!QG0ulbxOKCGUAhmS*Ch45NA`M7{1n3qoeNMHWE z8E;xlSDU?d=EI~41WV01s?#4#Fz!4T$gpKx!UzYVp~oZiR0`sbVHJt8so1;jE}Bb& z{w@hk`Akw?JAPM|z*t`OR!!^@!+0pj5RnBhnI$v9*c;i{*{zhS&mJTr1&8RdrAfzt z6?>CaMPhwB67%DS*I?|26`ou!he6tMcT`cru<1tNtLvx4#htYQQDtHQqq?SK;@biC zs@VYm_z1<(iW7n8>d8qHUf>jZMeP!K?SSJNC}Y<K=rgw|v%h}}0PdztTsfP1*yXBt zC5`D0Gn*cCiJ{X|ul3Qq@MW7xPVuKbfm{kcznEqbq}0Rg(0M_Ynk>(eSh36r!5-am z7kY~<Tlo8#ETb^xIpeT*M3cm+%c-X35Pjbh|Fj8iVS7yQ#^Aad3&(rKkSHqngMe+_ z0?nzzk^%`EB2gJXCb{{Og6ybe+5n+hcCYG0vU9gk!HQd+{%p(`C8Ua_nN{KrT#4U& zqJYQ}+Rn7P7;Q?xc$^ySR%k7(#@){rjk;LuACdNVSnStoP$zjHzQd*l<7(w8^vS+l zVpT2#un&v2K9WJ{He%^C`Qm^r>lw3c1QR@Zb^Z%3OF_xQ2R#G%qTOe7l0|$(lS3r= zgup~!0*rL>;8NXqPjt(PL)3V`zBmeM)8U<KujxT+<CGKB2vil&rROc&9)e`@k{=DE z6+hs9$dQadX_EnWj46=HT_t~22Z4vI2Hc@d=mb%>D{*;1WZTRkA#$p3aWxn?dn{C^ zti<ZTCf}R#8Xh>d0^$o9{SK(u`MF}eu^;ISsR#m;{8ZkK#>>D>$lo>T2QUlv_a@r* z>)k}J;Y2-PWEW|iUL#Mvg<P9C=tSQU$?A;1uIe)nTA~F}N@uUrJMHW9)I&t&C`^~c zqdm4roPPr6B&F#TML{T@>b5i8e}O66<<Lj9(yoe2PD)M9VnY>6lR#r|X}IZdO1pTH zFQ9o(n$KY71&%U%lpPyfSAT0Aufk;_ToAG_R(pxF1)~Q{McF-w83g5+9Aw8JXe^|` z(#wNHHhWwhIF&(VraNEeGBE{LVR!2-uPq8M*NZ=#M)gYD^bho<GmW3oGQo5fQGK9U z5I#E^xy6MvAXDFDgHVet2MIs0JgjC!m8)ri5KHoK51@F)A!ibj@j#jcvll1@C8^gF z+-)8112KR)Ju)ROQtd3uqyIY+#?2Dyjah1&sl>S>MYk`cvXQB#yT3d`1U2zTz+fUR zRJNkBI`S?e?EoMzvN#P5Jti7Oku?CAR){Zxln)6i7zErl(%bPAJoIe!GaH$eKe!ms z_V>#~f2qwVGdU_tBu~`aiHY=YyvAoI34oKng+-QD#0Lew4MrfTfluV9D1j#H`rLFX znv?9d$wC{olPG4)^)Z~9b^cKZ*u0>awt|jOUb<Uz+xLz*{goFUPoj{#YNum9B()*} zz*NX6!8t^vw8uFnod;$)ml$?4T%$)azE`FCM1%%|;PkY|TkW!%LlUq*b`nw&$OG@N zwu%_Ql08phME%Zv^<ejR!(4Rbk}6KwAv}gzqxbi_s=!HtYKJS{gdYbZB2E}WqTh=h zl)!q}!65tAa!J&LJM{mrg?Iz~yM|+%PDRyTS0VA*-l(wLge`TM&*V6^9f9zM_a^Ob zoKQP`bDHHiq8p?xrDimSxAY&Ul-ZB~E-lQTBolbq{H_XfU!1#)X$xhfsl@X4&z}*| zXvbswj0W_DEEz39$vPmho@}qx>Iv8|uNnUWKB__{XQPbX8nqdhT3p#aqz;Y5wardJ zZaf58a_}_CP^5JFWQ#-jH4gfG#W*z`F!Zy3PW2<{W-FXZ=KnUit~*o|Isw&#!R;HO zH6}~e^U;JmN#ROo&}KOmUa2C%372g(=PVLjlB8?();ZS}<?rriJ3%OvD60$()T=1U zVed2C#!76x7H#us*$@-0bVj+nve};Zge%*P%k0#zi29@EohL`Halmre?wEs*syv*c zs}eA#q#f={Ly;+L(S@Wz)Kf&M?em#anjSi1%*~qyKSMNHckqrpf`I{kbyi`Ykt({? z=NK}(N;@^9&(r`cWM}TIv_8NdOwO9)IT!fb<s4V1vtj;1ib*wh1z&W17tYpl=sp{^ z>6H`|8OUrix)-yCmw3Se+=y6&27B&VaOnMaOjb&HXkSb0%1MepMb3C~@$;s%LoZ~* zpMT&$k%xuf+bW7pNp4E5mKq>cT#<6_xrU<dq{UFj8Bb<D^Titgb2|Voh6!?z-(bH) z)WcN^dB3lvrebFBWF6d_&Fh&-aSwchKq%tRd@a~+UttUJr%S<ToapCqeu~fC-R|1c zN~<Hc#CQLxoke)`4xFKLtxnq@0-CsUMq}@UWh>dH2}U>K$?8W<=`B?dYuKWrK#U@E zj|Ts@@%$T*4Sc3dj5ZE<<9c8Gd^(ICrvreDT-Ci#@dEUKQf1Gzajiyl?tQcUET<U+ zq6$(teO$31nBpdZ=}42K2jFKJiBZr!eEI;?RgIB}(`8D=GXnJPdHIrX5z!dV6Q(|0 z_}b`-!sM8vPvZlOnN>zT$~4aH89{UUMlCK1oYSL1$~$ed|BLW@3L#o2EiWurs@BnD zTuyC)$*&nCzd7G+<%K0NF$S#VMqzpx?oRK(o+#CeCk$#wxF`OkIfcR{J^dWrHJG~} zsAO_Eb;Kc`|BK5m5&4)K#T?d$7K@R3k5hd8b2|dj08BwntC~RP%L)nJnLqPsFzEUx ztLz4}kaf3ry^>fx6dRp19$r{;WMMf0wq(#l5#ZS!vkAqKP`-0H5Q=5-M&lVQ?h#=& z%291phGQJ?ZB&a$hm>SPRT9#~%;jHb10D;T%XCkho6@Xax!vEg_0mx|wUwI(2&_H= zY!YxU)-;^L-E(;1v9Zbn2wus#(ztF0FxXmz(8W(}J4or}4G`~ZHpMMeq!SjGdMAN* z=B3SnUn)+9p8!H%v}+DKH2txGOvF(SeBlmDi$5h8GxQ%sp^gLzDIc!iLRgcWlPPN^ z$BOeUXdBVxx=pY|gFwRo0!SiSup^6;K&2U8gSr^SS7|{PrE2C(W6dB`EvAlISC|nq zmrwX0x;rf3(<Y6qgs5DCIB6KQ`>-~T26O%JtA>C93_dTSIvLHIv&P=C>xc&KIB4U| zG4K%#Sd}ccMa*y6Is<4nP4D{oP1T7yQq7q?S1o&aRp&+>KpJJ^n6bY<ALFtNDWy99 z7tQlKc)vDjmfQPFU2YyQEQq`dU;&)yW{odjF+$k*UXC}+LI#u{uy8!O95ws^cKFNH zxCfoqM-8j@$#L1Sj0LtQq5{dxQNv(fsYCEjgB)iFJi?z8fld4%%@g9n;N|^11uDn8 z@qVNjay5WLA<SKjTO*!Al;fEG*uSCBnIXi~^#NlcLTIC-Fni)SOQlhsAE=kBIjhDU z6pUy&mUBMF8?&@@Xwk^36bshW#A=SS!)vV2;S|P$@ldAjt8@B|xz;3H7(LEOQtJ^~ zES5wb3TEe0pi5VkE8e2Z{u-0qyU{s69+RBx@`mj5<KBb;QNt9_NdO-gLh6h;bERDF zdOWGwC|#eeIczf~woQ;C-lmCmI!4|k2xQykdN2BKq7QQB(zfr@Mdx=B#7&6vty&rn zo`^wW3w7{u9FfL4NU1&oT6rHBo7K_!w~6D$LpsQLbXOqEC<Uas)p=jogQf*Wr5m?W z_4g|?!l-}qp$Ann0`6}f0a-)yOPpu2<<~Z;fZsD&n2V@&ZUMx$yK5D_qe_yj-y8ks ztorteA^Gv(0P@kG(|Pu5!}$LZPR2zaK6SK=w;#Z@HGs5Puzp~@cl!x4J#sfDgyE}Q zRS@=frN^8@wri-BI`x?_fe}8MicL9%h%#R<>khGi0L4wJGjTd3D2AsC0-s2H3p(0U z9Q$2zoJ8!O`HHX>?D3vclAV*GWJB0BEfeigifY)V+SI2uEuAc#Eas7Ep>M1)+a}N# zh-&2V=JLUk$IWH52EN5-daq>2GbZ0vWmohi&<i`$GAlHPb%C%l!NH~WFY0X~38F`_ z-D4pHhN$vT@m96l`P}9BKj!F%uUxZDyQ_aFE7|2TRot)#riLJSt{6LdQy}lr@tO4I zE|T*l&rSNEeHmVjK)Xf3`zl90wra`hYZFWL-g;~pWw{NHUpcbf=Gsr{4kU7+^})$1 z`)y#7xZ!iXZauN`yBblk&C@)0IiegA+E$Q;D{~(U$DsDmQWDpLjc(-G-1WCt0!6+r zP}NPXnGxlxGm|Kh<P<U7v_~oM{ACnE=zQyNDR4=&BJTkk#T_GR;3oufP~t!d@5l{q zBfRzx{>S_`W+vtCwH4YE*VX42BQ|wknSsoWFQDhLoGv3VY>Z@DPN5gM@L_3Kac&it zmbEtt+Efr9VuTKZ$70A-teF83`4XYz0B!0cITaHno({$;Qwk{gwP}h#TZiC>HsI=) zFI6l`SNA*jPTc&n9r!$Os&ih~8+WY^M_!-NGmf%WDK|?zQ{$48?B=eY`*CuK=6$ub z^iuFh$+NOIvgdb1=`jMnC8vbYvBd-==puSI-g*l)m*Nb%9IIweHpy0dFXL35r5)Rx zZ^r*TV(+k7=J=qT`XVI<pne#`=WBqK-<f8UbRI1Vq4goSTRh<&wH6^kZ~)9<PFfbq z*CmvQN|FEjALnch@H^ql3cP#3g;jgVsZFk^)rUgj!#HVx`xO_$PQ@eTMTN4!de%Lt z`$0J_C-(Fl7r#&H!x+%s@pqf-H$hTut+0V;aL#*DB7Zvn70W{1^-%qN6mpBoj8|jO z?c<4$P1T<QPf2&rRu#m*d^_C;6Q0t~fZZ~f?&u^|ll;+PJB+8juCx};RH#fX{Z|Uy z7DXX{bPpa?METEkZ9<<S;F7Iic-i9}XoGVZ%wz%AuH<Z;a*<$w8`sQ1fkYJ;w#Hv3 z`cHvD&bgtFN5N+NM_Jo4UWWI3;9OSMWaa@!M3Q)SdLlC~8ROO0FOg`l{XSD=5tXih zo!mG(4B$BY+vV<f86ED%Y^4&5M{?4V*DhZt!4xfISstC$l0Yt@yV$9u$?8oU)NBfG zt!?*Pp1C^!A07en$GgHi2=rq*n&&?`oLC@N5F(BOi<3;|tn`t|1OGF=Bi=9jU)SD; z?G<7%QZS&hY+o81e8dpq$jU%9`?Zv(RNmVNGdjG6G;u4UGo3~F`*~s>rG%f;`HUVU z-+X^Ce7*h2|Jm^gz1Nl<xn6*ue7SxkJ4#85%$ktn9N0~50>#w9CSLAHI>_uce2+*q z?)Ib5jDFFL++GjPFDijHpbZnG7pO<A#De8f0vUY0+xy6bCU_V;_fv1N%4*?odR#Am zhBj3iG*k3dCEnJD3>CJ5HL)wL`c`8+w(J(0GRvlJe9E}6e+#`%Y=goK+{kHz@%4m% z6<dep$}vrE4Q)@tr<GyqU)Z~{)&kNek$cP8?SL{u@r!#)<-1Iwp6$fdI6nhYjb6?~ zC@UAbnntuj8F7`0fPCJI&?635xg9y1>j6Gm$`Z5V&{0jy9PIsK80#Z^Y7-WVY}Mj9 zIz39P){!?fpNR34!}R7^n!vwzDwKq7)TcM3_;kzmWqW3ua_?}$pQ&4%q_?&1wFfIj zBj>$VCKGeWM!|{3(+(!D(Cyj8+=U?YBMXFw`%~``uS*}fRUT3?$-)mUn^jWvv`#&1 zSAXF6-mTvZ;Ha^+OlGs&<5cwKG#Dt}A)By{r??(?9;SV~;avnJXSiJ9!yXVc8pnsk zZWHC3eL^kaK9_C!3zg8A+`Z?;$OiQP4zKp&tP!)Zb)3^mswEK3x8wCXQC;0e3q(T@ zzT7M64M2eIH<KmI@MQ}9rzPC44B+p61)pgj0~s#hFRt7=)YY(IzhTdnope*!i-cLY z##n7{Y8ss7wH6W4V_DE+7p`)J!<ir_SPCx(r8DrMC@0s0**^&#GHhz*uIkG3Z0?cE zR;zv$B(v(hIlef|JUdxD2$jK1gd3_Q8VlAe1oeOqU=4?$nbUD*P1f32Wm~urlnY5w zN8j*_x3GTDxSNk#=q|>?o%GbW&KeaGt(8Ofk&(-<9>cjJ(mBWtL*a%#ib!cvKKj^r zXrR_R5&s74db8clEVoMTb+$&FL|(IWfJ8jbCj$hIG5KQqorkmJsw2+}BrONco#c@F zI&<N3@7O<~)vbpP_y)AMUO5|}tICw_5<bS`c`HEztV@fl4DFJ5RJPK{xVLHKG7^(0 z>-4riy0bZO)5HF#R=GZ-Y;ek7*L|LrE5A=27}`WpV8w9-iMevtSs)6;UUcW=qbJNz zk^=H<03PPH<}F53vw|3A$bSq51jEQ(+UN(Qnt6FEj)lYKI%2BB9+FsyoLB^DTy#f? z+J*{A_%#g%sQsz?byB&?>htP@VRJH>mJ%sWqlw7YRlV@F6-`_$nB}tO8mZ;^tn+`? zbcrNxtAg{qpcatVD*6bS^4cFSSRc%WJ*XoN%s=n6)R2|XX*>bgb~5w>J7slJxTxA; zz`(HGRfFnYF5gQG;S4@M3o?xwdZ5xkiD={@jA^{6D|4XXWww@a754uMp3p;unP!86 z?z<v%H#9re3m;%A%9)T33Q+9=Rq-F0tMvy4)}dTro&sLwZ_R;hjQoteYn{g`WVORA z2(<40ex-e|9T+|^IvDlrHvlo+J}Q1sn5u1Aji%ixCQl5AbZzL&LCc82l%K0QL3J?V zl@weFs2Jxdh(*ZGUDZy(!8y4XN)kSvtNb9agZv)l40E0@KA45buiEXytn8{kwiEUf z0L8Nf&0%`FdS^<o=0aoAt1}pMi<1J(qdly-W#R2O<5^Be%qfWVs(Q8-`-fD-cdvQ$ zH@4?-$Po54yCX>-=Zyrs@2Bq_AdVVCcVBi<<QSP96GnW%2Nm26Nsrqg&t7<(CVuj$ zogP@{!y)$cdz@F&adLiy)s8wdA7}=V4pGQA-=)*BF0g{FI7UQ>8YVY(6~eliC_)B4 zW7I@0a=bR`>{vo-FL9+A+|`x~-K(V_WD0Z0b_?^t7Mr(@L-fyNyu?XZcylyBa+w?? z1fZvXZ-;nIJ^+|2lD*Z}vj&7ZTLz-UtCp-34l?2RcpIEb1)em^6-)gVv*}L(UYacl z{yAOI=V>i5A|-s&)e}u&Iw3g<QiS-b7qps&M>?|t3UT93fe&Otr&B`OyvoOi*vJse zbs~T-i8pDSBpjE0G>RvqarDjgc<i(X_IvW*&53;qKF{|n4X`C`rhO>1)xyD%X;55s z0=eb4NJT*BCZn$pweeEDB57K*Qg$meda4<rr+}r0n%lNdY!(OQovz&SI91C@BC@dv zF(`c}UK9F=is7OL<Nazb?^@)FB>0~+D7`>X*v^kY9faN3Gh;0u)rMoAQ6?E%3I&gB zm>E6~Ovc*kTBodPso`JX>D9!y%TH*m#xU3Jo_<Zvl&v`0ZSMoA)PZWaSwQ$hjp+KW z`Ve3D6<&DzvWc3~k5%!oP<XKRreU!5p{BkfgO)^JxlH30-{C8XF#ZLMf-Vbh9Cc<H z6VbN|9LJt9lnur|>f)cO2YaCueI9y3w9rJ2xpcF#;=)0IV+`EC634U)^oxg6mT0&? z1JR_x(*`DB2rV4nQi(Ye7(!t8ubG|uT+uN`?C%n{_ee~;alU4oB`sTCq4gCtQijyA z-S__IyoNhB8pD(nC<y>_lXgf^1|AWlIS%i8Q9jArsh1Ce(mja>$FN_|kfBZ9=)5`x z+&s;I%R?{@Ga>qK9^J5?p=GHN>CUq>OR|hjZQtX$mg(8#6rd0D^Pb>cSHu5Bezqj} zWjA<H$99bZ1#JQDul@{@v9F^ca%kPwXF*j)y$ywFCM2)EItobW&;x3GX$dWIviVse z%jJtyoCM7<AZ&I1?)=&H1;w}BQm-z;+>p{gMa@S315E;6ah6+@(QM6H>owkB2;iCq zIAN(zR>POu1h2bTp-4QGpMmhr^dIGV0`hL1_|F`e6o?-bjKzk;`?K7@x%oJltC0?M zH)F8W4X(_}M2luEzi_>3S5yeG8@sYZ$Zq2P7xGfW?U2MC(-8H;te_%2%Oz`}-sasZ zEC9?}z-m&>mUj!x2uZ!a!}nVzQr}x*Bj(tE2PFKw_(3s#re_T*rF3Jlov@tF_0L9< zC(Y%p45zd{`pF-d@Hd5@Ce9n_!?Z!16gQaAZ4vx%n4R$TR)d<=hLN%{XNxb)%K@GQ zH-3tJQ`%AmIW?i;O(I{$3E)YQMY87~Ilu<VN~ssEt*R<N!X;lVQonWrNS%TwgTgeI z<X{`rF=^3U@M5F^uPx{#(N-8|rPDmaRQ!}K@euA-l1Vg*^w`PtNOMPuVTc0hrE7)7 zYPb=)I<w)jStlyjS(AA!0eme+dej*oYI{I`!bEgMVJRyFkf;q=u=SAAY_3eS;v6Vd zRb~-kpLj#U885RCF&}T;Fn`BjQYIe7Kq6Nxy_L7@CcrIhU>S;yy7iA8f_U_h8oVmK z-`^x^bK(OTJZdHAP`NrFPtT9gf7It4eY{NKQ#Psvp6&9Q&K#icBBP!9qXq){>j&{8 zqC8t`$-Zu!tMx!|O-#N5NB;0_C#5o0LM_lGrZ#o!DBv4z90hgf!B0N*Aw4$EhfTt9 zOOnQDvvD_QrhypLSgRCn<n<|#Mq4>Y6x=xprz?9Ei!joCqQfyY<ZZ3a4Ne3fqIA<M zRn7yqWO0Aurc1x>G##If#y5dAMvF5tzBnchUQEf56}!vK<u@dh{A4ppfn3iNwK{eY zf5lqH+A}D%@v<T^9I3XSTtGNs^Wtn%qbQ2Id_=z}4!qEJNApQosH@{A+1e+gMo&$u zZ+@=Yux9CXH&MYMrH(b{V++TAw)t#7Sipkzi>_5UAB%V92Vi;3q^sY^^*&J0y@bYq zSl8xOLb40k@7wra$!ep7o;wi)AA~lt(0`l8^bIJQn>X6)et*$B>V#;HqYPWtPf z1ElaRrkAYHnGcJ{_1Pbo!AhJ~;paQXLGArLTZN5!^+<UX-edoMUv(f_Jxr2oAv<^| zQrp${FsGZbgL?3GNzo_k1^gElw~7o-6Cb)&J*cj)JiDwMh(cSC>Rr1M(X!1)e$n$y zC06$21RzhEtIWL5227Q8^(jnw2tg=ACG|5#y`oC}i%xK>LI;bV{pll)5IVc5N=1O_ zN22gdl+uj6;bmH#&+7a#DMxPO$W_)Ez4g1PUikD_H30#8m&W@F8EmQD-Ze9IxNAAN zlbQhb0y==MhyZpxUbm^51u7DjjSUWa_UgSPHh-ivr3_$+7!p6HZPtuRN!ax&!DcOq zGl<blY;PhTPi*(sd%uk84e#(rB-VT|5>x@?r=nZ;j!j`cdbop|R%R9vTYd?R^7ML7 zCTa{eO99Sgdp>29pWnbws^XM(X@EvPl&DNT5+@}>l8p5_B(plfF_q7WwCMllUrZVz zFehZnNZf&`POc9C=3wnna@s@~G;I{6MKOVa9zAj4YiC;7Ov(T>Bi_s3{dg?kSR^u< zLFHrvFcDlz>Kv^y_U~iXyf#Xj`j0kVK&KwQ(xwn#r%cpvM?(%#>Y&u+dgL{yZUmD{ z93Ye(!ay!(!UuhZB?caXK(Q~x+`z=R{56N$Lz@eQN#30o);8m^r#&YTj%jiW>H$$3 zBD*jPi_)A~8#PRKxiS#U^hoe$ayXN*Sw%-`T%Mg@#{7e_Yroc*_g-g2$c9M4)NjE7 zL1@X~lZ@b(X!3`k-W#?HV?K;-<%~!cFzWd>>=C;v>kA)$FxbYa4V-CwE1QG>(}#B* zIlaS|NN}v<Nl-8*lsqhhgi;zYn2<wVZ98_hASdD%c?*TGg@IB&e112;BoeF7(-=(w zn2xsl>i25Oz(2V5$mdJT#&993vIbKG^#;%$xG*;kKQK`nO#iueMbtY1nLGUNHUr0N z`n^PN8DYz%sz!~;fo<S@YmruDiMD+i;gC$Jm%?)S-46<%>4}?Di8P2md{3zJpU3_5 zn_b1A=5ib(#d+=gYQ+UmSLcz_bc&eGFGiLq!99w5lg#iKQcLi1yu@-XN8LfETl$H> z>EVg*p8pph&%E8o$vG5TU{-40kC;KR_d#%VMg*3(XJ0d~sBpz_uc|$W_5j-<Fmi-M zk!1^2e4t+uy%gKhPB3ho(oAMvGx!C2QR5Th9Zzx!eDevcuA6>!t*J~zDi+5QA!RFA zco-L2V(-JVdQh!f{-#K|$|3%ke}Rxp5un82G`)#h<37hY6)u0M8D3E^T$M^GKl0P- z`N`9zi;gn1<*J?T!nI0(szkdp7y9$v^Ao@y4Y_r`%<?d<V>D?Jsb50Ye|(elNU{n& zd2}K17w`YKqw`y;%)C+|UnDj;HgC_}0aHi)(GBzAkFCH`n!uiIg9OUEKjLSg;#3*U zkq9SuM7-e}#%IRWbu2n~pU)JbhHp2lPA<t5_Tr#iU)=pF5N|CwZmMnXXC<QVcIU1% zaVu&aUwj-~pjKj;huYIa%P-gMdhhgwpJe}eX-p*he#bMx-^7@&nVs#soh?y=mI1-c zOw<5ezu1KbO_kpbI*ZeKpR@7)lw8NR*|7sl2})jszGU~!1oz+oU?3WKhbMcxwqkG4 zH*sw=AE{IYjqGfgT4k@0|K=Gw0?0Gvr0+KN+Og_wAARVPcD&yzFS%4BZGLKh-TjRX zsQ%)kE-b`;8+S|W0XVG|;KYMsGsPAJy3j4jzu)7fCnW0xVekAcVs=9xqrjHQhEd@8 zR(rKW%{dnqv@!FFea>T3-obYdPvQAtm~*ySp@_N~NQuxM88fK(oIrG<f~T~=#8LoV zt#TeueO&fp-<~k%r4rT8A8KA<4P#A^u~wdYe#Uq;(M-Njm$7fqwEV70hEAy`RhyM} zMg%DJprVb!Jx>k9j#Rzs0F44BiY$>(Nk|FptOAok&2j!{giKM&g8GgI1}G`FL70hb z{LFoG2+9-<|93L&lMcX-F70I+YnJ`fRnLNh$*-Pti>&s9;W33^u;C4cXAG`hd48{k zx|lDp>QCrTGG&;7ZY`}iLHsD$ECCR<q(V*&^N>^DiOBf@09_d+AVx5l0%(sxblW3^ z>^&6RjXo1uCg3N-^e|9J%=2%N_9KYLVqotCN*B@*N@yh6;^-A`RtD(kki;4J5HDet zM9TTmjMqp#2Mt<@pJ#*OGTJzS@}Y6Zu7BkAEZyB+E!)JnzDDD!aSs@=EyOz}Ps~M} zj2N8d$=U53K6+^LO2t<a>x;ckW@*_&?+6?cDI(x9vdpzN(yP#jyt>`XtsM%j;quQS z9_S6~*@Sj338#97<Fb5-U%hDaMuAhReg2#K)?S}%l6sY*3`22S$@~PNg08azC68qK z_s45d-m{Abm+41Ha;eg1F@FOE;{0!N-7-D(_@>x7fJX($>mTy+4`JheM&dq-2C;YK z=e$ivs2^E9XF*ur8hV#H<zT;lB-wdot%J!4(;R*b0L7}dyB$#Js1rX>76bhgWX_|L zoLjOkC$?lZkCSd2i7Y0Ed9h(MW7^r1)MEzOpC~&jB-u1Tf{+<1w*Hki+4H7u&hA+W z0)yAMYj)SPz>*c7v$G-D_oxZVW@gjeM7|FeY+E*j_mJiySG*2eouY$F&8FL+2WCNm z>@*G)MiHiuo}jkr>5gfNsZngyFmZcDuHToSwk3!lqNn~^0L~2&ks5mgx5iaMs|&Y+ zQQ$*3hE|2ll}+SyN*}AaKBsu8iP>LKA(O!pHaonrclduTj%YcGD7PFO5Etm^_f*_K z-Lp-B8WC?AoRN?XLxQq%JK%HViXAZnjUT<xGs>7Aiu&p!ScHNMa1Tkb1tLj<Xv6q! z4wI7G)vYF1n`;%(k`8+ljCyXY-@*3K6-Q?k6~vR;n<~-px!ADT8_BTIzma&I!s;Kk z!DFF&*w*g_Zv`nLRI20#QC)G6EU5#OVXs<{{Z17K;tR7X9Q)vE6U3pSW?IQctFT2W zU4l#kn&S+?w_z7#;SqlWbA{S>Y_4+8R2P{B)PW;J%d^}CRp=X)q}D&G%WB1pk}#~- z`_|DQwNLr-ut3^!l{&7-S%W7O@OlZCEwn*!m4wL*-^CL0!!0SD8G(or;r7b}%W|2! z!s<H?NG*HYFIO}#D%~994G-dr8(~Ue-2uf6Z7k<OJnh~<(_Vz?)o{=@=6pEE%O*Z& zm`_sWUVMd<16FlGsgpvYBY*sjbel~*zWOcy#_mItBgU$L{gecl8@z}{Nc)CV6~}F> zuf4gU$5q#1kSgrBUr(cZL?_oxx9Gr9BG1NrcteK(u<t+FsrLM7Qplfx@XOxmT87wT zL$NYvx8}g#NHt{sUR|L_Z69@`XCZ)&x#opSGFuc>H`enQRdBrGi51H1Tz<j^hD4(} zT$s&OO1aT05o{ceh+*6@B(!vPsxl_)(yHxI^dSrs=m745B&I9I;hL$7D#5}dNs|F* zRP0X5Q`mCM%qOw~@ojEuMjimF^_@zLD+;3Z>KBQsdE8ma9sf(adotBjUN4iyK4;b% zGZz<;*zilx@u73;12EX4&PY&H+>p(|zSs#P)iDxI3q&2!a`Wljpx>N<*h?f1ioGJq zu(h~4Q|-FYa4AU4mcK#ym%3TVr8IVfxN2`*K^@mM70kSSAOIwY7;|cVuNI33<Ke<o zQyG7TkE<@Am5P`#6TIB|31dI3qX}ib+fuR4YymL@<(m2$;(S}r6t+I;`oA_W7Yo6_ zzYVYnVN7*FHp)jCN5#Ec8q>?Go<P~V_)g>kCjvwwogmT>?Lk5&^m4fEgq;v(pk9w3 zYKho4*$U#~pxWQ+g-;k>dIEy*#1~TKyNifK4U<A=89ukqo2wbDYA*mmK)$~sI+Oc{ zm;)jsgh%CBPuJb79{D$B13<ojkCHHL^i~$O4ly3IlbFIwu{yQ+LPo`R1Z}lM{kkh$ zrsMghM$~6vbqph8bG>(O`uMaZ?V>U%+<<&kM`5b%hkYTI?1CC^fL$v~u~VR|9A)1r zWJFLX>3ax6<ba5t%#Bg!rNjxi_}5Y!PUN~jx+Ybh45j?T|3oOVEE@by$e$LQoW@`q z+KY@ldA)Pq{+h8>`b)Nz>A?X=UUC={dM~K7#TS7qC%_7vDca_|q(`U(CAH&|Pd26k zsLvPt2_^Gl1gx(y5sedRRmZYoQ`f1^an{M{qzdK|kXln9b|jVzag7eyL}!Fc<ux+G zZ4c^!!HGuv!qm~ZnWU&5H+w~Xf-P1!H9t<FV-XWEq@xxH4$DQuq{#TyLp|<T<v@2Z ze#+W6hT0lYu8EV3)Luh^RMk}bxM3<P;=>N$Fn#+nK8B!TqjaepZ@nkGTb7Li89#6^ z_*wQK?#hqPV~u`5Cs;TNT%=qc(4EmDM#0eBBJ=@Nf=*}A`wf&k#a_T~bFp@`0+I$6 zx~yG~56w~p<9dMDFc5oAJQp4!k<_}ckUS-GKmlKM#vq0qy|t98Xk|l>xdt=D!*LH7 zYk??2Q&#sKmvcX^hk4dbH{AZ~JPfVKI+wC`ZUn`bx1=?<1c_{S`)2RPn4LOSKR8Z8 zb7uZAiKzSn-_N<o4uOPFVMfue<^x4Cca)DRly&WlcNBwdv@ygO*5X(aKG{LTh0IRm z+b5K&MqM2xM=h~Tr<n|pPXdrk90?HE!WF*i0-=!qFGXZ`8`hLV4UE*P@azA%FsVu2 zsAjCV5jqv`yg`zPOS$n`1y(WrLz`SD8ED4S1qAyh^l)8?b&tN#3wN;&wlW?Ew~+hJ zHQ0QMMx{J^T{O26t7PE?kEpZbJCXEX+yWJtQxksganQQ)vje)abpw`uh?FB3X6X$< zxO$U+6wp(<tb9G~;k`kH*px)cS}i`nhsz4CKf#T^+vHyqaU17-+nv&vI3S})Sf5Cl z!dsPP;GN1s`myU|^#(g4NVL4#G<?~>2-f58SjdjeU>?Ra1C?sqCqZGY@7cwNhMheu zTt{e0kVI`x=eZr#E(T$n_}9}%v|1;}TIBx7Aivky&X5VQ0g^C(VC8bbI%bJ`*$#TI zu@>Wj5VkDur*CS~D#;!E^>2fp4wXRX|GM)9nsE>M_DsiY=r*%<7TTr9qvt_!9D4NQ zcVoBGj3b3hiX7}WyCgRO(!Q$s2WOiQZkHO>%PlaVgJ_d9*{mjM(Rju%sbi$qK$Gu| zqs)|I89z>QQ&hslP;bRD19J8;6f{d7ma8nM{ZRJ1)oc$K9yUi9HKinWb}g(SBH@K@ zC}y4N1i}}U3#YJg1@mH@vS12?6h8p5{TjXW^=wVKQf5aKL*ZpfUy|a=8cJl2!FCbh zEMDT2$<)faE9vinjkb;DP#8P(;cfpjs@T{7X7Gt1+EXCKZ;HzZyL4MX1%N@qvd|w6 zQ#-st5#{*cGr;nUrI9pOEn1!(d$xTX&Y`+{To}_=W$e@=*BFE{pf7>n45$Z(lLEH} zmC*l(Cv7!Fa)t+#ZYYRcO>q#(V+ua<a!zcJ6liRG@)~nc8DB#Hl2hbuxii5~eJOqs zqX#c!75xx`MLu<eMtXGebpjfS=C+DIhzQxQ!FHz_>Qy#P`i}5H<D8`_!19WL33a47 zuU!T?-@de2ACJTyVe$K5$+|j)W$p=u<$otLUmjN*khKDFttubiEBm|tM$19psr;=k z3_h%@-cbsmyuoM1hh(S^redd#;pGs#KW)B(n`IR+pr_@K{XLrFU1yV)b5JbaV7MZ; z%hKXo>hO=g0T$l}mVny&@E%R(!@y2bVE8SAhQkOlHbA@8@RFb0Jo-eiKlOmqh(W!y zL^ivk>mtXNwWg5m!iE100^JW+<YlQo@#+@)TFlZvyfvU7UR<^l!=ta;OrCx<%+Ph~ z_E%GE2RA6$g@m`msFQ3NE^KYJ$7W4^xv|)e(d5ctcQv!}Nz(A@-(wF50a0;$Q?ED> zAurS$LM95aJnCp*@7>y`PyBaATz|jR7~#5>N8T4)%lw5DvD3tO{kG4mxK45~8LZ~U z{rB2>2H)>?89JY-@Y{CuOTn9^!+%Cm`3jlKRM4GTW*hWD;7CWoCb|vvV%2qgYH(=S zZW84Mchs3xp<zuXu?q7lXn`XM`;noGPU3s@us}lfXf-31(sewcL$wW4+kBK_D%NuS zX>eZ1+?k@~;&f=Xc9`6PRg^@eb5P&zMqr_CV3Tc;m){qU7g+cDjZZ+x+Z22mD`-CY z2GXJd3BhNY001aI?Sm3u4ki+(<3*nUVaXTuPsG5d4|yQ#U<>*b-2Q&OXS@*S4Fb%M z4qa~;0S9D$mo?rWC6ZSJLWsRxO&ngsD_(IE{<H|)NM><0%AZ)M71WtlPz#1&T55zJ zY1@)Xlmgvv>s{8qcr4c!*vy!$4r6{i&b1<|vieHA8(VJI!5~05T0Cfbj|JpLnWw58 zk6@I5++~^ND0(RQwy!)L5jD983-Wk9NT!4>5+;(6qHFy#GlUyhY{R*j*VmI^?n<?2 z^LrH3x_z8Dz=NvT5=G!6ycz<jRr<_FJ+zX2+g%5l1>Vv)ts0U$hK)aCQP}uxCOYTo zK{X2p;-KVGYd{L`Vu}}Z3SvLi*{ufVaZmSkbs8DdBC(c|PFtTS&uW_FO`zb=xATsJ z{>F9#KIjB7TA}q&1gP65&ukyx$C^@CexPnHv!+_`^_NUif1Sw7`lM#uOYssJuZD8u z`XR$Y{jgjf#3ET}Novosdt9#$-43&`6u7?utvaa(yyj*aPWDND^vZidY4}UjVb%|Z zNPE|(L-<KKwl`A$`Kx1vZ)es4$|G~EZ%qPKd9wWqET>L~qOxt%IzO{@y-2HV2j+Pp zdC_I*eaZ<4efa@@Xw++(U~8O@p%OzyQRpgW2#L1|*CvUtw0#VLbY%JuY~K~+8#pN3 zb_wQ}p_H@?Goigk{Wn@}wz0)XYvl|W7K!Sr7cL3hHtNE@_<c_l68jG+{t+$l4FY?# z!zCxR13}VaGNL;_G&-~6kKc?yFJLSEiRnm7{f2ZHQeBCooeU4*dp`wnp<~OV-?1`$ zLsqOJjOghgG7oZY0T_V#MKW2*?>Q9YM%|yY5}b#za;#UBvL%4t5J9dgRN<P_=hIAE z7)-C@K|z!_Kwevz_k<#sB2MXdaxORCg1-ymgpEyvemtX8)|u{vz1YyV`7i8Y-V}|` zR7w7?N`i8uUWyW^SrUBS0?xbLle3Ou2bT)>YDq;V&jeOkqjgX7SM1I4x{m2b(ya^g z#_}Dv->Iee-n>g|(u~~jHZ||f{^Toc>A{<TMG}f-N*|}{@NOlm4DAypW9uMstx$<N z*BwZBL?N<$<SbUZvpp=}{Uo|ur~D^*;^90sj47eDdkBGhCLg*ak|py6wlFF;xe9_U zVj<oVIcVs;odWa+3v9c_tzS169=)$$nJ|G<Sx^_IERzN}Y1M&uVBi4Xx!ETtRy@r! z99`JrK*MgYTNlzJ+4zQOhJvp_n^>$4B75c|Bx#MoOdt(O5l_Xy?8NjJ;|gQfT0+<_ z0rsKpm(bP`o0V`<pbkOh$oTd=CxjXu#tg{}LnVg6sz*ODa)y~tS48Gi4;HmLnCMGn z;j&U-C~WGLhOB%FS1|n{4N`X>@#-W<$1$Z=<fHLCpCUhGM-O~rig~s!3p2XPBBK_k zBVX%+P##2y;XFUgwTrZwQY&2;Mx@GlyCz{+G2bVsaQ2t+m>2-FNl}K#QMUq92i_f6 z@hTdl_Jk9?09(8>p>M8<l+pH>$wYM~@j!{>sETBgMW!FxVOu6jriZtwEbT_<R{z-) zsjWyVFGst8V)}7v{ul+dvi+s`#)>MHMO1o(WB*|6Poh6~Zp|47$)i6Q+OWP!;k;UY zkz?!1<(PjFW=Z|IJ&hBWYht$Z0}lQd;rbD>XFyUgzx@C~$Tk^8`qPZKK&O*oJK1*u zbd3S#=)q!B`sBn^5Y<6~c73I@d1jAum0lcrABCwb;*_Y|MV@%?SWk{k&Cw;fXyefe z%%E1Bo%cRzye@Ep>|hUH_^)eTBLD`A^$VFT0=Q5AQPgQRAm=F?=Br+@=J28{;VFW4 z)J=pdb)caE+gD*ttP9upLoZFH$^Jb?5!FNUxUkg`eQL`vU5X2!@>(dQ3s0t|xB&nF z02MwaIi7Fmy*Ro<x`O4*cBcOLQU=}sZyCIKV`T?~0Vx=$-Z(I@!`o)pyfKx))VQp+ zWHlel&keU|w*wa1A9UjdFqqg{CfBxSB5E<aGk|rI)vgqr9D{wO>&r(J-LfWo#NY=n z=fsqPW+{8G9o5fKn04Vw=xw+Jd*#ocMnoLgf$d;DFuYSxpC%77hGd!|A^Q1ZG7%Uw zoskGhEFQvrIjiL_YK{}d(x-S|5Bs7(5fvb;uHrSVY+trV$DVaFv7rn;ii_SjY$wr< z3KRRsdS3DD8e3B{$~2}SmNbdV)(E|cJprPsqs2WUT4r_$udS`a03X)>gT4%$t!u}I zU<`Sw5KR3D1-av)rGd*!S(}qW)i~QLKP}(&HMW$P5-CngbocoYKSUxza!N$maXP}O zbNN-7dAe{U`JA7_<Z*^)@iq41%$Hl<L)*z0j;~u#eW&LD#_+kTw;kc%5%A~lObK#6 zi^aj_$JFc^n^)8Wl<ro<vf<~__NaJMWQQ%Xv{ZS95iB-Rn0>-@;HWHDDraW@;AbM2 zsUi4IU0;~(2zmjP0OAtj8>kd<FX8B3i!g{I`J^shVv`6nmrD<9Fas1P_|KIr8ZPhf z#rar@l_oD9`vcEB6CWefTsb8Q{<On4*;y5<V!0oT$Y<UN4T38hz1+v0M9ZN6hBxXP zR@?7m-UwqQT8gMXQjvF5o+hjc-BQWi$vH`HACuuKXBx!Zp~`Ux+XK;N3246aQY3#z zTv`-kvK}UGr|WRbrWOji7^ml$LA0i_vn^%ku<%|@l0INnw+MMT9o9~k(@0Y|9eZ0Q zm{j#`3I1ID3=KW%NazVhYXqu*=q%ZDm7w4zVl}@-;w+=Mg~iH2$-UVu_Lnfy4E~TL z+1OVZ>{X`vvt39x91+S5$pz(7kpE&E1BOZq=Vvna!~tHmpdT1+xx=JM=^s(SHENf+ zmy5~phi(umuvea|q0r`fM^*1e2WP}Q<b3w7JjczWoHMO+ml`@p4E`zGvN?VO1-tsc zF9BiU)fr6>5PwaWWas3lP}IM6v*#a7NW16d^e`X3O@``e#Xba2OrdfA3Sp|EW&T4_ zI~_dF#mUeOz6>K><G3|%r4fXo9N4H;PWb+nRN(NzV*9ezb+h<Zy-GfOqy%)8fX}XH z-%)F+@g;sx{Osv>D=u;zHBVR?uZQEfKcXagk=<GcOKMYqWJQZrrgI=A0V}0&NIYG1 zdg+_})4D~Y^J&6}aXR6DpaL@e?0J2_<l`nCK^11Q4ip?lK_P|^8UtQ->~8nxTF#Tq zX0ckHnTPJmjBn$wFOJ?d95f2ajyI8u5TpY+{Nt9&-TDH%oY;nMVEy<_Ap;+FoMX7s z-r>OE+p{B=6(z~cSZ*nf;U?$Eu=?%RCu7-=LFI5Z|5Gi+(GInYI%JNtIof(#Vcge` zU!VFFWFtp4c2E(FlXW?`e95$Q;Ico)@t~I6K?vwf7BV$}*rgtU>C+evH%ScQ$W1dR z2NsP@HgcsWiu@2Ep*8qqw2hZ^duLP4QtPl1;30V(SMs!(1YSl@?Z%Yg;0cQ#n)h~( z;=v$=dsge5S%RQd!Rh9>daWkGz}}lt9N;ntBT*$D6fWp~V&VK%)r{FTi}`dt#^@s0 zfzWBHa$;xDlr4FqipvM%Riihef3CM-_3J)1;mPIHH-6O}NdlBED0cN{y#F8TF*Meg z<3YfR;L9D)Tub90kpRIco~ZfKIwA+{QUZ#WhmLt?=q4d+WV$}bIn{+vr>WBC3$Fte z45Ep2dljv3$r<0da-%<JDF5kJrX%rh*Lgt2xB;tcZt;hLSRZEvHa~mTT^sIZNpw+u zs)NAHx|KD~9kzcAr+*+O2X|{Q1kJ(FIV8e1%GuYZ@wyHtPUyKk@7E=$+bNA77SBK` zCDSSFy4i;E`aGlVhScn|<yG<jC3q0VACpn4$Rv(Q{jCml={v}o`W1n!OUqTU76Scu zj`Afu*oyClo82DcR-mYK;qbAYj;WWu(<KPf=@6UTauxj`z<ZDq$yBbI_jgTT>+WBJ zg;@;0&jl1l_jH=FQFU&GOhu;ALzz!c&5lYmEZq|j=j7-sAhOgN2E7?tf@W6TO3-;- z{#v%m8TLyp^Or`|!y#JmftpFV!T*cCVUn|D-5pg<RV}0XN0y`eZ^kUxj9n#HMA|Xg z%#gV`voM=f8J5>C6M8Sooal3!+hguT&G?LW$lB=D<}6UJ*3^qQQPEfj8f}XGjeC+k ze-eye@Ah))LKlX{W$~+aI#fBrp6``_#cW$pLWDg2XoEk+&xmx@mAFGX%YLR*aR|9u zg~>eLmTQ%BsjXrWTJr($a|*Txb4oh}^ltEvKB%E?9QkMyV~PxDyK*jb-ECDf`w(32 z2lxE-bVl}A*EevxYta>DjH{F;l1JtCYRG`SVjfhv8H6el0bG%U&H1HvIFLI0-fJeG zx(P@8TDDw(QS~C+vu)8!kNz>$LS2FgaC<XR$@I{2x43MP@Y#~}^HSBi_O3Y2LO@|i zm=dApjNLPtl!%pY;CEBsomkr3)jR^j7g-(T+!2KQ{OtdBd)XMP{fEIk`l+>axK#7k z+y=w09zr5WK55h#95A`}mr8aK;yr1oMjHU{(o5M(<-}t~qWGa6XmD!f1HGF18^B9% zQFJRt`3Q09UII(t$^ZdrT_RQIQUc4!@P;L9l45D3>YXWi(2{NVt{c`kmzS2i^c;cD zv_oOiH>pOB*KzPS7{gzCRh}?5xp)qJ<50kzQ*DqTxlcSgbns_22-q<*ZYZmbonREM zC4XZ*R5wz3paqm`^7wdhuaT?I_Vmt8yJGQ@HDz%@0obH>)&80?imBKPU*{;h2Vm*= zkK<49A5UmDQRJ2dUJggD^aIo(BBA}W>%nMlEi1qrVpRvEDzJSYwaB<V2Nc)_;#SEv zn|*l;6U5$@JAXh}92;UFOBTW^!#M?k)@*0Z`6OC3?+5R_5;ts{f|X<L-7CUs#fpFw z1^34;=0NXoHkdjBsOP4F`F`|4yb`~ek6QKV@QLd9&=7%ux_tR%ZsP@1RZhY-z!$Gx zcmku;KEk{snE*dOJE^q9&A`^%+E4FHKCfI|$C!4^M7mKVZ%=Xfx~WBx?+XN4H!s+d zVEDeNAtn^I%r6LMZut?9%Ay|1{#UNrO#)au+<xs&mWmY3Y4ybb;#Ao=1^T{^>=D`b zp;Ei3N#+rsjR&T57=kV`34f!eFBGtp(G^u~#;8ggCWpc%=8XRJMbkjI<w2K9B~F|q zZOI|ZH)j#cDsOpIybc8SO2xPJN}U35C)y>Q2Fy*4Gl`4;`R}%yNGxzQKb1DVTttIY zEM9NnxpR8KRrS+DC$sjA4ke;+D0xllG(<<1pz_U?AHYm9jAO2W4Wp=(WOrj;&z6g% zIoQ$@afK<BcE$Zu&uZ1$hFd`&w(FdV6>IegrEEYJ$6@XCoOP%JB$`w)m5K{Y%ykV1 zB__=X5Luf(!}F!d$lf!*R_nx<Zd%YMQ%gd(@&*^_?f_gxfbb9ew&+HrCzKP<dYIM$ zSv~e)!qzi18paRR<g(=hYhtZ@T-Rc0?eqXRgMd%J!w{BDZxjw_Myev0bn{_|&t9fX zE$vXE(%Z6{Z8VGAMhaW~ABM=GP<EWyR}zK3+Ck&Md3^l&)B6;b9&gwL?Xa4c7JM*p zm~5XTNEhR@>KRnx<@}gK;Al-63l7Mz57GtgEG>M(QVP{OTX5HCTiMIA%{L6^!+jv4 z0}K&a`k}8t)^qtjd{~BW^j%R11f}S+YU5*D=cnK|6@+v0%S!&x2%;F5soKE3{7GAv zl&P4_h0Aum+F?JsKSopo@3%;C25@W<v9k~76_jbM(Gcm>dVMfqjJe#YexjhkTfdB) za4#QQP6I<^DOQUy7NdW<ftJ0bqu4yip>V@wc5GJ$q~yqIQgpW1DUJv3yx8O$E1G%` zHx=pFldseViEm?IzDzvaE>}3H*~qCzm(rystkkPVH;Wt|t71C(!E<CDxn__6Ov~!u z0mqv~2}k$O!COopXr>a<6)z{sZw0k18BjtBKG_+RMF^;;i3Wfg5aMa1C^)c7VIMf$ zm;Q5mn&a^Q`3bSp@Db&c9;yjJO7evz;gs{*H$fy(Kfo{T#Sx}>+swSa=TtW_cvWhC z$8%O-3IWX-#HVJJHC-L6+UNgEuF?fFN=CiiLRu*m!|y8nc2|(mxh+)=gX!>eMLzG$ zXc3-Sv^H`&<C+I<C~-9FdpKs8vXQaeD}|}d2CL>nQ>^n)&SyO_Qo~RAlPunrD^4(x zK7(WWjibvO{9qZpp9=9Zdx!QC7gK{}oQhDmEIXdr%wg8Ao<vu%XPLo@A~kR=;v*lc zkz+<&r=xkiu7*PF?C_GoB=iZOy;gIEt?IQ%8*%nY5$lC9T#1QgbF`Ssv0l*q5T-5J zs(nZd)%q#pL9A<u2MMHs<d#=#!(?8#6!L!3w2{|fv^h!_P}o6sGZi?+Qlj{{Ng}O% z7(7qRG~uE#FFyin+C?pMhk87QXA9^_mlXovRrKlcCZB@?>MfT_IU6?9ZLN_74`muW zkoho-A8YKNCt(|yU%oqE((lXS4c5)w;2ZW*fQTcLg<GaW2VnTBr0lCrXDd7Mj;s!Y z+jb?QtKR87&Z00$1$-NcxT77z2B=gOXh>yk$x&eK5R*tjcc3~9FO_QJK#PavNBdVr zX2H(kgO=?1xk&jN2$7Ee+qrlzeTC?<C@pMc(i0L*9C`*)uO|}G;kzMTbp$G_iq_t1 z9ll@SRlk?}zBSFm%LHrxXhH^8>iY$b_7W!U-w6qy|K^cu&h|7@Z0{?r8$g_d=5o{& z1tX{?8HOn^L;8VKsEL+ajC)v4P()#o&zPq>$jj_Ow5KQ~RdT~=>9?w|*e7>*B~pc- zDi$QdwapAg>aSr_P*p+FJYkGC=+d~<x=GcAI%c?pDo)>B#F3-0RUgqrS<&gk&+cyg zqst=H->Fby;pmdHrzpF=oEx09%S-ctTQOa%MK>D^&+c1v##SxCAU3G|f|>SUK|1kw zRX`Q=t*}`Hk1;EmQ2qWZ4CXuVy|1vlH#{;2?q`n2htovNY$O=!c{RzPySax|ISh8K zs?#Y2r-Vx4Itk;uHt<hgJYYb`@9m?*E`Zq=Zsmz_(k&(e2S+RuWyBAg@e}_QFI~sU z=mI4-R@NQGvTo7*z9Jl@gdleBkP=8W$$uI}$_2coH#uhANF{7VF8zmtqFEt5PKbeE ziYudqd?wJ5DKXIK7xW~QMb0DB^j+Lw$*}mg@X?GF`k%yH=$tm|bsqzaiY9+X*9wh3 z(`AV4y!k`-Ix!SbuT~%pcRk~?O9s0N7zC#rLU=;13CXNGze^UJxwx1OS^u<H>U?Oe z#W{&H1}1pU=9a?z;nb#n3KOZ0H`=^L{KYlo-37RSG~o-ZiaqwvAPkWtiO*k;1kIX~ z@GnNTaPjG8Ay9m@YVu>FC#t3nti<?|#JmBK&OBY{s(h=CKg<oiAir$w^|<WD?)m^5 zwU0^8tFD>FcZEuf+8MUQKrs1tZ4`XDR0x)}F@nB5gbf_84+$){lC>!TFpv(dNTd1L zIEJ!=#f4*C^$GO&(UlByIS892V`eIPe`eBNQc?GpR+;MmNruKTJkt81IDz!$z2on= z$~DB}${{bo>*K3|*EFA#w#uU&8W(Ir>%|=V0jH=8f?CcI{gjCC36_gK7+bF|SY;?G z3(>fR<V*o+ZquFr-EZ=zM!`N33=lAmN|BU1lX3bIcU*&%1)s1HdK*m+is7~UqT43; zA$M-E{}UArLL=Go+@XSc-EsAc3$n%2N0JC3D?^K^0AeZBWD8$Hvtrds9c8S!|6|sN zX)9g_kqNe>&`enK<MH?BqlHtw!6Sd`Dw(PcpXko_=TvdP${s)YgxKu6iZe>ccvX>2 z>?qjQm>A0BxUe;yiJx`wC-f|^P5FfPv37oiYe2_aF>A(mP1rQOxK0|S(IE~s`&*Pz zEJtJBTe^>}A}ICc-x^V%2?lqg4hi!w!fMnba+1~BKbL(;t@WL{BKx;Uyd`!^e5<HB z&uY6!MkeB%)T>&{bfPau1$;up5EdR@$9Qbpx6;z0fU7XNL&)AcTmTlWd(nDWt0hF< zWBLFdQr&)-*KZ!cU`hfO3m8{BO5^_n1>fcx(wCB-auD@bjLk@~Vg?DI$YV+aGe8SM zORs(^Ond+L{L$7*^V5=G8v!dZKf95JX@JC7d!E{Q@PXv#-#Ve(nufA-|B4Ma8jicg zTPD=Fg`oMYZZFs(GDCtYYeZH&h#qSpf>=IlBvL`NVsZNrTqKF^nfw)+b?`f!q<8Nd z;xc`!uzww`u}=Vo6_i?lZi?6@0000000000000~$Qw{3?4@j_3J~)!v^0?unRXD<u zXm1@@KP1vi3@YxO-;~aCb20!HM8llZV9=qvg#(Obvu?ZAOUS<&Ac>lX<p&PC09@@G z_iA&}veWT6xgYosG|*(>zD>;41bK$%tH6|+u4X&$1vp3|_t#F^Dc}Y}clwIF{5mZf z-4X=n4Se<kpR-W=<ZP+C-!<#M&egtTu)Zj+^aKD=QmQP6<lysrbnxJo4^q%YFhp^a zecWHZptvE7fMB#lkz=TLx{Vb}nMww;f1Ipxhnh{83lWpAan;<cAGn&hs9V7F?!$~d zDIiG)tJO@Tj0}@hvkN843yD&m#7$*<()@!m>al->i!~wg;q;heu1flfx%_SaZbw^_ z@RNozmGQMG>3Kwb3BU12YQ?Q0CG|k}N9LQwrS8k3j45$?<VUKLD2#RhohBB{K7M^V z00z}f=rg`Ao9P(t*ezuM!-0afvyu`U3>Y_$>QJGfw2M&p4869C8S$B{;ZHlh8X3j4 zyE7P#qi;q>1Feg6nL5@J`p*l)N!l8e&T7Lqy+AVD7Ki8q-N=$c`zm}z;KU#!ruJ4b z+k^GcA20&p!7ZifKv-{|<Q^Xe&5Qth&FtOYV-Px$p=q&o>;boirD)~AA6<z_am-DL zDxPrRFnf1c8{`}z8)maUf9!1>tgv;-s|@~cVz-TN=tDiUM6nSKNoX+MZ41_qPV+H8 zVv?d9_W{qb`vgeZ9tu1{qhjC#I?f=z4Rg*2>_o~rtUo~VpGLMOr5$)#zpSrX`0}oj z+ATNIrzWsiABx*y9up9ES`t%i5SRxvemFXxkmkpO$~IQoX`zZv&xz2vuvq{pmo(}+ z4bq1K5WwhfWRYJTUT>M=+!D2H0nM|=46^62o$4`_&=?CR(<&hze|`{szGjJ`pXDB^ zj>tJbTr)IiqJX#hz#Jvx$_OLrd|CoJ+@Ly_TN4NhuNn;hkfPsd^&z~6{ASn^a@7(M z{M^kvOv)^g_FMrTf}lQ73EW?t!_%b?&mm@zVFFH`dRz%-zaS^UrBAwI$t}xB@6qu2 zo3pq()eZ&lGczK#q57)^v#<cl2Ef^yNJtqCxS=^ea|cKXcX%blH{HY-5?J5DVdOb^ zQp+FJwV3sh8fR8~TIs2kv?$mOcv_=$96Sb3<C$Y&?GHhOAhen`6Dwq#e~mS*KAoky zt;09M{~54l6~nO4$2tm9SMYIkp`g*eMnmcIN~H&lgM=v3*6<!Ksh*bEVt>*(d>c(@ zN7sND*Tba>eKcBu=H>V@WW^V|m?{s{x`U0cvG9X2knWym(Fw^QwU!Eoy~M_hj`~i? zpiKU$Xz#Udg#<FjZ%DJam}H0rY{EHBOAn1$(<2s+_m^0ql`JB@2s5TldTJAxu+HAW zlfo$GjB0s-&}{Ft`&A!6kag_HWW#rX37sI8Z&Fjbv11(o>NP<wXZbgUiA($+Fg$jA zM2)|si~#Sup`ecK^>Un`8yA~c_RIs=RRiy0&oud7F+ahle*tY`F=biK3Cs_|Y?SD# zOTSQC8E<&GMG5jJJ><AL8k6$Q(%cv~8L;!tk21K&O#l*ek&plZ*<CFVsR*Ih3{62| zOJl!;X%gV#Hm12mb`4CAGA%!5prV(^HE<J~pM)N(Rvj=d*;?=?!*!L+Ve3vyI#aaX zN01Cd#Wz4+vY2C5`uPg6N2c$7t=p!8hWX6dGnY1~#G*tpP)EUp)+2{va^b$VV>}9n zHE)$t5a0^YkK~h|1}3@{5(v>0$(G<GzL`E12Nkcs-!b&G<YW+bxXI(}**eNLnh!Fq zRqnd7BD+jou=U@rgO{I5<ng+^3{T2j&_X67Z-savEg+U1M`p(^s32h>94xpI)A?oX zbuH})l;w=Eh%tk3uI-asonCTYH(xsdt<SUq8)if&VCa{kLgo=bOT5<oa5l}>T!tI5 z(b39q@qVJS)9CE`62Z4hnmveLjVz#`%bXVRhll@nTT+Q1uryk70(9nCwPr!vZKhLB z$l7h#9M<Yai{{T-*I>hI4l@y14d;6m*~GGZ^W!Q7AJHlAq+5r#)|CX%^J7(yDQv?x z|G5|`4~-i^9RJCbu%ANJQ8091<?RvzAmy&vhlWzSh~)6B|6WZH(Wn)2Y#&a8TBC^; zN6!Sfk@J-wK)n0ejqnm^aTy@IcK~Sx`Ee|7hDaWl{WO2Q`fsmY&TOoruUz9QT(D5E zzPJ7%0%-@|MLN>N^|KXLh|C=O$EIs!EgG9Bkhc&YBlRpvUaZDu@|bTt(sx5488fv` ze$#eP_6rj=Ib)Va%PWKti)Q~??|i;VOC=A!q6mdG1&o!7%le6CC{osZ%rO2l9vZ;* zAV82a(}t6<3mLfe9u9EA{w2#9qCD3p9e7t1zzF9{%^t>KM9V=`HEbLJO!^+ZHf_Ox z*e)xq7aBdk@q~*I6cm__14Dp;P70FlGH3)xNRuQkD6zM~;gfQy4K$8!m*TrAC^#iB z4yWiyyl~HUD!o)s)U+!BF4Vw2)a40}cytk-Yy!s~QjvJ+ECQ1pIKZLCk(kJ~YqXUA zmi4-l?1?dh3}+|rwcD>`eP&%GPa6WOmouPJs|w>=j3;J({C!3V!ksG#0`@7%2jH#w zfa3eFIVV>r;O&!nyh#0bnR)*y(V1ynzp=3;?Gq5!gxYBB69h8OHwNK;ttl7w4`vXW zSydA1gQui=XTFylp_6v)L}q0rqni9;GhkyP@SR<XRvZkD<7r=6Yq1FLyWg9=`yWr3 zh2CU5M?Gp-78P|^kZEQIT^FsmUFi$}s8G|bpJ!*K97^PMoTcDZ|Gt?Ngyd+f^s{RV zWuY-Is5FA2DXP$i&po%UzNFdS;nt@&8V3K5=^c6o8;1=NOpb*=v^dKhB3|x-iz+ko z4$4r!1t^Og;33&I1t^Ev3SW)7;WWl(!V<!t=h%fIKpgUoQ2gqT+fa6DQ^*Jy?a|sQ zLH}%Zg0dt4H&yYo9}Z~#sT$lw=>d)a1OwM&{1w~Hkbo!?hKN80=f@qjIHBz-Mc|R_ z)_S^Q|5OVdkf;QNj6quhRf8Ox0hmsUVtvzrsIm(7j+Ahjs!iuTb|(~v?~p)fuOITf zKFA!tm_->|<|_=l7ajEy)IMtR&U*UZYjBg^GX(ps5iD*I1?M}4F`otTdrS}%)pta; zc$+4$S&LGidd#+Z#-OB0{|+(o(Vz_<mZ?x?AX;H{@eI@wq$yxXS8`rr#_KV^Yp(2s z^KW9m$TSKi&3v3!!5O~I+P7_QzyK}#cu)1WH|WXJNu(%<MochH+>6oVMk%LgiqFZK z@z&NaZac0eaHp;&icM1_)Ij!~@JJZrt5#@hO&I3|PeSD;++P{mf%bMh(r(^1^O^>B z|HA#0u^cMewrX^48AQ{Z&cgx$M%kX^{70UDhyli`5{;+&>MIY(i+-zLhkr5IBdfyO z>r$niW?#I-3|Nu}3&aX!C8N~&-=rkQuRs+~p3If4XvzW&nCAekzrF9F+U<w)8CuoK zyyRFLW6(j(-a2*5F-Uz()f#*?`aJ)r>{0tN-3Bl59XzSz%^<a*IZzGpMfT*$725iE zi%qTQ@O^mc7szGkphX!P>k>(8OM5tXC&T1XpU~NPOrm0<NwNs;QPPb*=qjK;C#~l2 zsF0Wzw&F%xvZHd0^*UKrW*x^?(A|9dE1_o6XewXrvGJ29raXjK%sp|~ZdIyfn0jT3 zJ0@(!N%$Huek)sJo{s~k1}F7($~5nKVclm)gt2r<i?tkx7tz6AAc#Z-kS>r7_8k!Y zdvH;k1Y6V;d-ZU=(lAYSPbsu~oKHn-qs|&3A0eJ?(F@&2+qE!f6Uq3o{3i?(fTsm> zmr2=bW%_9iBPwcdF+o?2Tcm|uyB16iZ}(kwx4&FQx?2-~$Z8?5vPbe@<yotio)pNl zvmWNZmzo>A7?n<+TBOW(bjzkt&7Lml=7XNL;FPCFzYh0QmR=IW+Afn87!_yEsG8-s zvLSdr(sN%GU;ei!97_BX==8*MAM!rfvDe7HuxH^cDspu3Png)bq|)I4m6E)hG|Jz* z?r8k*QZt(cXUvM9acKDA^xblpDu&e4NE!v1GYJK_v;ZqIkBHa_+;#0gdr;}4Vao_B z`<dCh<8C35{U*knGi!;YajKsalLg_5uN^w4d+hZGfL~PM2C;{It+|;NJhDH9*YaQX zRkuMnM?<T5{Vh6;z{On2OPIag*SP>)@AqzGXz^=&m=6vmLH5!Rv4!L3ZpWCf1AxTP ziNGOj#)yg9!WV0VOTSZ&SGJ;s0}b^!vxQGL48Xx#!23f*Z}BvqW=ie1D=gjd^ZDJP zZ|ivOheU6%BvndXO^1#)sfr7|!#bFC2(KXE4j*JfIbE2>TBr~o>dtUbF{G`EGdB2M z<3Tq-c#U-B?%X<*)$N%B%w`rRX!6n(LjEy(C(M=0tMl=jNwfZ*s{h*gM$UrHWKDg5 zy(bqD7MCpRB$C$x)ruJ{aYU)D=Kk4HEu7~BGa>UvoO^UUQ%i6pA=yEhZd50Y-mPwj z#w~e`uv_dy@_q7drJe}z6VZ{N<PVL+fWE<Ai{o#_41MX){c#ih#4Euprg(Z}ptgVk z2mkfZ#Sm|jf3t+e4I}`;zMVGG>W)@5U8<|w6>D;|DBiHtnsvb9izuzr@A5(xLkZ~> z9c(PfFO4?ZFb)bm#y2G>S3$k7F-$NN1nS60+rQ%Oro8nuV$F0&(2?-So3E;Gf!ZWc zcD@}w-ISYed*(eVj<cq^&mju8p&v}&ljQRWo@AD*D(Ug^<ceHJhbqr%IV^^>Ym<SS zIq7YG!kIh;!cttDad2KF{F_4o^I1&$_*L|pD`jJfBwc<^8YQEOGW=GlnqR6p9v5^c zb|j85wnGl5rA(Ejiu|*AO&`RL#g_x<9c!Nv5jpN>7)P@_;b(Ja2t9u{*|@I&&lL{~ zqy_kaINBP*bGxNat#U-PRSssaC;u=}FRDw<`$=c5s&m6}qfJXr2FSzTvV-_;vKy8G z)MkZP^j+|=zK4TaRtdYhF7*b@opue%><_k7Q(DbgM1V8@(bPMyl;=x3KfW^v^Za4K z))h<zdaeM7Z3SG^I#-nYa~T`A5K*mmR73#Ocrj8QkE<}1L2`*!QRg*g*uclDz-0?v z<w{1n6U)+LH04a~0?I9G@9Vg|iF+;IX?D2D?V79aE9+J%s<afYk{Fvo-C5snM8Q~k zQ83R_Cww*gOoCzUm49u6347jzpLwotZOG{jK{<AHAJ2EmqIe8Mq4AwuWRHXKw%#NQ zbv)(`T;V+l-`+l3B+t>9kx&4ANf{O7k||2m)mXi(3TPP#zC_2x)1ktUEsm5(R=T!M zrXXR%!Q~b2d?keWNtfwO03UX4a4iWaLY0yO2@IgDDhh$SlZEG4WOW*_(PKlR?<VQ- zsyLKv+83P{2&csN<`rGm`tm-&yA<mgzM;pU{Y3o~_B>I8^i=R<h0}`=l~A^(;7wj3 zAZ}`X{t$U;`r8vkm8EdCXcOR@@^4HAI6fu<OXGrEYzMx$Zi51|1s^_+o5%~t==2q= zuV)nNgf6BEVjsu;;wI1lZSP%i-Zs?h$(8?vyc<KRZw6#755;{-dR<D3L|3ji7!s;0 z24{tF4398jx`12s{pfNtE5h&1rFYrJ2OFWwvN<AyCLH|6pZ6F~>ozTJD>IvPpANU$ zguyA!-E`F}FY#&Svc8<Z3@%IFO;7l-JLZ!5OMM$|aBnCk7{^{&FN$)^G@rYOHOVwk zoRJW@eKFe9tjXYKIt`%SV<$%mYMl7MaT=|lT3s8k>APLZcS(YXlg!3WU9Rk4@jmYP zv`xVm)jSQ)et@=Zt`A!+J2c8%=doE)#y~ZHtYu+pe}!U&ZveLgs&*NG&HZ=w+Q6yb zZUEDu;<#|kAg)?Fm`Aju5z9i;s-DMGWD*tssy>^{x9`!-Yqnyzzp6vJ2w?=C5{MvH zIor;xDj>roD3gem{#!vwu4_#9!6F~GgAwwh!zgwuDP>y@{?>tSlEpHEzV9ov12}%q zm6cXFr2h9CHl#RsTT}i8GcHro+_G0{&~Q!@<}O`Vjg95_hihuZpxlGaNHqZ?i*NC` zXQ1&59kSKsi%zPKp>Xm@BM*bGc!B<)+0)lDhq2fsdBp;MuO~E$sW^dZzgMbbbNg`W z$I0+no*0|}31nv$o`2-=ksY@{B&l7b@`%8AZtSHN_f~>g2%3%Wnc1_oZqhG>%^|40 z!aug$Yu2=RP70Eps}i#@r?i~;31~};RalxV1)$Ved`a37BEHT5D50MfB~tZe!J-dF za%JVOG^y4gF$Cyw&Co)<W^xSIh9cr6=65n=5=2-j0^N%{Z~4VNp)}*&^LL(blUNVb zKzBRxlOw44a+#WtjT}LG*P>Xrc^3m1lE=G(@SC<M?YcGdSj`vYm}rz1=kHn|m%%CF zkWwDyt~EN`vg;FqoUBr^nCob~j2@xVKT<SH@%aA{)C|M9(89zM)l(DBW`bI4srw3z zuN@Yd_&U4LDy7_p%*(jIQKfY;v8wc)M?VVK0em^zu&YC<-FUH&6A#mQ5Dc0GjXQHN z>ct+@Qb^H!or|j+8&<pH1l|oifSp~U`!5Pg-30jv`ImB>Qgx|MRIbyQHMQFu$U}bW z4oT6DFq@(j+QxhICTanMac1}hg)<h}c%Op0UC7)gd%;$H%~tWk>)FhV0q*S#kxOir zeYL2rog0j=tJnwH>|4a_`R-gFB}kf*3NUYhhAE^H-*w4(kdTu+$J#IjntJYmYz?pw z8J1NkFzWbg7#8fQS@tdb+3ZAg%qaG@EH;zdK;(Hha)(@|EaC07RMy_22v-!Ro3dN@ zu>l1p4&vkKKVMzo7u-czj=FWhv{qQ$e1f=eGyqYDFhFL)*PNDP!ukqOr}Yk(`nxn$ z)xvfuu_J9%!RigyEYSD)Y`O*{0_fbPlT!bkdNIq#<BH(J4)hsHNX@Q5#8*mNf+&rF zFTWhoP;hI48f&XwlnHIUC>jv6ebQ8PS;0;GJ*qxp!((wChQ8cRtxvPr38qmMMJN1u z(>-t{kn(GtqTz4YK{6!;)z0j{f?{hhIs2Gsg7`@{4qO#uK{LyUSTp-DFF+2r1Pd@C zXqx8kf_vKCX+Ssi7TxM$gT|eEXyTAwA0NPtINceeA~xgWB{G1Z3t&Y^-vj}@ec)cl z!V{NDKT=-NcY2!!$j)23x%V*`fI(M^({VGiFL#j4OzFK5&$1S{Jm4E99|p?EYYNzi zVA%L;s$_VwIVdBEi^w;Uz05gl{;h5~`)`)S(MhFLx=NRZTel`&p0<Z>bsru|?S0I$ zu5&1l*4VhqvOl6%=tE`zY6$4hU?QH=GveJI^^<bg-tw>>bjQ1hg`K^C=I3IksgXn& z%j?*?%Ewxo^X`e3ge<OBs?qCFHdG^BJzH=tLIsFbHL~WCG4W|3s<U{M0iF`ED!hR% z+5{cD*hq%Q{CFUnv;oXn_X9xWNxKO9j*F%TT@AD(#RKHo{Y5m6uc$Uq8#O~zE3;f8 z<4AyQ8P>D!^3DS5>gf6TAMx<Z$(MA#%Fnn2idKdb$AOuI;1-W>rWahZO2+qcxqmV6 z=-!Xus_91U-KxiJ3V<Pzauf~a7-(0|KG@CuXm$@ou9^DY{kfs)hhoKrXb;nlGzsD1 z*%x+vDZci|imf^=Ss5d?Zyr8a3C3W5E@ShV#a5Z5mg9?jUmBTChWnqz#Be}7;8hPG zs`T!Cw*;JYS!4^h6RVwGkCI_^X`Q8t*v{aj^Jt^kr9&zbKqtbr)tU5rae-)oc7$kS zD6s&Xci2YyToK=lO2Pi^35J$C50m2K;bAyqVj|pek-_#ZHrcWkaIHot6<#faapZyW zOCIQqvk>-Sp~|W{=OMZMvxs`K`2p|T)-BH`iSw^IxYpM&=Yde}NN_?cDHm++`=eV} zv!j`chF>`a6~?n={ig0`ajn>MnI<I$MI&zQSg6^Cl6K#oRvb733XA@zN2RiAuKsd< zN_P?Z3|6gUcdP8`NJ9q5Y%qk6Y|~CgrDYBJ4m&zTwYBgt3otk^001!N36d2FaRdXM zXL+O<1@EonE(QIo`M-+$UeXC|A4jt%zBg01AHQvDgK#2=<D8?oQ&+dZ4HNLLIFZEq z(8Qb+l6&pqnW87CYF)n4Ee#)^*IL{%b{n&2gG<4Q|0<Lda-q%jB`Z>DQRODRByJ@c z711Wrw+NnMp;QqjpwQBJ!y3a2GXQnLZ2Rir+XPPA5@CA>Fh)afa=N#bp7+}X0U?nS zS2X)6%adCY?Ny)=Z&TQ-aZ{jZltbedtIo*To)2>W%=)=C#6Z<##F4x6t2Wz>XsfC< zJ(b6Y4%a#^IF0oIGvA2?*$Tg%g3*xgor20J_CzW=s-P9Uc?X?q7P)ZAj`Tc9iF)#a zM>)|<x>*WA`{W`>2b7TeAj4Nqk_5B5Xl31~31=vqfJ~{mpwreNGrX3R@!|FU?zSWU z1^k+|U!^_%<Ik#Yz7Xl?-PR34p69X;T6<AjL#))>{DzUk==u#&clO1>YoVL&lSqjp zJ^9F0?O>m7hG5_eS*GY4Zj<oC|A(`q4zjP`RLr8}=mF+!B&x|*CPc}S79!v<fm~(5 znZVO($bOUA+}CbQe{KR9Kp3HBKJ%$M?Z8WaG(y_5G?9V5oz9D>)05X}KO@TVj(XEP zCyQqStE2oreLyV6u8_4X<cm+OEawJrY7lHCA9AwkCwGT3s6*@o+OL_`(N5)^(oM2S z=CZvs^VRGezWK>JP5Ut8`kl(k9o+*CRZ2xxle)XMfQq|Dh2w<DZ!~XEgrcGwh1k&5 zt@%lNoKE5WR~BE!+9M6-PTwzje&3%Y@?+v$R;83?24n`v>?8879MYak;~jV??`Ga^ zg(B-P^Z75)1=$=IPy|=HQ2DH1=u!#6s`$#L69R8k1io}M_`(xFZxc#)I{TR_B)Iv- z6VuHayRMw89G#jZks#b3=)_KbgFsmc1b)w>XU7|ft$uJG4}ugwf$DMkDn^wT5#r8Z z*(yXvz&HtfaQ*~>;cc2&wnsQA86t_UlI{3;^d_Ga9IXyiE`B!9yAKKxguWxx{B#Ss zyzB4R;<Onk>L6S1ja&XNn1!u?U?uA~D>*LL1(*UnHSihM0IeE-_mI@fW^c~RqnfnX z$_-^AN|@27Rc$q1U&}!snlu~INtFh7JZ)9D&793R^VOyY7?G^&5Ze9m-z)^}>?#~2 z_RfV*kVNAHJwP7n2|>QHS#osx%;rTOqxF;kPS|U@FZA&I?dfqNHADo{i_h(?S-VpL z7~R*!_!IZoody-wzkBuHBJMcaK-b|Z^`AAuT27bV%HOV^mSnlZTh~~#(NNq(<t6pZ zAm$_q=b3R3g5eL6jfOXqxKGB+LpR(b&cL~Jy3fh?V;ca@g138gHw#7}r|3|ey53h4 z))h9Kf2Y`musZ_jixQV~H*>&IzibYTKeo;a6MS<mPJT@S>rKIe35Hv6W@9H@%%n?t zRz2zDIteduRZp0{Z@ciF4;g~@gz5({*vd!hcJGs2--(ONR2wA2>76gCaF3&BN*hh| z0Td*>sMgQ+mL28z{jYt5bmcd}Uo)wr_w#_|`obA`f`K$<8rzPUf%z-@!@3w__`<$N zt%mC)m{Lz{GCNbgB&_h!=;}(3ry79pwE=N`cbt_5{v@nV;{0Kx?bl@K-Jt>rBkgWZ zf@8CNb=1NpOJF{rbY*jbb(W5)!F8=t6mm;Z;*0F}H|OKPV0&El0yBprT-Edd?=stJ zFA2-Y`1merCzZ<o%7yVXHP3^UM#lKsP(9nBShP$boPF@vnc;wusNu20ijG&97$Va# zsaNicIAS&wiK~28C-96D;rXZW_%f;b^bfod*T~hlzm4RVrapSSJwFhLfXoWQJ>-Z> zJls$p3{({KWJ~#ZazHjCH#P=&heEPxG1F1lZay;N;OX7|>vR>-h6C2aC;C7D0(JrC zS&u;lkfqjl__SwEy7|a%xaRQ0F!2~3GK}dQpKP7^;$EXx7v+l%<7{b}eT|_dS7*d# zx<T@b)2#Y**)EK~a68d>3sZ&~C%22{T#zNyz{M|%%$j&O?iRvwJ#(c?A1tH7!S4la zpD?BW@@=x-Y99P*sTz);Xq-4XhwD98<H{lU7EifM^~Z2YQS|AF6xi@?WD7MB)h+m1 zQiV$nX4)ofZQi;QB)ov4K!7d>L=Hx2aVIWz2Hndfeyt+=p`WQTO>_UbpaDaQCG2)! zTMyL4ze`J#=Qd}K_DA9mcr?ZWWmhv}Fu>WkAzg0W@qs6LrypAC%!o~Ih7?D7X@0>H zc4boZx_>O0f!L|9lgaFMQ}~!f2+%nD_IJ!Cb1#8<Ul1uq@~)|bA0{i;Ff#_vWLjGx zP2n;MZm@at^$o5+)Hfv>xEJ|iRYg#wVo%<JN-odpCGcPLKTv>!?|f{2FeFgm1dM@* z#)$8D-1M^j!~xI|w0PSE)tyMu>H}h6rWNC}Fjo5BI0A|4UX45L4j@qth9TKn@1A_l z($&;|$I02rLl6WT()BvGb^X;PbSjwZn&gzL6EqM=dCwPU<e~k`^Zl;PpxMEc7WG$) zK+YRGbU$$ckydPx2hrdGldbHs;$kZ9R%0%OjD374cq`lxuh?F8#uZe_|J-q84t{Q% z?;VbI_Rfz?0S14N`hKt;n#SXGGtDSX-q`rYf@i|enYClZ#cK211$e?YVwX<Cx^BW) zXx9c#>r7qydmNtF_FjJYUxui)mtTmGJDpat+$TD)kk^Z-)<#qt=aY6*Xb{C1@#p=E znm_aGcYaB*zDMgvN|UPSH1Fa2q1QI8g?rkK8pa<OlG)r}Ju_YaD>1xAb3*iUH*?|4 zDp<YDuf83%*vjvctqxjynoNQB4cb<kb_@UBcj@C9*FuRiwz=fn0QGN%tP{s{ApGsN z2k~DwIMop7Zq!F10jV@r%Yt?fn1C>?BwG8(d#3z9kZM%DU5GV)`5sa``8PY5K55I9 zQjJl^ZCD4D`BNXc1>iYM;vj2X*-b_iKRxmoFGdGf64UHOlV!Wv%{XoJp`6#rJpAh) z8+rOC376!*^frA8A|EvTSM2U{^SeHB<2!?``j~#bKJ__vQEQY<R`bHw&GC|Hh~|Mr z@6ZnQGyRZ-Bhg6|pxEI=g-4G6JsxWJmy<cgq4>1c3g;s)L!rCmtkSsVqzw?YH2!14 zSvti1%y6%K_1KLC7J;<SzRsY>v@C_e4&O~|5#l*q#cz#Yr`&9C@@q3Ai6*I~G<3$* zW&vFP?`3Ct4zN)re42C|f|y~!Vd&juz9&U*pfH@SIVJS}m_r66jwoE=&v&=6ebV;G z&^T_7h>FK^y|*U}NlUEZu*dtsanRAkHwVbzcZ_fvFox`-M0O%Pn$8sM+kyK4mfqz6 zEMlXNN)-+yOrg`LHzgq|#-K30TfndHb-xxf_V>0QAMn^YMM8kw+vl<8!^!5*hiO0) zH`5tYqS6Elv7r3Rw;qwHIuZ>PVeH5Nid`aG@>gfXWbeKLYDjchDvzZ!!moZ^mSPnS z>T5q>2kzV|P~%aj@DQv`&b%{euym|si-sJJTMGlpK*o0ud|?V~<-;P$QL+zndo)$* zblA+(8aD4ZmB1BYpBKn<^lm}zD3N6--7eZoY2WOzLlq^!GDcR!!0IN@tsTtv8|gkA zk~@iPgE}28ayeOx5;iiHaEVv=FaZz(G-OS<zyJgE)6|5W?SIgWmDN#nGMXeEhv#<M zXj)*Wx)55{mlbv=zqpR~7Q?tRP&g<NUfu9l?DOzd<ioJno<Q=Ms!UCXr@RxH{rgoV z`sEf<hb6Fz2avU#UQHG<eAuPES|+wb57l(#>>@Ys6{*5`c$Y}ZW|d#xee>Z*oO-y= z+f}NkOe{Mf<~hRE9G@`C!R6xMe@UdRg{R9H(*s*sT;zH@29?f&M=v&Kh>2opzEs_E zy0a&OVAcQ1-Y?>inK>3aJl-%#)a`bYu(zBKO=D`h?*|*oG0eQ*-Qk{hd%>1bAlT9X z=jGT+!pfF2$4UT#29o?eXDYC@`0ZEykp>O|SgX=xyxCBQM%B$1M&HH_+8h|j>n!d3 zjK0D;EF)p&@}$@0jT=r&hvC^94#OE|@hr}F$9{4Vk>xCL07h0|rh-2l+1gE%@7;^S zk<5M$S1!!Fq$GKEHq}QouxBOH00QEX@;+R(c|KJX6jc04G=IFcxaIF_)3%(tJ~e+j zZXqO*LnZyRYr>AO*sMLoAyx9}1)!0rlyRAQ<o80Lpw?xNj9Upz8h5Jo3d*s?VeFc` zqqzU>3-TeIp42)@0XPxf))h6Ip8tG)QUpALGiC=aCEwTtZ5Wwz-$$w+?VN8MNoLis z!{merr(c~r-Ktc@ZY^W0azwnrE}kXJ%pqSc+pc-g%c!MZOtFp4E)p`+%spJ5{%x;X z{C*RlzO44tYilN|VJTEf0<7+j0N};|P?7L0XIGF4Tk%AyZPrR+^$*)^+Kg3JME}zM zU<!t@gwqV8SNoz!YIget68i#I!I=awLC=%5b1j~R^&Or+fw=F-jt-}*L(c*WbmLy$ zble^Oy%zBnv)rT<C|{-0C{xLJtiYtFRv&ck^HqY+0--SwV?`OBL&D7tLz?~NsrA5T zp@iHBvbv14V$?MKjgUvv7L@-(Fi6LhElb2Kw8UHM>z`7unZ0AUX2((arku*O7MVlY zwkO;^gynz^M4L4vyD~oY%B11u7<cm8b|Cducntgi1uj1$J#f`3l(hVzZfE8ph1~0+ zXf8_<^5E$GU;@!i1MYtm&EtY(B)<xlsLU+=b`@j3ZnobAWG@xD3mwc_1px96QXfCu zJ*Fn3<!zR-;?;oJD<P^++0UG1msl5jvZaX5ZV*kqEl$BFn*6qBfGcSDT7^9%y0!35 z9!189Vf42}G5U$z*}vG+&K<$(Ws>TSUC~QJ`Mk}M&SN2RWt2YY9df?fOcCLl9^tqS zLYQIac4taDUWD)6|Gy;(OnL@lNu#SIn1iA!|9RZEl2-N5x}lX8zlA2*KJ@M)_ZR5r zZ}Rz&mf1@%)NzLiqhm#@cC2nMFmx#N+oa+LKl8V-du9b1*KlZsBVZ3=T8^BK$guP3 z3_SI>Dr>-Kl1_``CIxY!bh|e3y)NWDXsfXt+jD8rjTO0J%|t=56+3e@q@;=E_cpze z^T!iIH(Zb#uUd&g=trg>8Z%9%tm#uPHe2N0&yn1dk5pbqri6eVZ97oR_w!F-gwoIl zK|+vA{I!5Nl9Qx}4*1aoKUGB4MDHjkG~CBk;~b^zabzJJJ8)R3Yn99k$T{oHtY>4I zkO~DN6Dg6sja9dszP6%9Br&d056!_eMQbD!3NwE%fK|N=vzFO^PCDWkn-F`Lz`Z%{ zuLG57AI%Dj=jf5w6mSjf>!VNrAkbdp?3;kID+093JT%mc-!@nLd7i${s8()J6EF@h zou9Hxiq7%@a*A{o*D&)Pnn0Bs+}4$}-#HUlg(R)qyZtkZk1Y6x)~emCRv*rIzFNGr z%`;~9TVt4{VWae@2!y}%&48Nq@&Y6eDmup8Q&sgh-Em=VTG{;{9U!i)g4d#v{V}Z^ zF)eX*NGv>MrKfPF!9oID_N%Mqcecn7Rg)D`XtF%QC4feWCrNb-fp2anOlX0*hl81j zXW$CS%K)W?Ak4Fb5<e8D)zTkFW7V#4Bk2ZPCyR>FO<7o2Cw#`@v@u=7YB6Y#m@8f^ z@f;p0YL%D*J%VKWLcE8**)0o|kwy09*d|kSW2VW=`+Cs}jwSWu;TlZ(@UrpeBJ;8l zd3{iQg@x4r8QMyQ0zSx&56M=9uGYQCBv)`-^BNl~_6}<IpWl)*a;i(2sFiD4SKqk2 zm#v4%y~M6hL++d*29kB0c=d(mWf@?=s8H=T`0^$)=aW1B*<<DDDJ@<xf+hus2%yPD z=2qFQ1$oZhMSIq4(9^_+8vRV$h4qirea`6{B9u_#M#R(|Gb-4W+DW~TyH;zseyroI z*AO2wWJiU$d$M`F`7pXbExOs-7sWwhK|#M9hyC&);@6GkrZR3hPJ3Fj7^tWxt6CED zK2S>>Ea!<Ii0`8T;WQt-F(mvm6wdV~+TX=HS{6nWeQKGioizTN5R9Bj4>!{+L4;wY z^#^|^c3NbTJ`au`(|-Px6uU$c9wRs3n=jFLy%q%#kgE!&J`t>m(Yj{A4Dm=t@ug_e z<3WX5spVU;d!Zy4G;4$QZ0*nNMw2$sOeUyWK-^kfx1rS2-g*UZ>~O2({6QmdCy|uz zZUNHr(`aDsU1_j?C{~^`=of8v#7!+L|8*{F5yG)wDE?TSzs`~==4(u>x#-9Um}{OY zRnq6jt0&>zABEyDc%;@^%9^v`)X{YK0zKA-U2=p_cPTgIP4G3`6Y;OpSJ)^W@3*X) z$NFul=Jv~DS0CadNDOECS>EM-HkWuq3srICNXLq3<8Z)XP`h91;_@FTrvM^K6y+$Y z6z=`TDTVi^sKW#o()%0;dxyAtf4<r44nbmLqL`1A$F?<qp(Jw|NP5hz_Pl}Op$ECF z_*n{GBM2Xh&R2xR&O`@5mN|<?Nk4GU(8{;ao<skjB*&M8lXPMQt~NBzvkqdVm*BkI zBR){?2eM^P>@N$kquUGd?M<j+A1$>${v$er%lgVdix%shoN<!@SX96#6Hkqwa;uIx z?;f)axfM~oXD9Uj^jz0nyOvEs;Q~U%)D8pen}aF-&eB*)EsyKI*Qwqq6*8N4=D4;S z=_0Y?%S2&?Skw2=YUnACvOi`UlfoZPyM6GiA=@f>n7lL#UhrI<u>1~#VR^fiu709u zE6W)y1xpG}RyNT;4Nb9=6jNH;_26lZMa?Llz=17Y{NBR-9=?p0zRr^|_{_X`zyp1J z0oY2~Mgxz`w&Uo(q^)(ZM3vzc)}~wUZE@Zq&ruMK65^B%rU=xLj;7gMYm8=f%IORY z#;y++$kY`Zl$b#GMY`~+*whQ_b{6mC`~uFZkfvb0=^b+aH7lQjePSX+vBn1LmDF^u znyuh{aGtt`CO9zI&{|Eo2Zg?sNoD-6Q0tdKBok$;f+72P3p4)j@cfkU${})Q`~+hk zP)GA7ZrKr%9jDf@=!goL>owwOx^c4w&k4)}_K#Kcr%!KAQ4N>Jp~cuMNGE730dhLP zp4eP@#ipB1y@5C(tslJek`zHNHoO}EGJ%PqaXA2JFYvin!SAORJ#^=BSxIgcj~RFR zX7+--f*Bc*j=xYR=i>1;Sb$d-5TDm1F=!2DDJHAz4zR=x-zv2brcArM>^prargAB# z0k(qE$fCp=)jHxtFAF_9Nd3M${r-|LOGu1ARIy$Wu$+V@RL!bOQ69VI{SE@2NPyZt zdW%R+Y(cG`G*vFYlE?w=LRG|Nu~+y@UOuL(CfYl#6<7f@YiBRUZMmyD9%utg*@}@H zJ_?EuH%;XykJn34FbaFU0myHm5BN5+OXSZ<esK?WJX3e9narU=h|g<FE|)n5#noxQ zH}cDPfe79=bdp;49xO$ko6eW(fv7N8hv7kKX<uc*Os*{F;x+c84G#U6lAp9)>0}){ zTc4Eo<ap^sVq1_!X8(4$thsn`Koi;abJUX_2G`Cp1gj&ziqk2WVCh@b6YTUh^NkoE zWYcyr{2^M4XR{^vYWH=C0nWD2z86}IJ_N#437C2y%Q;TodRo35q4*1OLD2iHoEf?& znHr$yzCFFOt^jQa@hb91t_2>~zKj`7-|X&hMQiQ*ZlYHrFD5+Z7GGfga`^1jDdO*& z{u7~#hnMaq91tfSt^-I`m8EI^m_LI!LTiD{zWa?t9Z`bTVAv;MooE<I-_{lJ6t?fI zjxJd95xf4IdPt6?v=XIKJ*W|O1r1uIfggJ3wp&odMQfefbNlx8#qd1tpEVq+YYDzl z8@eSEL|_HRzGE_zsk#|TuZ`2_E?!4ZAu5mNV^a9T&&iD*S4|<2AxrBb)Aq$<R!>FE zj^TO?VsYl=>fC}xIKNnFc`{F7zve-C2_<XY|L1kFYY_wvb9Nt(`KxWEP4PyIzePpn zuTI>I(+OPJoX2_ewB#mukjm#O3n=$m2pPdNmm&`9=K6{q%?QC*xPa=E__v`rTMMu< zJ&Q#TpdCUm>@~AJa!ul80d;YlraHMX7&U=HxhxLCM4UKb5+(fUI7x!0AdVn7jN43T z_0G(xD>@Q`20a+*aDM~nDloWUrelMX0h-I-yfJlnY=6n4{S^6`odgrt^HMy9sOEap z3qfT|C(IJEJy?O+jg2)#BVo~6!3ct%JMizZW%$se8n@brSSOHxNw)dy{>)6z&@7s@ znh<5*z|gN{Bqfv`sg)bdFpGmXjBi-68m5CYav;!MQ0r{VBoHIv04Bci80y#}n8L0P zIv{O>hy&yn_6x#u-3|#?He~%}pJ7{0)*CoFgV?fNtz<sB@Wt5O8{0(LH<>eV1?qjU zsLVyHQ&Ru$7{V^^@B|?Dkm_rRHlyDW?Czr;#IfV(Kap+USo5@5;j{Gg{&pT<>Z>qU zU#!29kAxUc2M6pu)#irQ6yg*?w|YkDjXCMK5;j@+)Gqk`!U>ft;l~W_La=h+GoIa4 zddjqpNoye{ZST5RNgUUIB@M(vn)vK_z?fJne*xx?4&Mm)iKMK1iz@E>ZlIdaW*~%U z?G>0s51G9UHV&TA-j14Q%`nkaG={3q!q1!C(?)@F0}%)Jz>`(ZjyF`U3&qw7&60C& z@4s}Wb7Uthzn@dzI1ZkmZ(=FflnTf<6II^F6_NK;;2hU#*-i4`<d1W*=)K*Lt}gND zm_>FW`DM?H4I3j%<d9FMfCy>^gV7>wk?6z&_x*ga3~~N`TGrQD?h~TDy;UvaJBlO^ zJ1F)CNgWG?+a9(LF1NPgLt654Q6|Tm(?#nbz5+TeV?K7FpZbN8Q255KJi$YUZ*%Xq zHeq6~Dd3mka3JkU2r<VUU2dVPAdjg0kdkaLjE*fEHIn_f#+SXjmcJG;v?HjoVhzQ) zC3xpB=zN$V0mEr`6y=G%BF3K475%sZiR<-LzK2n%#wMs618Fpip(#IoMFWN1^pK%l z&X8^O{NG&Id_*r*)yPv@rlE}e?G|HXc~6SDMb1op!gcFwMM3tS5B<qIkD<8Ci7B!$ zZJPJlNp{AehoK|T)>&t*Ow`)ukbYKKWeTp~C39h%nK?T>PV3SUK&B%IAx}KpYUih} zauKPOb9QzLePtcJTO>SanEoD7r>pfj*|Q0=SUp(}oZoPZu7T4i5|RJ_jxb(J4XH@3 z=`kCXiGzMLgH8&wTSpV1p%Up4n|<kG2(mL?f&gqblvc5z37oPrP%_j`{Yzf#T_gwv zG+9>c-nPM%O2}&u7x6*pEfE~kEyqfY9HPKA*q_rMeIJ}yM6uH>4_mFS^UuzQ`Qp*I zB0AMxjqgc$Z-^{0h-#WDwhIk`1X<ODvV|Bmg6SHs`Ofx3{k^3--jORm&Xbed)t^&R z#A|}NwCFCfn=w>U{Xg3C37c2je+>yOn!{x2uM9$@UEO2?1%b(0J@QnT5*voPZ4KW% zJ~hGaKzTcu*s(f4tkd5N!1$kdUZS`dTru)2w%QZU3{S@{gVBK9jt*VEkG`(5NRp<u zj+8gZ-w!>N*Z*hKd1N^7vxLF#cZ3^-30qlh;=1>osf>=b?><q+0l`@OY@0xE-e@}J zk2Yz@qM1x(iBL)GVt{tZc$>0JjWK427XfVPR7s!e&apBe3+b@I`K6-%(aJ{<ry{@@ z<T~-ZJm1>%l}c8^ZL*T`;V=n-JI3j$3)zVLDc(GlI|?f(A9Kbc!{CYG8j1;Y60Ism zVzYRDHmV3BsyJ){=KF(>#sISc++kRoT{2i$J5tn$nt~sE)Mwc4r-LMf&|i!Llhoxn z@?P&x$pni~AdQW>O+~`SnWV#;Wu!J@&0D8^lJWnRpf2eH<4=xJ1GD9y`@Q3Teaaq; zsczY(1@CGq7mu5r6>mj8UYb#QMm2A8t&H_FfRiT2`vtTI5QAL${4C0_1{f54Kl|Dh zV_d?$(~a_z!gXO!0FYUeR*O-D6-13_*^yfw0*{F}tN{$^z_*Jv003Xh8fFmmFE&)P zDctZ?aH{d~Q8`FK7p#wjVT75n1HDiyeRxlp`CrpKo7@(VI4@Yyjt`IPsIspoc-v8k zK_ycH`kz5$QPip{Uf?ys11%Gz<jMA)s=;SYpz1se85JbrOOM5Nwf`0Y7H;OzfNpAq za-;Ee-DnmPY7@qEbpoD(E@v|X4LS_6kyM#>oisQVK7%E$Rd*#eJX<4e4Ek~01dzdy zOhu0{H~sDILg1;b1o~(8_^yZwDunBaJlLS`2nfbxL=?l9l3(+d)GdPg^=Yk`d*<Iy z(^nth(!Z+<t#t0@{UZck(Yk0+dEL(ii#F18H3us%0tKM=pz9o7@0`sjeE#_YI}V7} zmQ<J|!n|`~0-e^!<ko&^?~f%BaSLCUi6?6Ujy8o|WLbVM_USrbk_;454~zCndNsTO z+|*nMnw+OT^|CI`V8acwf1ui>ji@n5O7p7`<rL3sDqopgL!-qvEdftK#vc{f2sWWX z;lK~=SrW_`RM67ka0VM!beef8S8#gSZt1+a?53HI6|Ml*iGAX^=a{E@G=C$vB-+Bl zYcU1tyQ5GzItPg10$o|GcTC*HDm<qCQPMjxfEkI3%*@>V{@Z=GfCUQyj$KzH(sanC zRKov7a`c7iURd1bgD2W+T!IaYXcDmdS`RvDu;zNMVB%Xxb6)~3C<L&I^wcf3_@yM0 zz!TW1?TOWQF}d&nl$&Y0_*AaKzyMjDcqk>6of^+54<y2%)SA<7@ER-^JHkrck0t9j zGQ&G7UvYhh?)+4HIG~_&?tXJY+04_25Z*qA9xqV<^v{zpM!#p|Rkp*gY(Q!+EqQO+ zxomiR9pF|Ld&!Ad`~(y|Ga`hhAe96Xsd?G9j(4Z2K;nU&P)3`y-&0x(8!n<h*J-4r zY>bikC2;`&Ap-huS?l9yaCzWh`puLKk{bvHuKK>AbSKK0V!>$xgi2rcsyIT3WNiAX zu)awHEMlumWfHdbt>XxaOvByKmqe){W<zmr%o?{u_DmS37F8^&*Q{i0wiC?pyeXG9 z(|I(?hk+$vIxZS)XBj%*Kd8rz-ONuOvT#AoFQznAhkpYXC=8Yvk(HVV;4?-cem#DN zWyDcj?Wb-Oq9H#ago4h*T6OD2LnObjg~aQ(;Z-Yquz#h~96=3it|*>K7HCv(#GkjY z-?Grq4tmj_3kHqha}o~*fupm*0<t#VmqA>hVIGlS6I33h8h{J}hg{NA4LXv!R)D>j z{`>q(z3HHQWbt3LQ5a5-X-DExW2)clzdD9=(u}6dLv%kM^PfDu@kichh^1pMT}S@x zbAsd|2bWzjIlG`N01WLwDYN&eUw78q>O`A?XeE}hEEiHWcx<B0pVi<2G#&2DqYqCG zFDtg6SRoSZMj~IE;m{zSEqkuHa9x<!puWozheG=6*E~C%j4KtXEx(-vU^R1&qprB- zsVPDE$}c(@qbU{+V>0fi|E|p<wv9OrD}tNWb>uVs(O$Xz69{ny1U5G+e(`q`f~E3} zkEmU;BMRnrVG1~AA(TlVSlqk6lUZ13k|ffM6Y<seK2b`s4?kL3<<jc!s_Jvht1a~i z&?w5kqbbE|`58BjftJY4vB+oAsmB8E@cvWVva@cdytj4i(nU)wb&3BlJRtX_eS%s+ zx=sD<xTL?A62*iunO8v1sny2KZ<$PzUB7u9tTn^MqL>0LU8Y)Q<qoz-HZM%(C}$;O zo;Izx-O!mr6^ld#3x>(Vo{p{R!#%Rm%YN7#BPdV^m#}ZO5n~NELDkhy|5h1^I*YG0 z8}m*F5+I9P0zkVBm+}{Z%?Q`zQ~d=Q(}Q&F4QRbox8ed;;EYzFmtqcNPj{8~^qGda zUsJ0%30ib^0D@7qAXTy1{cjYQL6WyJ1lQzPe_4&Tkv%*(1U=QBtKxRN{Y~oPL2sbT z?(>@NzNx8xGMY8;A(&n!v<noOKAtX58O|28qpqO1V+kh%um5BFX+lr&omPM~^6+9z zA8I?pj8}ef?`P&!{;?{D{#;2#CmW$5ebdFgJ8qZtpaj)y1=b$yvuGFloP&;km+XyY z_Ph0n14-REa;stPJTtCfn4O>+P-Uk!%BHYFz~ru>6xFB-y#YLGS#dM*$F+3ar;5vr z#eNe)Uvk;$aIt*cXA)LUGkL5j)c4SQ_m{})?^l$!atvt*k~^a7DZ$EG2u?I@S>{a< zcz8+Os@o!2e^k*3dca7`$HC2WHn-r5AE;NpUs+1f1LHD0yAo=Huz9Bax9*QQj_bG$ zyx{td)=D~CC9t`-v&LP(^td2?f3_IgR+WA~X9Y>UbLYvH_;>-F;nlBC?q9}iuC(h& zcSzCK>}#EL_KyK)Av6KMXapo6I?a457Zvx4TNr5e8UJQVc$_+?t=nj6`FIM!7>md5 zJUv(ohqa%wu8s4q7l^%Z(b8Ej%N#Bu3sqI&K$L8sH`jQvGq}|L7cPkll=OY|F#>I1 zmkk$AJ8%&&@VELj<N%5p#~|t3V0-?{mi~n(zdK&}rON!7|4;!!EMP!Pdd5j;3})GV zAmhXKsJT6Y`SFr_`i{z<xzayrAI$Fs_!LGas1X=6$M@a9Gv0*lSKestAEXQ=YG?la zAN+KY=Gk#XI!}pB!Z)e<$dDT)>noQLWp$ykKwCJc&nwTToq`)vB9jgA-;3U~VhJM- zDTK3}<8-!}S9umk@bF(165wgm<XP)}jWlZ~$+zr?Ij1eAE%*u!jg^YXw1Qf9+u0Nd zwZHh8^=2Z91(Pq}d}fJ2FZ<wIX|gp^`RWze*5CQ_wC%SrMr_wgrT+4Gt2=CS9`liD z92*?3v?<=EW)Bf1iFw0c&8)NuEdweem-}kT$+G{}+i^+Be+|C@HqI)di1dka{ytqt z5KH^ewA>(Y^ZZjJ*-POgXO<g{U9ts+gRcoC8Uq0*)ODwR&FaaAsW$O#1oPEgZg<h% zjEl);CNrh!Rl6m=uWbh~K?cGdo!Nn9ul18m|6YLZ5omj=|JSrw?HidPH*Gtlh(FxC zR{cW9IdG)FZ^}t#aX&6J21;v!yBk)rP#)!#Xe%_BTO2rJh)C*@OtanlKzn67Q*hOR zo|n>>5vJ>uxHkWo;9mEpX&?ca_SbQc{E=nZ6b+feED2z`<kao!Eix}`zHEu~CO!$e z^TS=IDtJTk`TZ;p)Sz9$@z=|m%Xy~BI=u4hnwKP`#Xh2~a-JW-WSadcFkzm06wOp+ zAa^{P;zkpV%m4n^Yc7cW-G;^$_)CpQ5Qg56TS8||4#yHC^Co>%*n4P`u=#4A4hYXP zuB8R9Y^f~%Y;+VZQK!p~tcKv>5U!2RS78l$0PU^CEnlx>+8d3E_a*~g$pM2|T`zlf zfjYkAI(MH*L2|TYU&U+siUaMXNtAH?Sg|I!By=R<$;uyq$Cux{ks*ITa|0WRSa=JO zrAfW}z8YEvA3cr_{B%EJ0!JT+#HT0&i>9d(H~-0{j0hk&^Xv+5n;IJ}#?UiB42*1_ z>1&H9JapahodV(=M&7$etgq06%G}5T%x4>^Jozk_-cKV6J9vd}{^)e3e8xtA7~s}r zJ6hhhqajO%VC04sIQ6t@-sg&aF1`oHjCH3|-WISyDvy4Nx%vECzx!CrC-9k&R<$Mi zCXriWL|hYs{S?U7j5{`rwcPE!f>Spks0+m};?gz5xbK9o`jOEBIcSl1J_q-<P4)gR zxbx313P&g9QAD2^_s(^bX$b?;C8K`knkwt_c_A=oSj8|#X;~4o4lZVXa?%Y7hbTy= zMadIQe<t5PXp6Zf{t^Yl)o7nMS}SkPVWX_Y2_<A1YVo$$SVRwQ-T*1Og%*9cR$jdp zplBe!zAd!t<hlx_Tha8OHLPz|S94*<D<-q!g|tR@ICCk}FsH~}&SW&(ukIx`HK)!O zB>N|<GCHr|PX7?OHsF8@snQ%<(tmO%g#q>U6HS>?(t;lAu2spGvZOnZM0ZILvrZy8 zdTSe9U7p~;?1*X_uN07>Mi~Ba5-a>9FxwVyAx1qQ2E`on!VXX3#Zh@M#iBAOBq0OP zB<2E^?@2cHOtSNbN0pJeT<NGRN0|bSGnpFpeT;*)W(M%BniPJK7VHBy@=;c!n2$7Y zyW~NyFY9pUBaWM}zQ*ykrxTi1h(xT_m^Y!(bD|UfL>1$~5X4IW001rwO9Q5<c;gX9 zHX~1-mR#(p!^bWHE3R*N08SUwN=Q*CYZ=7{%{k|Fl{1pzNffMy@G<qe23jC=5FuiW zYrl0xQ8uj@tOpZN_0h}%%%5FIf07x}eqD57qA}av83dDYX!)4Gjc417e_Ay7#MN3M zvx`&-^11jS0WCk7-R(*>Z4`|$5??z(8+w<CH1o|{p^ruIA`o?sI};qJxeBpqGPP^l zbe5=rQ%>z!$rB0!`53(dN5%6+lluTG>bfDTS*x)+!V+r|9FLMVJH=e9$cfX{CtTC6 zaN6qPp-$2B!rB$bK(IDM-mljXiFD`Oc9HQ)5>F@hOn&vMgyuuMoe`@?^Oog6#;W}( zlQlBuKuThoH|)@Z;3;*=dSX)^it@h+pbsZ$<65O)m;o-02d$69>xC%YX~1;EEkSL- z+Od)1KD{SBA;UReIc_msB=U+^Y#FIq08Xz6Zdf3Wty}?P{iKs#3km)edL#E41Op_& z>&5U%BQIZrtoP%f1RJ9RKKplO`s~L>$Km>?XBiJt)RebU*ZAg1JRUe7_seO{oQ8M! zfWqJj#KS}woT`33_LkK2HF8jTpTF43FYPB0a!+Jc$$y41R@nfmc?fram)>E}9RcIX zNGU@-@HzlytqcGF0M!3qoEggeTMT1o)$Rf>2u%w=$6JNh_9HaqSP+7Q#Eq?@AfY|} z2PPsIvWm2}gd?V0tN|xyiWl~a;5`G(LMns32H%zG%X)Vlb_1j1!Xte58=H&|TQCdE zYqKjUP<qjP53IUMIo3?gQhflg`vVHSK8t&dkK*kmBC)r$INLMvtTRI<ff?J?R4iX) zonRO453>WU&PN%aS7hmIr(V%MoK&dVvcB2Khd8$q!Ly!qxh)44pU`)p$@&+$rd(Lr z%0(YO^XrwYpQQYZ!khm`;4Q(7IS$-t9t_5K0Mb>vTwW?P*Eb-UMw)ugIFgW-&>Rd* z)|{A{rU>4|>Xa;7;53LTw^;zh-=1*=Brvb$CeAv6!4hIk%uhfQQJ$5U3aBqns@C!~ z5<p$h6uh1)sXfu1#hTBjI)MuLMxFDnokrO&A6f8m{oeS;eYxiuRC>kj53p3^h_B5M ze~jK`5){lVMhz=ey5)g*)scLpqiJG3O>@`y3&_%Z|MXooU9UE~HM2F`)Qy4IP|!>w zp~cEH%dWdBeF!dz)wc0}+xN8xkyg)lo`MfL7ZaKkRI1-no>lOgoH%q^pzPdo1bGwL zOtp$EW|6fc=P(O%;67p@W=~1m`DyBh-hK=tz=X|i`IwK!9HBG>niG?vIZd{seX#%l z01l#WGAHX9(}aJ`JI30$B1IqVP{FmBk}@Y)rCJlDhj#!y_uZTQYABD>LZ9GHrp{(& ziL$75dI8x*&^AB_I?9_+o$rSc)g%J)QBtM8_^?`q0T~)c&4Jg?+I;Q>+V%+yih0bd za|Q?wBj&ql{rO%HJ&!a;%Cs=x>lRBVM_9ro^L)dS2Fw!FInVKAd_4lRQw_;J2rYW% z)n%6YjGDHnszwvPfpGCjaVJRFjtL0rVlJbnIdqrHbcmpzA{xuecmTFZtuGvvgY_Z@ zQy%%VS)d3#G=RWeS~uYm31;<07yT}FF8ilnboyQ0SLNEBs`tT90PaACn(|BP<uvEB z4&*Ni+gu)4XLMgB{EH$tt%muIi7PkhtEoBh09=g6w6>S{Sq6U*;*TVAEn`OyhT_9S zf^1-#+YUt?$#+clitH+(k05C6`o$i??BY5LWPDi3Y*J79nZRf6!Q)|}SgkOX4TIgF zEw<{VeLj}EXTr?3KV3f942_e8RuO4nhhUpH3&TYX=@L`gF?pB*Q9qk#7_iJD368u` zjQ;H9Is$yqA0Z3wkYeXL6^3R308@k*egutOF0f@<CP6N)kKN?+0000w`@Z4hvYQXC zLyJ&CAKxVk%Z_4g5;a&UeV_dc0|tYxEOtp9o!7>Wf`DpHH9V_k_wmK++;3hlWM^+P zhsEPSHQeO;idlc@njLm9wqNYTac=-r)Zf!WV54ss3MVvKdS&gwG6KI!RAoKdu#WgS z`4g(*TokJpf-(rUfWfSG`Qws|!Z@G$klvi89J+0AO-p(=K0pmc?TMtq>43{Ojy5P- z4Blo2Clh?^-AsHTpK@`7|Gz3<5)ij#^Gv01Iy`fk4XjUSM4cQ%0-wJo6oB|7)d?f% zB7S1`gs<9gVx|^!#eAY=D@7@uXaM3$>upsLG_-*P+pyfDiE_3<{4;Tc0)@6XiE=cu zDGy-)Pd4=eTDihtWnC7tq_%5KqX7ev!qSeWhFa`zxalEOq$GRy#b}Mq1Cftn3ed$P zXPec+p|p`t*Vylo)hGn8tSGzUVniYB=+&XHKv#=?a<ulcvrkA6LCYppx#XBp-m*bK zO{_V9Al+i8bCk}zZ-EjPc0oa;-wznbtrxB~7oAdqk~JnAsw7aoSV7KcPh~S<pAYo8 z#8r*gVU=(5`eoVs6F7v6<I21r^pwF0zT>Jhu0WYh8B!*i(lykDCQPg<KrOYv0i*CL zA(U0y-vgI{-E5F$DGi7%C21a<I{gUbE4fS3Uduv|&nN-Slz&PuXS^b$O3%z%g85>^ zLW-iP`udV36E2IYf2YKGH*57hmB>DxWaf=m_<$8r^Mlo300000000000El*V-pc?S zjS)Ej0g^9Y#3hKL5&2|Cr@ELWFOFo?{mH-q^eoU`@Gu}N6aWA$rW8i@c=W^COg9%w z9zhr%k|phTOAWNRlF@w)39^JVd_xODmPNqW(#7dMt*yLLc)4opF!Oty9I9v{DqI_6 zj5<{)RW`AKxs9mCX$8##tQG+*-H(bdB4y;F%97XKs4w$=Sm>gOkla))R2g1v%>$h8 zY`A#W$MT?$_Lyk^f9vBT>()8G9f~$iL(TN=A^cS;_{ukW$2Y^YyX~o5lj!C?32yL4 z;w$t4wV}eT8-}&A_Jy56tQhS|3PuRw#I(U0*7_Rm8Q#k!Wn`}_33ZqxwpOpirQ)#Z zuzE@c1{vlKxC55bTSV96N&P<Ku)mxE27ec}S6EKdi7-lM9z9f%4pIw8?vWpjb)#@p zx!sgE8FFphe#}m$hNmK`9ZEPa;Ww(nefvZW5{eRXx?=$!hHC%-NTwb!nSO~y^i&8^ z-olLW_YO5DQHqsyy!IfdlZmSAV|6VH$3%u`PFn#kYnXG9HQ2tP1UR#Ic&Q71VdU!8 z?r6Cr-)1uf)^GDL@~bhBEaOvQ^6F2&W9B<@ehpvTKm<z|UT(H5sv=g&ChuU!&e*RD z-L1e8zR}Dc5}s_o7CU!=Q*V?C*vyyGSEIuvCi95NCxZ*dQ2gTafWw!=sds7o@LK4* z*H;8=S{d&bE*c7=$^yLfAr_zxN2%a|yhK>sUne7_j+)DTT7UB1d(Xb_{$GHZ=&IIz z^JL^PWd3JRf%L|zc`)n*^L-~ldE+0r+(V4Os5x>%Esn~o)gVj6wUA4U!UARzMjIUw zgMkLI-`qBJFKYK>e~0xHXD3T|j_8RS<}HG99ls}C3aCa|wzqg|218fUuNF_}lchsm z6yZs^bF4+__4&Ho3bJ`QDi2DCdzaM@lj8`C_dR#%O{qQ%PamzgU+?#KEMoT3??6lo zsga^1JjBzl7B5T-aaR(TO&ojVOOORZo~Y;CY0go*>=wtZy9y75tcO$H9kKd)dyj!Q z9?ZY)WmG#!Fpb=Dv?X8`0{$`t#7jlnIWVM2c)i5F_|w!a1MSIDm5D#;9rNkX9d<Y? zOGWKegKxYEe_m8|3TWz_0K}C}$Bm$PC5M_9NkjS^1no|DaU6;gh&;jC6uQRk=kI&u zRRjWj<fA+-UOF1HskoH~1xygxS^>v`MPNGnmYW?dTZ&t)Mc9$W?;OoWlHY;_?&56Z z_z+Ohw5L)In~}Rb*B@s)R_No;B~CfR(`^wluiLU8U&H8nCHZ$#MK=J@?=@J64zNYJ z?!l;Y{&zhNwY$!Vx23L7J$2t=EbAyAJdQ68?1$}&1ctfQ$7KQ&J+%s>l#Se34G_pS zyDyz}+uG`r&0rXbEibh<x-SiKlG>}HC#2GmWIDa*(cQ>bH}qR5W7F=MA>W1WFP5T7 zr#I6oxpusN-2s$|ywVF6L%{Qc30W)v)_*RF2upyQ>;;ofo*A0V+M(zE#A_cU*%jmD zVo*bwZoj&INbeLV{qts<qa1-L_9dV34+Z8X5`1F4*(CLqeAX>qyTDk8=OS1#uxj)c zvy}`xcLG2ATKIWcI02bUh)%Z<u($boa2HAaN0bX*u2Rp}rlQgi|8GB<oBcgB1!R;C zc$=((-V9OUL=50VOxbZ>$+$bh&_P9za2@uV!2da<pft72f6{;E;86;RgLwIkG|KDC z{-Q)ngX-@nR|;$Q@=AK(XpgCwWB#5<ba1xA37=#&Z}>kA#AQ$51E#S{iCV7Zl=1o; zKf@^Dca`C*p@VWIY3_~P8xXu=GApPCg~-%=NI=$hJcEWq2vMGw;Jn@hfOiI1*eAju zz{Yz-vZ13El<G}ewC{OFO22#h+SJYoYJx>#z6b9;ae?lkAl~5=AN=+UVHHL}vQB?} zvFDm(t1Sa0*0~P1wg_8QO50Opr7I{WZui${Zn{Ui!D_zPu&AiaOe>C4Jfsk^-XZnY z5mr6YH_n}e)*)aKBbJ`#B(jdKeWb5;jw95~7d-}tSRnnUNoR<nNqd1eriso|Q`!hT zLH?T8iLE@2B}G!QTwd`S#5;AwV}&|7+hVd0p3HZ{CD_)X5V;GkbxR*w{y2>Sed(u! z=wyjbrE5uGP%Gwgq8&v({K@#`$Rl0=^nFz~=SHr!j<sR=K!`C-LpVxKs_Q+7?p?@! z`=m#}Mt@JCmyuVInFcC)c`-u;BCCQpLmMg~J8FI3*X~nWklmoYab0hn%^=K=pYR$a zs%==I)5;)|%r3dchKa<Bby8)TKyb=u_U|(?g`qrAC}vG{E}ZqV<#~|FZwEn=0`^si zxrjO|;TOWq{r{WilhhpQx#XtoS*j@5@udD*J?z<h_A03~)Y;lP378occ$`Ga^qERq z!lIl0P34yP?O^Chh0I3V^3hMOuBaf#DrqR*R+Ty{@xA$Dc0?I`=O6ScAW$igV<5nF zSgZWw6COBxP1CfYI&Z;C5`l($6Vc(*U)qE+D7nKe@8CCkKZ1AzF|c{B0UU9IBw~+e z-teyx=VpESR_41!ik&n!XL-hk@AxFct(C`0;l!ajw!Mb@$D++qns1JHL0Jw~E3-g> zMGZ0*v<ZH9&X_g#fyDo<^{P?Rup!0aCKD~myO4n`Wv)BXb%c(DrE&BW0s8gVyeR&k zjGsgP3{^eB6zZ{%Q2Q`!_{EtVyv5v8vT-lVSV63Ao6y*>&)Bje14P-NlI=$3*l9H~ zB%j?c{PQRTD$GJ46Rf*GJf$>lxsNE%@<O-e5#WSV$dHuK4GCsd=V^XjYUaiC)>)Un zMlR?RYxL6|eP+N0HwYrY^9$#2$D|@w?f*%@R7H4>S&p$mihZi==-sFzOa(y63k>Jn zx)5xNE%`8Z<HdeBiCbsW?I&$MqKch%z+#r(pJU7eqM-u=dq}$f1Al__PsJmaf6hw? zJUkOarIV~spvmR&sCfm@zX{NNg`?k%YaHxgG+Vkfu04difG4M9f-@TIUr>S^_|g-0 zor8kauMONv-KE@>c->n2T|Apa3~^8i5<DG6igUIw*erJNJuEv1ApeW$=AXdISb1ci zYd0KQ#YeSh{siA>{zR5fKt*M!!8yOnxs1Lua$s?BK<Wag>vB>XjNK0in=M2xEj2%j zI#Y9SgR_#l7WbUPpBq!qlSV`PKGoGMt0;8rI2V#Xn9K1|_@AtH288ioo7q^6puVvR zB`Yx<B*Z-R!>^#jFb0lFI^G6szx6pv%TXtknv7&XJ-kEWi?<00f?CuIs@C4BOmihR z)UxO?cPeMvd*$L<kgw))fcl9JRdA2^<TD~C_XdMGo~_{qQW&|Q9R-XOo3{D6=pN)@ zR7ZZ>zEl0yj+tp_-%srs8%7MQT!T`5wOt#sOcVL@dOO}g&&qa1VKJ++jzRt)jg#^i zCvVI5HpZ0DT+II?1dDbN_G?@SE~Hiow{?{?-we)*N9=biAutCaAc&q%PBVSP)Gthy zH~<ut<cRi?z}Caj*r7D|mjGox<Zumy_~ay4EM7#^qHD&nX`d)6K;}>6niG>%x0WCE zaX+-|DsFjn^CvIpBS^F*gX8nfGN=DXu_?KY?WgYmQN=1ZKovt67sCYv>HUX!0nivE zB8{!dvq-k`5F&7DdPi`~u#^W{_Y6SMI8XqJ;w}~WHvX83426Z?0m9QE=ei2^5n{Ls h<QNjNQT_IWPxSZ%M*si-000000000000000000`N&glRE literal 0 HcmV?d00001 diff --git a/src/components/navbar/Navbar.astro b/src/components/navbar/Navbar.astro index ee53a56..93cfe39 100644 --- a/src/components/navbar/Navbar.astro +++ b/src/components/navbar/Navbar.astro @@ -1,5 +1,9 @@ --- import { Profile } from '../../data' + +const path = Astro.url.pathname.replace(/\/+$/, '') || '/' +const isHome = path === '/' +const isProjects = path.startsWith('/projects') --- <nav class="navbar is-dark" role="navigation" aria-label="main navigation"> <div class="navbar-brand"> @@ -16,6 +20,7 @@ import { Profile } from '../../data' class="navbar-burger" aria-label="menu" aria-expanded="false" + aria-controls="navbarMenu" data-target="navbarMenu" > <span aria-hidden="true"></span> @@ -29,6 +34,7 @@ import { Profile } from '../../data' <a href="/" class="navbar-item" + aria-current={isHome ? 'page' : undefined} data-umami-event="home_link_click" data-umami-event-type="click" > @@ -38,6 +44,7 @@ import { Profile } from '../../data' <a href="/projects" class="navbar-item" + aria-current={isProjects ? 'page' : undefined} data-umami-event="projects_link_click" data-umami-event-type="click" > diff --git a/src/components/project-card/ProjectCard.astro b/src/components/project-card/ProjectCard.astro index 754a8ca..87a58c2 100644 --- a/src/components/project-card/ProjectCard.astro +++ b/src/components/project-card/ProjectCard.astro @@ -15,27 +15,17 @@ const links: Array<{ label: string; url: string; target?: string; rel?: string } <div class="ProjectCard card"> <div class="card-image"> <figure class="image is-16by9"> - {typeof image === 'object' && image !== null ? ( - <Image - src={image} - alt={name} - class="adjusted-image" - widths={[400, 800]} - sizes="(max-width: 768px) 100vw, 50vw" - format="webp" - quality={82} - loading="lazy" - decoding="async" - /> - ) : ( - <img - class="adjusted-image" - src={image} - alt={name} - loading="lazy" - decoding="async" - /> - )} + <Image + src={image} + alt={name} + class="adjusted-image" + widths={[400, 800]} + sizes="(max-width: 768px) 100vw, 50vw" + format="webp" + quality={82} + loading="lazy" + decoding="async" + /> </figure> </div> @@ -50,7 +40,7 @@ const links: Array<{ label: string; url: string; target?: string; rel?: string } </div> </div> - <div class="content" set:html={description || ''} /> + <div class="content">{description}</div> </div> <footer class="card-footer"> diff --git a/src/components/projects-box/ProjectsBox.astro b/src/components/projects-box/ProjectsBox.astro index 138d053..cbf4f36 100644 --- a/src/components/projects-box/ProjectsBox.astro +++ b/src/components/projects-box/ProjectsBox.astro @@ -1,24 +1,23 @@ --- +import type { CollectionEntry } from 'astro:content' import ProjectCard from '../project-card/ProjectCard.astro' -import { getProjectCover } from '../../data/covers' -const { title = '', description = '', projects = [] } = Astro.props -const sortedProjects = [...projects].sort((a, b) => a.order - b.order) +const { title = '', description = '' } = Astro.props +const projects: CollectionEntry<'projects'>[] = Astro.props.projects ?? [] --- <section class="box"> <h3 class="is-size-3 has-text-weight-bold">{title}</h3> <p>{description}</p> <div class="columns is-mobile is-multiline mt-3"> - {sortedProjects.map((project) => ( + {projects.map((project) => ( <div class="column is-half-desktop is-full-mobile"> <ProjectCard - slug={project.slug} - name={project.name} - description={project.description} - image={getProjectCover(project.slug) ?? project.cover} - stack={project.stack} - links={project.links} + name={project.data.name} + description={project.data.description} + image={project.data.cover} + stack={project.data.stack} + links={project.data.links} /> </div> ))} diff --git a/src/content.config.ts b/src/content.config.ts new file mode 100644 index 0000000..b7570e7 --- /dev/null +++ b/src/content.config.ts @@ -0,0 +1,27 @@ +import { defineCollection } from 'astro:content' +import { z } from 'astro/zod' +import { glob } from 'astro/loaders' + +const projects = defineCollection({ + loader: glob({ pattern: '**/*.md', base: './src/content/projects' }), + schema: ({ image }) => + z.object({ + name: z.string(), + description: z.string(), + order: z.number(), + stack: z.array(z.string()).default([]), + cover: image(), + links: z + .array( + z.object({ + label: z.string(), + url: z.string(), + target: z.string().optional(), + rel: z.string().optional(), + }) + ) + .default([]), + }), +}) + +export const collections = { projects } diff --git a/src/data/readmes/adm2.md b/src/content/projects/adm2.md similarity index 82% rename from src/data/readmes/adm2.md rename to src/content/projects/adm2.md index 2e27273..0bdf006 100644 --- a/src/data/readmes/adm2.md +++ b/src/content/projects/adm2.md @@ -1,3 +1,18 @@ +--- +name: "ADM2" +description: "A Web App to manage your small store. Build with web technologies" +order: 2 +stack: + - "vue" +cover: "../../assets/projects/adm2-cover.jpg" +links: + - label: "View on GitHub" + url: "https://github.com/LuisHCK/adm2" + target: "_blank" + rel: "noreferrer" + - label: "Project details" + url: "/projects/adm2" +--- # ADM2 ADM2 is a simple but useful tool to manage your small store. diff --git a/src/data/readmes/baby-tracker.md b/src/content/projects/baby-tracker.md similarity index 82% rename from src/data/readmes/baby-tracker.md rename to src/content/projects/baby-tracker.md index 520a3ff..4bc7661 100644 --- a/src/data/readmes/baby-tracker.md +++ b/src/content/projects/baby-tracker.md @@ -1,3 +1,22 @@ +--- +name: "Baby Tracker" +description: "BabyTracker is a web app built with React that helps parents keep track of their baby's daily activities and milestones." +order: 1 +stack: + - "react" +cover: "../../assets/projects/baby-tracker-banner.jpg" +links: + - label: "View on GitHub" + url: "https://github.com/LuisHCK/baby-tracker" + target: "_blank" + rel: "noreferrer" + - label: "Demo" + url: "https://babytracker.luisjcenteno.dev/app" + target: "_blank" + rel: "noreferrer" + - label: "Project details" + url: "/projects/baby-tracker" +--- # Baby Tracker 👶 Welcome to **Baby Tracker**, the ultimate app designed to help you monitor and manage your little one's daily activities with ease. Whether you're tracking feedings, diapers, sleep, or baby growth, Baby Tracker has you covered! diff --git a/src/data/readmes/contractflow.md b/src/content/projects/contractflow.md similarity index 74% rename from src/data/readmes/contractflow.md rename to src/content/projects/contractflow.md index a8f8833..592d36d 100644 --- a/src/data/readmes/contractflow.md +++ b/src/content/projects/contractflow.md @@ -1,3 +1,23 @@ +--- +name: "ContractFlow" +description: "Plan, budget, and track projects with confidence. Create, manage, and pay contractors with ease" +order: 4 +stack: + - "express" + - "postgres" +cover: "../../assets/projects/contractflow-banner.webp" +links: + - label: "View on GitHub" + url: "https://github.com/LuisHCK/contractflow" + target: "_blank" + rel: "noreferrer" + - label: "Demo" + url: "https://contractflow.luisjcenteno.dev" + target: "_blank" + rel: "noreferrer" + - label: "Project details" + url: "/projects/contractflow" +--- # ContractFlow - Streamline Your Project Payments 🚀 ## Description diff --git a/src/data/readmes/memorias-de-vida.md b/src/content/projects/memorias-de-vida.md similarity index 78% rename from src/data/readmes/memorias-de-vida.md rename to src/content/projects/memorias-de-vida.md index a0d37b4..bee5d4f 100644 --- a/src/data/readmes/memorias-de-vida.md +++ b/src/content/projects/memorias-de-vida.md @@ -1,3 +1,22 @@ +--- +name: "Memorias de Vida - Photo Studio" +description: "My wife's photo studio website, built with Nextjs and Tailwind CSS" +order: 3 +stack: + - "react" +cover: "../../assets/projects/memorias-de-vida-banner.jpg" +links: + - label: "View on GitHub" + url: "https://github.com/LuisHCK/mdv-next" + target: "_blank" + rel: "noreferrer" + - label: "Demo" + url: "https://memoriasdevidafoto.com" + target: "_blank" + rel: "noreferrer" + - label: "Project details" + url: "/projects/memorias-de-vida" +--- # Memorias de Vida - Photo Studio Welcome to the official repository for the Memorias de Vida website, a professional photo studio. This project is designed to showcase our work, manage client sessions, and streamline the reservation process. diff --git a/src/data/readmes/photo-print-tool.md b/src/content/projects/photo-print-tool.md similarity index 89% rename from src/data/readmes/photo-print-tool.md rename to src/content/projects/photo-print-tool.md index 1d8fe6d..e55c4df 100644 --- a/src/data/readmes/photo-print-tool.md +++ b/src/content/projects/photo-print-tool.md @@ -1,3 +1,22 @@ +--- +name: "Photo Print Tool" +description: "Prepare precise photo print jobs with customizable paper and layout presets, exact physical dimensions, and browser-ready print output." +order: 5 +stack: + - "react" +cover: "../../assets/projects/photo-print-tool-cover.webp" +links: + - label: "View on GitHub" + url: "https://github.com/LuisHCK/photo-print-tool" + target: "_blank" + rel: "noreferrer" + - label: "Demo" + url: "https://photoprint.memoriasdevidafoto.com/" + target: "_blank" + rel: "noreferrer" + - label: "Project details" + url: "/projects/photo-print-tool" +--- # Photo Print Tool **Precise photo layouts for real print workflows.** diff --git a/src/data/covers.js b/src/data/covers.js deleted file mode 100644 index 34783e8..0000000 --- a/src/data/covers.js +++ /dev/null @@ -1,16 +0,0 @@ -import babyTracker from '../assets/projects/baby-tracker-banner.jpg' -import contractflow from '../assets/projects/contractflow-banner.webp' -import memoriasDeVida from '../assets/projects/memorias-de-vida-banner.jpg' - -const covers = { - 'baby-tracker': babyTracker, - contractflow, - 'memorias-de-vida': memoriasDeVida, -} - -/** - * Returns the optimized local cover for a project, if it has one. - * Projects with remote covers fall back to the URL in projects.json. - * @param {String} slug - */ -export const getProjectCover = (slug) => covers[slug] ?? null diff --git a/src/data/index.js b/src/data/index.js index 2c5f5bc..f0cb25a 100644 --- a/src/data/index.js +++ b/src/data/index.js @@ -1,5 +1,4 @@ import profile from './profile.json' -import projects from './projects.json' import workExperience from './work-experience.json' /** @@ -9,7 +8,7 @@ import workExperience from './work-experience.json' * @property {String} title - Developer title * @property {String} about - About text * @property {String} short_desc - Short description - * @property {Array<String>} skils - Skills list + * @property {Array<String>} skills - Skills list * @property {String} email - Contact email * @property {String} location - Current location * @property {String} cv - Resume URL @@ -20,29 +19,6 @@ import workExperience from './work-experience.json' */ export const Profile = profile -/** - * @typedef ProjectLink - * @property {String} label - Link label - * @property {String} url - Project url - * @property {String} target - Anchor target - */ - -/** - * @typedef DevProject - * @property {String} name - Project name - * @property {String} slug - Project slug - * @property {String} description - Project description text - * @property {Array<String>} stack - Stack of techologies - * @property {String} content - Content Link - * @property {String|null} cover - Remote cover URL (local covers live in data/covers.js) - * @property {Array<ProjectLink>} links - - */ - -/** - * @type {Array<DevProject>} - */ -export const Projects = projects - /** * @typedef WorkExperience * @property {String} company @@ -58,21 +34,3 @@ export const Projects = projects * @type {Array<WorkExperience>} */ export const WorkExp = workExperience - -/** - * Returns a project by it's Slug string - * @param {String} slug - Project slug - * @returns {DevProject} - */ -export const getProjectBySlug = (slug) => { - const project = Projects.find((project) => project.slug === slug) - return project || {} -} - -/** - * Convert normal string to slug - * @param {String} name - Item name - */ -export const nameToSlug = (name = '') => { - return name.toLowerCase().split(' ').join('-') -} diff --git a/src/data/profile.json b/src/data/profile.json index bde9288..81ee0e4 100644 --- a/src/data/profile.json +++ b/src/data/profile.json @@ -3,14 +3,14 @@ "title": "Sr. Software Engineer", "about": "Experienced full-stack web developer with 8 years of expertise in building dynamic, user-friendly web applications. Skilled in backend frameworks like Django, Ruby on Rails, and Node.js, as well as frontend technologies such as React, Vue, and Angular.\nProficient in CI/CD, testing, Git, and agile methodologies.\nThrives in remote, collaborative environments and is passionate about continuous learning and delivering exceptional user experiences.", "short_desc": "Passionate full-stack web developer with many years of experience in web development", - "skils": [ + "email": "luisjcenteno@live.com", + "location": "Nicaragua", + "cv": "https://drive.google.com/file/d/1l-GxNTBttE7hEadNLvAz85DRkBH2QuM6/view?usp=sharing", + "skills": [ "Certified AWS Cloud Practitioner", "AI Driven Development", "Full Stack Web Development", "CI/CD", "English (Fluent)" - ], - "email": "luisjcenteno@live.com", - "location": "Nicaragua", - "cv": "https://drive.google.com/file/d/1l-GxNTBttE7hEadNLvAz85DRkBH2QuM6/view?usp=sharing" + ] } diff --git a/src/data/projects.js b/src/data/projects.js new file mode 100644 index 0000000..d71ae54 --- /dev/null +++ b/src/data/projects.js @@ -0,0 +1,10 @@ +import { getCollection } from 'astro:content' + +/** + * Returns project entries sorted by their display order. + * @returns {Promise<import('astro:content').CollectionEntry<'projects'>[]>} + */ +export const getProjects = async () => { + const projects = await getCollection('projects') + return projects.sort((a, b) => a.data.order - b.data.order) +} diff --git a/src/data/projects.json b/src/data/projects.json deleted file mode 100644 index 60a68c2..0000000 --- a/src/data/projects.json +++ /dev/null @@ -1,128 +0,0 @@ -[ - { - "name": "ADM2", - "slug": "adm2", - "order": 2, - "description": "A Web App to manage your small store. Build with web technologies", - "stack": ["vue"], - "content": "https://raw.githubusercontent.com/LuisHCK/adm2/master/README.md", - "cover": "https://raw.githubusercontent.com/LuisHCK/adm2/master/public/screenshots/30510e0b-5deb-4547-99c9-9b61aefb7587.jpeg", - "links": [ - { - "label": "View on GitHub", - "url": "https://github.com/LuisHCK/adm2", - "target": "_blank", - "rel": "noreferrer" - }, - { - "label": "Project details", - "url": "/projects/adm2" - } - ] - }, - { - "name": "Baby Tracker", - "slug": "baby-tracker", - "order": 1, - "description": "BabyTracker is a web app built with React that helps parents keep track of their baby's daily activities and milestones.", - "stack": ["react"], - "content": "https://raw.githubusercontent.com/LuisHCK/baby-tracker/refs/heads/main/README.md", - "cover": null, - "links": [ - { - "label": "View on GitHub", - "url": "https://github.com/LuisHCK/baby-tracker", - "target": "_blank", - "rel": "noreferrer" - }, - { - "label": "Demo", - "url": "https://babytracker.luisjcenteno.dev/app", - "target": "_blank", - "rel": "noreferrer" - }, - { - "label": "Project details", - "url": "/projects/baby-tracker" - } - ] - }, - { - "name": "Memorias de Vida - Photo Studio", - "slug": "memorias-de-vida", - "description": "My wife's photo studio website, built with Nextjs and Tailwind CSS", - "stack": ["react"], - "content": "https://raw.githubusercontent.com/LuisHCK/mdv-next/refs/heads/main/README.md", - "cover": null, - "links": [ - { - "label": "View on GitHub", - "url": "https://github.com/LuisHCK/mdv-next", - "target": "_blank", - "rel": "noreferrer" - }, - { - "label": "Demo", - "url": "https://memoriasdevidafoto.com", - "target": "_blank", - "rel": "noreferrer" - }, - { - "label": "Project details", - "url": "/projects/memorias-de-vida" - } - ] - }, - { - "name": "ContractFlow", - "slug": "contractflow", - "description": "Plan, budget, and track projects with confidence. Create, manage, and pay contractors with ease", - "stack": ["express", "postgres"], - "cover": null, - "content": "https://raw.githubusercontent.com/LuisHCK/contractflow/refs/heads/main/README.md", - "links": [ - { - "label": "View on GitHub", - "url": "https://github.com/LuisHCK/contractflow", - "target": "_blank", - "rel": "noreferrer" - }, - { - "label": "Demo", - "url": "https://contractflow.luisjcenteno.dev", - "target": "_blank", - "rel": "noreferrer" - }, - { - "label": "Project details", - "url": "/projects/contractflow" - } - ] - }, - { - "name": "Photo Print Tool", - "slug": "photo-print-tool", - "description": "Prepare precise photo print jobs with customizable paper and layout presets, exact physical dimensions, and browser-ready print output.", - "stack": ["react"], - "content": "https://raw.githubusercontent.com/LuisHCK/photo-print-tool/refs/heads/main/README.md", - "cover": "https://github.com/user-attachments/assets/09866340-b85f-4395-ad63-969f820d0d07", - "links": [ - { - "label": "View on GitHub", - "url": "https://github.com/LuisHCK/photo-print-tool", - "target": "_blank", - "rel": "noreferrer" - }, - { - "label": "Demo", - "url": "https://photoprint.memoriasdevidafoto.com/", - "target": "_blank", - "rel": "noreferrer" - }, - { - "label": "Project details", - "url": "/projects/photo-print-tool" - } - ] - } -] diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro index 93cb250..f802b8c 100644 --- a/src/layouts/BaseLayout.astro +++ b/src/layouts/BaseLayout.astro @@ -1,5 +1,11 @@ --- import NavBar from '../components/navbar/Navbar.astro' +import { Profile } from '../data' +import '@fontsource/poppins/latin-300.css' +import '@fontsource/poppins/latin-400.css' +import '@fontsource/poppins/latin-500.css' +import '@fontsource/poppins/latin-600.css' +import '@fontsource/poppins/latin-700.css' import '../styles/globals.scss' const { @@ -13,6 +19,28 @@ const { const site = Astro.site ?? new URL('https://luisjcenteno.dev') const canonical = new URL(Astro.url.pathname, site) const ogImage = new URL(image, site) + +const structuredData = { + '@context': 'https://schema.org', + '@graph': [ + { + '@type': 'Person', + '@id': `${site.origin}/#person`, + name: Profile.name, + jobTitle: Profile.title, + url: site.origin, + image: new URL('/images/cover.jpg', site).href, + sameAs: ['https://github.com/LuisHCK'], + }, + { + '@type': 'WebSite', + '@id': `${site.origin}/#website`, + url: site.origin, + name: Profile.name, + publisher: { '@id': `${site.origin}/#person` }, + }, + ], +} --- <!doctype html> <html lang="en"> @@ -21,26 +49,29 @@ const ogImage = new URL(image, site) <meta name="viewport" content="width=device-width, initial-scale=1" /> <title>{title} + + + + + + + + - - - + -
    + +
    diff --git a/src/layouts/ProjectLayout.astro b/src/layouts/ProjectLayout.astro index 3661caf..f99a87e 100644 --- a/src/layouts/ProjectLayout.astro +++ b/src/layouts/ProjectLayout.astro @@ -2,50 +2,34 @@ import { Image } from 'astro:assets' import BaseLayout from './BaseLayout.astro' import { Profile } from '../data' -import { getProjectCover } from '../data/covers' import GithubButton from '../components/github-button/GithubButton.astro' -const { project, content, className = 'ProjectPage' } = Astro.props - -const links: Array<{ label: string; url: string }> = project.links ?? [] +const { project, className = 'ProjectPage' } = Astro.props +const { name, description, cover } = project.data +const links: Array<{ label: string; url: string }> = project.data.links ?? [] const githubLink = links.find((link) => link.label === 'View on GitHub')?.url -const localCover = getProjectCover(project.slug) -const remoteCover = typeof project.cover === 'string' ? project.cover : null -const coverImage = localCover ?? remoteCover ---
    - {coverImage && ( -
    - {localCover ? ( - {`${project.name} - ) : ( - {`${project.name} - )} -
    - )} +
    + {`${name} +
    - + {githubLink && (
    diff --git a/src/pages/index.astro b/src/pages/index.astro index d9dadad..6472291 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -4,10 +4,12 @@ import ProfileBox from '../components/profile-box/ProfileBox.astro' import AboutMeBox from '../components/about-me-box/AboutMeBox.astro' import ProjectsBox from '../components/projects-box/ProjectsBox.astro' import WorkExperience from '../components/work-experience/WorkExperience.astro' -import { Profile, Projects, WorkExp } from '../data' +import { Profile, WorkExp } from '../data' +import { getProjects } from '../data/projects' import avatar from '../assets/avatar.jpeg' const title = `${Profile.name} | ${Profile.title}` +const projects = await getProjects() ---
    @@ -19,7 +21,7 @@ const title = `${Profile.name} | ${Profile.title}` role={Profile.title} email={Profile.email} country={Profile.location} - skills={Profile.skils} + skills={Profile.skills} />
    @@ -30,7 +32,7 @@ const title = `${Profile.name} | ${Profile.title}`
    diff --git a/src/pages/privacy.astro b/src/pages/privacy.astro index 0b03467..bbc1312 100644 --- a/src/pages/privacy.astro +++ b/src/pages/privacy.astro @@ -11,54 +11,68 @@ import { Profile } from '../data'

    Privacy Policy

    - Effective Date: May 2024 + Effective Date: October 2026

    - {Profile.name} values your privacy and is committed to - protecting your personal information. This Privacy Policy outlines how - we collect, use, and protect your data. + This is the personal portfolio of {Profile.name}. It is a + static website: there are no accounts, login forms, comments, or + user-submitted content.

    Information Collection

    - We may collect personal information such as your name, email address, - and contact details when you interact with our website or services. + The site does not ask for or store personal information. Like most web + servers, the hosting provider may record standard request data such as + IP address, user agent, requested URL, and timestamp for security and + operational purposes.

    -

    Use of Information

    +

    Analytics

    - The information we collect is used solely to provide and improve our - services, communicate with you, and enhance your experience with - {Profile.name}. + This site uses Umami, a privacy-focused, cookieless analytics service, to + understand aggregate page views and referrers. Umami does not use cookies + and is not intended to identify individual visitors.

    -

    Data Protection

    +

    Cookies

    - We implement appropriate security measures to protect your personal - information from unauthorized access, alteration, or disclosure. + This site does not set cookies. Third-party sites linked from this + portfolio may set their own cookies under their respective policies.

    -

    No Sale or Misuse of Data

    +

    External Links

    - {Profile.name} will never sell, trade, or misuse your personal - information. We are committed to maintaining your trust and ensuring - your data is used only for legitimate business purposes. + Links to GitHub, project demos, and other external websites are provided + for convenience. I am not responsible for the content or privacy practices + of those sites.

    -

    Contact Us

    +

    Use of Information

    - If you have any questions or concerns about our Privacy Policy, please - contact us at {Profile.email}. + Any operational data is used only to keep the site secure, diagnose + problems, and understand aggregate traffic. It is not sold, traded, or + used for advertising.

    -

    Changes to Privacy Policy

    +

    Data Protection

    - We may update this Privacy Policy from time to time. Any changes will be - posted on this page with an updated effective date. + Reasonable security measures are used to protect the site and its + infrastructure. No method of transmission or storage is completely secure, + but no personal data is intentionally collected through this site.

    + +

    Contact

    - By using our services, you agree to the terms of this Privacy Policy. + Questions about this policy can be sent to + {Profile.email}.

    + +

    Changes to This Policy

    +

    + This policy may be updated if the site changes. Changes will be posted on + this page with a new effective date. +

    +

    {Profile.name}

    diff --git a/src/pages/projects/[slug].astro b/src/pages/projects/[slug].astro index 740fb65..a9bb296 100644 --- a/src/pages/projects/[slug].astro +++ b/src/pages/projects/[slug].astro @@ -1,15 +1,20 @@ --- +import { render } from 'astro:content' import ProjectLayout from '../../layouts/ProjectLayout.astro' -import { Projects } from '../../data' -import { getProjectData } from '../../utils' +import { getProjects } from '../../data/projects' -export function getStaticPaths() { - return Projects - .filter(({ slug }) => typeof slug === 'string' && slug.trim().length) - .map(({ slug }) => ({ params: { slug } })) +export async function getStaticPaths() { + const projects = await getProjects() + + return projects.map((project) => ({ + params: { slug: project.id }, + props: { project }, + })) } -const { slug } = Astro.params -const { project, content } = await getProjectData(slug) +const { project } = Astro.props +const { Content } = await render(project) --- - + + + diff --git a/src/pages/projects/index.astro b/src/pages/projects/index.astro index b327b58..3089ba6 100644 --- a/src/pages/projects/index.astro +++ b/src/pages/projects/index.astro @@ -1,8 +1,10 @@ --- import BaseLayout from '../../layouts/BaseLayout.astro' import ProjectCard from '../../components/project-card/ProjectCard.astro' -import { Profile, Projects } from '../../data' -import { getProjectCover } from '../../data/covers' +import { Profile } from '../../data' +import { getProjects } from '../../data/projects' + +const projects = await getProjects() ---
    - {Projects.map((project) => ( + {projects.map((project) => (
    ))} diff --git a/src/styles/components/_accessibility.scss b/src/styles/components/_accessibility.scss new file mode 100644 index 0000000..b38c2a1 --- /dev/null +++ b/src/styles/components/_accessibility.scss @@ -0,0 +1,23 @@ +.skip-link { + background-color: $dark-primary; + border-radius: $radius; + color: $text; + left: 1rem; + padding: 0.75rem 1rem; + position: absolute; + top: -100px; + z-index: 100; + + &:focus { + top: 1rem; + } +} + +:focus-visible { + outline: 2px solid $link; + outline-offset: 2px; +} + +.MainLayout:focus { + outline: none; +} diff --git a/src/styles/components/_components.scss b/src/styles/components/_components.scss index adc3be5..876eae5 100644 --- a/src/styles/components/_components.scss +++ b/src/styles/components/_components.scss @@ -1,3 +1,4 @@ +@import './accessibility'; @import './profile-box'; @import './timeline'; @import './navbar'; diff --git a/src/styles/components/_navbar.scss b/src/styles/components/_navbar.scss index ef19827..162b263 100644 --- a/src/styles/components/_navbar.scss +++ b/src/styles/components/_navbar.scss @@ -11,4 +11,10 @@ } } background-color: $scheme-main !important; + + .navbar-item[aria-current='page'] { + font-weight: 600; + text-decoration: underline; + text-underline-offset: 0.35rem; + } } \ No newline at end of file diff --git a/src/utils/getProjectContent.js b/src/utils/getProjectContent.js deleted file mode 100644 index 6ecbe6d..0000000 --- a/src/utils/getProjectContent.js +++ /dev/null @@ -1,40 +0,0 @@ -import { marked } from 'marked' - -const localReadmes = import.meta.glob('../data/readmes/*.md', { - query: '?raw', - import: 'default', - eager: true, -}) - -/** - * Parse a project README to HTML. - * Local copies are used first so production builds are reproducible. - * The remote URL remains the source for `bun run refresh:readmes`. - * - * @param {String} slug - * @param {String} contentURL - * @returns {Promise} - */ -const getProjectContent = async (slug, contentURL) => { - const localContent = localReadmes[`../data/readmes/${slug}.md`] - - if (localContent) { - return marked.parse(localContent) - } - - if (!contentURL) { - throw new Error(`No markdown content configured for project "${slug}"`) - } - - const response = await fetch(contentURL) - - if (!response.ok) { - throw new Error( - `Failed to fetch project content: ${contentURL} (${response.status})` - ) - } - - return marked.parse(await response.text()) -} - -export default getProjectContent diff --git a/src/utils/getProjectData.js b/src/utils/getProjectData.js deleted file mode 100644 index fd2b297..0000000 --- a/src/utils/getProjectData.js +++ /dev/null @@ -1,14 +0,0 @@ -import { getProjectBySlug } from '../data' -import getProjectContent from './getProjectContent' - -const getProjectData = async (slug) => { - const project = getProjectBySlug(slug) - const content = await getProjectContent(slug, project.content) - - return { - project, - content, - } -} - -export default getProjectData diff --git a/src/utils/index.js b/src/utils/index.js deleted file mode 100644 index 2077bdf..0000000 --- a/src/utils/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import markdownFetch from './markdownFetch' -import getProjectContent from './getProjectContent' -import getProjectData from './getProjectData' - -export { markdownFetch, getProjectContent, getProjectData } diff --git a/src/utils/markdownFetch.js b/src/utils/markdownFetch.js deleted file mode 100644 index f7d81bd..0000000 --- a/src/utils/markdownFetch.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Fetch markdown file as blob - * @param {String} url Markdown file - * @returns {Promise} - */ -const markdownFetch = (url) => { - return fetch(url, { method: 'GET' }) -} - -export default markdownFetch diff --git a/tests/e2e/smoke.spec.ts b/tests/e2e/smoke.spec.ts new file mode 100644 index 0000000..dd28773 --- /dev/null +++ b/tests/e2e/smoke.spec.ts @@ -0,0 +1,128 @@ +import { expect, test } from '@playwright/test' + +const routes = [ + '/', + '/projects', + '/projects/adm2', + '/projects/baby-tracker', + '/projects/memorias-de-vida', + '/projects/contractflow', + '/projects/photo-print-tool', + '/privacy', +] + +const collectCspErrors = (page) => { + const errors = [] + page.on('console', (message) => { + if ( + message.type() === 'error' && + /content security policy|refused to/i.test(message.text()) + ) { + errors.push(message.text()) + } + }) + return errors +} + +test.describe('pages and metadata', () => { + for (const route of routes) { + test(`${route} renders with SEO metadata`, async ({ page }) => { + const cspErrors = collectCspErrors(page) + const response = await page.goto(route, { waitUntil: 'domcontentloaded' }) + + expect(response?.status()).toBe(200) + await expect(page).toHaveTitle(/.+/) + + const canonical = await page.locator('link[rel="canonical"]').getAttribute('href') + expect(canonical).toContain('https://luisjcenteno.dev') + + const description = await page + .locator('meta[name="description"]') + .getAttribute('content') + expect(description?.trim().length).toBeGreaterThan(0) + + const ogImage = await page.locator('meta[property="og:image"]').getAttribute('content') + expect(ogImage).toMatch(/^https:\/\//) + + const structuredData = await page + .locator('script[type="application/ld+json"]') + .first() + .textContent() + expect(() => JSON.parse(structuredData ?? '')).not.toThrow() + + await page.waitForFunction(() => document.fonts.status === 'loaded') + await page.waitForFunction(() => + [...document.images].every((image) => image.complete) + ) + + expect(cspErrors).toEqual([]) + }) + } +}) + +test('unknown route returns the custom 404 page', async ({ page }) => { + const response = await page.goto('/this-page-does-not-exist') + expect(response?.status()).toBe(404) + await expect(page).toHaveTitle(/Page not found/) + await expect(page.getByRole('heading', { name: '404' })).toBeVisible() +}) + +test('trailing slashes redirect to the canonical URL', async ({ request }) => { + for (const route of ['/projects/', '/projects/adm2/', '/privacy/']) { + const response = await request.get(route, { maxRedirects: 0 }) + expect(response.status()).toBe(301) + expect(response.headers().location).not.toContain('/$') + } +}) + +test('serves robots.txt and sitemap files', async ({ request }) => { + const robots = await request.get('/robots.txt') + expect(robots.status()).toBe(200) + expect(await robots.text()).toContain('Sitemap: https://luisjcenteno.dev/sitemap-index.xml') + + const sitemap = await request.get('/sitemap-index.xml') + expect(sitemap.status()).toBe(200) + expect(await sitemap.text()).toContain('sitemap-0.xml') +}) + +test('project page renders README content and GitHub link', async ({ page }) => { + await page.goto('/projects/adm2') + await expect(page.getByRole('heading', { level: 1, name: 'ADM2' })).toBeVisible() + await expect(page.getByRole('heading', { name: 'Features' })).toBeVisible() + await expect(page.getByRole('link', { name: /View in GitHub/ })).toBeVisible() +}) + +test('active navigation and skip link are accessible', async ({ page }) => { + await page.goto('/projects') + await expect(page.getByRole('link', { name: 'Projects' })).toHaveAttribute( + 'aria-current', + 'page' + ) + + await page.goto('/') + await page.keyboard.press('Tab') + await expect(page.getByRole('link', { name: 'Skip to content' })).toBeFocused() +}) + +test.describe('mobile navigation', () => { + test.use({ viewport: { width: 390, height: 844 } }) + + test('opens, closes with Escape, and restores focus', async ({ page }) => { + await page.goto('/') + + const burger = page.getByRole('button', { name: 'menu' }) + const menu = page.locator('#navbarMenu') + + await expect(burger).toHaveAttribute('aria-expanded', 'false') + await expect(menu).toBeHidden() + + await burger.click() + await expect(burger).toHaveAttribute('aria-expanded', 'true') + await expect(menu).toBeVisible() + + await page.keyboard.press('Escape') + await expect(burger).toHaveAttribute('aria-expanded', 'false') + await expect(menu).toBeHidden() + await expect(burger).toBeFocused() + }) +}) From a40298ff600b567869d48f338070a9541e4157fa Mon Sep 17 00:00:00 2001 From: Luis Centeno Date: Tue, 27 Oct 2026 16:56:13 -0600 Subject: [PATCH 5/6] Document completed hardening and content collection work --- ASTRO_MIGRATION_PLAN.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ASTRO_MIGRATION_PLAN.md b/ASTRO_MIGRATION_PLAN.md index 2747038..d832a26 100644 --- a/ASTRO_MIGRATION_PLAN.md +++ b/ASTRO_MIGRATION_PLAN.md @@ -6,8 +6,9 @@ > > **Status:** implemented on branch `migrate/astro` with Astro 7.4.2 and > `@astrojs/sitemap` 3.7.4. Follow-up cleanups also completed: React was removed -> entirely, READMEs are vendored, local images use `astro:assets`, Nginx runs -> unprivileged, and a CSP is in place. +> entirely, projects use content collections, fonts and images are self-hosted, +> Nginx runs unprivileged and read-only, a CSP is in place, and CI/Playwright +> coverage was added. --- From ceb6cd3eddae0aefec94d674a99bf7034cc6816f Mon Sep 17 00:00:00 2001 From: Luis Centeno Date: Wed, 28 Oct 2026 11:21:52 -0600 Subject: [PATCH 6/6] Add LinkedIn to contact section --- src/components/icon/Icon.astro | 2 ++ src/components/profile-box/ProfileBox.astro | 13 +++++++++++++ src/data/index.js | 1 + src/data/profile.json | 1 + src/layouts/BaseLayout.astro | 2 +- src/pages/index.astro | 1 + tests/e2e/smoke.spec.ts | 7 +++++++ 7 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/components/icon/Icon.astro b/src/components/icon/Icon.astro index 9f53fec..28e87b1 100644 --- a/src/components/icon/Icon.astro +++ b/src/components/icon/Icon.astro @@ -4,6 +4,7 @@ import brandAngular from '@tabler/icons/outline/brand-angular.svg?raw' import brandApple from '@tabler/icons/outline/brand-apple.svg?raw' import brandGithub from '@tabler/icons/outline/brand-github.svg?raw' import brandJavascript from '@tabler/icons/outline/brand-javascript.svg?raw' +import brandLinkedin from '@tabler/icons/outline/brand-linkedin.svg?raw' import brandNodejs from '@tabler/icons/outline/brand-nodejs.svg?raw' import brandPython from '@tabler/icons/outline/brand-python.svg?raw' import brandReact from '@tabler/icons/outline/brand-react.svg?raw' @@ -25,6 +26,7 @@ const icons: Record = { download, github: brandGithub, javascript: brandJavascript, + linkedin: brandLinkedin, 'map-pin': mapPin, nodejs: brandNodejs, postgres: database, diff --git a/src/components/profile-box/ProfileBox.astro b/src/components/profile-box/ProfileBox.astro index 8b84490..e4b03a1 100644 --- a/src/components/profile-box/ProfileBox.astro +++ b/src/components/profile-box/ProfileBox.astro @@ -6,6 +6,7 @@ const { name, role, email, + linkedin, country, avatar, } = Astro.props @@ -36,6 +37,18 @@ const skills: string[] = Astro.props.skills ?? [] {email} +
  • + + + LinkedIn + +
  • +
  • {country} diff --git a/src/data/index.js b/src/data/index.js index f0cb25a..9a4e353 100644 --- a/src/data/index.js +++ b/src/data/index.js @@ -10,6 +10,7 @@ import workExperience from './work-experience.json' * @property {String} short_desc - Short description * @property {Array} skills - Skills list * @property {String} email - Contact email + * @property {String} linkedin - LinkedIn profile URL * @property {String} location - Current location * @property {String} cv - Resume URL */ diff --git a/src/data/profile.json b/src/data/profile.json index 81ee0e4..ae0c6a0 100644 --- a/src/data/profile.json +++ b/src/data/profile.json @@ -4,6 +4,7 @@ "about": "Experienced full-stack web developer with 8 years of expertise in building dynamic, user-friendly web applications. Skilled in backend frameworks like Django, Ruby on Rails, and Node.js, as well as frontend technologies such as React, Vue, and Angular.\nProficient in CI/CD, testing, Git, and agile methodologies.\nThrives in remote, collaborative environments and is passionate about continuous learning and delivering exceptional user experiences.", "short_desc": "Passionate full-stack web developer with many years of experience in web development", "email": "luisjcenteno@live.com", + "linkedin": "https://www.linkedin.com/in/luisjcenteno", "location": "Nicaragua", "cv": "https://drive.google.com/file/d/1l-GxNTBttE7hEadNLvAz85DRkBH2QuM6/view?usp=sharing", "skills": [ diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro index f802b8c..0525432 100644 --- a/src/layouts/BaseLayout.astro +++ b/src/layouts/BaseLayout.astro @@ -30,7 +30,7 @@ const structuredData = { jobTitle: Profile.title, url: site.origin, image: new URL('/images/cover.jpg', site).href, - sameAs: ['https://github.com/LuisHCK'], + sameAs: ['https://github.com/LuisHCK', Profile.linkedin], }, { '@type': 'WebSite', diff --git a/src/pages/index.astro b/src/pages/index.astro index 6472291..9e43d86 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -20,6 +20,7 @@ const projects = await getProjects() avatar={avatar} role={Profile.title} email={Profile.email} + linkedin={Profile.linkedin} country={Profile.location} skills={Profile.skills} /> diff --git a/tests/e2e/smoke.spec.ts b/tests/e2e/smoke.spec.ts index dd28773..31e5e0b 100644 --- a/tests/e2e/smoke.spec.ts +++ b/tests/e2e/smoke.spec.ts @@ -92,6 +92,13 @@ test('project page renders README content and GitHub link', async ({ page }) => await expect(page.getByRole('link', { name: /View in GitHub/ })).toBeVisible() }) +test('contact section links to LinkedIn', async ({ page }) => { + await page.goto('/') + const linkedin = page.getByRole('link', { name: 'LinkedIn profile' }) + await expect(linkedin).toHaveAttribute('href', 'https://www.linkedin.com/in/luisjcenteno') + await expect(linkedin).toHaveAttribute('target', '_blank') +}) + test('active navigation and skip link are accessible', async ({ page }) => { await page.goto('/projects') await expect(page.getByRole('link', { name: 'Projects' })).toHaveAttribute(