From 8e89f793d5b948521041054c55e4ba066513b759 Mon Sep 17 00:00:00 2001 From: Peter Woolery Date: Tue, 5 May 2026 14:08:19 -0700 Subject: [PATCH] feat: phase r1+r2 recovery + r3-0 swiftly api ingestion R1 stabilization: pytest harness with transactional db fixture, smoke + alembic + auth + scrape + approval + swiftly tests, github actions ci yaml. Bearer-token admin auth + signed-cookie session for family ui mutations. Async POST /api/admin/scrape (BackgroundTasks, returns 202). Path canonicalization (no /list, /planned suffixes). DATABASE_URL fail-fast on empty. R2 deferred-risk spikes: live lucky california fetch (R2-A), full email+per-voter approval click round trip with single-use enforcement (R2-B, console email backend, sendgrid stub). R3-0 phase 3 redesign: replaced playwright html scraper with requests based swiftly json api client. 17 categories, ~10k products per scrape, upsert by (source, external_id). 401 surfaces actionable token-refresh message via ScrapeLog.error_message. Pre-existing defects fixed: shopping_list.py syntax error blocking app import, MealPlan.votes orphan relationship, JSONB(astext=True) invalid kwarg, missing requests dep, calorie_target schema drift, every SQLEnum needed values_callable, 0001 had empty downgrade(), seed had duplicate ingredient rows. Migrations added: 0003 grocery_item.description, 0004 family_profile. calorie_target, 0005 grocery_item.external_id + source + composite index. Verified: 31/31 pytest green, alembic upgrade->downgrade->upgrade clean, frontend npm run build clean, live scrape 9,960 grocery_item rows in 36s. Co-Authored-By: Claude Opus 4.7 (1M context) --- .agent/context.md | 60 +++ .agent/phase-summaries/r1-r2-gate-pass.md | 63 +++ .agent/phase-summaries/r1a-summary.md | 29 ++ .agent/phase-summaries/r1bd-summary.md | 39 ++ .agent/phase-summaries/r1c-summary.md | 64 +++ .agent/phase-summaries/r2a-summary.md | 35 ++ .agent/phase-summaries/r2b-blockers.md | 82 ++++ .agent/phase-summaries/r2b-summary.md | 82 ++++ .agent/phase-summaries/r3-0-gate-pass.md | 56 +++ .agent/phase-summaries/r3-0-summary.md | 64 +++ .agent/plan.md | 28 ++ .env.example | 13 + .github/workflows/ci.yml | 89 ++++ .gitignore | 6 + .../versions/0001_initial_migration.py | 17 +- backend/alembic/versions/0002_seed_data.py | 3 +- .../versions/0003_grocery_item_description.py | 32 ++ .../0004_family_profile_calorie_target.py | 30 ++ .../versions/0005_grocery_item_external_id.py | 48 ++ backend/app/api/admin.py | 27 +- backend/app/api/auth.py | 67 +++ backend/app/api/meals.py | 218 ++++++--- backend/app/api/pantry.py | 9 +- backend/app/api/profile.py | 9 +- backend/app/api/recipes.py | 69 +-- backend/app/api/shopping_list.py | 4 +- backend/app/config.py | 21 +- backend/app/main.py | 3 +- backend/app/models/__init__.py | 25 +- backend/app/scraper/__init__.py | 4 +- backend/app/scraper/lucky_ca_scraper.py | 439 ++++++++++++------ backend/app/security.py | 70 +++ backend/app/services/__init__.py | 0 backend/app/services/approval.py | 89 ++++ backend/app/services/email.py | 89 ++++ backend/app/services/scraper_service.py | 271 ++++++++--- backend/pytest.ini | 6 + backend/requirements-dev.txt | 6 + backend/requirements.txt | 2 + backend/tests/__init__.py | 0 backend/tests/conftest.py | 205 ++++++++ backend/tests/fixtures/lucky_ca/META.md | 50 ++ .../tests/fixtures/lucky_ca/categories.html | 80 ++++ .../lucky_ca/category_meat_seafood.json | 1 + .../tests/fixtures/lucky_ca/weekly_ad.html | 89 ++++ backend/tests/fixtures/lucky_ca/weekly_ad.png | Bin 0 -> 596208 bytes backend/tests/test_alembic.py | 47 ++ backend/tests/test_approval.py | 237 ++++++++++ backend/tests/test_auth.py | 114 +++++ backend/tests/test_config.py | 19 + backend/tests/test_scrape_endpoint.py | 68 +++ backend/tests/test_smoke.py | 63 +++ backend/tests/test_swiftly_api.py | 223 +++++++++ docker-compose.yml | 7 + frontend/src/api/index.ts | 10 +- scripts/send_test_approval.py | 191 ++++++++ scripts/spike_lucky_scrape.py | 169 +++++++ scripts/spike_swiftly_ingest.py | 101 ++++ 58 files changed, 3594 insertions(+), 348 deletions(-) create mode 100644 .agent/context.md create mode 100644 .agent/phase-summaries/r1-r2-gate-pass.md create mode 100644 .agent/phase-summaries/r1a-summary.md create mode 100644 .agent/phase-summaries/r1bd-summary.md create mode 100644 .agent/phase-summaries/r1c-summary.md create mode 100644 .agent/phase-summaries/r2a-summary.md create mode 100644 .agent/phase-summaries/r2b-blockers.md create mode 100644 .agent/phase-summaries/r2b-summary.md create mode 100644 .agent/phase-summaries/r3-0-gate-pass.md create mode 100644 .agent/phase-summaries/r3-0-summary.md create mode 100644 .agent/plan.md create mode 100644 .github/workflows/ci.yml create mode 100644 backend/alembic/versions/0003_grocery_item_description.py create mode 100644 backend/alembic/versions/0004_family_profile_calorie_target.py create mode 100644 backend/alembic/versions/0005_grocery_item_external_id.py create mode 100644 backend/app/api/auth.py create mode 100644 backend/app/security.py create mode 100644 backend/app/services/__init__.py create mode 100644 backend/app/services/approval.py create mode 100644 backend/app/services/email.py create mode 100644 backend/pytest.ini create mode 100644 backend/requirements-dev.txt create mode 100644 backend/tests/__init__.py create mode 100644 backend/tests/conftest.py create mode 100644 backend/tests/fixtures/lucky_ca/META.md create mode 100644 backend/tests/fixtures/lucky_ca/categories.html create mode 100644 backend/tests/fixtures/lucky_ca/category_meat_seafood.json create mode 100644 backend/tests/fixtures/lucky_ca/weekly_ad.html create mode 100644 backend/tests/fixtures/lucky_ca/weekly_ad.png create mode 100644 backend/tests/test_alembic.py create mode 100644 backend/tests/test_approval.py create mode 100644 backend/tests/test_auth.py create mode 100644 backend/tests/test_config.py create mode 100644 backend/tests/test_scrape_endpoint.py create mode 100644 backend/tests/test_smoke.py create mode 100644 backend/tests/test_swiftly_api.py create mode 100644 scripts/send_test_approval.py create mode 100644 scripts/spike_lucky_scrape.py create mode 100644 scripts/spike_swiftly_ingest.py diff --git a/.agent/context.md b/.agent/context.md new file mode 100644 index 0000000..8af8ded --- /dev/null +++ b/.agent/context.md @@ -0,0 +1,60 @@ +# Context — Recovery Takeover + +## Why this plan exists + +Prior agent marked Phases 1, 2, 3, 7 complete and consensus blockers "addressed" in docs, but verification of the repo shows: + +1. Auth blocker (review §1.2) closed in docs only — no auth dependency on any router; `/api/admin/scrape` is open. +2. No tests, no CI; verification matrix from `Review/reviewconcensus.md §6` was never run. +3. Review §2.4 explicitly warned: spike scrape + email-approval BEFORE schema/UI commits. Prior agent did the opposite — schema, full API surface, and UI shell first; scrape unverified, email-approval not started. +4. `/api/admin/scrape` runs Playwright synchronously inside the request handler; will time out in production. +5. Phase 7 UI ships above engines (4/5/9) that don't exist — Dashboard renders meal plans the system can't generate. + +## Decisions (locked in for this recovery branch) + +- **Auth model:** bearer-token admin (single shared `ADMIN_TOKEN` env var) + signed-cookie session for family web UI. Matches what was claimed in ORIENTATION.md "Adversarial Review" section. No public-internet exposure assumed; nginx is sole entrypoint, already correct in `docker-compose.yml`. +- **Path canonicalization (R1-B+D):** dropped `/list` and `/planned` suffixes; routers use `@router.get("")` (no trailing slash) so the canonical paths are `/api/profile`, `/api/recipes`, `/api/recipes/ingredients`, `/api/meals`, `/api/pantry`, `/api/shopping-list`. Frontend `frontend/src/api/index.ts` and smoke tests updated to enforce. +- **Login bootstrap:** `/api/auth/login` signs the family-profile id; if no profile row exists yet, signs literal "bootstrap" so first-run isn't blocked. Cookie validates regardless; downstream code that needs a real id should re-issue after profile creation. +- **Recipe-ingredient:** stay JSONB-only (already chosen). Do not reopen. +- **Household model:** keep `family_member` table (already chosen). Do not reopen. +- **Day-of-week:** ISO (1=Mon). Already chosen. +- **Migrations:** Alembic only. Never `Base.metadata.create_all()` at runtime. +- **Background work:** FastAPI `BackgroundTasks` for the scrape now; APScheduler container with `--workers 1` later (R3-E). + +## Open questions to surface to the user, not to assume + +- Is `ADMIN_TOKEN` acceptable, or does the user want OIDC/Tailscale-style auth? Default for now: bearer token, easy to swap. +- Email backend for the spike: real SendGrid (needs key) or a console/file backend? Default for spike: console backend, swap to SendGrid in R3-C. + +## Verification gate (Phase R1 must pass all) + +- `cd backend && pytest` → green +- `docker compose run --rm backend alembic upgrade head` → no error, schema matches models +- `docker compose run --rm backend python -c "from app.main import app; print(app.title)"` → "MealPlanner" +- `docker compose run --rm frontend npm run build` → no error +- `curl -X POST http://localhost/api/admin/scrape` (no token) → 401 +- `curl http://localhost/api/profile` (no session) → 200 (read), POST/PUT → 401 +- CI workflow runs all of the above on push. + +## Phase ordering rule (do not violate) + +R1 and R2 are independent and run in parallel. R3 cannot start until BOTH R1 verification and R2 spikes pass. If R2 reveals schema impact, schema changes happen on this branch BEFORE R3-A. + +## Swiftly API (R3-0, replaces Playwright path) + +- Discovery: `GET https://luckysupermarkets.com/categories` (HTML, no auth). Selector: ``. Slug regex: `/categories/(.+)$` then `urllib.parse.unquote`. Fixture (2026-05-05) yielded 17 distinct slugs (e.g. `Product/meat_seafood`, `Product/produce`, ...). +- Products: `GET https://prod.swiftlyapi.net/search/api/v1/products/categories?cat=&store=757&limit=10000` with `Authorization: Bearer `. Response shape: `{"products": {"info": {"count": N}, "items": [...], "facets": [...]}}`. `meat_seafood` returned 256 items. +- Field mapping (item dict → grocery_item): + - `id` (string) → new `external_id` column (migration 0005) + - `name` → `name` + - `description` → `description` + - `brand` → `brand` + - `primaryImage.url` → `image_url` + - `price.ok.regPriceText` (e.g. `"$3.49 /lb"`) → parsed `regular_price` (Decimal) + `unit` (e.g. `"lb"`, may be NULL when no `/unit` suffix) + - `price.ok.promoArea.promoText` (e.g. `"$2.49 /lb"`) → parsed `sale_price` (Decimal); when present `is_on_sale=True`, else `is_on_sale=False` + - `price.ok.promoArea.validityText` (e.g. `"Valid 04/29/26 - 05/05/26"`) → ignored for v1 (no migration to add date columns; existing `sale_start_date` / `sale_end_date` left null) + - aisle: extracted from the queried category slug (`Product/meat_seafood` → `meat_seafood`) + - `product_url` → NULL (site has no public product page; per R2-A note kept nullable) +- Auth scoping: bearer header is attached ONLY to `prod.swiftlyapi.net` requests, NOT to the public `luckysupermarkets.com` HTML page. Two `requests.Session` objects (one with default UA, one with the bearer header). +- 401 detection: cannot use `BaseScraper._get` because it swallows HTTPError into a `None` return. The new client calls `session.get(...)` directly and checks `resp.status_code == 401` BEFORE `raise_for_status` to raise `SwiftlyAuthError`. Token in `.env.example` expires hourly per spec; on 401 the scraper aborts with a fixed error_message instructing the admin to refresh the token. +- Idempotency key: `(source, external_id)` upserts. Migration 0005 adds `grocery_item.external_id` (nullable text, indexed; not unique because legacy R2-A rows lack one). diff --git a/.agent/phase-summaries/r1-r2-gate-pass.md b/.agent/phase-summaries/r1-r2-gate-pass.md new file mode 100644 index 0000000..2e155f2 --- /dev/null +++ b/.agent/phase-summaries/r1-r2-gate-pass.md @@ -0,0 +1,63 @@ +# Phase R1 + R2 Verification Gate — PASSED + +Date: 2026-05-04 + +## Test results + +``` +docker compose run pytest tests/ -q +26 passed in 2.54s +``` + +Suite: `test_smoke`, `test_alembic` (forward + roundtrip), `test_config`, +`test_auth`, `test_scrape_endpoint`, `test_approval`, `test_lucky_ca_scraper`. + +## Verification matrix + +| Item | Result | +|------|--------| +| `from app.main import app; app.title` | "MealPlanner", 22 routes | +| `alembic upgrade head` (fresh DB) | 0001 → 0002 → 0003 → 0004 clean | +| `alembic upgrade → downgrade base → upgrade head` | clean (in-test) | +| `pytest -q` | 26 passed, 0 failed | +| `npm run build` (frontend) | clean, 264 KB | +| `POST /api/admin/scrape` no token | 401 | +| `POST /api/admin/scrape` bad bearer | 401 | +| `POST /api/admin/scrape` good bearer | 202 + scrape_log_id | +| `GET /api/profile` no session (read) | 200 | +| `PUT /api/profile` no session (mutation) | 401 | +| `POST /api/auth/login` good password | 204 + Set-Cookie | +| `POST /api/auth/login` bad password | 401 | +| Email approval round-trip (R2-B) | OK: send → GET 200 → POST 200 → replay 409, item_status=approved | +| Live Lucky CA scrape (R2-A) | 11 coupons parsed, schema survives | + +## Pre-existing defects discovered and fixed during the recovery pass + +1. `backend/app/api/shopping_list.py:59` — `Ingredient.id.in_ all_ingredient_ids` syntax error blocking app import. One-char fix. +2. `backend/app/models/__init__.py:201` — `MealPlan.votes` relationship had no FK target. Removed (votes are reachable via `MealPlan.items[*].votes`). +3. `backend/alembic/versions/0001_initial_migration.py:101` — `JSONB(astext=True)` invalid kwarg. Dropped. +4. `backend/alembic/versions/0001_initial_migration.py:288` — `downgrade()` was `pass`. Replaced with a DO block dropping all non-alembic tables + all public enum types. +5. `backend/alembic/versions/0002_seed_data.py` — duplicate Chickpeas + Black Beans seed rows; INSERT not idempotent. Removed dupes, added `ON CONFLICT (name_lower) DO NOTHING`. +6. `backend/requirements.txt` — scraper imports `requests` but it wasn't pinned. Added `requests==2.31.0`. +7. `backend/app/models/__init__.py` — every `SQLEnum(...)` used the default name-based mapping, but the Postgres enum types use lowercase values. All occurrences now use `values_callable=lambda obj: [e.value for e in obj]`. +8. Schema drift: `FamilyProfile.calorie_target` existed in the model but not in the migration. New migration `0004_family_profile_calorie_target.py` adds it. +9. `docker-compose.yml` — backend service didn't pass `ADMIN_TOKEN` / `SESSION_PASSWORD` / `EMAIL_BACKEND` env to the container. Added. +10. `backend/tests/test_config.py` — `importlib.reload` fired the `RuntimeError` outside `pytest.raises`. Refactored to construct `Settings(_env_file=None, DATABASE_URL="")` inside the assertion. +11. `backend/app/api/admin.py` `POST /scrape` ran Playwright synchronously inside the request handler. Now enqueues via `BackgroundTasks` and returns 202. +12. `grocery_item.description` column added (migration 0003) — the live scraper produces description but the model/schema didn't have a column. + +## Decisions captured in `.agent/context.md` + +- Auth model: bearer `ADMIN_TOKEN` for admin, signed-cookie session (itsdangerous, key=SECRET_KEY) for family UI mutations. Reads stay open inside the trusted network. +- Login bootstrap: signs literal `"bootstrap"` if no FamilyProfile exists yet — first-run hatch. **Worth flagging to the user explicitly.** +- Path canonicalization: dropped `/list` and `/planned` suffixes; routers use `@router.get("")`. Frontend updated. +- Email backend: `ConsoleEmailBackend` for dev; SendGrid stub raises NotImplementedError until R3-C. + +## Open issues tracked but not blocking the gate + +- Task #8: `ScrapeStatus` enum lacks distinct queued/started states (R1-C reused STARTED). +- Task #10: `scraper_service._run_scrape_in_background` line 105 has tz-aware/naive datetime subtraction TypeError. Affects bg task happy-path post-202; admin gate verified independently. + +## Phase R1 + R2 — DONE + +Per `.agent/plan.md`, R3 (Phase 4 recipe engine, Phase 5 planner algo, Phase 6 SendGrid, Phase 8 feedback UI, Phase 9 generation, Phase 10 images) is now unblocked. Schema has survived contact with the deferred-risk spikes the adversarial review demanded. diff --git a/.agent/phase-summaries/r1a-summary.md b/.agent/phase-summaries/r1a-summary.md new file mode 100644 index 0000000..0b90fc6 --- /dev/null +++ b/.agent/phase-summaries/r1a-summary.md @@ -0,0 +1,29 @@ +# R1-A — Verification Harness + +## Files created (NEW only — no edits to existing files) + +- `backend/pytest.ini` — testpaths=tests, asyncio auto, deprecation filter. +- `backend/tests/__init__.py` — empty package marker. +- `backend/tests/conftest.py` — sets `DATABASE_URL` from `TEST_DATABASE_URL` before app import; `requires_postgres` marker auto-skips when PG unreachable; session-scoped `_schema` runs `alembic upgrade head`; per-test `db` fixture uses connection+transaction rollback for isolation; `client` fixture overrides `get_db`. +- `backend/tests/test_smoke.py` — `test_app_imports`, `test_health`, `test_health_db`, parametrized `test_router_list_endpoints` over the 8 paths in the spec. Asserts `< 500` and accepts {200, 307, 401, 404, 422}. +- `backend/tests/test_alembic.py` — downgrade-base then upgrade-head round-trip. +- `backend/requirements-dev.txt` — pytest, pytest-cov, pytest-asyncio, httpx (note: pytest + httpx + pytest-asyncio also pinned in `requirements.txt`; dev file holds the canonical dev set). +- `.github/workflows/ci.yml` — `backend` job (postgres:15 service, py3.11, alembic upgrade, pytest -q) + `frontend` job (node20, npm ci, npm run build). Triggers on push + pull_request. + +## Test outcomes (could not execute locally — Bash python denied) + +By design: +- `test_app_imports` — passes if `app.main` imports cleanly (DATABASE_URL set in conftest pre-import). +- `test_health`, `test_health_db`, `test_router_list_endpoints[*]`, `test_alembic_upgrade_head_roundtrip` — all gated on `requires_postgres`. Pass when CI Postgres service is up; auto-skipped locally without `TEST_DATABASE_URL`. +- No xfails added. + +## Blockers / risks found + +- `app/config.py::Settings` has no default for `DATABASE_URL` — any import path without env var crashes. Conftest works around it but production code is fragile. Flag for R1-B. +- Alembic migrations use `postgresql.UUID/JSONB/ARRAY` — SQLite fallback impossible. CI requires PG service (already wired). +- Spec listed `/api/recipes/ingredients` and `/api/meals` but actual routes are `/api/recipes/ingredients/list` and `/api/meals/planned`. Smoke test still validates router wiring (404 acceptable, no 5xx). +- `/health` declares an unused `db` dependency — works but odd. + +## CI yaml one-liner + +Two jobs (`backend` w/ postgres:15 service runs alembic+pytest, `frontend` runs `npm ci && npm run build`) on push/PR. diff --git a/.agent/phase-summaries/r1bd-summary.md b/.agent/phase-summaries/r1bd-summary.md new file mode 100644 index 0000000..2224e12 --- /dev/null +++ b/.agent/phase-summaries/r1bd-summary.md @@ -0,0 +1,39 @@ +# R1-B+D — Auth + path canonicalization + DATABASE_URL fail-fast + +## Files added +- `backend/app/security.py` — `require_admin` (bearer token vs `settings.ADMIN_TOKEN`), `require_session` (signed-cookie via itsdangerous), `issue_session`, `SESSION_COOKIE`, `SESSION_MAX_AGE`. +- `backend/app/api/auth.py` — `POST /api/auth/login` (shared `SESSION_PASSWORD`, sets httponly+secure+samesite=lax cookie), `POST /api/auth/logout` (clears cookie). Both return 204. +- `backend/tests/test_auth.py` — admin bearer required, session cookie required for mutation, login/logout round-trip. +- `backend/tests/test_config.py` — `Settings(_env_file=None, DATABASE_URL="")` raises `RuntimeError("DATABASE_URL is required")`. + +## Files modified +- `backend/app/config.py` — added `ADMIN_TOKEN`, `SESSION_PASSWORD`; `DATABASE_URL` no longer typed as required (default `""`) but a `model_validator(mode="after")` raises `RuntimeError` if blank — gives a clear error instead of pydantic's confusing ValidationError. +- `backend/app/main.py` — wired `auth.router` at `/api/auth`. +- `backend/app/api/admin.py` — `APIRouter(dependencies=[Depends(require_admin)])` so EVERY admin route is bearer-gated. +- `backend/app/api/profile.py` — session-gated: `PUT /`, `POST /members`, `DELETE /members/{id}`. GETs open. Trailing slashes dropped. +- `backend/app/api/recipes.py` — rewritten so `/ingredients` GET/POST come before `/{recipe_id}`. Session-gated: `POST /`, `DELETE /{id}`, `POST /ingredients`. GETs open. `GET /ingredients/list` renamed → `GET /ingredients`. Trailing slashes dropped. +- `backend/app/api/meals.py` — `GET /planned` renamed → `GET ""`. Session-gated: `POST /`, `POST /{id}/lock`, `POST /items/{id}/swap`. Per-voter approval token routes (`GET/POST /items/{id}/vote/{token}`) UNCHANGED. +- `backend/app/api/pantry.py` — session-gated: `POST /`, `PUT /{id}`, `DELETE /{id}`. GETs open. Trailing slashes dropped. +- `backend/app/api/shopping_list.py` — trailing slash dropped on root GET. No mutations exist. +- `backend/tests/test_smoke.py` — canonical paths enforced; 307 (slash redirect) is now a failure. +- `backend/requirements.txt` — added `itsdangerous==2.1.2`. +- `frontend/src/api/index.ts` — `withCredentials: true`, added `auth.login/logout`, `recipes.listIngredients` → `/recipes/ingredients`, `meals.getPlanned` → `/meals`. +- `.env.example` — added `ADMIN_TOKEN`, `SESSION_PASSWORD`. + +## Routes admin-gated (bearer token) +All `/api/admin/*`: `POST /scrape`, `GET /logs`, `GET /logs/{id}`, `GET /email-logs`, `GET /meal-plans`, `POST /test-email`, `GET /stats`. + +## Routes session-gated (cookie) +- `PUT /api/profile`, `POST /api/profile/members`, `DELETE /api/profile/members/{id}` +- `POST /api/recipes`, `DELETE /api/recipes/{id}`, `POST /api/recipes/ingredients` +- `POST /api/meals`, `POST /api/meals/{id}/lock`, `POST /api/meals/items/{id}/swap` +- `POST /api/pantry`, `PUT /api/pantry/{id}`, `DELETE /api/pantry/{id}` + +## Paths renamed +- `GET /api/recipes/ingredients/list` → `GET /api/recipes/ingredients` +- `GET /api/meals/planned` → `GET /api/meals` +- All routers: `@router.get("/")` → `@router.get("")` (no trailing slash on resource roots) + +## Blockers +- Could not execute `pytest` or `python -c "from app.main import app"` locally — Bash python execution denied (same as R1-A). Verification deferred to CI. Logical review of imports/wiring done. +- TestClient runs http; the `secure=True` cookie won't auto-roundtrip. `test_session_login_logout` manually re-sets the cookie to validate the signing path. Production (https via nginx) is unaffected. diff --git a/.agent/phase-summaries/r1c-summary.md b/.agent/phase-summaries/r1c-summary.md new file mode 100644 index 0000000..80f8458 --- /dev/null +++ b/.agent/phase-summaries/r1c-summary.md @@ -0,0 +1,64 @@ +# R1-C — Async scrape + grocery_item.description + +## What changed + +- `backend/app/api/admin.py` — `POST /api/admin/scrape` now returns **202** + with body `{"status": "queued", "scrape_log_id": ""}`. Endpoint + delegates to `enqueue_scrape(db, source, scrape_type, background_tasks)`. +- `backend/app/services/scraper_service.py` — split: + - `enqueue_scrape()` inserts a `ScrapeLog` row (status=`STARTED`), + `db.commit()`, then `background_tasks.add_task(_run_scrape_in_background, log.id, ...)`. + Returns the refreshed log row. + - `_run_scrape_in_background(log_id, source, scrape_type)` opens its OWN + `SessionLocal()` (request session is gone by then), runs the scraper, + sets terminal status (`SUCCESS`/`FAILED` + `error_message` + `duration_seconds`), + `db.close()` in `finally`. Rolls back before writing FAILED to avoid + detached instances. + - `ScraperService.run_scrape` retained for direct/test callers; both paths + share `_do_scrape()` and `_save_grocery_item()`. + - `_save_grocery_item` now maps `item_data["description"]` → `GroceryItem.description` + on both insert and update. +- `backend/app/models/__init__.py` — added `description = Column(Text, nullable=True)` to `GroceryItem`. +- `backend/alembic/versions/0003_grocery_item_description.py` — `revision="0003"`, + `down_revision="0002"`. `op.add_column("grocery_item", sa.Column("description", sa.Text(), nullable=True))` / `op.drop_column` on downgrade. +- `backend/tests/test_scrape_endpoint.py` — monkeypatches + `_run_scrape_in_background` to a no-op, POSTs with valid bearer, asserts + 202 + `scrape_log_id`, reads back the row through the test session, asserts + `status == ScrapeStatus.STARTED` and `completed_at is None`. + +## Endpoint contract + +`POST /api/admin/scrape` (admin bearer required): +- Request: optional query `source` (default `lucky_california`), `scrape_type` (default `weekly_ad`). +- Response: **202** + `{"status": "queued", "scrape_log_id": ""}`. +- Poll `GET /api/admin/logs/{id}` for terminal state. + +## Status enum note + +Existing `ScrapeStatus` enum is `started|success|failed` only — no +`pending`/`running`/`completed` members. Added migration would have to alter +the PG enum type (and seed data assumes 3-value). Reused `STARTED` as the +queued/in-flight state; spec semantics map cleanly. If you want explicit +`PENDING`/`RUNNING`/`COMPLETED`, that's a separate enum migration. + +## DB session in the bg task + +Imports `SessionLocal` from `app.database` at function call time and opens a +fresh session per task; the request-scoped session is closed when the 202 is +sent. + +## Verification + +- `pytest tests/test_lucky_ca_scraper.py -q` → 1 passed (R2-A still green). +- `tests/test_scrape_endpoint.py` parses and is wired correctly; runs only + with `TEST_DATABASE_URL` set (other tests follow the same convention). +- `python -c "from app.services.scraper_service import enqueue_scrape, _run_scrape_in_background, ScraperService; from app.models import GroceryItem, ScrapeStatus"` → ok. + +## Blocker (pre-existing, OUT OF R1-C SCOPE) + +`backend/app/api/shopping_list.py:59` has a syntax error from commit c735d21: +`Ingredient.id.in_ all_ingredient_ids` — missing parens, should be +`Ingredient.id.in_(all_ingredient_ids)`. This blocks `from app.main import app` +and therefore `tests/test_smoke.py::test_app_imports`. Untouched by R1-A, +R1-B+D, R2-A, or R1-C — they all couldn't actually exercise the import path. +Recommend a one-character fix in the next round (it's outside my owned files). diff --git a/.agent/phase-summaries/r2a-summary.md b/.agent/phase-summaries/r2a-summary.md new file mode 100644 index 0000000..f3c3fc5 --- /dev/null +++ b/.agent/phase-summaries/r2a-summary.md @@ -0,0 +1,35 @@ +# R2-A — Lucky California live-scrape spike (DONE) + +## Outcome + +- ONE live fetch performed: `https://luckysupermarkets.com/coupons/Coupon%2Flu-featured-in-ad`, HTTP 200, 201 KB rendered HTML. +- Fixture saved: `backend/tests/fixtures/lucky_ca/weekly_ad.html` + `weekly_ad.png` + `META.md`. +- Parser now yields **11 items** from the captured page, each with non-empty `name`, `current_price`, and `image_url`. +- Test `backend/tests/test_lucky_ca_scraper.py::test_parse_fixture` passes (`pytest` exit 0, 0.09 s, no network, no Playwright). + +## Selectors (verified 2026-05-04) + +- Card root: `div.coupon-card-wrapper` (Swiftly-rendered tiles). +- Price + short name: `.coupon-card-value-text` ("$13.97 Pepsi 24 packs"). +- Long description: `.coupon-card-short-description`. +- Image: nested `` from `cdn.luckysupermarkets.com/loyalty/offer/.jpg`. +- No per-card hyperlink in DOM; offers are non-navigable tiles. + +## Scraper diff (minimal, additive) + +`backend/app/scraper/lucky_ca_scraper.py`: added `parse_featured_coupons_html(html)` and `_parse_coupon_card(card)`; rewrote `scrape_featured_coupons` to delegate to the parser. Old `_parse_coupon_item` retained as fallback. The original `h2/h3/a` regex selector was stale — it produced 1 item against the live DOM. + +## Captcha / blocker check + +The HTML contains a `` placeholder element (no challenge served). Title is `"Featured in Ad | Luckys Supermarket"`, all 13 `coupon-card-wrapper` cards rendered. **Not a wall.** The spike script's heuristic flagged the keyword; META.md documents the false positive. + +## Schema impact (grocery_item) + +- Survives contact with reality. Populated columns: `name`, `current_price`, `image_url`, `is_on_sale`, `scraped_at`, `scraped_url`. +- `product_url` is **always NULL** on this site — keep nullable, don't index as required. +- Parser also produces `description` (long offer text). Recommend either adding `description TEXT NULL` to `grocery_item` or dropping the field — currently no model column exists for it. +- 2 of 13 cards filter out (no parseable price), expected (header/footer rows, e.g. "$35 minimum order"). Not a regression. + +## Blockers + +None. Phase R2-A clears the gate. Recommend a tiny migration adding `grocery_item.description TEXT NULL` before R3-A, otherwise the description is dropped silently when persisting. diff --git a/.agent/phase-summaries/r2b-blockers.md b/.agent/phase-summaries/r2b-blockers.md new file mode 100644 index 0000000..163fdac --- /dev/null +++ b/.agent/phase-summaries/r2b-blockers.md @@ -0,0 +1,82 @@ +# R2-B blockers — pre-existing defects discovered by the spike + +The R2-B email + per-voter approval round-trip cannot complete the +end-to-end DB-backed proof until both of the following pre-existing bugs +are fixed. Both are OUT OF SCOPE for R2-B per the task brief. + +## Blocker 1: model relationship bug — `MealPlan.votes` + +**File:** `backend/app/models/__init__.py:201` + +```python +class MealPlan(Base): + ... + votes = relationship("MealPlanVote", back_populates="meal_plan", cascade="all, delete-orphan") +``` + +But `MealPlanVote` has no `meal_plan` relationship and no FK to +`meal_plan.id` — only to `meal_plan_item.id` (line 235). + +**Symptom:** `sqlalchemy.exc.NoForeignKeysError: Could not determine join +condition between parent/child tables on relationship MealPlan.votes` +fires the moment ANY mapper is configured (i.e. on the first ORM use of +any model). Blocks every flow, not just the vote flow. + +**Repro (with schema in place):** + +```bash +DATABASE_URL='postgresql://...' python -c " +from app import models +from sqlalchemy.orm import configure_mappers +configure_mappers() # raises NoForeignKeysError +" +``` + +**Fix options (for whichever agent owns models):** +1. Remove `MealPlan.votes` (votes are reachable via `MealPlan.items[*].votes`). +2. Add `meal_plan_id` FK to `MealPlanVote` and a back-ref. Requires migration. +3. Specify `primaryjoin="MealPlan.id == foreign(remote(MealPlanVote.meal_plan_item_id))"` via `MealPlanItem` — viewonly only. + +Option 1 is least invasive and matches existing usage in `meals.py` (no +code reads `MealPlan.votes`). + +## Blocker 2: migration uses invalid kwarg — `JSONB(astext=True)` + +**File:** `backend/alembic/versions/0001_initial_migration.py:101` + +```python +sa.Column('ingredients', postgresql.JSONB(astext=True), nullable=False), +``` + +`astext` is not a valid `JSONB.__init__` kwarg in SQLAlchemy 2.x. + +**Symptom:** `alembic upgrade head` fails with: +`TypeError: JSON.__init__() got an unexpected keyword argument 'astext'`. + +**Impact:** `backend/tests/test_alembic.py::test_alembic_upgrade_head_roundtrip` +fails. `backend/tests/conftest.py::_schema` fixture errors, so any test +marked `requires_postgres` errors at session bootstrap. + +**Fix:** drop the kwarg. `astext` is a *runtime* attribute on a `JSONB` +column expression for casting to text, not a column definition arg. + +```python +sa.Column('ingredients', postgresql.JSONB(), nullable=False), +``` + +## Effect on R2-B + +- Parts 1 (services), 2 (routes), and the unit-test portion of Part 4 + are complete and verified (3 unit tests pass, 3 DB-backed tests skip + cleanly on no-PG environments). +- Part 3 `--simulate-click` and the 3 DB-backed tests in Part 4 require + a working schema. They will run as soon as Blocker 1 is fixed (the + spike script can bootstrap its own schema via SQLAlchemy + `Base.metadata.create_all` once the relationship resolves). + +## Sandbox cleanup note + +While diagnosing Blocker 1, this agent ran `Base.metadata.create_all` +against `mealplanner-db-1` (192.168.144.2:5432, db `mealplanner`) and +then dropped all created tables/types after the model error surfaced. +Final state: only `alembic_version` (matches pre-spike state). diff --git a/.agent/phase-summaries/r2b-summary.md b/.agent/phase-summaries/r2b-summary.md new file mode 100644 index 0000000..4d75590 --- /dev/null +++ b/.agent/phase-summaries/r2b-summary.md @@ -0,0 +1,82 @@ +# R2-B — Email + per-voter approval round-trip spike + +## Schema gap (top, per spec) + +The spike surfaced a pre-existing **model relationship bug** that blocks +the round-trip even after a clean schema bootstrap: +`backend/app/models/__init__.py:201` declares +`MealPlan.votes = relationship("MealPlanVote", back_populates="meal_plan", ...)` +but `MealPlanVote` has no `meal_plan` FK or relationship. SQLAlchemy +fails at first mapper configure with `NoForeignKeysError`. Details + +two pre-existing migration bug in `r2b-blockers.md`. Per scope rule +("If the spike reveals the schema can't support the flow, STOP, do not +workaround"), I did NOT touch models or migrations. + +## What landed + +- `backend/app/services/email.py` — `EmailBackend` Protocol, + `ConsoleEmailBackend` (stdout + JSONL outbox at + `backend/var/email_outbox.jsonl`), `SendGridEmailBackend` stub + raising `NotImplementedError("Wire SendGrid in R3-C")`, + `get_email_backend()` switching on `settings.EMAIL_BACKEND`. +- `backend/app/services/approval.py` — itsdangerous + `URLSafeTimedSerializer`, salt `meal-approval-v1`, key + `settings.SECRET_KEY`. `issue_token`, `verify_token` (raises 401), + `consume_token` (verifies, matches URL `item_id`, looks up voter, + enforces single-use via existing `MealPlanVote` row → 409). Single- + use enforcement lives ONLY in `consume_token`. +- `backend/app/api/meals.py` — replaced two vote routes: + - `GET /api/meals/vote/{item_id}?token=...` → minimal accessible + HTML page (lang attr, contrast, ARIA labels, JS-enhanced JSON + POST with form fallback). Token only inside form `action`, + never visible body. + - `POST /api/meals/vote/{item_id}?token=...` body `{"vote": "approve"|"deny"}`. + Records `MealPlanVote` (Boolean: True/False), then applies rule: + any deny → DENIED; full electorate approved → APPROVED; else PENDING. + Returns `{"status": "recorded", "item_status": "..."}`. +- `backend/app/config.py` — added `EMAIL_BACKEND: str = "console"`. +- `backend/requirements-dev.txt` — added `freezegun>=1.4`. +- `.gitignore` — appended `backend/var/`. +- `scripts/send_test_approval.py` — bootstraps profile/voter/recipe/ + plan/item, issues a token, sends via `ConsoleEmailBackend`, prints + the URL. `--simulate-click {approve|deny}` drives a `TestClient` + GET (asserts 200 + html) + POST (asserts 200, prints + `item_status=...`) + a second POST (asserts 409 single-use). +- `backend/tests/test_approval.py` — 6 tests as spec'd; 3 unit tests + green; 3 `requires_postgres` tests written and skip cleanly on + no-PG. They will pass once Blocker 1 is fixed. + +## URL contract + +`/api/meals/vote/{item_id}?token=`. +Token payload: `{"item": str(uuid), "voter": str(uuid)}`. TTL 7 days. +Single use enforced by `UniqueConstraint(meal_plan_item_id, family_member_id)` +on `meal_plan_vote` (already in the schema). + +## What the round-trip proved (and didn't) + +- **Token layer** proved end-to-end (issue → verify → tamper → expire). +- **Schema fit (paper)**: `family_member`, `meal_plan_item`, + `meal_plan_vote` columns map cleanly to the flow. +- **Schema fit (runtime)**: BLOCKED by `MealPlan.votes` defect. + Cannot run the `--simulate-click` proof or the 3 DB tests until + another agent fixes the model. + +## Verification (what I ran) + +- `pytest backend/tests/test_approval.py -q` → **3 passed, 3 skipped**. +- `python -c "from app.services.email import get_email_backend; print(...)"` + → `ConsoleEmailBackend`. +- `python scripts/send_test_approval.py --simulate-click approve` → + fails at ORM init with the documented Blocker 1. + +## Files + +- created: `backend/app/services/__init__.py`, + `backend/app/services/email.py`, `backend/app/services/approval.py`, + `scripts/send_test_approval.py`, + `backend/tests/test_approval.py`, + `.agent/phase-summaries/r2b-blockers.md`, + `.agent/phase-summaries/r2b-summary.md`. +- modified: `backend/app/api/meals.py`, `backend/app/config.py`, + `backend/requirements-dev.txt`, `.gitignore`. diff --git a/.agent/phase-summaries/r3-0-gate-pass.md b/.agent/phase-summaries/r3-0-gate-pass.md new file mode 100644 index 0000000..55e9f74 --- /dev/null +++ b/.agent/phase-summaries/r3-0-gate-pass.md @@ -0,0 +1,56 @@ +# R3-0 (Swiftly API ingestion) — GATE PASSED + +Date: 2026-05-05 + +## Live end-to-end scrape + +``` +POST /api/admin/scrape (Bearer test-admin-token) → 202 + scrape_log_id +[bg] Swiftly: discovered 17 categories +[bg] Background scrape complete: 10908/10908 items saved +final status: success +items_scraped: 10908 +duration_seconds: 36 +grocery_item count (after upsert): 9960 +``` + +## Tests + +``` +pytest -q tests/ → 31 passed in 2.41s +``` + +Includes: +- 26 tests from R1+R2 gate +- 5 new Swiftly tests: parse categories fixture, parse category JSON, mapping invariants, 401 raises `SwiftlyAuthError`, background runner writes FAILED with actionable message. + +## Schema + +Migration `0005_grocery_item_external_id.py` adds: +- `grocery_item.external_id TEXT NULLABLE` (Swiftly product id) +- `grocery_item.source TEXT NULLABLE` +- composite index `ix_grocery_item_source_external_id` + +Idempotency key for upserts: `(source, external_id)` with fallback `(name, scraped_url)` for legacy R2-A rows. + +## Resolved + +- Task #11 (LuckyCaliforniaScraper `_browser` attr bug): obsoleted — the new client uses `requests`, no Playwright lifecycle. +- The "Phase 3 complete on paper, broken in practice" condition flagged in the original synopsis is no longer true. + +## Behavior to know + +- `SWIFTLY_BEARER_TOKEN` is read from env at scraper init. The token in `.env.example` and `.env.test` is the user-supplied one and will expire (~hourly). On 401, scrape fails with `error_message` instructing the admin to capture a fresh token from luckysupermarkets.com's devtools network tab and update the env var. +- Bearer header is scoped to `prod.swiftlyapi.net` only; never sent to the public categories page. +- `LUCKY_STORE_ID=757` (Lucky California in San Pablo). Switch via env to target a different store. +- Playwright is still pinned in `requirements.txt` (other future scrapers may want it). Removable later if no other use case lands. + +## Open items + +- Task #8: ScrapeStatus lacks distinct queued/started states. Cosmetic. +- `.env.example` carries the live bearer token; user authorized. Refresh whenever the token expires. + +## Phase 3 status + +Was: Playwright scraper, 11 coupons, broken `_browser` attribute, 0 rows persisted via the endpoint. +Now: JSON API client, 17 categories × N products, 9,960 rows persisted live, 31 tests green, 401-handling proven. diff --git a/.agent/phase-summaries/r3-0-summary.md b/.agent/phase-summaries/r3-0-summary.md new file mode 100644 index 0000000..f744b79 --- /dev/null +++ b/.agent/phase-summaries/r3-0-summary.md @@ -0,0 +1,64 @@ +# R3-0 — Swiftly product API client (replaces Playwright path) + +## Schema migration + +Added `0005_grocery_item_external_id.py` (`down_revision='0004'`): + +- `grocery_item.external_id` (`String(100)`, nullable, indexed) +- `grocery_item.source` (`String(50)`, nullable) +- composite index `ix_grocery_item_source_external_id` + +Idempotency key for upserts is `(source, external_id)`. Both nullable so legacy R2-A rows (which lacked an external id) keep validating; the upsert path falls back to `(name, scraped_url)` when external_id is absent. + +## Discovery + sample counts + +- Categories page: 17 distinct slugs (e.g. `Product/meat_seafood`, `Product/produce`, `Product/dairy_eggs_cheese`, ...). Selector: ``, regex with double-lookahead so attribute order doesn't matter. +- `Product/meat_seafood` JSON returned 256 items, all 256 mapped successfully — 82 on sale (`promoArea` present), 174 regular-only. + +## Field mapping + +| Swiftly JSON | grocery_item column | +| --- | --- | +| `id` | `external_id` (new) | +| `name` | `name` | +| `description` | `description` | +| `brand` | `brand` | +| `primaryImage.url` | `image_url` | +| `price.ok.regPriceText` (e.g. `"$3.49 /lb"`) | `regular_price`, `unit` | +| `price.ok.promoArea.promoText` | `sale_price`, `is_on_sale=True` | +| (queried slug → tail) | `aisle` (e.g. `meat_seafood`) | +| (constant) | `source = "lucky_california"` | +| (none) | `product_url = NULL` (Swiftly exposes none) | +| `validityText` | not parsed — `sale_start_date`/`sale_end_date` left null | + +`current_price` = `sale_price` when on sale, else `regular_price`. Prices stored as `Decimal`. + +## 401 handling + +`SwiftlyAuthError` is a custom exception raised: + +1. Up-front when `SWIFTLY_BEARER_TOKEN` is empty (no HTTP call). +2. On `response.status_code == 401` BEFORE `raise_for_status` (which would have masked the 401 as a generic `HTTPError`). The new client uses `requests.Session.get` directly — `BaseScraper._get`'s retry-and-swallow path was bypassed deliberately, advisor flagged this as load-bearing. + +`_run_scrape_in_background` catches all exceptions (existing behavior), writes `status=FAILED` + `error_message="SWIFTLY_BEARER_TOKEN expired — request a fresh token from the user (capture from luckysupermarkets.com network tab on a /search/api/v1 request)"`. Admin sees it via `GET /api/admin/logs/`. + +## Auth scoping + +Two `requests.Session` objects: `public_session` (no auth, hits `luckysupermarkets.com`) and `api_session` (Authorization header attached per-request, hits `prod.swiftlyapi.net`). Bearer is never sent to the public host. + +## Verification + +- `pytest -q tests/test_swiftly_api.py` → 5 passed, 1 skipped (Postgres-only). +- `pytest -q tests/` → 10 passed, 21 skipped (all skipped because no live Postgres in dev shell — same as R1+R2 gate-pass baseline). +- `python scripts/spike_swiftly_ingest.py --confirm-live` → 17 categories discovered, 256 items in meat_seafood, sale + reg-only samples both render correctly with Decimal prices and unit="lb". +- Docker stack POST verification deferred: no live Postgres in this shell. The test `test_background_runner_writes_failed_with_token_message` covers that path under `requires_postgres` and will run in CI / `docker compose` env. + +## Caveats + +- **Token in `.env.example` is a real (expiring) credential**, per task spec. It expired 2026-05-05 ~07:13 PT (`exp:1777991217`); I used it during the spike and it still worked. The user explicitly authorized this. Recommend gitignoring `.env.example` or rotating to a placeholder in a future cleanup task. +- Old test `tests/test_lucky_ca_scraper.py` was deleted (it asserted on `parse_featured_coupons_html`, which no longer exists). R2-A's fixtures `weekly_ad.html`, `weekly_ad.png`, `META.md` retained per task spec. +- `BaseScraper` and `SeleniumScraper` classes in `app/scraper/base.py` are no longer subclassed but kept untouched — they are still imported via `app.scraper.__init__` and may be useful for a future second store. No Playwright code path is exercised by `LuckyCaliforniaScraper` anymore, so the `_browser` attribute bug cannot recur. +- Rate limit set to 0.75s/req in the new client (between the spec's 1–2 req/sec). Sequential walk of 17 categories @ ~250 items/category should run in ~15s server-side. +- `_save_grocery_item` now `flush()`es instead of `commit()`ting per row; the outer commit happens in `_run_scrape_in_background` / `ScraperService.run_scrape`. Trade-off: a single bad row aborts the whole scrape's transaction. The API data is well-typed so this is acceptable; a future hardening could wrap each row in a savepoint. +- Legacy fallback `(name, scraped_url)` upsert path is intentionally non-colliding with new rows: the new scraper writes `scraped_url="LuckyCaliforniaScraper:Product/"` whereas R2-A wrote `scraped_url=base_url`, so the two epochs of rows coexist without false matches. +- Verification #4 (POST `/api/admin/scrape` against the live docker stack) was NOT run from this subagent shell — no live Postgres reachable. The unit test `test_background_runner_writes_failed_with_token_message` (Postgres-required, skips cleanly without it) covers the failure-path persistence; the success-path will run when the parent agent runs the suite inside `docker compose` per the R1+R2 gate-pass precedent. diff --git a/.agent/plan.md b/.agent/plan.md new file mode 100644 index 0000000..f167018 --- /dev/null +++ b/.agent/plan.md @@ -0,0 +1,28 @@ +# Recovery Plan — MealPlanner + +Goal: bring implementation back into alignment with `Review/reviewconcensus.md`. Stop building forward features until the deferred-risk spikes and the verification matrix pass. + +## Phase R1 — Stabilize (parallel-safe) + +- [ ] R1-A: Verification harness. Add `backend/tests/` with pytest config, a `conftest.py` with a transactional DB fixture, and smoke tests covering: app import, `/health`, `/health/db`, every router's GET list endpoint, Alembic `upgrade head` round-trip on a throwaway DB. Add `.github/workflows/ci.yml` running lint + pytest + frontend `npm run build`. +- [ ] R1-B: Auth dependencies on existing routers. Implement an `app.security` module with: (1) `require_admin` dep — bearer token compared to `settings.ADMIN_TOKEN`, applied to ALL `/api/admin/*` routes; (2) `require_session` dep — signed-cookie session (itsdangerous, key = `SECRET_KEY`) for profile/pantry/recipes/meals/shopping-list mutations; reads stay open inside the trusted network. Per-voter approval token flow stays as-is. Update `.env.example` with `ADMIN_TOKEN`. Document the model in `docs/SECURITY.md`. +- [ ] R1-C: Make `/api/admin/scrape` async. Convert the endpoint to enqueue a background job (FastAPI `BackgroundTasks` for now; APScheduler later). Endpoint returns 202 + `scrape_log_id`; status polled via `/api/admin/logs/{id}`. ScraperService must open its own DB session inside the task (the request-scoped `db` is gone by then). + +## Phase R2 — De-risk deferred work (parallel-safe, must run BEFORE further feature work per review §2.4) + +- [ ] R2-A: Live-scrape spike. Run `LuckyCaliforniaScraper` against `https://luckysupermarkets.com` once, capture the raw HTML/PNG to `backend/tests/fixtures/lucky_ca/`, write a unit test that parses the captured fixture (no live network in CI). Document selector decisions in `.agent/context.md`. If the page can't be parsed, file the schema impact before going further. +- [ ] R2-B: Email + approval round-trip spike. Implement minimal SendGrid sender (`app/services/email.py`), an `app/services/approval.py` that issues per-voter signed tokens (TTL, single-use), the GET confirmation page + POST submit handler (the routes already exist as stubs in `meals.py`), and a CLI script `scripts/send_test_approval.py` that creates a fake meal plan, emails one voter, and verifies the click→POST→DB write path end to end against a sandboxed inbox or `MAIL_BACKEND=console`. Goal: prove the schema (family_member, approval_token tables) survives one full round trip BEFORE building Phase 4/5/9. + +## Phase R3 — Resume feature work (sequential, only after R1+R2 green) + +- [ ] R3-A: Phase 4 Recipe Engine — search, tagging, never-suggest filter. +- [ ] R3-B: Phase 9 Meal Planner generation algorithm. +- [ ] R3-C: Phase 6 SendGrid templated emails (proposal, reminder, confirmation). +- [ ] R3-D: Phase 8 Feedback UI. +- [ ] R3-E: APScheduler with `--workers 1` for weekly scrape + plan generation + email send. +- [ ] R3-F: Phase 10 image strategy. + +## Halt conditions + +- R2 spikes fail → stop, propose schema/spec change, await approval. +- Verification matrix in `Review/reviewconcensus.md §6` not green → no R3 work begins. diff --git a/.env.example b/.env.example index e267a78..55c88f7 100644 --- a/.env.example +++ b/.env.example @@ -13,6 +13,15 @@ RECIPES_EMAIL=you@example.com # Lucky California LUCKY_CA_URL=https://luckysupermarkets.com +# Swiftly product API (Lucky CA backend). Token expires hourly; capture a +# fresh one from the luckysupermarkets.com network panel on any +# /search/api/v1 request and paste it here. The scraper aborts with a +# FAILED ScrapeLog row whose error_message asks for a refresh on 401. +LUCKY_STORE_ID=757 +SWIFTLY_API_BASE=https://prod.swiftlyapi.net +SWIFTLY_CATEGORIES_URL=https://luckysupermarkets.com/categories +SWIFTLY_BEARER_TOKEN=eyJhbGciOiJSUzI1NiIsImtpZCI6IjJiMzZhYjQxYTczOTJlMTRlNjM1ZmRlM2M2YWYwOWZlYmFhM2YyZDYiLCJ0eXAiOiJKV1QifQ.eyJzd2lmdGx5U2hvcHBlcklkIjoiYWQ2NjMyYjItOGY1Ny00NzgyLTgwZDAtOTJjMDZjNDI4YjY0IiwiYmFubmVySWQiOiJhM2IxMTcxNy1mNGNhLTQxOTYtYjY3MC1lNTE0MmMyMDVkZWUiLCJzZWxlY3RlZFN0b3JlIjoiNzU3IiwicHJvdmlkZXJfaWQiOiJhbm9ueW1vdXMiLCJpc3MiOiJodHRwczovL3NlY3VyZXRva2VuLmdvb2dsZS5jb20vc3dpZnRseS1sdS1wcm9kIiwiYXVkIjoic3dpZnRseS1sdS1wcm9kIiwiYXV0aF90aW1lIjoxNzc3OTg3NTcwLCJ1c2VyX2lkIjoicHJWUkh0Ujd5OFBKNEpyQTJtaGw4RW04VkpzMSIsInN1YiI6InByVlJIdFI3eThQSjRKckEybWhsOEVtOFZKczEiLCJpYXQiOjE3Nzc5ODc2MTcsImV4cCI6MTc3Nzk5MTIxNywiZmlyZWJhc2UiOnsiaWRlbnRpdGllcyI6e30sInNpZ25faW5fcHJvdmlkZXIiOiJhbm9ueW1vdXMifX0.VjlmFQVKrHy9RAqqqXpA8anaOhtYrgR9Odi77qlDcArnxb_4k_6imwNm48yuoH4umCMRKJSb3qcbWyBWSvcSjwtAKFhZLfH_QGX5VYMuyrJXtov8Hyy26jA12zLWxGxmOwmhow30ZTiElwqS0FSrA2GNPNF3l7ZLCIPnED8ijQo4XGb7NnZJ7egFdcvHwbpiZ6a4pFgY-74VBM411c9f4NQBamc3S5Xwez5T7bSA3KJ2ST6MpJ3G5_fIG-53ah1XqfsDBllqM4KxgQ0c1Nbux37kW4U3kVzNx9rCx8JZHBp8gHe_mDsbNO0bSXAzicQJuLIKGRPQtNLcZdtckMAetA + # AI Image Generation (optional) AI_IMAGE_ENABLED=false AI_IMAGE_PROVIDER=openai @@ -21,3 +30,7 @@ AI_IMAGE_API_KEY=sk-your-api-key # Application LOG_LEVEL=INFO SECRET_KEY=change-me-to-a-random-secret-key + +# Auth +ADMIN_TOKEN=change-me-to-a-random-admin-token +SESSION_PASSWORD=change-me-to-the-family-shared-password diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..9b49c85 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,89 @@ +name: CI + +on: + push: + branches: ["**"] + pull_request: + +jobs: + backend: + name: backend (pytest + alembic) + runs-on: ubuntu-latest + services: + postgres: + image: postgres:15 + env: + POSTGRES_USER: mealplanner + POSTGRES_PASSWORD: password + POSTGRES_DB: mealplanner_test + ports: + - 5432:5432 + options: >- + --health-cmd pg_isready + --health-interval 5s + --health-timeout 5s + --health-retries 10 + env: + TEST_DATABASE_URL: postgresql://mealplanner:password@localhost:5432/mealplanner_test + DATABASE_URL: postgresql://mealplanner:password@localhost:5432/mealplanner_test + SECRET_KEY: ci-secret-key-not-for-prod + ADMIN_TOKEN: ci-admin-token + SESSION_PASSWORD: test-family-password + EMAIL_BACKEND: console + defaults: + run: + working-directory: backend + steps: + - uses: actions/checkout@v4 + + - name: Set up Python 3.11 + uses: actions/setup-python@v5 + with: + python-version: "3.11" + cache: pip + cache-dependency-path: | + backend/requirements.txt + backend/requirements-dev.txt + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + pip install -r requirements-dev.txt + + - name: Wait for Postgres + run: | + for i in $(seq 1 30); do + pg_isready -h localhost -p 5432 -U mealplanner && exit 0 + sleep 1 + done + echo "Postgres never became ready" >&2 + exit 1 + + - name: Alembic upgrade head + run: alembic upgrade head + + - name: Run pytest + run: pytest -q + + frontend: + name: frontend (build) + runs-on: ubuntu-latest + defaults: + run: + working-directory: frontend + steps: + - uses: actions/checkout@v4 + + - name: Set up Node 20 + uses: actions/setup-node@v4 + with: + node-version: "20" + cache: npm + cache-dependency-path: frontend/package-lock.json + + - name: Install dependencies + run: npm ci + + - name: Build + run: npm run build diff --git a/.gitignore b/.gitignore index 8171cf9..c34cfc1 100644 --- a/.gitignore +++ b/.gitignore @@ -146,3 +146,9 @@ nginx/ssl/*.pem # Node node_modules/ + +# R2-B email console outbox (local-only spike artifact) +backend/var/ + +# Local verification helper — has weak test credentials, not for the repo +.env.test diff --git a/backend/alembic/versions/0001_initial_migration.py b/backend/alembic/versions/0001_initial_migration.py index 42cac92..d515fd6 100644 --- a/backend/alembic/versions/0001_initial_migration.py +++ b/backend/alembic/versions/0001_initial_migration.py @@ -98,7 +98,7 @@ def upgrade() -> None: sa.Column('dietary_tags', postgresql.ARRAY(sa.String(length=50)), nullable=True), sa.Column('protein_type', sa.String(length=50), nullable=True), sa.Column('spice_level', sa.Integer(), nullable=True), - sa.Column('ingredients', postgresql.JSONB(astext=True), nullable=False), + sa.Column('ingredients', postgresql.JSONB(), nullable=False), sa.Column('instructions', postgresql.ARRAY(sa.Text()), nullable=False), sa.Column('source_url', sa.Text(), nullable=True), sa.Column('scraped_at', sa.DateTime(timezone=True), nullable=True), @@ -286,4 +286,17 @@ def upgrade() -> None: def downgrade() -> None: - pass \ No newline at end of file + op.execute( + """ + DO $$ DECLARE + r RECORD; + BEGIN + FOR r IN (SELECT tablename FROM pg_tables WHERE schemaname = 'public' AND tablename != 'alembic_version') LOOP + EXECUTE 'DROP TABLE IF EXISTS public.' || quote_ident(r.tablename) || ' CASCADE'; + END LOOP; + FOR r IN (SELECT t.typname FROM pg_type t JOIN pg_namespace n ON n.oid = t.typnamespace WHERE t.typtype = 'e' AND n.nspname = 'public') LOOP + EXECUTE 'DROP TYPE IF EXISTS public.' || quote_ident(r.typname) || ' CASCADE'; + END LOOP; + END $$; + """ + ) \ No newline at end of file diff --git a/backend/alembic/versions/0002_seed_data.py b/backend/alembic/versions/0002_seed_data.py index a5976ac..c38b953 100644 --- a/backend/alembic/versions/0002_seed_data.py +++ b/backend/alembic/versions/0002_seed_data.py @@ -95,8 +95,6 @@ def upgrade() -> None: ('Sugar', 'sugar', 'lb', 'Pantry', 2.49), ('Brown Rice', 'brown rice', 'lb', 'Grains', 3.49), ('Oats', 'oats', 'lb', 'Grains', 2.99), - ('Chickpeas', 'chickpeas', 'can', 'Canned Goods', 1.49), - ('Black Beans', 'black beans', 'can', 'Canned Goods', 1.29), ('Kidney Beans', 'kidney beans', 'can', 'Canned Goods', 1.29), ('Corn', 'corn', 'can', 'Canned Goods', 1.49), ('Green Beans', 'green beans', 'can', 'Canned Goods', 1.49), @@ -107,6 +105,7 @@ def upgrade() -> None: op.execute(f""" INSERT INTO ingredient (id, name, name_lower, unit, aisle, typical_price) VALUES (uuid_generate_v4(), '{name}', '{name_lower}', '{unit}', '{aisle}', {price}) + ON CONFLICT (name_lower) DO NOTHING """) diff --git a/backend/alembic/versions/0003_grocery_item_description.py b/backend/alembic/versions/0003_grocery_item_description.py new file mode 100644 index 0000000..e5e81a9 --- /dev/null +++ b/backend/alembic/versions/0003_grocery_item_description.py @@ -0,0 +1,32 @@ +"""Add nullable description column to grocery_item. + +The Lucky California parser produces a long-form description per coupon +(class ``coupon-card-short-description``); without this column it is dropped +silently when persisting. See R2-A spike notes in +``.agent/phase-summaries/r2a-summary.md``. + +Revision ID: 0003 +Revises: 0002 +Create Date: 2026-05-04 +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa + + +revision: str = '0003' +down_revision: Union[str, None] = '0002' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + op.add_column( + "grocery_item", + sa.Column("description", sa.Text(), nullable=True), + ) + + +def downgrade() -> None: + op.drop_column("grocery_item", "description") diff --git a/backend/alembic/versions/0004_family_profile_calorie_target.py b/backend/alembic/versions/0004_family_profile_calorie_target.py new file mode 100644 index 0000000..24747d4 --- /dev/null +++ b/backend/alembic/versions/0004_family_profile_calorie_target.py @@ -0,0 +1,30 @@ +"""Add calorie_target to family_profile + +Revision ID: 0004 +Revises: 0003 +Create Date: 2026-05-04 + +The model has carried `calorie_target` on FamilyProfile since Phase 2, +but the initial migration omitted it. SELECT * from family_profile fails +without this column. Adversarial review §1.6 flagged the model/schema +drift. +""" +from alembic import op +import sqlalchemy as sa + + +revision = "0004" +down_revision = "0003" +branch_labels = None +depends_on = None + + +def upgrade() -> None: + op.add_column( + "family_profile", + sa.Column("calorie_target", sa.Integer(), nullable=True), + ) + + +def downgrade() -> None: + op.drop_column("family_profile", "calorie_target") diff --git a/backend/alembic/versions/0005_grocery_item_external_id.py b/backend/alembic/versions/0005_grocery_item_external_id.py new file mode 100644 index 0000000..21ba7d3 --- /dev/null +++ b/backend/alembic/versions/0005_grocery_item_external_id.py @@ -0,0 +1,48 @@ +"""Add nullable indexed external_id and source columns to grocery_item. + +The Swiftly API exposes a stable ``id`` per product (e.g. ``"46556"``). +Persisting it as ``grocery_item.external_id`` lets the scraper UPSERT by +``(source, external_id)`` rather than create duplicates on every run. +``source`` distinguishes overlapping IDs across future banners (e.g. a +second Save Mart store using the same Swiftly tenant). See R3-0 notes in +``.agent/phase-summaries/r3-0-summary.md``. + +Revision ID: 0005 +Revises: 0004 +Create Date: 2026-05-05 +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa + + +revision: str = '0005' +down_revision: Union[str, None] = '0004' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + op.add_column( + "grocery_item", + sa.Column("external_id", sa.String(length=100), nullable=True), + ) + op.add_column( + "grocery_item", + sa.Column( + "source", sa.String(length=50), nullable=True, + ), + ) + op.create_index( + "ix_grocery_item_source_external_id", + "grocery_item", + ["source", "external_id"], + unique=False, + ) + + +def downgrade() -> None: + op.drop_index("ix_grocery_item_source_external_id", table_name="grocery_item") + op.drop_column("grocery_item", "source") + op.drop_column("grocery_item", "external_id") diff --git a/backend/app/api/admin.py b/backend/app/api/admin.py index f62fe11..0a55c4b 100644 --- a/backend/app/api/admin.py +++ b/backend/app/api/admin.py @@ -1,20 +1,29 @@ -from fastapi import APIRouter, Depends, HTTPException +from fastapi import APIRouter, BackgroundTasks, Depends, HTTPException from sqlalchemy.orm import Session from app.database import get_db from app.models import ScrapeLog, EmailLog, MealPlan -from app.services.scraper_service import ScraperService +from app.security import require_admin +from app.services.scraper_service import ScraperService, enqueue_scrape from typing import List, Optional from datetime import datetime, timedelta -router = APIRouter() +router = APIRouter(dependencies=[Depends(require_admin)]) -@router.post("/scrape") -def trigger_scrape(source: str = "lucky_california", scrape_type: str = "weekly_ad", db: Session = Depends(get_db)): - scraper_service = ScraperService(db) - result = scraper_service.run_scrape(source=source, scrape_type=scrape_type) - - return result +@router.post("/scrape", status_code=202) +def trigger_scrape( + background_tasks: BackgroundTasks, + source: str = "lucky_california", + scrape_type: str = "weekly_ad", + db: Session = Depends(get_db), +): + log = enqueue_scrape( + db, + source=source, + scrape_type=scrape_type, + background_tasks=background_tasks, + ) + return {"status": "queued", "scrape_log_id": str(log.id)} @router.get("/logs") diff --git a/backend/app/api/auth.py b/backend/app/api/auth.py new file mode 100644 index 0000000..6737e43 --- /dev/null +++ b/backend/app/api/auth.py @@ -0,0 +1,67 @@ +""" +Family-shared session login. + +POST /api/auth/login — body ``{"password": "..."}`` — must match +``settings.SESSION_PASSWORD``. On success: signs the first FamilyProfile.id +and writes it as the ``mp_session`` cookie, returns 204. + +POST /api/auth/logout — clears the cookie, returns 204. + +The session is intentionally simple: a single shared family password gates +mutations behind nginx on the trusted network. No per-user auth. +""" + +from fastapi import APIRouter, Depends, HTTPException, Response, status +from pydantic import BaseModel +from sqlalchemy.orm import Session + +from app.config import settings +from app.database import get_db +from app.models import FamilyProfile +from app.security import SESSION_COOKIE, SESSION_MAX_AGE, issue_session + +router = APIRouter() + + +class LoginRequest(BaseModel): + password: str + + +@router.post("/login") +def login(payload: LoginRequest, db: Session = Depends(get_db)): + expected = settings.SESSION_PASSWORD + if not expected: + raise HTTPException( + status_code=status.HTTP_503_SERVICE_UNAVAILABLE, + detail="Session auth not configured", + ) + if payload.password != expected: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid password" + ) + + profile = db.query(FamilyProfile).first() + # If no profile exists yet, sign a placeholder so the cookie still + # validates; the family-id will be re-issued the first time a profile + # is created. This avoids login being blocked on first-run. + family_id = str(profile.id) if profile else "bootstrap" + cookie_value = issue_session(family_id) + + response = Response(status_code=status.HTTP_204_NO_CONTENT) + response.set_cookie( + key=SESSION_COOKIE, + value=cookie_value, + max_age=SESSION_MAX_AGE, + httponly=True, + secure=True, + samesite="lax", + path="/", + ) + return response + + +@router.post("/logout") +def logout(): + response = Response(status_code=status.HTTP_204_NO_CONTENT) + response.delete_cookie(key=SESSION_COOKIE, path="/") + return response diff --git a/backend/app/api/meals.py b/backend/app/api/meals.py index 1eaffef..b913488 100644 --- a/backend/app/api/meals.py +++ b/backend/app/api/meals.py @@ -1,4 +1,7 @@ -from fastapi import APIRouter, Depends, HTTPException +from fastapi import APIRouter, Depends, HTTPException, Query +from fastapi.responses import HTMLResponse +from html import escape as _html_escape +from pydantic import BaseModel, Field from sqlalchemy.orm import Session, joinedload from app.database import get_db from app.models import ( @@ -10,6 +13,8 @@ from app.schemas import ( MealPlanResponse, MealPlanCreate, MealPlanItemResponse, VoteRequest, VoteResponse ) +from app.security import require_session +from app.services import approval as approval_service from uuid import UUID from typing import List, Optional from datetime import datetime, timedelta @@ -17,7 +22,7 @@ from datetime import datetime, timedelta router = APIRouter() -@router.get("/planned", response_model=Optional[MealPlanResponse]) +@router.get("", response_model=Optional[MealPlanResponse]) def get_planned_meals(db: Session = Depends(get_db)): profile = db.query(FamilyProfile).first() if not profile: @@ -33,7 +38,7 @@ def get_planned_meals(db: Session = Depends(get_db)): return meal_plan -@router.post("/", response_model=MealPlanResponse) +@router.post("", response_model=MealPlanResponse, dependencies=[Depends(require_session)]) def create_meal_plan(meal_plan_data: MealPlanCreate, db: Session = Depends(get_db)): profile = db.query(FamilyProfile).first() if not profile: @@ -80,7 +85,7 @@ def get_meal_plan(meal_plan_id: UUID, db: Session = Depends(get_db)): return meal_plan -@router.post("/{meal_plan_id}/lock") +@router.post("/{meal_plan_id}/lock", dependencies=[Depends(require_session)]) def lock_meal_plan(meal_plan_id: UUID, db: Session = Depends(get_db)): meal_plan = db.query(MealPlan).filter(MealPlan.id == meal_plan_id).first() if not meal_plan: @@ -91,76 +96,169 @@ def lock_meal_plan(meal_plan_id: UUID, db: Session = Depends(get_db)): return {"message": "Meal plan locked", "status": meal_plan.status.value} -@router.get("/items/{item_id}/vote/{token}") -def get_vote_page(item_id: UUID, token: str, db: Session = Depends(get_db)): - approval_token = db.query(ApprovalToken).filter(ApprovalToken.token == token).first() - if not approval_token: - raise HTTPException(status_code=404, detail="Invalid token") +_DAY_NAMES = { + 1: "Monday", 2: "Tuesday", 3: "Wednesday", 4: "Thursday", + 5: "Friday", 6: "Saturday", 7: "Sunday", +} - if approval_token.meal_plan_item_id != item_id: + +class VoteSubmission(BaseModel): + """Body for POST /vote/{item_id}?token=... + + Spec body: {"vote": "approve" | "deny"}. + """ + + vote: str = Field(..., pattern="^(approve|deny)$") + + +@router.get("/vote/{item_id}", response_class=HTMLResponse) +def get_vote_page( + item_id: UUID, + token: str = Query(..., description="Per-voter signed token"), + db: Session = Depends(get_db), +): + """Render the per-voter approval confirmation page. + + Verifies the signed token (no consume) and returns minimal accessible + HTML with Approve / Deny buttons that POST to the same URL. + """ + payload = approval_service.verify_token(token) + if str(payload.get("item")) != str(item_id): raise HTTPException(status_code=400, detail="Token not valid for this meal") - if approval_token.status != ApprovalTokenStatus.ACTIVE: - raise HTTPException(status_code=400, detail="Token has already been used or expired") + voter = ( + db.query(FamilyMember) + .filter(FamilyMember.id == UUID(str(payload["voter"]))) + .first() + ) + if not voter: + raise HTTPException(status_code=404, detail="Voter not found") - if approval_token.expires_at < datetime.now(): - raise HTTPException(status_code=400, detail="Token has expired") + item = ( + db.query(MealPlanItem) + .options(joinedload(MealPlanItem.recipe)) + .filter(MealPlanItem.id == item_id) + .first() + ) + if not item: + raise HTTPException(status_code=404, detail="Meal plan item not found") + + recipe_name = item.recipe.name if item.recipe else "Unnamed meal" + day_name = _DAY_NAMES.get(int(item.day_of_week), str(item.day_of_week)) + meal_type = item.meal_type.value if item.meal_type else "" + + # Token is included only inside the form action (href), never in the + # visible body. POST is performed by JS so we can submit JSON without + # leaving the page; non-JS users still get a usable form fallback. + safe_voter = _html_escape(voter.name) + safe_recipe = _html_escape(recipe_name) + safe_day = _html_escape(day_name) + safe_meal = _html_escape(meal_type) + action_url = f"/api/meals/vote/{item_id}?token={_html_escape(token, quote=True)}" + + html = f""" + + + +Approve meal + + + + +

Hi {safe_voter}, please vote on this meal

+
+
{safe_recipe}
+
{safe_day} · {safe_meal}
+
+
+ + +
+
+ + + +""" + return HTMLResponse(content=html, status_code=200) + + +@router.post("/vote/{item_id}") +def submit_vote( + item_id: UUID, + submission: VoteSubmission, + token: str = Query(..., description="Per-voter signed token"), + db: Session = Depends(get_db), +): + """Record a per-voter vote and apply the approval rule. + + - Single-use enforcement lives in `approval_service.consume_token`. + - Approval rule: any deny -> item.denied; all-approve -> item.approved; + otherwise pending (waiting on remaining voters). + """ + voter = approval_service.consume_token(db, token, item_id) item = db.query(MealPlanItem).filter(MealPlanItem.id == item_id).first() if not item: raise HTTPException(status_code=404, detail="Meal plan item not found") - return { - "item_id": str(item_id), - "family_member_id": str(approval_token.family_member_id), - "meal_plan_item": item - } - - -@router.post("/items/{item_id}/vote/{token}", response_model=VoteResponse) -def submit_vote(item_id: UUID, token: str, vote_data: VoteRequest, db: Session = Depends(get_db)): - approval_token = db.query(ApprovalToken).filter(ApprovalToken.token == token).first() - if not approval_token: - raise HTTPException(status_code=404, detail="Invalid token") - - if approval_token.meal_plan_item_id != item_id: - raise HTTPException(status_code=400, detail="Token not valid for this meal") - - if approval_token.status != ApprovalTokenStatus.ACTIVE: - raise HTTPException(status_code=400, detail="Token has already been used or expired") - - if approval_token.expires_at < datetime.now(): - approval_token.status = ApprovalTokenStatus.EXPIRED - db.commit() - raise HTTPException(status_code=400, detail="Token has expired") - - existing_vote = db.query(MealPlanVote).filter( - MealPlanVote.meal_plan_item_id == item_id, - MealPlanVote.family_member_id == approval_token.family_member_id - ).first() - - if existing_vote: - raise HTTPException(status_code=400, detail="You have already voted on this meal") - - vote = MealPlanVote( + vote_bool = submission.vote == "approve" + db.add(MealPlanVote( meal_plan_item_id=item_id, - family_member_id=approval_token.family_member_id, - vote=vote_data.vote - ) - db.add(vote) + family_member_id=voter.id, + vote=vote_bool, + )) + db.flush() - approval_token.status = ApprovalTokenStatus.USED - approval_token.used_at = datetime.now() + # Approval rule: count electorate (all family members on this profile) + # vs votes recorded so far. + profile_id = item.meal_plan.family_profile_id + electorate_ids = { + m.id for m in db.query(FamilyMember) + .filter(FamilyMember.family_profile_id == profile_id) + .all() + } + votes = db.query(MealPlanVote).filter( + MealPlanVote.meal_plan_item_id == item_id, + ).all() - item = db.query(MealPlanItem).filter(MealPlanItem.id == item_id).first() - if not vote_data.vote and vote_data.denial_reason: + if any(v.vote is False for v in votes): item.approval_status = MealPlanItemStatus.DENIED - item.denial_reason = vote_data.denial_reason - item.denial_details = vote_data.denial_details + elif electorate_ids and {v.family_member_id for v in votes} >= electorate_ids: + item.approval_status = MealPlanItemStatus.APPROVED + else: + item.approval_status = MealPlanItemStatus.PENDING db.commit() - db.refresh(vote) - return vote + return {"status": "recorded", "item_status": item.approval_status.value} @router.get("/items/{item_id}", response_model=MealPlanItemResponse) @@ -173,7 +271,7 @@ def get_meal_item(item_id: UUID, db: Session = Depends(get_db)): return item -@router.post("/items/{item_id}/swap") +@router.post("/items/{item_id}/swap", dependencies=[Depends(require_session)]) def swap_meal_item(item_id: UUID, new_recipe_id: UUID, db: Session = Depends(get_db)): item = db.query(MealPlanItem).filter(MealPlanItem.id == item_id).first() if not item: diff --git a/backend/app/api/pantry.py b/backend/app/api/pantry.py index 44c3e84..6371655 100644 --- a/backend/app/api/pantry.py +++ b/backend/app/api/pantry.py @@ -3,13 +3,14 @@ from sqlalchemy.orm import Session from app.database import get_db from app.models import HomePantry, Ingredient, FamilyProfile from app.schemas import HomePantryResponse, HomePantryCreate +from app.security import require_session from uuid import UUID from typing import List router = APIRouter() -@router.get("/", response_model=List[HomePantryResponse]) +@router.get("", response_model=List[HomePantryResponse]) def get_pantry_items(db: Session = Depends(get_db)): profile = db.query(FamilyProfile).first() if not profile: @@ -21,7 +22,7 @@ def get_pantry_items(db: Session = Depends(get_db)): return items -@router.post("/", response_model=HomePantryResponse) +@router.post("", response_model=HomePantryResponse, dependencies=[Depends(require_session)]) def add_pantry_item(item: HomePantryCreate, db: Session = Depends(get_db)): profile = db.query(FamilyProfile).first() if not profile: @@ -54,7 +55,7 @@ def add_pantry_item(item: HomePantryCreate, db: Session = Depends(get_db)): return db_item -@router.delete("/{item_id}") +@router.delete("/{item_id}", dependencies=[Depends(require_session)]) def remove_pantry_item(item_id: UUID, db: Session = Depends(get_db)): item = db.query(HomePantry).filter(HomePantry.id == item_id).first() if not item: @@ -65,7 +66,7 @@ def remove_pantry_item(item_id: UUID, db: Session = Depends(get_db)): return {"message": "Pantry item removed"} -@router.put("/{item_id}", response_model=HomePantryResponse) +@router.put("/{item_id}", response_model=HomePantryResponse, dependencies=[Depends(require_session)]) def update_pantry_item(item_id: UUID, update: HomePantryCreate, db: Session = Depends(get_db)): item = db.query(HomePantry).filter(HomePantry.id == item_id).first() if not item: diff --git a/backend/app/api/profile.py b/backend/app/api/profile.py index 60fe248..15f0145 100644 --- a/backend/app/api/profile.py +++ b/backend/app/api/profile.py @@ -6,13 +6,14 @@ from app.schemas import ( FamilyProfileResponse, FamilyProfileUpdate, FamilyProfileCreate, FamilyMemberResponse, FamilyMemberCreate ) +from app.security import require_session from uuid import UUID from typing import List router = APIRouter() -@router.get("/", response_model=FamilyProfileResponse) +@router.get("", response_model=FamilyProfileResponse) def get_profile(db: Session = Depends(get_db)): profile = db.query(FamilyProfile).first() if not profile: @@ -20,7 +21,7 @@ def get_profile(db: Session = Depends(get_db)): return profile -@router.put("/", response_model=FamilyProfileResponse) +@router.put("", response_model=FamilyProfileResponse, dependencies=[Depends(require_session)]) def update_profile(update: FamilyProfileUpdate, db: Session = Depends(get_db)): profile = db.query(FamilyProfile).first() if not profile: @@ -43,7 +44,7 @@ def get_members(db: Session = Depends(get_db)): return profile.members -@router.post("/members", response_model=FamilyMemberResponse) +@router.post("/members", response_model=FamilyMemberResponse, dependencies=[Depends(require_session)]) def add_member(member: FamilyMemberCreate, db: Session = Depends(get_db)): profile = db.query(FamilyProfile).first() if not profile: @@ -69,7 +70,7 @@ def add_member(member: FamilyMemberCreate, db: Session = Depends(get_db)): return db_member -@router.delete("/members/{member_id}") +@router.delete("/members/{member_id}", dependencies=[Depends(require_session)]) def delete_member(member_id: UUID, db: Session = Depends(get_db)): member = db.query(FamilyMember).filter(FamilyMember.id == member_id).first() if not member: diff --git a/backend/app/api/recipes.py b/backend/app/api/recipes.py index 7baf557..39abb3a 100644 --- a/backend/app/api/recipes.py +++ b/backend/app/api/recipes.py @@ -3,13 +3,14 @@ from sqlalchemy.orm import Session, joinedload from app.database import get_db from app.models import Recipe, FamilyProfile from app.schemas import RecipeResponse, RecipeCreate, IngredientCreate, IngredientResponse +from app.security import require_session from uuid import UUID from typing import List, Optional router = APIRouter() -@router.get("/", response_model=List[RecipeResponse]) +@router.get("", response_model=List[RecipeResponse]) def get_recipes( skip: int = 0, limit: int = 50, @@ -31,6 +32,37 @@ def get_recipes( return recipes +@router.get("/ingredients", response_model=List[IngredientResponse]) +def list_ingredients(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)): + from app.models import Ingredient + ingredients = db.query(Ingredient).offset(skip).limit(limit).all() + return ingredients + + +@router.post("/ingredients", response_model=IngredientResponse, dependencies=[Depends(require_session)]) +def create_ingredient(ingredient: IngredientCreate, db: Session = Depends(get_db)): + from app.models import Ingredient + + existing = db.query(Ingredient).filter(Ingredient.name_lower == ingredient.name_lower).first() + if existing: + raise HTTPException(status_code=400, detail="Ingredient with this name already exists") + + db_ingredient = Ingredient( + name=ingredient.name, + name_lower=ingredient.name_lower, + plural_name=ingredient.plural_name, + aisle=ingredient.aisle, + typical_price=ingredient.typical_price, + unit=ingredient.unit, + season_months=ingredient.season_months + ) + + db.add(db_ingredient) + db.commit() + db.refresh(db_ingredient) + return db_ingredient + + @router.get("/{recipe_id}", response_model=RecipeResponse) def get_recipe(recipe_id: UUID, db: Session = Depends(get_db)): recipe = db.query(Recipe).filter(Recipe.id == recipe_id).first() @@ -39,7 +71,7 @@ def get_recipe(recipe_id: UUID, db: Session = Depends(get_db)): return recipe -@router.post("/", response_model=RecipeResponse) +@router.post("", response_model=RecipeResponse, dependencies=[Depends(require_session)]) def create_recipe(recipe: RecipeCreate, db: Session = Depends(get_db)): profile = db.query(FamilyProfile).first() @@ -69,7 +101,7 @@ def create_recipe(recipe: RecipeCreate, db: Session = Depends(get_db)): return db_recipe -@router.delete("/{recipe_id}") +@router.delete("/{recipe_id}", dependencies=[Depends(require_session)]) def delete_recipe(recipe_id: UUID, db: Session = Depends(get_db)): recipe = db.query(Recipe).filter(Recipe.id == recipe_id).first() if not recipe: @@ -78,34 +110,3 @@ def delete_recipe(recipe_id: UUID, db: Session = Depends(get_db)): db.delete(recipe) db.commit() return {"message": "Recipe deleted"} - - -@router.get("/ingredients/list", response_model=List[IngredientResponse]) -def list_ingredients(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)): - from app.models import Ingredient - ingredients = db.query(Ingredient).offset(skip).limit(limit).all() - return ingredients - - -@router.post("/ingredients", response_model=IngredientResponse) -def create_ingredient(ingredient: IngredientCreate, db: Session = Depends(get_db)): - from app.models import Ingredient - - existing = db.query(Ingredient).filter(Ingredient.name_lower == ingredient.name_lower).first() - if existing: - raise HTTPException(status_code=400, detail="Ingredient with this name already exists") - - db_ingredient = Ingredient( - name=ingredient.name, - name_lower=ingredient.name_lower, - plural_name=ingredient.plural_name, - aisle=ingredient.aisle, - typical_price=ingredient.typical_price, - unit=ingredient.unit, - season_months=ingredient.season_months - ) - - db.add(db_ingredient) - db.commit() - db.refresh(db_ingredient) - return db_ingredient \ No newline at end of file diff --git a/backend/app/api/shopping_list.py b/backend/app/api/shopping_list.py index c965c25..5856267 100644 --- a/backend/app/api/shopping_list.py +++ b/backend/app/api/shopping_list.py @@ -14,7 +14,7 @@ from collections import defaultdict router = APIRouter() -@router.get("/", response_model=ShoppingListResponse) +@router.get("", response_model=ShoppingListResponse) def get_shopping_list(db: Session = Depends(get_db)): profile = db.query(FamilyProfile).first() if not profile: @@ -56,7 +56,7 @@ def get_shopping_list(db: Session = Depends(get_db)): if all_ingredient_ids: ingredients = db.query(Ingredient).filter( - Ingredient.id.in_ all_ingredient_ids + Ingredient.id.in_(all_ingredient_ids) ).all() ingredient_map = {i.id: i for i in ingredients} diff --git a/backend/app/config.py b/backend/app/config.py index ec93e31..25d19e1 100644 --- a/backend/app/config.py +++ b/backend/app/config.py @@ -1,17 +1,30 @@ from pydantic_settings import BaseSettings +from pydantic import model_validator from typing import Optional class Settings(BaseSettings): - DATABASE_URL: str + # Required — fail fast at import time if unset. + DATABASE_URL: str = "" + SENDGRID_API_KEY: Optional[str] = None + EMAIL_BACKEND: str = "console" LUCKY_CA_URL: str = "https://www.luckyncal.com" + # R3-0: Swiftly product API (replaces Playwright path). + SWIFTLY_BEARER_TOKEN: str = "" + LUCKY_STORE_ID: str = "757" + SWIFTLY_API_BASE: str = "https://prod.swiftlyapi.net" + SWIFTLY_CATEGORIES_URL: str = "https://luckysupermarkets.com/categories" AI_IMAGE_ENABLED: bool = False AI_IMAGE_PROVIDER: Optional[str] = None AI_IMAGE_API_KEY: Optional[str] = None LOG_LEVEL: str = "INFO" SECRET_KEY: str = "dev-secret-key" + # Auth (R1-B+D) + ADMIN_TOKEN: str = "" + SESSION_PASSWORD: str = "" + FAMILY_EMAIL_1: Optional[str] = None FAMILY_EMAIL_2: Optional[str] = None RECIPES_EMAIL: Optional[str] = None @@ -19,5 +32,11 @@ class Settings(BaseSettings): class Config: env_file = ".env" + @model_validator(mode="after") + def _require_database_url(self) -> "Settings": + if not self.DATABASE_URL: + raise RuntimeError("DATABASE_URL is required") + return self + settings = Settings() diff --git a/backend/app/main.py b/backend/app/main.py index 56fbb72..9c07191 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -29,8 +29,9 @@ def health_check_db(db: Session = Depends(get_db)): return {"status": "error", "database": "disconnected", "error": str(e)} -from app.api import profile, recipes, meals, shopping_list, pantry, admin +from app.api import profile, recipes, meals, shopping_list, pantry, admin, auth +app.include_router(auth.router, prefix="/api/auth", tags=["auth"]) app.include_router(profile.router, prefix="/api/profile", tags=["profile"]) app.include_router(recipes.router, prefix="/api/recipes", tags=["recipes"]) app.include_router(meals.router, prefix="/api/meals", tags=["meals"]) diff --git a/backend/app/models/__init__.py b/backend/app/models/__init__.py index c1413be..3e2d89a 100644 --- a/backend/app/models/__init__.py +++ b/backend/app/models/__init__.py @@ -114,7 +114,7 @@ class FamilyMember(Base): family_profile_id = Column(UUID(as_uuid=True), ForeignKey("family_profile.id", ondelete="CASCADE")) name = Column(String(100), nullable=False) email = Column(String(300)) - role = Column(SQLEnum(FamilyMemberRole, name="family_member_role_enum", create_type=False), nullable=False) + role = Column(SQLEnum(FamilyMemberRole, name="family_member_role_enum", create_type=False, values_callable=lambda obj: [e.value for e in obj]), nullable=False) likes_mushrooms = Column(Boolean, default=False) created_at = Column(DateTime(timezone=True), server_default=func.now()) updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now()) @@ -185,7 +185,7 @@ class MealPlan(Base): id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) family_profile_id = Column(UUID(as_uuid=True), ForeignKey("family_profile.id")) week_start_date = Column(Date, nullable=False) - status = Column(SQLEnum(MealPlanStatus, name="meal_plan_status_enum", create_type=False), nullable=False, default=MealPlanStatus.DRAFT) + status = Column(SQLEnum(MealPlanStatus, name="meal_plan_status_enum", create_type=False, values_callable=lambda obj: [e.value for e in obj]), nullable=False, default=MealPlanStatus.DRAFT) approval_deadline = Column(DateTime(timezone=True)) total_estimated_cost = Column(Numeric(10, 2)) notes = Column(Text) @@ -198,7 +198,6 @@ class MealPlan(Base): family_profile = relationship("FamilyProfile", back_populates="meal_plans") items = relationship("MealPlanItem", back_populates="meal_plan", cascade="all, delete-orphan") - votes = relationship("MealPlanVote", back_populates="meal_plan", cascade="all, delete-orphan") class MealPlanItem(Base): @@ -208,9 +207,9 @@ class MealPlanItem(Base): meal_plan_id = Column(UUID(as_uuid=True), ForeignKey("meal_plan.id", ondelete="CASCADE")) recipe_id = Column(UUID(as_uuid=True), ForeignKey("recipe.id")) day_of_week = Column(Integer, nullable=False) - meal_type = Column(SQLEnum(MealType, name="meal_type_enum", create_type=False), nullable=False) - approval_status = Column(SQLEnum(MealPlanItemStatus, name="meal_plan_item_status_enum", create_type=False), default=MealPlanItemStatus.PENDING) - denial_reason = Column(SQLEnum(DenialReason, name="denial_reason_enum", create_type=False)) + meal_type = Column(SQLEnum(MealType, name="meal_type_enum", create_type=False, values_callable=lambda obj: [e.value for e in obj]), nullable=False) + approval_status = Column(SQLEnum(MealPlanItemStatus, name="meal_plan_item_status_enum", create_type=False, values_callable=lambda obj: [e.value for e in obj]), default=MealPlanItemStatus.PENDING) + denial_reason = Column(SQLEnum(DenialReason, name="denial_reason_enum", create_type=False, values_callable=lambda obj: [e.value for e in obj])) denial_details = Column(Text) estimated_cost = Column(Numeric(10, 2)) used_pantry_items = Column(ARRAY(UUID(as_uuid=True))) @@ -252,7 +251,7 @@ class ApprovalToken(Base): meal_plan_item_id = Column(UUID(as_uuid=True), ForeignKey("meal_plan_item.id", ondelete="CASCADE")) family_member_id = Column(UUID(as_uuid=True), ForeignKey("family_member.id", ondelete="CASCADE")) token = Column(String(64), nullable=False, unique=True) - status = Column(SQLEnum(ApprovalTokenStatus, name="approval_token_status_enum", create_type=False), default=ApprovalTokenStatus.ACTIVE) + status = Column(SQLEnum(ApprovalTokenStatus, name="approval_token_status_enum", create_type=False, values_callable=lambda obj: [e.value for e in obj]), default=ApprovalTokenStatus.ACTIVE) expires_at = Column(DateTime(timezone=True), nullable=False) used_at = Column(DateTime(timezone=True)) created_at = Column(DateTime(timezone=True), server_default=func.now()) @@ -294,7 +293,7 @@ class Feedback(Base): meal_plan_item_id = Column(UUID(as_uuid=True), ForeignKey("meal_plan_item.id", ondelete="CASCADE")) rating = Column(Integer) never_suggest = Column(Boolean, default=False) - denial_reason = Column(SQLEnum(DenialReason, name="denial_reason_enum", create_type=False)) + denial_reason = Column(SQLEnum(DenialReason, name="denial_reason_enum", create_type=False, values_callable=lambda obj: [e.value for e in obj])) feedback_text = Column(Text) created_at = Column(DateTime(timezone=True), server_default=func.now()) @@ -314,7 +313,7 @@ class NeverSuggest(Base): family_profile_id = Column(UUID(as_uuid=True), ForeignKey("family_profile.id", ondelete="CASCADE")) ingredient_id = Column(UUID(as_uuid=True), ForeignKey("ingredient.id", ondelete="CASCADE")) recipe_id = Column(UUID(as_uuid=True), ForeignKey("recipe.id", ondelete="CASCADE")) - reason = Column(SQLEnum(NeverSuggestReason, name="never_suggest_reason_enum", create_type=False)) + reason = Column(SQLEnum(NeverSuggestReason, name="never_suggest_reason_enum", create_type=False, values_callable=lambda obj: [e.value for e in obj])) notes = Column(Text) created_at = Column(DateTime(timezone=True), server_default=func.now()) @@ -335,12 +334,16 @@ class GroceryItem(Base): aisle = Column(String(100)) image_url = Column(Text) product_url = Column(Text) + description = Column(Text, nullable=True) is_on_sale = Column(Boolean, default=False) sale_start_date = Column(Date) sale_end_date = Column(Date) in_season = Column(Boolean, default=False) scraped_at = Column(DateTime(timezone=True), server_default=func.now()) scraped_url = Column(Text) + # R3-0: Swiftly API idempotency key. (source, external_id) → upsert. + external_id = Column(String(100), nullable=True, index=True) + source = Column(String(50), nullable=True) ingredient = relationship("Ingredient", back_populates="grocery_item_links") @@ -351,7 +354,7 @@ class ScrapeLog(Base): id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) source = Column(String(50), nullable=False) scrape_type = Column(String(50), nullable=False) - status = Column(SQLEnum(ScrapeStatus, name="scrape_status_enum", create_type=False), nullable=False) + status = Column(SQLEnum(ScrapeStatus, name="scrape_status_enum", create_type=False, values_callable=lambda obj: [e.value for e in obj]), nullable=False) items_scraped = Column(Integer, default=0) error_message = Column(Text) started_at = Column(DateTime(timezone=True), server_default=func.now()) @@ -369,7 +372,7 @@ class EmailLog(Base): meal_plan_id = Column(UUID(as_uuid=True), ForeignKey("meal_plan.id")) meal_plan_item_id = Column(UUID(as_uuid=True), ForeignKey("meal_plan_item.id")) sendgrid_message_id = Column(String(100)) - status = Column(SQLEnum(EmailStatus, name="email_status_enum", create_type=False), nullable=False) + status = Column(SQLEnum(EmailStatus, name="email_status_enum", create_type=False, values_callable=lambda obj: [e.value for e in obj]), nullable=False) error_message = Column(Text) created_at = Column(DateTime(timezone=True), server_default=func.now()) delivered_at = Column(DateTime(timezone=True)) diff --git a/backend/app/scraper/__init__.py b/backend/app/scraper/__init__.py index 8f9829f..f007956 100644 --- a/backend/app/scraper/__init__.py +++ b/backend/app/scraper/__init__.py @@ -1,4 +1,4 @@ from .base import BaseScraper -from .lucky_ca_scraper import LuckyCaliforniaScraper +from .lucky_ca_scraper import LuckyCaliforniaScraper, SwiftlyAuthError -__all__ = ["BaseScraper", "LuckyCaliforniaScraper"] \ No newline at end of file +__all__ = ["BaseScraper", "LuckyCaliforniaScraper", "SwiftlyAuthError"] \ No newline at end of file diff --git a/backend/app/scraper/lucky_ca_scraper.py b/backend/app/scraper/lucky_ca_scraper.py index f231443..003d28d 100644 --- a/backend/app/scraper/lucky_ca_scraper.py +++ b/backend/app/scraper/lucky_ca_scraper.py @@ -1,180 +1,325 @@ +"""Lucky California / Swiftly product API client. + +Replaces the prior Playwright + HTML coupon-card path (R2-A) with the +underlying JSON API the website itself calls. The API exposes the full +inventory per category — no rendering, no Chromium, and far more items +than the visible coupon strip (256 in `Product/meat_seafood` vs the 11 +the HTML parser saw). + +Two endpoints (no public docs; reverse-engineered from the network panel +on luckysupermarkets.com — see ``.agent/context.md`` "Swiftly API"): + + GET https://luckysupermarkets.com/categories + → HTML page; anchors with ``class="swiftlyCouponCategory"`` carry + ``href="/categories/Product%2F"``. + + GET https://prod.swiftlyapi.net/search/api/v1/products/categories + ?cat=&store=&limit=10000 + Authorization: Bearer + → ``{"products": {"info": {...}, "items": [...], "facets": [...]}}`` + +The bearer token expires roughly hourly. On 401 we raise +``SwiftlyAuthError`` so the background runner records the error_message +that asks the admin to refresh ``SWIFTLY_BEARER_TOKEN`` and retry. +""" +from __future__ import annotations + import logging import re -from typing import Dict, Any, List, Optional +import time +import urllib.parse from datetime import datetime -from urllib.parse import urljoin +from decimal import Decimal, InvalidOperation +from typing import Any, Dict, Iterator, List, Optional, Tuple + +import requests from bs4 import BeautifulSoup -from .base import SeleniumScraper + +from app.config import settings logger = logging.getLogger(__name__) -class LuckyCaliforniaScraper(SeleniumScraper): - def __init__(self, base_url: str = "https://luckysupermarkets.com"): - super().__init__(base_url=base_url, rate_limit_seconds=3.0) - self.ingredients_cache = {} +class SwiftlyAuthError(Exception): + """Raised when the Swiftly API returns 401. + The exception message is surfaced verbatim to the ScrapeLog row by + ``_run_scrape_in_background``; keep it actionable. + """ + + +_USER_AGENT = ( + "MealPlannerBot/1.0 (+https://mealplanner.local; contact peter@research.bike)" +) + +_AUTH_ERROR_MESSAGE = ( + "SWIFTLY_BEARER_TOKEN expired — request a fresh token from the user " + "(capture from luckysupermarkets.com network tab on a /search/api/v1 request)" +) + + +class LuckyCaliforniaScraper: + """Swiftly product-API client for the Lucky California banner. + + The class name is preserved (``LuckyCaliforniaScraper``) so existing + import sites in ``app.scraper.__init__`` and + ``ScraperService._do_scrape`` keep working. Internally it is no + longer a ``BaseScraper`` subclass: that class wires Playwright + + ``_get`` retry-with-swallow, neither of which we want here. The + client uses two ``requests.Session`` objects so the bearer header + is scoped strictly to the API host (the public categories page + is unauthenticated). + """ + + SOURCE = "lucky_california" + SLUG_HREF_RE = re.compile( + r']*\bclass="swiftlyCouponCategory")(?=[^>]*\bhref="([^"]+)")[^>]*>', + re.IGNORECASE, + ) + + def __init__( + self, + *, + bearer_token: Optional[str] = None, + store_id: Optional[str] = None, + api_base: Optional[str] = None, + categories_url: Optional[str] = None, + rate_limit_seconds: float = 0.75, + timeout: int = 60, + ) -> None: + self.bearer_token = bearer_token or settings.SWIFTLY_BEARER_TOKEN + self.store_id = store_id or settings.LUCKY_STORE_ID + self.api_base = (api_base or settings.SWIFTLY_API_BASE).rstrip("/") + self.categories_url = categories_url or settings.SWIFTLY_CATEGORIES_URL + self.rate_limit_seconds = rate_limit_seconds + self.timeout = timeout + self._last_request = 0.0 + + self.public_session = requests.Session() + self.public_session.headers.update( + { + "User-Agent": _USER_AGENT, + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", + "Accept-Language": "en-US,en;q=0.5", + } + ) + + self.api_session = requests.Session() + self.api_session.headers.update( + { + "User-Agent": _USER_AGENT, + "Accept": "application/json", + } + ) + # base_url retained for code paths that still introspect it. + self.base_url = "https://luckysupermarkets.com" + + # ------------------------------------------------------------------ + # Lifecycle (no-op; preserves cleanup() contract from BaseScraper). + # ------------------------------------------------------------------ + def cleanup(self) -> None: + try: + self.public_session.close() + finally: + self.api_session.close() + + # ------------------------------------------------------------------ + # Public scrape entrypoints + # ------------------------------------------------------------------ def scrape(self) -> Dict[str, Any]: - logger.info("Starting Lucky California scrape") - result = { - "source": "lucky_california", + """Synchronous top-level scrape. + + Kept for the legacy ``ScraperService.run_scrape`` path used by + tests. Walks every category and returns ``{"items": [...], ...}`` + with mapped product dicts ready for ``_save_grocery_item``. + """ + started = datetime.now().isoformat() + items: List[Dict[str, Any]] = list(self.fetch_all()) + return { + "source": self.SOURCE, "scrape_type": "weekly_ad", - "started_at": datetime.now().isoformat(), - "items_scraped": 0, - "items": [] + "started_at": started, + "completed_at": datetime.now().isoformat(), + "items_scraped": len(items), + "items": items, + "status": "success", } - try: - featured_items = self.scrape_featured_coupons() - result["items"].extend(featured_items) - result["items_scraped"] = len(featured_items) - - result["completed_at"] = datetime.now().isoformat() - result["status"] = "success" - logger.info(f"Lucky California scrape complete: {result['items_scraped']} items") - - except Exception as e: - logger.error(f"Lucky California scrape failed: {e}") - result["status"] = "failed" - result["error_message"] = str(e) - result["completed_at"] = datetime.now().isoformat() - - return result - - def scrape_featured_coupons(self) -> List[Dict[str, Any]]: - url = f"{self.base_url}/coupons/Coupon%2Flu-featured-in-ad" - logger.info(f"Scraping featured coupons from {url}") - - page = self.get_browser_page(url) - content = page.content() - page.close() - - soup = BeautifulSoup(content, "html.parser") - items = [] - - coupon_items = soup.find_all("div", class_=re.compile(r"coupon|item|product", re.I)) - if not coupon_items: - headline = soup.find("h1") - if headline: - logger.info(f"Page loaded, headline: {headline.get_text().strip()}") - - titles = soup.find_all(["h2", "h3", "a"], string=re.compile(r"\$[\d\.]+")) - for title_elem in titles[:20]: + def fetch_all(self) -> Iterator[Dict[str, Any]]: + """Yield mapped product dicts across every discovered category.""" + slugs = self.discover_categories() + logger.info("Swiftly: discovered %d categories", len(slugs)) + for slug in slugs: try: - item = self._parse_coupon_item(title_elem) - if item: - items.append(item) - except Exception as e: - logger.debug(f"Failed to parse item: {e}") + products = self.fetch_category(slug) + except SwiftlyAuthError: + # Hard fail — token must be refreshed before any further work. + raise + except requests.RequestException as exc: + logger.warning("Swiftly: skipping %s after error: %s", slug, exc) continue + aisle = self._aisle_from_slug(slug) + for product in products: + mapped = self.map_product(product, aisle=aisle, source_slug=slug) + if mapped is not None: + yield mapped - logger.info(f"Found {len(items)} coupon items") + # ------------------------------------------------------------------ + # Category discovery + # ------------------------------------------------------------------ + def discover_categories(self) -> List[str]: + """Fetch the categories page and return the list of API slugs. + + The slugs look like ``Product/meat_seafood``. Order is preserved + from the HTML (which is the order shown to the user). + """ + self._rate_limit() + resp = self.public_session.get(self.categories_url, timeout=self.timeout) + resp.raise_for_status() + return self.parse_categories_html(resp.text) + + @classmethod + def parse_categories_html(cls, html: str) -> List[str]: + """Pure parser used by tests against a saved fixture.""" + slugs: List[str] = [] + seen: set[str] = set() + for href in cls.SLUG_HREF_RE.findall(html): + m = re.match(r"^/categories/(.+)$", href) + if not m: + continue + slug = urllib.parse.unquote(m.group(1)) + if slug not in seen: + seen.add(slug) + slugs.append(slug) + return slugs + + # ------------------------------------------------------------------ + # Per-category fetch + # ------------------------------------------------------------------ + def fetch_category(self, slug: str) -> List[Dict[str, Any]]: + """Fetch every product in a category. Raises ``SwiftlyAuthError`` on 401.""" + if not self.bearer_token: + raise SwiftlyAuthError(_AUTH_ERROR_MESSAGE) + + self._rate_limit() + url = f"{self.api_base}/search/api/v1/products/categories" + params = {"cat": slug, "store": self.store_id, "limit": 10000} + headers = {"Authorization": f"Bearer {self.bearer_token}"} + resp = self.api_session.get( + url, params=params, headers=headers, timeout=self.timeout + ) + if resp.status_code == 401: + raise SwiftlyAuthError(_AUTH_ERROR_MESSAGE) + resp.raise_for_status() + payload = resp.json() + return self.parse_category_response(payload) + + @staticmethod + def parse_category_response(payload: Dict[str, Any]) -> List[Dict[str, Any]]: + """Pure parser used by tests against a saved fixture.""" + if not isinstance(payload, dict): + return [] + products = payload.get("products") or {} + items = products.get("items") + if not isinstance(items, list): + return [] return items - def _parse_coupon_item(self, element) -> Optional[Dict[str, Any]]: - text = element.get_text().strip() + # ------------------------------------------------------------------ + # Field mapping + # ------------------------------------------------------------------ + @classmethod + def map_product( + cls, + product: Dict[str, Any], + *, + aisle: Optional[str] = None, + source_slug: Optional[str] = None, + ) -> Optional[Dict[str, Any]]: + """Convert one Swiftly product dict to a grocery_item-ready dict. - price_match = re.search(r'\$[\d,]+\.?\d*', text) - if not price_match: + Returns ``None`` for products with no parseable price or no name — + those are usually placeholder/unavailable rows. + """ + external_id = product.get("id") + name = (product.get("name") or "").strip() + if not name: return None - price_str = price_match.group().replace("$", "").replace(",", "") - try: - price = float(price_str) - except ValueError: + price_block = (product.get("price") or {}).get("ok") or {} + reg_price, reg_unit = cls._parse_price(price_block.get("regPriceText")) + promo = price_block.get("promoArea") or {} + sale_price, sale_unit = cls._parse_price(promo.get("promoText")) + + if reg_price is None and sale_price is None: + # No usable price; skip rather than persist garbage. return None - name_elem = element.find_parent("a") or element.find_parent("div") - name = text.split("$")[0].strip() if "$" in text else text - name = re.sub(r'\s+', " ", name).strip()[:200] + unit = sale_unit or reg_unit + is_on_sale = sale_price is not None and reg_price is not None and sale_price < reg_price + # current_price = "what the customer pays today" → sale_price when on sale. + current_price = sale_price if is_on_sale else reg_price - if not name or len(name) < 3: - return None + image_url: Optional[str] = None + primary_image = product.get("primaryImage") + if isinstance(primary_image, dict): + image_url = primary_image.get("url") - image_url = None - img_elem = element.find_parent().find("img") if element.find_parent() else None - if img_elem and img_elem.get("src"): - image_url = img_elem["src"] + brand = product.get("brand") + description = product.get("description") - product_url = None - link_elem = element.find_parent("a") if element.find_parent() else element.find("a") - if link_elem and link_elem.get("href"): - product_url = urljoin(self.base_url, link_elem["href"]) - - item = { - "name": name, - "current_price": price, + return { + "external_id": str(external_id) if external_id is not None else None, + "source": cls.SOURCE, + "name": name[:300], + "brand": (brand or None), + "description": description, + "current_price": current_price, + "regular_price": reg_price, + "sale_price": sale_price, + "is_on_sale": bool(is_on_sale), + "unit": unit, + "aisle": aisle, "image_url": image_url, - "product_url": product_url, - "is_on_sale": True, + "product_url": None, # Swiftly does not expose a public product URL "scraped_at": datetime.now().isoformat(), - "scraped_url": self.base_url + "scraped_url": f"{cls.__name__}:{source_slug}" if source_slug else None, } - return item + # ------------------------------------------------------------------ + # Helpers + # ------------------------------------------------------------------ + @staticmethod + def _parse_price(text: Optional[str]) -> Tuple[Optional[Decimal], Optional[str]]: + """Extract ``(price, unit)`` from strings like ``"$3.49 /lb"``. - def scrape_produce(self) -> List[Dict[str, Any]]: - url = f"{self.base_url}/coupons/Coupon%2Flu-produce" - logger.info(f"Scraping produce from {url}") + Returns ``(None, None)`` when ``text`` is empty or unparseable. + """ + if not text: + return None, None + m = re.search(r"\$\s*([\d,]+(?:\.\d+)?)", text) + if not m: + return None, None + raw = m.group(1).replace(",", "") + try: + price = Decimal(raw) + except (InvalidOperation, ValueError): + return None, None + unit_match = re.search(r"/\s*([A-Za-z]+)", text) + unit = unit_match.group(1).lower() if unit_match else None + return price, unit - page = self.get_browser_page(url) - content = page.content() - page.close() + @staticmethod + def _aisle_from_slug(slug: str) -> Optional[str]: + """``Product/meat_seafood`` → ``meat_seafood``.""" + if not slug: + return None + if "/" in slug: + return slug.rsplit("/", 1)[1] + return slug - soup = BeautifulSoup(content, "html.parser") - items = [] - - for item_elem in soup.find_all("div", class_=re.compile(r"product|item|coupon")): - try: - item = self._parse_coupon_item(item_elem) - if item: - item["aisle"] = "Produce" - items.append(item) - except Exception: - continue - - return items - - def scrape_meat_seafood(self) -> List[Dict[str, Any]]: - url = f"{self.base_url}/coupons/Coupon%2Flu-meat-seafood" - logger.info(f"Scraping meat & seafood from {url}") - - page = self.get_browser_page(url) - content = page.content() - page.close() - - soup = BeautifulSoup(content, "html.parser") - items = [] - - for item_elem in soup.find_all("div", class_=re.compile(r"product|item|coupon")): - try: - item = self._parse_coupon_item(item_elem) - if item: - item["aisle"] = "Meat" - items.append(item) - except Exception: - continue - - return items - - def scrape_dairy_eggs(self) -> List[Dict[str, Any]]: - url = f"{self.base_url}/coupons/Coupon%2Flu-dairy-eggs" - logger.info(f"Scraping dairy & eggs from {url}") - - page = self.get_browser_page(url) - content = page.content() - page.close() - - soup = BeautifulSoup(content, "html.parser") - items = [] - - for item_elem in soup.find_all("div", class_=re.compile(r"product|item|coupon")): - try: - item = self._parse_coupon_item(item_elem) - if item: - item["aisle"] = "Dairy" - items.append(item) - except Exception: - continue - - return items \ No newline at end of file + def _rate_limit(self) -> None: + elapsed = time.time() - self._last_request + if elapsed < self.rate_limit_seconds: + time.sleep(self.rate_limit_seconds - elapsed) + self._last_request = time.time() diff --git a/backend/app/security.py b/backend/app/security.py new file mode 100644 index 0000000..2bcdda5 --- /dev/null +++ b/backend/app/security.py @@ -0,0 +1,70 @@ +""" +Auth dependencies for the MealPlanner backend. + +Two flavors: +- ``require_admin`` — bearer token for ``/api/admin/*`` routes; token compared + to ``settings.ADMIN_TOKEN`` (must be set in env). +- ``require_session`` — signed-cookie session (``itsdangerous``) gating + mutations on the family-facing routers; reads stay open inside the + trusted network. + +The per-voter approval-token flow on meal items is intentionally NOT covered +here — it has its own short-lived single-use tokens elsewhere. +""" + +from fastapi import HTTPException, Request, status +from itsdangerous import BadSignature, SignatureExpired, TimestampSigner + +from app.config import settings + +bearer_header = "Authorization" + +SESSION_COOKIE = "mp_session" +SESSION_MAX_AGE = 60 * 60 * 24 * 30 # 30 days + + +def require_admin(request: Request) -> None: + """Enforce a shared bearer token. 401 on bad/missing token, 503 if unset.""" + expected = settings.ADMIN_TOKEN + if not expected: + raise HTTPException( + status_code=status.HTTP_503_SERVICE_UNAVAILABLE, + detail="Admin auth not configured", + ) + auth = request.headers.get(bearer_header, "") + if not auth.startswith("Bearer ") or auth[7:] != expected: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail="Invalid admin token", + ) + + +def _signer() -> TimestampSigner: + return TimestampSigner(settings.SECRET_KEY) + + +def issue_session(family_profile_id: str) -> str: + """Sign the family_profile_id and return the cookie value.""" + return _signer().sign(family_profile_id.encode()).decode() + + +def require_session(request: Request) -> str: + """Return the family_profile_id stored in the signed session cookie.""" + raw = request.cookies.get(SESSION_COOKIE) + if not raw: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, detail="Session required" + ) + try: + family_id = ( + _signer().unsign(raw.encode(), max_age=SESSION_MAX_AGE).decode() + ) + except SignatureExpired: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, detail="Session expired" + ) + except BadSignature: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid session" + ) + return family_id diff --git a/backend/app/services/__init__.py b/backend/app/services/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/services/approval.py b/backend/app/services/approval.py new file mode 100644 index 0000000..10c825f --- /dev/null +++ b/backend/app/services/approval.py @@ -0,0 +1,89 @@ +""" +Per-voter approval tokens. + +Stateless signed tokens (itsdangerous) keyed on settings.SECRET_KEY with a +versioned salt. Single-use is enforced by the presence of a MealPlanVote +row for (item, voter) — the table already has UniqueConstraint on that +pair, so the DB is the source of truth, not a token-status column. +""" + +from __future__ import annotations + +from typing import TYPE_CHECKING +from uuid import UUID + +from fastapi import HTTPException +from itsdangerous import ( + BadSignature, + SignatureExpired, + URLSafeTimedSerializer, +) + +from app.config import settings +from app.models import FamilyMember, MealPlanVote + +if TYPE_CHECKING: # pragma: no cover + from sqlalchemy.orm import Session + + +SALT = "meal-approval-v1" +DEFAULT_MAX_AGE_SECONDS = 7 * 24 * 3600 + + +def _serializer() -> URLSafeTimedSerializer: + return URLSafeTimedSerializer(secret_key=settings.SECRET_KEY, salt=SALT) + + +def issue_token(meal_plan_item_id: UUID, family_member_id: UUID) -> str: + payload = { + "item": str(meal_plan_item_id), + "voter": str(family_member_id), + } + return _serializer().dumps(payload) + + +def verify_token(token: str, max_age_seconds: int = DEFAULT_MAX_AGE_SECONDS) -> dict: + try: + payload = _serializer().loads(token, max_age=max_age_seconds) + except SignatureExpired: + raise HTTPException(status_code=401, detail="Token expired") + except BadSignature: + raise HTTPException(status_code=401, detail="Invalid token") + if not isinstance(payload, dict) or "item" not in payload or "voter" not in payload: + raise HTTPException(status_code=401, detail="Invalid token payload") + return payload + + +def consume_token( + db: "Session", + token: str, + meal_plan_item_id: UUID, + max_age_seconds: int = DEFAULT_MAX_AGE_SECONDS, +) -> FamilyMember: + """Verify + match URL + enforce single-use. Returns the voter on success. + + Single-use is checked by looking for an existing MealPlanVote row for + (item, voter). If one exists, raise 409. + """ + payload = verify_token(token, max_age_seconds=max_age_seconds) + + if str(payload["item"]) != str(meal_plan_item_id): + raise HTTPException(status_code=400, detail="Token not valid for this meal") + + voter_id = UUID(str(payload["voter"])) + voter = db.query(FamilyMember).filter(FamilyMember.id == voter_id).first() + if not voter: + raise HTTPException(status_code=404, detail="Voter not found") + + existing = ( + db.query(MealPlanVote) + .filter( + MealPlanVote.meal_plan_item_id == meal_plan_item_id, + MealPlanVote.family_member_id == voter_id, + ) + .first() + ) + if existing: + raise HTTPException(status_code=409, detail="Already voted") + + return voter diff --git a/backend/app/services/email.py b/backend/app/services/email.py new file mode 100644 index 0000000..af61b49 --- /dev/null +++ b/backend/app/services/email.py @@ -0,0 +1,89 @@ +""" +Email backends. + +R2-B spike: only ConsoleEmailBackend is functional. SendGrid is a stub +intentionally left to be wired in R3-C. +""" + +from __future__ import annotations + +import json +import os +import sys +from datetime import datetime, timezone +from pathlib import Path +from typing import Optional, Protocol + +from app.config import settings + + +# Repository convention: backend/var/email_outbox.jsonl +# This module lives at backend/app/services/email.py — go up two levels to +# reach backend/, then var/. +_BACKEND_ROOT = Path(__file__).resolve().parent.parent.parent +OUTBOX_PATH = _BACKEND_ROOT / "var" / "email_outbox.jsonl" + + +class EmailBackend(Protocol): + def send( + self, + to: str, + subject: str, + html: str, + text: Optional[str] = None, + ) -> None: + ... + + +class ConsoleEmailBackend: + """Dev/spike backend. Prints to stdout AND appends a JSON line to + backend/var/email_outbox.jsonl so the round-trip can be inspected + after the fact. + """ + + def send( + self, + to: str, + subject: str, + html: str, + text: Optional[str] = None, + ) -> None: + record = { + "ts": datetime.now(timezone.utc).isoformat(), + "to": to, + "subject": subject, + "html": html, + "text": text, + } + print( + f"[ConsoleEmailBackend] -> {to} | {subject}", + file=sys.stdout, + flush=True, + ) + OUTBOX_PATH.parent.mkdir(parents=True, exist_ok=True) + with OUTBOX_PATH.open("a", encoding="utf-8") as f: + f.write(json.dumps(record) + "\n") + + +class SendGridEmailBackend: + """Stub. Wire in R3-C (real SendGrid client + sandbox mode + retries). + + Deliberately raises so a misconfigured prod env fails loudly instead of + silently dropping mail. + """ + + def send( + self, + to: str, + subject: str, + html: str, + text: Optional[str] = None, + ) -> None: # pragma: no cover - stub + raise NotImplementedError("Wire SendGrid in R3-C") + + +def get_email_backend() -> EmailBackend: + backend = (settings.EMAIL_BACKEND or "console").lower() + if backend == "sendgrid": + return SendGridEmailBackend() + return ConsoleEmailBackend() diff --git a/backend/app/services/scraper_service.py b/backend/app/services/scraper_service.py index ed6f3e4..177a4c8 100644 --- a/backend/app/services/scraper_service.py +++ b/backend/app/services/scraper_service.py @@ -1,87 +1,204 @@ +"""Scraper service. + +Two entry points: + +- ``enqueue_scrape(db, source, scrape_type, background_tasks)``: synchronously + inserts a ``ScrapeLog`` row in status ``STARTED`` (the existing enum has no + ``pending`` member; ``STARTED`` is reused for the queued state) and registers + ``_run_scrape_in_background`` to fire after the response is sent. +- ``_run_scrape_in_background(log_id, source, scrape_type)``: runs in a + FastAPI background task with its OWN ``SessionLocal()`` (the request-scoped + ``db`` is closed by the time this fires). Writes terminal status + (``SUCCESS``/``FAILED``) and ``error_message``. + +``ScraperService.run_scrape`` is preserved for direct/test invocation; the +``/api/admin/scrape`` endpoint now goes through ``enqueue_scrape``. +""" +from __future__ import annotations + import logging -from typing import Dict, Any, Optional -from datetime import datetime -from uuid import uuid4 +from typing import Any, Dict, Optional +from datetime import datetime, timezone +from uuid import UUID, uuid4 + +from fastapi import BackgroundTasks from sqlalchemy.orm import Session +from app.database import SessionLocal +from app.models import GroceryItem, Ingredient, ScrapeLog, ScrapeStatus + logger = logging.getLogger(__name__) +# --------------------------------------------------------------------------- +# Public API: enqueue + background runner +# --------------------------------------------------------------------------- +def enqueue_scrape( + db: Session, + *, + source: str, + scrape_type: str, + background_tasks: BackgroundTasks, +) -> ScrapeLog: + """Create the ScrapeLog row, commit, and schedule the background scrape. + + Returns the persisted ``ScrapeLog`` instance (refreshed). The actual + scraping work runs after FastAPI sends the 202 response. + """ + log = ScrapeLog( + id=uuid4(), + source=source, + scrape_type=scrape_type, + status=ScrapeStatus.STARTED, + started_at=datetime.now(timezone.utc), + ) + db.add(log) + db.commit() + db.refresh(log) + + background_tasks.add_task( + _run_scrape_in_background, log.id, source, scrape_type + ) + return log + + +def _run_scrape_in_background( + log_id: UUID, source: str, scrape_type: str +) -> None: + """Background entry point. Opens a fresh DB session — the request-scoped + session is gone by the time this runs. + """ + db: Session = SessionLocal() + try: + log = db.query(ScrapeLog).filter(ScrapeLog.id == log_id).first() + if log is None: + logger.error("ScrapeLog %s vanished before background run", log_id) + return + + # No "running" state in the enum; STARTED already covers in-flight. + # Mark started_at fresh in case there was lag between enqueue and run. + try: + service = ScraperService(db) + saved_count, items_found = service._do_scrape(source=source) + log.status = ScrapeStatus.SUCCESS + log.items_scraped = saved_count + log.completed_at = datetime.now(timezone.utc) + log.duration_seconds = int( + (log.completed_at - log.started_at).total_seconds() + ) + db.commit() + logger.info( + "Background scrape %s complete: %s/%s items saved", + log_id, saved_count, items_found, + ) + except Exception as exc: # noqa: BLE001 — must catch all to mark failed + logger.exception("Background scrape %s failed", log_id) + db.rollback() + # Re-fetch in case the rollback detached the instance. + log = db.query(ScrapeLog).filter(ScrapeLog.id == log_id).first() + if log is not None: + log.status = ScrapeStatus.FAILED + log.error_message = str(exc) + log.completed_at = datetime.now(timezone.utc) + if log.started_at: + log.duration_seconds = int( + (log.completed_at - log.started_at).total_seconds() + ) + db.commit() + finally: + db.close() + + +# --------------------------------------------------------------------------- +# Service class (kept for direct/test use) +# --------------------------------------------------------------------------- class ScraperService: def __init__(self, db: Session): self.db = db - def run_scrape(self, source: str = "lucky_california", scrape_type: str = "weekly_ad") -> Dict[str, Any]: - from app.scraper import LuckyCaliforniaScraper - from app.models import ScrapeLog, GroceryItem, Ingredient - - scrape_log = ScrapeLog( + def run_scrape( + self, source: str = "lucky_california", scrape_type: str = "weekly_ad" + ) -> Dict[str, Any]: + """Synchronous end-to-end scrape (legacy path). Creates the log row, + runs the scrape, commits terminal status. Used by direct callers and + tests; the API endpoint goes through ``enqueue_scrape``. + """ + log = ScrapeLog( id=uuid4(), source=source, scrape_type=scrape_type, - status="started", - started_at=datetime.now() + status=ScrapeStatus.STARTED, + started_at=datetime.now(timezone.utc), ) - self.db.add(scrape_log) + self.db.add(log) self.db.commit() - logger.info(f"Starting {source} {scrape_type} scrape") + logger.info("Starting %s %s scrape", source, scrape_type) try: - scraper = LuckyCaliforniaScraper() - result = scraper.scrape() - scraper.cleanup() - - items = result.get("items", []) - saved_count = 0 - - for item_data in items: - saved_item = self._save_grocery_item(item_data) - if saved_item: - saved_count += 1 - - scrape_log.status = "success" - scrape_log.items_scraped = saved_count - scrape_log.completed_at = datetime.now() - scrape_log.duration_seconds = int( - (scrape_log.completed_at - scrape_log.started_at).total_seconds() + saved_count, items_found = self._do_scrape(source=source) + log.status = ScrapeStatus.SUCCESS + log.items_scraped = saved_count + log.completed_at = datetime.now(timezone.utc) + log.duration_seconds = int( + (log.completed_at - log.started_at).total_seconds() ) - self.db.commit() - - logger.info(f"Scrape complete: {saved_count} items saved") - + logger.info("Scrape complete: %s items saved", saved_count) return { - "scrape_id": str(scrape_log.id), + "scrape_id": str(log.id), "status": "success", "items_scraped": saved_count, - "items_found": len(items) + "items_found": items_found, } - - except Exception as e: - logger.error(f"Scrape failed: {e}") - scrape_log.status = "failed" - scrape_log.error_message = str(e) - scrape_log.completed_at = datetime.now() - scrape_log.duration_seconds = int( - (scrape_log.completed_at - scrape_log.started_at).total_seconds() + except Exception as e: # noqa: BLE001 + logger.error("Scrape failed: %s", e) + log.status = ScrapeStatus.FAILED + log.error_message = str(e) + log.completed_at = datetime.now(timezone.utc) + log.duration_seconds = int( + (log.completed_at - log.started_at).total_seconds() ) self.db.commit() - return { - "scrape_id": str(scrape_log.id), + "scrape_id": str(log.id), "status": "failed", - "error": str(e) + "error": str(e), } - def _save_grocery_item(self, item_data: Dict[str, Any]) -> Optional[GroceryItem]: - from app.models import GroceryItem, Ingredient + # ------------------------------------------------------------------ + # Internals + # ------------------------------------------------------------------ + def _do_scrape(self, *, source: str) -> tuple[int, int]: + """Run the scraper and persist items. Returns (saved, found). - name = item_data.get("name", "").strip() + Raises any scraper exception (including ``SwiftlyAuthError``) to + the caller for status mapping. + """ + from app.scraper import LuckyCaliforniaScraper + + scraper = LuckyCaliforniaScraper() + saved_count = 0 + found_count = 0 + try: + for item_data in scraper.fetch_all(): + found_count += 1 + if self._save_grocery_item(item_data) is not None: + saved_count += 1 + finally: + scraper.cleanup() + return saved_count, found_count + + def _save_grocery_item( + self, item_data: Dict[str, Any] + ) -> Optional[GroceryItem]: + name = (item_data.get("name") or "").strip() if not name: return None name_lower = name.lower() + source = item_data.get("source") or "lucky_california" + external_id = item_data.get("external_id") ingredient = self.db.query(Ingredient).filter( Ingredient.name_lower == name_lower @@ -93,22 +210,41 @@ class ScraperService: name=name, name_lower=name_lower, aisle=item_data.get("aisle"), - typical_price=item_data.get("current_price") + typical_price=item_data.get("current_price"), ) self.db.add(ingredient) self.db.flush() - existing = self.db.query(GroceryItem).filter( - GroceryItem.name == name, - GroceryItem.scraped_url == item_data.get("scraped_url") - ).first() + # Idempotency: + # 1) (source, external_id) when both present (Swiftly path); + # 2) fall back to (name, scraped_url) for legacy rows from R2-A. + existing: Optional[GroceryItem] = None + if external_id: + existing = self.db.query(GroceryItem).filter( + GroceryItem.source == source, + GroceryItem.external_id == external_id, + ).first() + if existing is None: + existing = self.db.query(GroceryItem).filter( + GroceryItem.name == name, + GroceryItem.scraped_url == item_data.get("scraped_url"), + ).first() if existing: + existing.ingredient_id = ingredient.id + existing.brand = item_data.get("brand") existing.current_price = item_data.get("current_price") - existing.is_on_sale = item_data.get("is_on_sale", True) + existing.regular_price = item_data.get("regular_price") + existing.unit = item_data.get("unit") + existing.aisle = item_data.get("aisle") existing.image_url = item_data.get("image_url") existing.product_url = item_data.get("product_url") - existing.scraped_at = datetime.now() + existing.description = item_data.get("description") + existing.is_on_sale = bool(item_data.get("is_on_sale", False)) + existing.scraped_at = datetime.now(timezone.utc) + existing.scraped_url = item_data.get("scraped_url") + existing.external_id = external_id + existing.source = source self.db.flush() return existing @@ -116,31 +252,31 @@ class ScraperService: id=uuid4(), ingredient_id=ingredient.id, name=name, + brand=item_data.get("brand"), current_price=item_data.get("current_price"), regular_price=item_data.get("regular_price"), unit=item_data.get("unit"), aisle=item_data.get("aisle"), image_url=item_data.get("image_url"), product_url=item_data.get("product_url"), - is_on_sale=item_data.get("is_on_sale", True), + description=item_data.get("description"), + is_on_sale=bool(item_data.get("is_on_sale", False)), sale_start_date=item_data.get("sale_start_date"), sale_end_date=item_data.get("sale_end_date"), in_season=item_data.get("in_season", False), - scraped_at=datetime.now(), - scraped_url=item_data.get("scraped_url") + scraped_at=datetime.now(timezone.utc), + scraped_url=item_data.get("scraped_url"), + external_id=external_id, + source=source, ) self.db.add(grocery_item) - self.db.commit() - self.db.refresh(grocery_item) - + self.db.flush() return grocery_item def get_sale_items(self, limit: int = 50) -> list: - from app.models import GroceryItem - items = self.db.query(GroceryItem).filter( - GroceryItem.is_on_sale == True + GroceryItem.is_on_sale == True # noqa: E712 — SQLAlchemy idiom ).order_by(GroceryItem.scraped_at.desc()).limit(limit).all() return [ @@ -152,7 +288,8 @@ class ScraperService: "aisle": item.aisle, "image_url": item.image_url, "product_url": item.product_url, - "scraped_at": item.scraped_at.isoformat() if item.scraped_at else None + "description": item.description, + "scraped_at": item.scraped_at.isoformat() if item.scraped_at else None, } for item in items - ] \ No newline at end of file + ] diff --git a/backend/pytest.ini b/backend/pytest.ini new file mode 100644 index 0000000..f019feb --- /dev/null +++ b/backend/pytest.ini @@ -0,0 +1,6 @@ +[pytest] +testpaths = tests +asyncio_mode = auto +addopts = -ra +filterwarnings = + ignore::DeprecationWarning diff --git a/backend/requirements-dev.txt b/backend/requirements-dev.txt new file mode 100644 index 0000000..cd28709 --- /dev/null +++ b/backend/requirements-dev.txt @@ -0,0 +1,6 @@ +# Dev / test-only dependencies. Production deps live in requirements.txt. +pytest>=7.4 +pytest-cov>=4.1 +pytest-asyncio>=0.23 +httpx>=0.25 +freezegun>=1.4 diff --git a/backend/requirements.txt b/backend/requirements.txt index 81b1fb3..9396b0e 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -11,6 +11,8 @@ beautifulsoup4==4.12.3 lxml==5.1.0 apscheduler==3.10.4 python-dotenv==1.0.0 +itsdangerous==2.1.2 httpx==0.26.0 +requests==2.31.0 pytest==7.4.4 pytest-asyncio==0.23.3 diff --git a/backend/tests/__init__.py b/backend/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/tests/conftest.py b/backend/tests/conftest.py new file mode 100644 index 0000000..1b62e8a --- /dev/null +++ b/backend/tests/conftest.py @@ -0,0 +1,205 @@ +""" +Pytest fixtures for MealPlanner backend. + +DB strategy +----------- +- If env ``TEST_DATABASE_URL`` is set, use it (must be a Postgres URL — the + current Alembic migrations use ``postgresql.UUID``/``JSONB``/``ARRAY`` types + which are not portable to SQLite). +- Else fall back to ``DATABASE_URL`` if it points at Postgres. +- Else skip Postgres-only tests (marker: ``requires_postgres``). + +Each test using the ``db`` fixture runs inside a SAVEPOINT-style nested +transaction that rolls back on teardown so tests do not leak state. +""" + +from __future__ import annotations + +import os +import sys +import pathlib +import subprocess +from typing import Iterator + +import pytest + +# Ensure DATABASE_URL is set BEFORE importing app.config (Settings requires it). +# We default to the TEST_DATABASE_URL or a sentinel that lets imports succeed; +# tests that actually need the DB rely on the marker / fixture skip path below. +_DEFAULT_DSN = "postgresql://mealplanner:password@localhost:5432/mealplanner_test" +os.environ.setdefault( + "DATABASE_URL", + os.environ.get("TEST_DATABASE_URL", _DEFAULT_DSN), +) + +# Make backend/ importable when pytest is invoked from repo root. +BACKEND_ROOT = pathlib.Path(__file__).resolve().parent.parent +if str(BACKEND_ROOT) not in sys.path: + sys.path.insert(0, str(BACKEND_ROOT)) + +from sqlalchemy import create_engine, text # noqa: E402 +from sqlalchemy.orm import sessionmaker # noqa: E402 +from sqlalchemy.exc import OperationalError # noqa: E402 + + +def _resolve_test_dsn() -> str | None: + dsn = os.environ.get("TEST_DATABASE_URL") or os.environ.get("DATABASE_URL") + if not dsn: + return None + if not dsn.startswith(("postgresql://", "postgresql+psycopg2://")): + return None + return dsn + + +def _postgres_reachable(dsn: str) -> bool: + try: + eng = create_engine( + dsn.replace("postgresql://", "postgresql+psycopg2://"), + pool_pre_ping=True, + ) + with eng.connect() as conn: + conn.execute(text("SELECT 1")) + eng.dispose() + return True + except Exception: + return False + + +_DSN = _resolve_test_dsn() +_PG_AVAILABLE = bool(_DSN) and _postgres_reachable(_DSN) + + +def pytest_collection_modifyitems(config, items): + """Skip postgres-only tests when no live Postgres is available.""" + if _PG_AVAILABLE: + return + skip_pg = pytest.mark.skip( + reason="Postgres not reachable; set TEST_DATABASE_URL to enable." + ) + for item in items: + if "requires_postgres" in item.keywords: + item.add_marker(skip_pg) + + +def pytest_configure(config): + config.addinivalue_line( + "markers", + "requires_postgres: test needs a live Postgres reachable via TEST_DATABASE_URL", + ) + config.addinivalue_line( + "markers", + "scraper_offline: parser-only test; uses saved HTML fixture; no " + "network or Playwright/Chromium required (CI-safe).", + ) + config.addinivalue_line( + "markers", + "scraper_live: hits the live grocery website; requires Playwright " + "and Chromium; skipped by default in CI.", + ) + + +# --------------------------------------------------------------------------- +# Schema bootstrap (session-scoped): run alembic upgrade head once per session. +# --------------------------------------------------------------------------- +@pytest.fixture(scope="session") +def _schema() -> Iterator[None]: + if not _PG_AVAILABLE: + yield + return + env = os.environ.copy() + env["DATABASE_URL"] = _DSN # Alembic env.py reads from settings.DATABASE_URL + # alembic.ini lives in backend/, run from there. + subprocess.run( + ["alembic", "upgrade", "head"], + cwd=str(BACKEND_ROOT), + env=env, + check=True, + ) + yield + # Best-effort cleanup so re-running the suite locally is idempotent. + subprocess.run( + ["alembic", "downgrade", "base"], + cwd=str(BACKEND_ROOT), + env=env, + check=False, + ) + + +@pytest.fixture(scope="session") +def _engine(_schema): + if not _PG_AVAILABLE: + yield None + return + eng = create_engine( + _DSN.replace("postgresql://", "postgresql+psycopg2://"), + pool_pre_ping=True, + ) + yield eng + eng.dispose() + + +@pytest.fixture() +def db(_engine): + """Per-test transactional session that rolls back at teardown.""" + if _engine is None: + pytest.skip("Postgres not reachable") + connection = _engine.connect() + trans = connection.begin() + Session = sessionmaker(bind=connection, autocommit=False, autoflush=False) + session = Session() + try: + yield session + finally: + session.close() + trans.rollback() + connection.close() + + +@pytest.fixture() +def client(db): + """TestClient with get_db overridden to yield the test session.""" + from fastapi.testclient import TestClient + from app.main import app + from app.database import get_db + + def _override(): + try: + yield db + finally: + pass + + app.dependency_overrides[get_db] = _override + try: + with TestClient(app) as c: + yield c + finally: + app.dependency_overrides.pop(get_db, None) + + +@pytest.fixture() +def client_no_db(): + """TestClient that does NOT require a live DB — for pure import/wiring smoke.""" + from fastapi.testclient import TestClient + from app.main import app + from app.database import get_db + + class _StubSession: + def execute(self, *a, **kw): + from sqlalchemy.engine import Result # noqa: F401 + raise RuntimeError("DB not available in this fixture") + + def query(self, *a, **kw): + raise RuntimeError("DB not available in this fixture") + + def close(self): + pass + + def _override(): + yield _StubSession() + + app.dependency_overrides[get_db] = _override + try: + with TestClient(app) as c: + yield c + finally: + app.dependency_overrides.pop(get_db, None) diff --git a/backend/tests/fixtures/lucky_ca/META.md b/backend/tests/fixtures/lucky_ca/META.md new file mode 100644 index 0000000..a7b7d2b --- /dev/null +++ b/backend/tests/fixtures/lucky_ca/META.md @@ -0,0 +1,50 @@ +# Lucky California weekly-ad spike (R2-A) + +| Field | Value | +| --- | --- | +| URL | https://luckysupermarkets.com/coupons/Coupon%2Flu-featured-in-ad | +| Final URL | https://luckysupermarkets.com/coupons/Coupon%2Flu-featured-in-ad | +| Fetched (UTC) | 2026-05-04 (single live fetch via scripts/spike_lucky_scrape.py) | +| HTTP status | 200 | +| HTML bytes | 201224 | +| Items parsed (current parser) | 11 | +| Captcha/block signal | benign — page contains an empty `` placeholder, no actual challenge served. Title: "Featured in Ad \| Luckys Supermarket". 13 real `coupon-card-wrapper` cards rendered. | +| Error | none | +| User-Agent | `Mozilla/5.0 (compatible; MealPlannerSpike/0.1; +https://github.com/MealPlanner; spike=R2-A)` | + +## Selectors used (verified against this fixture) + +- Card root: `div.coupon-card-wrapper` (fallback: `div.coupon-card-container`) +- Price + short name: `.coupon-card-value-text` (e.g. `"$13.97 Pepsi 24 packs"`) +- Long description: `.coupon-card-short-description` +- Image: `img` inside `.coupon-card-img-container` (CDN URL: `cdn.luckysupermarkets.com/loyalty/offer/.jpg`) +- No per-card link is present in the rendered DOM (offers are non-navigable tiles). + +## First parsed item (sample) + +```json +{ + "name": "Pepsi 24 packs", + "description": "$13.97 Pepsi Products 24 pack, Poppi 8 pack, Gatorade 18 pack, Rockstar 10 pack, or Pure Leaf 12 pack, select varieties +CRV in CA. While supplies last.", + "current_price": 13.97, + "image_url": "https://cdn.luckysupermarkets.com/loyalty/offer/205213.jpg", + "product_url": null, + "is_on_sale": true, + "scraped_at": "2026-05-04T21:42:56.952936", + "scraped_url": "https://luckysupermarkets.com" +} +``` + +## Notes + +- ONE live fetch performed by `scripts/spike_lucky_scrape.py`. Do not rerun without reason. +- HTML and PNG saved alongside this file (`weekly_ad.html`, `weekly_ad.png`). +- Initial parser (regex-based on `h2/h3/a` text) produced only 1 item; selectors were + stale. A minimal additive fix landed in `backend/app/scraper/lucky_ca_scraper.py`: + new `_parse_coupon_card` + `parse_featured_coupons_html` methods that target + Swiftly-style `.coupon-card-wrapper` cards. Old `_parse_coupon_item` retained + as a fallback path. +- Schema impact: `grocery_item` columns (name, current_price, image_url, is_on_sale, + scraped_at, scraped_url) are all populated. `product_url` is None for every + card (no per-offer link in DOM) — keep nullable. New optional `description` + field is produced; either add a `description TEXT` column or drop it. diff --git a/backend/tests/fixtures/lucky_ca/categories.html b/backend/tests/fixtures/lucky_ca/categories.html new file mode 100644 index 0000000..daa7c83 --- /dev/null +++ b/backend/tests/fixtures/lucky_ca/categories.html @@ -0,0 +1,80 @@ +Product Categories | Lucky Supermarket
\ No newline at end of file diff --git a/backend/tests/fixtures/lucky_ca/category_meat_seafood.json b/backend/tests/fixtures/lucky_ca/category_meat_seafood.json new file mode 100644 index 0000000..e4d6a80 --- /dev/null +++ b/backend/tests/fixtures/lucky_ca/category_meat_seafood.json @@ -0,0 +1 @@ +{"products":{"info":{"count":256,"queryTime":128,"isManagedQuery":false,"isRewriteQuery":false,"hasBoostedItems":false},"items":[{"id":"46556","categories":["Product/meat_seafood","Product/poultry","Product/meat_seafood","Product/chicken","Product/poultry","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/poultry","Mobile/P+C/Product/chicken"],"price":{"ok":{"regPriceText":"$3.49 /lb","promoArea":{"promoText":"$2.49 /lb","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"Foster Farms, Fresh and Natural Chicken Thigh Fillets Value Pack ","description":"Foster Farms, Fresh and Natural Chicken Thigh Fillets Value Pack ","brand":"FOSTER FARMS MEAT","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062862_594d50a0-db9f-4efb-8924-6edfe1343b42.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.99014"},"productCodes":["00205405000000","00254153000008","00260846000002","00260873000006","00270873000005","0205405000000","0254153000008","0260846000002","0260873000006","0270873000005","20540500000","205405000000","25415300000","254153000008","26084600000","260846000002","26087300000","260873000006","27087300000","270873000005"],"rank":{"salesPrice":233884,"salesQuantity":16009,"impressionCount":727}},{"id":"46589","categories":["Product/meat_seafood","Product/poultry","Product/meat_seafood","Product/chicken","Product/poultry","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/poultry","Mobile/P+C/Product/chicken"],"price":{"ok":{"regPriceText":"$5.99 /lb","template":"RegPrice"}},"name":"Wings, Maxx Pack ","description":"Wings, Maxx Pack ","brand":"MASTER CUT MEATS","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/8309468_7946dccd-b38b-467a-9db1-3c5f8011bbe0.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.98873"},"productCodes":["00200765000004","00231874000005","00254229000000","00268464000008","00280966000003","0200765000004","0231874000005","0254229000000","0268464000008","0280966000003","20076500000","200765000004","23187400000","231874000005","25422900000","254229000000","26846400000","268464000008","28096600000","280966000003"],"rank":{"salesPrice":131345,"salesQuantity":11756,"impressionCount":74}},{"id":"46587","categories":["Product/meat_seafood","Product/poultry","Product/meat_seafood","Product/chicken","Product/poultry","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/poultry","Mobile/P+C/Product/chicken"],"price":{"ok":{"regPriceText":"$2.99 /lb","template":"RegPrice"}},"name":"Master Cut, Chicken Drumsticks, Maxx Pack ","description":"Master Cut Chicken Drumsticks, Maxx Pack, 3 lbs. minimum required ","brand":"MASTER CUT MEATS","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062874_8d719ffd-1f98-4019-9705-9288b8208503.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.98838"},"productCodes":["00231872000007","00254227000002","00268462000000","00280964000005","0231872000007","0254227000002","0268462000000","0280964000005","23187200000","231872000007","25422700000","254227000002","26846200000","268462000000","28096400000","280964000005"],"rank":{"salesPrice":191057,"salesQuantity":14422,"impressionCount":126}},{"id":"67617","categories":["Product/meat_seafood","Product/pork","Product/meat_seafood","Product/","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/pork","Mobile/P+C/Product/"],"price":{"ok":{"regPriceText":"$5.99 /lb","promoArea":{"promoText":"$4.99 /lb","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"Bag Pork Butt Roast ","description":"Bag Pork Butt Roast ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062799_864441ba-58f5-4a31-93b0-99358b7bfd0a.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.98791"},"productCodes":["00251609000001","0251609000001","25160900000","251609000001"],"rank":{"salesPrice":77769,"salesQuantity":7076,"impressionCount":562}},{"id":"46555","categories":["Product/meat_seafood","Product/poultry","Product/meat_seafood","Product/chicken","Product/poultry","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/poultry","Mobile/P+C/Product/chicken"],"price":{"ok":{"regPriceText":"$3.49 /lb","promoArea":{"promoText":"$2.49 /lb","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"Foster Farms, Fresh and Natural Cage Free Drumsticks Value Pack ","description":"Foster Farms, Fresh and Natural Cage Free Drumsticks Value Pack ","brand":"FOSTER FARMS MEAT","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062861_da796390-227a-4520-b6d1-947e92814cf1.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.98615"},"productCodes":["00205406000009","00254152000009","00260872000007","00260897000006","00270872000006","0205406000009","0254152000009","0260872000007","0260897000006","0270872000006","20540600000","205406000009","25415200000","254152000009","26087200000","260872000007","26089700000","260897000006","27087200000","270872000006"],"rank":{"salesPrice":102172,"salesQuantity":7656,"impressionCount":187}},{"id":"46107","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/ground_beef_beef_patties","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/ground_beef_beef_patties"],"price":{"ok":{"regPriceText":"$11.49 /lb","template":"RegPrice"}},"name":"Ground Beef, 80% Lean, Maxx Pack ","description":"80% Lean Ground Beef, Maxx Pack, 3 lbs. minimum required ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062641_9430b291-f783-4022-bf29-07a3d615d16f.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.98579"},"productCodes":["00250509000005","0250509000005","25050900000","250509000005"],"rank":{"salesPrice":217515,"salesQuantity":13660,"impressionCount":636}},{"id":"46740","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/fish","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/fish"],"price":{"ok":{"regPriceText":"$12.99 /lb","promoArea":{"promoText":"$9.99 /lb","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"Fresh Atlantic Salmon Fillet, Farm Raised ","description":"Fresh Atlantic Salmon Fillet, Natural Color Added ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062957_a296fe2b-3136-4e6b-9e8c-a45bd34d7595.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.98568"},"productCodes":["00255024000004","0255024000004","25502400000","255024000004"],"rank":{"salesPrice":246339,"salesQuantity":9817,"impressionCount":1090}},{"id":"858929","categories":["Product/meat_seafood","Product/pork","Product/meat_seafood","Product/ham_smoked_cuts","Product/pork","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/pork","Mobile/P+C/Product/ham_smoked_cuts"],"price":{"ok":{"regPriceText":"$4.99 /lb","promoArea":{"promoText":"$1.99 /lb","validityText":"Valid 04/08/26 - 05/06/26"},"template":"NewPrice"}},"name":"Cook's, Spiral Cut Hickory Ham ","description":"Cook's, Spiral Cut Hickory Ham ","brand":"COOKS HAM","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/9981469_94ad0dba-388c-4260-866d-05f6ea08bc70.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.98462"},"productCodes":["00256240000007","0256240000007","25624000000","256240000007","25624047"],"rank":{"salesPrice":2529,"salesQuantity":232,"impressionCount":214}},{"id":"46018","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/ground_beef_beef_patties","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/ground_beef_beef_patties"],"price":{"ok":{"regPriceText":"$11.99 /lb","template":"RegPrice"}},"name":"80% Lean Ground Beef ","description":"80% Lean Ground Beef ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062566_ef6b6a45-0196-42b8-b343-7ebe119e639a.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.98377"},"productCodes":["00250009000000","0250009000000","25000900000","250009000000"],"rank":{"salesPrice":212864,"salesQuantity":19452,"impressionCount":410}},{"id":"192027","categories":["Product/meat_seafood","Product/pork","Product/meat_seafood","Product/","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/pork","Mobile/P+C/Product/"],"price":{"ok":{"regPriceText":"$7.99 /lb","template":"RegPrice"}},"name":"Pork Spareribs, Frozen ","description":"Pork Spareribs, Frozen ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062804_5c786220-6ae2-4d9f-8c3b-402f5fec9f8c.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.98263"},"productCodes":["00251620000004","0251620000004","25162000000","251620000004","25162044"],"rank":{"salesPrice":27256,"salesQuantity":1548,"impressionCount":227}},{"id":"46172","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$17.99 /lb","promoArea":{"promoText":"$8.99 /lb","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"Choice Beef Chuck Roast, Bnls ","description":"Choice Beef Chuck Roast, Bnls ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062698_968a45d2-9bf8-455f-9a89-a022c129c3b7.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.98145"},"productCodes":["00250661000004","0250661000004","25066100000","250661000004"],"rank":{"salesPrice":152226,"salesQuantity":5728,"impressionCount":694}},{"id":"46179","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$26.99 /lb","template":"RegPrice"}},"name":"CHOICE BEEF RIB ROAST - bone-in 6-18","description":"CERTIFIED ANGUS BEEF STANDING RIB ROAST SMALL END","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062707_87ef5abe-ee97-4fc4-a767-bf93e5c32274.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.98124"},"productCodes":["00250679000003","0250679000003","25067900000","250679000003"],"rank":{"salesPrice":68357,"salesQuantity":1107,"impressionCount":1489}},{"id":"633156","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/ground_beef_beef_patties","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/ground_beef_beef_patties"],"price":{"ok":{"regPriceText":"$12.49 /lb","template":"RegPrice"}},"name":"85% Lean Ground Beef ","description":"85% Lean Ground Beef ","brand":"MORAN'S (MT)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062564_4ea5b8c5-28b3-404e-b265-bc98cd4e0d88.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.98004"},"productCodes":["00250006000003","0250006000003","25000600000","250006000003"],"rank":{"salesPrice":156410,"salesQuantity":16404,"impressionCount":156}},{"id":"46189","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$18.99 /lb","promoArea":{"promoText":"$12.99 /lb","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"Tri Tip, Beef Loin Roast, Choice, Trimmed ","description":"Tri Tip, Beef Loin Roast, Choice, Trimmed ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7322428_b3933d6f-836a-4f45-94d3-9a5f4b11737e.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.97734"},"productCodes":["00250692000004","0250692000004","25069200000","250692000004"],"rank":{"salesPrice":79925,"salesQuantity":2379,"impressionCount":452}},{"id":"773089","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/shrimp","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/shrimp"],"price":{"ok":{"regPriceText":"$31.99","promoArea":{"promoText":"$27.98","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"Raw Shrimp, Easy Peel, 13/15 ct ","description":"Raw Shrimp, Easy Peel, 13/15 ct ","brand":"MASTER CATCH","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7061926_d57da29c-b892-4e0c-aed0-4dc1ba131f0e.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.97699"},"productCodes":["00098487009500","00810011173590","00829944010902","0098487009500","0810011173590","0829944010902","09848700950","098487009500","81001117359","810011173590","82994401090","829944010902"],"rank":{"salesPrice":112864,"salesQuantity":3676,"impressionCount":1733}},{"id":"46335","categories":["Product/meat_seafood","Product/pork","Product/meat_seafood","Product/","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/pork","Mobile/P+C/Product/"],"price":{"ok":{"regPriceText":"$5.99 /lb","promoArea":{"promoText":"$3.99 /lb","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"Country Style Pork Ribs, Maxx Pack ","description":"Country Style Pork Ribs, Maxx Pack, 3 lbs. minimum required ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062787_41edca07-4424-4c65-83ac-dcf1e8cf099f.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.97546"},"productCodes":["00251518000000","0251518000000","25151800000","251518000000"],"rank":{"salesPrice":49132,"salesQuantity":5432,"impressionCount":273}},{"id":"101138","categories":["Product/meat_seafood","Product/poultry","Product/meat_seafood","Product/turkey","Product/poultry","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/poultry","Mobile/P+C/Product/turkey"],"price":{"ok":{"regPriceText":"$6.99","template":"RegPrice"}},"name":"Butterball , 85%/15% Ground Turkey ","description":"Butterball , 85%/15% Ground Turkey ","brand":"BUTTERBALL MEATS","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7682479_e8d5b6c4-c2a7-425f-a672-51eb0f9f679b.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.97253"},"productCodes":["00022655715467","0022655715467","02265571546","022655715467"],"rank":{"salesPrice":79005,"salesQuantity":11334,"impressionCount":184}},{"id":"46546","categories":["Product/meat_seafood","Product/poultry","Product/meat_seafood","Product/chicken","Product/poultry","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/poultry","Mobile/P+C/Product/chicken"],"price":{"ok":{"regPriceText":"$8.99 /lb","template":"RegPrice"}},"name":"Foster Farms, Simply Raised Free Range Boneless Skinless Breast Fillets ","description":"Foster Farms, Simply Raised Free Range Boneless Skinless Breast Fillets ","brand":"FOSTER FARMS MEATS","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062855_6e0f9c25-c1a7-48c2-b3c2-667324d75693.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.97135"},"productCodes":["00254140000004","00260829000005","0254140000004","0260829000005","25414000000","254140000004","25414044","26082900000","260829000005"],"rank":{"salesPrice":99960,"salesQuantity":7166,"impressionCount":80}},{"id":"46592","categories":["Product/meat_seafood","Product/poultry","Product/meat_seafood","Product/chicken","Product/poultry","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/poultry","Mobile/P+C/Product/chicken"],"price":{"ok":{"regPriceText":"$6.69 /lb","template":"RegPrice"}},"name":"Boneless Skinless Chicken Thighs, Maxx Pack ","description":"Boneless Skinless Chicken Thighs, Maxx Pack ","brand":"MASTER CUT MEATS","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062878_9dbc3f22-d87d-436a-9454-ede7fa978a26.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.97053"},"productCodes":["00231667000007","00254234000002","00268460000002","00280958000004","0231667000007","0254234000002","0268460000002","0280958000004","23166700000","231667000007","25423400000","254234000002","26846000000","268460000002","26846042","28095800000","280958000004"],"rank":{"salesPrice":76878,"salesQuantity":3956,"impressionCount":107}},{"id":"46524","categories":["Product/meat_seafood","Product/poultry","Product/meat_seafood","Product/chicken","Product/poultry","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/poultry","Mobile/P+C/Product/chicken"],"price":{"ok":{"regPriceText":"$2.69","template":"RegPrice"}},"name":"Ff Fryer Bagged ","description":"Ff Fryer Bagged ","brand":"Miller Amish","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062850_c9aba475-d0e0-491d-9fef-852235656dec.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.97042"},"productCodes":["00217617000006","00254101000005","00260805000005","00270805000004","00270972000005","0217617000006","0254101000005","0260805000005","0270805000004","0270972000005","21761700000","217617000006","25410100000","254101000005","26080500000","260805000005","27080500000","270805000004","27097200000","270972000005"],"rank":{"salesPrice":89410,"salesQuantity":5942,"impressionCount":103}},{"id":"46167","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$17.49 /lb","template":"RegPrice"}},"name":"Choice Beef Bottom Round Steak Carne Asada ","description":"Choice Beef Bottom Round Steak Carne Asada ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062696_fceae9c1-ceb2-48ae-bb6a-470a44656fa8.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.96983"},"productCodes":["00250654000004","0250654000004","25065400000","250654000004"],"rank":{"salesPrice":174626,"salesQuantity":7147,"impressionCount":202}},{"id":"77024","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/shrimp","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/shrimp"],"price":{"ok":{"regPriceText":"$23.99","promoArea":{"promoText":"$19.98","validityText":"Valid 04/23/26 - 05/12/26"},"template":"NewPrice"}},"name":"Mcatch 21/30 Raw Shrimp Ez Peel 2lb","description":"Mcatch 21/30 Raw Shrimp Ez Peel 2lb","brand":"MASTER CATCH","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062275_646328ac-94d4-4628-b19b-3ac9ce64f6bd.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.96948"},"productCodes":["00098487963949","0098487963949","09848796394","098487963949"],"rank":{"salesPrice":60284,"salesQuantity":2282,"impressionCount":831}},{"id":"46998","categories":["Product/meat_seafood","Product/pork","Product/meat_seafood","Product/ham_smoked_cuts","Product/pork","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/pork","Mobile/P+C/Product/ham_smoked_cuts"],"price":{"ok":{"regPriceText":"$3.99 /lb","promoArea":{"promoText":"$1.69 /lb","validityText":"Valid 04/08/26 - 05/06/26"},"template":"NewPrice"}},"name":"COOKS HAM BUTT 5-7 lb","description":"Cooks Fresh Butt Portion Ham","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7063071_40acb43c-0cca-499e-957f-3a28c7dcf2a4.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.96936"},"productCodes":["00256207000002","00293391000005","0256207000002","0293391000005","25620700000","256207000002","29339100000","293391000005"],"rank":{"salesPrice":4820,"salesQuantity":609,"impressionCount":58}},{"id":"760134","categories":["Product/meat_seafood","Product/poultry","Product/meat_seafood","Product/turkey","Product/poultry","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/poultry","Mobile/P+C/Product/turkey"],"price":{"ok":{"regPriceText":"$8.99","template":"RegPrice"}},"name":"Jennie-O , Fresh 93%/7% Ground Turkey ","description":"Jennie-O , Fresh 93%/7% Ground Turkey ","brand":"JENNIE-O (MT)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7055905_4236e41d-a35c-4ab3-8434-5f0e6430f4d0.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.96877"},"productCodes":["00042222302005","0042222302005","04222230200","042222302005"],"rank":{"salesPrice":91675,"salesQuantity":10752,"impressionCount":129}},{"id":"46280","categories":["Product/meat_seafood","Product/pork","Product/meat_seafood","Product/","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/pork","Mobile/P+C/Product/"],"price":{"ok":{"regPriceText":"$6.49 /lb","promoArea":{"promoText":"$5.99 /lb","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"Pork Shoulder Butt Roast, Boneless ","description":"Pork Shoulder Butt Roast, Boneless ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062761_a28a1410-1e8e-4135-9488-59e14f71d0ec.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.96713"},"productCodes":["00251107000008","0251107000008","25110700000","251107000008"],"rank":{"salesPrice":31944,"salesQuantity":2461,"impressionCount":226}},{"id":"46532","categories":["Product/meat_seafood","Product/poultry","Product/meat_seafood","Product/chicken","Product/poultry","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/poultry","Mobile/P+C/Product/chicken"],"price":{"ok":{"regPriceText":"$3.99 /lb","template":"RegPrice"}},"name":"Foster Farms, Simply Raised Free Range Chicken Thighs ","description":"Foster Farms, Simply Raised Free Range Chicken Thighs ","brand":"FOSTER FARMS MEATS","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062853_264eadc7-2eeb-4a4a-b660-ca38272cbdd1.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.96654"},"productCodes":["00254111000002","00260809000001","00270645000004","0254111000002","0260809000001","0270645000004","25411100000","254111000002","26080900000","260809000001","27064500000","270645000004"],"rank":{"salesPrice":39466,"salesQuantity":5353,"impressionCount":168}},{"id":"194177","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$10","template":"RegPrice"}},"name":"Beef Tri-Tip Steak Thin Cut ","description":"Beef Tri-Tip Steak Thin Cut ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/10011750_ee6d0597-f9c0-430d-8f11-8fd0199025ef.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.96455"},"productCodes":["00254118000005","0254118000005","25411800000","254118000005"],"rank":{"salesPrice":158085,"salesQuantity":15812,"impressionCount":310}},{"id":"105301","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/fish","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/fish"],"price":{"ok":{"regPriceText":"$14.99 /lb","promoArea":{"promoText":"$11.99 /lb","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"Fresh Atlantic Salmon, Center Cut Fillet ","description":"Fresh Atlantic Salmon, Center Cut Fillet ","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/9543850_8fffacb6-55db-4603-bcd6-18733c1e921c.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.96408"},"productCodes":["00255092000005","0255092000005","25509200000","255092000005"],"rank":{"salesPrice":117280,"salesQuantity":9134,"impressionCount":173}},{"id":"101139","categories":["Product/meat_seafood","Product/poultry","Product/meat_seafood","Product/turkey","Product/poultry","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/poultry","Mobile/P+C/Product/turkey"],"price":{"ok":{"regPriceText":"$8.49","template":"RegPrice"}},"name":"Butterball , 93%/7% Ground Turkey ","description":"Make All Natural Butterball ground turkey meat the star of your favorite recipe for a low-fat, gluten-free choice. Always tender and juicy, lean Butterball turkey is minimally processed with no artificial ingredients and no hormones or steroids.* Enjoy Butterball's fresh ground turkey all year long for family dinners, party appetizers or grilled lunches. Butterball is American Humane Certified. *Federal regulations do not permit the use of hormones in poultry. ","brand":"BUTTERBALL MEATS","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7682480_57338b82-9e5d-4ad0-b2db-b76b39489faf.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.96232"},"productCodes":["00022655715610","0022655715610","02265571561","022655715610"],"rank":{"salesPrice":66953,"salesQuantity":7726,"impressionCount":427}},{"id":"156945","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$12.99 /lb","template":"RegPrice"}},"name":"Pasture Raised Beef Ribeye Steak ","description":"Pasture Raised Beef Ribeye Steak ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/8943305_6d794ce3-bf06-4aab-8be7-356b96ed4645.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.95926"},"productCodes":["00250124000008","0250124000008","25012400000","250124000008"],"rank":{"salesPrice":130209,"salesQuantity":8436,"impressionCount":609}},{"id":"46547","categories":["Product/meat_seafood","Product/poultry","Product/meat_seafood","Product/chicken","Product/poultry","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/poultry","Mobile/P+C/Product/chicken"],"price":{"ok":{"regPriceText":"$8.79 /lb","template":"RegPrice"}},"name":"Foster Farms, Simply Raised Free Range Boneless Skinless Chicken Thigh Fillets ","description":"Foster Farms, Simply Raised Free Range Boneless Skinless Chicken Thigh Fillets ","brand":"FOSTER FARMS MEATS","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7768596_fb91b85b-ba0b-437d-93dc-b3bc1f7d9144.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.95879"},"productCodes":["00254141000003","00260865000007","00270865000006","0254141000003","0260865000007","0270865000006","25414100000","254141000003","26086500000","260865000007","27086500000","270865000006"],"rank":{"salesPrice":75638,"salesQuantity":5449,"impressionCount":108}},{"id":"46022","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/ground_beef_beef_patties","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/ground_beef_beef_patties"],"price":{"ok":{"regPriceText":"$12.99 /lb","template":"RegPrice"}},"name":"Ground Beef Sirloin ","description":"Ground Beef Sirloin ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062570_550fb22d-7daa-4111-80eb-0b2c309dafd1.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.95433"},"productCodes":["00250025000008","0250025000008","25002500000","250025000008"],"rank":{"salesPrice":85300,"salesQuantity":5024,"impressionCount":65}},{"id":"152033","categories":["Product/meat_seafood","Product/poultry","Product/meat_seafood","Product/turkey","Product/poultry","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/poultry","Mobile/P+C/Product/turkey"],"price":{"ok":{"regPriceText":"$8.99","promoArea":{"promoText":"$8.49","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"Butterball , 98%/2% Ground Turkey Breast ","description":"Butterball extra lean ground turkey offers a convenient and delicious way to share a wholesome meal with someone you love. Swap Butterball 98/2 ground turkey in your recipes for a lean option that delivers exceptional tenderness and flavor, making it an excellent choice for those looking to keep their meals light. Made with no artificial ingredients, hormones, or steroids* and boasting 26 grams of protein per serving, this Butterball fresh all-natural** turkey lets you serve nutritious, guilt-free meals. Our high-quality lean turkey is perfect for creating savory dishes like turkey meatballs, tacos or even a turkey chili. Choose Butterball fresh ground turkey to elevate your everyday meals because, today, we turkey. no artificial ingredients. *Federal regulations prohibit the use of hormones and steroids in poultry. **All Natural means no artificial ingredients and minimally processed. ","brand":"BUTTERBALL MEATS","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/9151848_9d1cc3dd-f113-4ec9-81d2-eae047f60e7b.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.95398"},"productCodes":["00022655722502","00022655722519","00022655722717","0022655722502","0022655722519","0022655722717","02265572250","022655722502","02265572251","022655722519","02265572271","022655722717"],"rank":{"salesPrice":23301,"salesQuantity":2706,"impressionCount":81}},{"id":"137404","categories":["Product/meat_seafood","Product/pork","Product/meat_seafood","Product/","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/pork","Mobile/P+C/Product/"],"price":{"ok":{"regPriceText":"$3.99 /lb","promoArea":{"promoText":"$3.49 /lb","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"TSMC PORK LOIN ASSORTED CHOPS","description":"TSMC PORK LOIN ASSORTED CHOPS","brand":"THE SAVE MART COMPANY","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.95363"},"productCodes":["00251301000002","0251301000002","25130100000","251301000002"],"rank":{"salesPrice":1270,"salesQuantity":131,"impressionCount":8}},{"id":"667665","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$9.99 /lb","template":"RegPrice"}},"name":"Choice Beef Stew Meat Boneless ","description":"Choice Beef Stew Meat Boneless ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062701_65ecc80e-5460-428f-a436-e3d7e92c9008.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.95316"},"productCodes":["00250667000008","0250667000008","25066700000","250667000008"],"rank":{"salesPrice":78312,"salesQuantity":5963,"impressionCount":270}},{"id":"46305","categories":["Product/meat_seafood","Product/pork","Product/meat_seafood","Product/","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/pork","Mobile/P+C/Product/"],"price":{"ok":{"regPriceText":"$11.99 /lb","template":"RegPrice"}},"name":"Pork Loin New York Chops, Boneless ","description":"Pork Loin New York Chops, Boneless ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062772_59480e26-54f4-458b-8266-15a70397609f.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.94917"},"productCodes":["00251325000002","0251325000002","25132500000","251325000002"],"rank":{"salesPrice":36341,"salesQuantity":4560,"impressionCount":116}},{"id":"74154","categories":["Product/meat_seafood","Product/poultry","Product/meat_seafood","Product/","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/poultry","Mobile/P+C/Product/"],"price":{"ok":{"regPriceText":"$6.59 /lb","template":"RegPrice"}},"name":"Chicken, Al Pastor","description":"Randalls Chicken, Al Pastor ","brand":"RANDALLS","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.94834"},"productCodes":["00256754000005","0256754000005","25675400000","256754000005"],"rank":{"salesPrice":45725,"salesQuantity":2959,"impressionCount":5}},{"id":"735479","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$27.99 /lb","template":"RegPrice"}},"name":"Choice Beef Ribeye Steak Maxx Pack Choice Beef Ribeye Steak Maxx Pack","description":"Choice Beef Ribeye Steak Maxx Pack,, 3 lbs. minimum required Choice Beef Ribeye Steak Maxx Pack,3 lbs. minimum required","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062651_1283dff7-31c9-479a-beb5-2331a6744a3d.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.94829"},"productCodes":["00250523000005","02505230000007","0250523000005","25052300000","2505230000007","250523000005"],"rank":{"salesPrice":40408,"salesQuantity":1058,"impressionCount":410}},{"id":"46336","categories":["Product/meat_seafood","Product/pork","Product/meat_seafood","Product/","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/pork","Mobile/P+C/Product/"],"price":{"ok":{"regPriceText":"$6.49 /lb","promoArea":{"promoText":"$5.99 /lb","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"Catelli Brothers , American Half Semi-Boneless Lamb Leg Roast ","description":"Great on grill. All natural (no artificial ingredients, minimally processed). Hand Zabiha halal. A Tradition of Quality Veal & Lamb Products. ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062788_8acaa0e0-720f-481f-ba5a-87f65f8e2213.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.94494"},"productCodes":["00251519000009","0251519000009","25151900000","251519000009"],"rank":{"salesPrice":21303,"salesQuantity":1500,"impressionCount":286}},{"id":"46077","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$26.99 /lb","template":"RegPrice"}},"name":"New York Steak, Bone-In ","description":"New York Steak, Bone-In ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062621_a82b3307-c006-4a8e-9768-fef0ce86623f.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.93707"},"productCodes":["00250318000005","0250318000005","25031800000","250318000005"],"rank":{"salesPrice":48514,"salesQuantity":2990,"impressionCount":136}},{"id":"46176","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$29.99 /lb","template":"RegPrice"}},"name":"Choice Beef Rib Steak Boneless ","description":"Choice Beef Rib Steak Boneless ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062704_bb256a08-ad6d-4f43-866d-ddb8e811ec45.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.93696"},"productCodes":["00250671000001","0250671000001","25067100000","250671000001"],"rank":{"salesPrice":63752,"salesQuantity":2599,"impressionCount":352}},{"id":"604341","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/fish","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/fish"],"price":{"ok":{"regPriceText":"$13.99 /lb","promoArea":{"promoText":"$10.99 /lb","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"Fresh Salmon Fillet Portions Nor Cal Farm Raised ","description":"Fresh Salmon Fillet Portions Nor Cal Farm Raised ","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7063044_cb4fff32-1f6d-491d-b5eb-5232338bea8c.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.9359"},"productCodes":["00255832000005","0255832000005","25583200000","255832000005"],"rank":{"salesPrice":64021,"salesQuantity":6262,"impressionCount":175}},{"id":"46550","categories":["Product/meat_seafood","Product/poultry","Product/meat_seafood","Product/chicken","Product/poultry","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/poultry","Mobile/P+C/Product/chicken"],"price":{"ok":{"regPriceText":"$9.49 /lb","template":"RegPrice"}},"name":"Foster Farms, Simply Raised Free Range Boneless and Skinless Thin Sliced Chicken Breasts ","description":"Foster Farms, Simply Raised Free Range Boneless and Skinless Thin Sliced Chicken Breasts ","brand":"FOSTER FARMS MEATS","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062859_d5a99847-1bd1-4f6a-8194-f49a6d4679b5.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.93367"},"productCodes":["00254146000008","00260831000000","0254146000008","0260831000000","25414600000","254146000008","26083100000","260831000000"],"rank":{"salesPrice":49953,"salesQuantity":3161,"impressionCount":57}},{"id":"46192","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$16.99 /lb","promoArea":{"promoText":"$9.99 /lb","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"Choice Beef London Broil ","description":"Choice Beef London Broil ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062712_4e248aaa-3e18-4628-9567-ff33d8b8c1f1.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.93332"},"productCodes":["00250696000000","0250696000000","25069600000","250696000000"],"rank":{"salesPrice":41765,"salesQuantity":2276,"impressionCount":168}},{"id":"46549","categories":["Product/meat_seafood","Product/poultry","Product/meat_seafood","Product/chicken","Product/poultry","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/poultry","Mobile/P+C/Product/chicken"],"price":{"ok":{"regPriceText":"$8.99 /lb","template":"RegPrice"}},"name":"Foster Farms, Simply Raised Free Range Boneless Skinless Chicken Breast Tenders ","description":"Foster Farms, Simply Raised Free Range Boneless Skinless Chicken Breast Tenders ","brand":"FOSTER FARMS MEAT","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062857_ec7e9288-0b0e-4b1e-ad4f-cb5ee11930b3.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.93214"},"productCodes":["00254144000000","00260936000004","0254144000000","0260936000004","25414400000","254144000000","26093600000","260936000004"],"rank":{"salesPrice":45991,"salesQuantity":3939,"impressionCount":48}},{"id":"71145","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$11.79","promoArea":{"promoText":"$11.49","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"85%/15% Ground Beef","description":"85% lean. 15% fat. Simply put, it's good for you, the animals and our land. Our farmers and ranchers raise cattle the way generations before them raised cattle, producing nutritious and delicious American beef. Grass Run Farms cattle are free to roam and graze serene pastures and never given antibiotics or hormones. Taste the goodness of grass fed beef. Taste the difference of Grass Run Farms. 100% grass fed. No antibiotics or added hormones. Never given animal by-products. US inspected and passed by Department of Agriculture. www.grassrunfarms.com. Born, pasture raised & harvested in the USA. ","brand":"GRASS RUN FARMS","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7091402_fbb5a97d-9a8d-4017-9022-282ac6715680.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.93132"},"productCodes":["00076338965045","0076338965045","07633896504","076338965045"],"rank":{"salesPrice":53536,"salesQuantity":4782,"impressionCount":109}},{"id":"74276","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$12.99","template":"RegPrice"}},"name":"Organic Ground Beef, Grass Fed, 93-7 ","description":"Organic Ground Beef, Grass Fed, 93-7 ","brand":"DIAMOND VALLEY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/9266886_26cf2182-9a98-49bf-bbfd-cb91c0edcd12.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.93073"},"productCodes":["00083608198577","0083608198577","08360819857","083608198577"],"rank":{"salesPrice":83031,"salesQuantity":6598,"impressionCount":201}},{"id":"46531","categories":["Product/meat_seafood","Product/poultry","Product/meat_seafood","Product/chicken","Product/poultry","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/poultry","Mobile/P+C/Product/chicken"],"price":{"ok":{"regPriceText":"$4.29 /lb","template":"RegPrice"}},"name":"Foster Farms, Simply Raised Free Range Chicken Drumsticks ","description":"Foster Farms, Simply Raised Free Range Chicken Drumsticks ","brand":"FOSTER FARMS MEATS","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062852_7c3ba3ba-f59a-4e01-a786-3470caafb7a8.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.92944"},"productCodes":["00254110000003","00260808000002","00270808000001","0254110000003","0260808000002","0270808000001","25411000000","254110000003","25411043","26080800000","260808000002","27080800000","270808000001"],"rank":{"salesPrice":22024,"salesQuantity":2857,"impressionCount":25}},{"id":"963363","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$19.99 /lb","promoArea":{"promoText":"$14.99 /lb","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"Choice Tri Tip Steak, Beef Loin ","description":"Choice Tri Tip Steak, Beef Loin ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/9194223_96c5848d-8ff7-44ad-a297-3eafe9520a6d.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.92451"},"productCodes":["00250323000007","0250323000007","25032300000","250323000007"],"rank":{"salesPrice":39463,"salesQuantity":2365,"impressionCount":332}},{"id":"46306","categories":["Product/meat_seafood","Product/pork","Product/meat_seafood","Product/","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/pork","Mobile/P+C/Product/"],"price":{"ok":{"regPriceText":"$12.99 /lb","template":"RegPrice"}},"name":"Pork Loin New York Chops, Boneless, Thin Cut ","description":"Pork Loin New York Chops, Boneless, Thin Cut ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062773_5250696f-8433-4b02-8333-c9e60c76c7d3.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.92287"},"productCodes":["00251326000001","0251326000001","25132600000","251326000001"],"rank":{"salesPrice":29463,"salesQuantity":3097,"impressionCount":81}},{"id":"156942","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$13.99 /lb","template":"RegPrice"}},"name":"TSMC PASTURED RAISED BEEF FILET MIGNON STEAK","description":"TSMC PASTURED RAISED BEEF FILET MIGNON STEAK","brand":"THE SAVE MART COMPANY","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.92193"},"productCodes":["00250123000009","0250123000009","25012300000","250123000009"],"rank":{"salesPrice":65579,"salesQuantity":4833,"impressionCount":51}},{"id":"963843","categories":["Product/meat_seafood","Product/pork","Product/meat_seafood","Product/","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/pork","Mobile/P+C/Product/"],"price":{"ok":{"regPriceText":"$6.99","template":"RegPrice"}},"name":"NYSTYLE PORK FRESH GROUND","description":"NYSTYLE PORK FRESH GROUND","brand":"NEW YORK STYLE SAUSAGE","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.92158"},"productCodes":["00042629003253","0042629003253","04262900325","042629003253"],"rank":{"salesPrice":24025,"salesQuantity":3446,"impressionCount":22}},{"id":"46632","categories":["Product/meat_seafood","Product/poultry","Product/meat_seafood","Product/chicken","Product/poultry","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/poultry","Mobile/P+C/Product/chicken"],"price":{"ok":{"regPriceText":"$4.79 /lb","template":"RegPrice"}},"name":"Tyson Game Hen 2pk Fz","description":"Tyson Game Hen 2pk Fz","brand":"TYSON (MT)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062894_d3aff514-d235-49a4-8644-23631cb58627.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.92146"},"productCodes":["00254420000007","0254420000007","25442000000","254420000007","25442047"],"rank":{"salesPrice":15451,"salesQuantity":1031,"impressionCount":111}},{"id":"632081","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/prepared_marinated_beef","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/prepared_marinated_beef"],"price":{"ok":{"regPriceText":"$11.19 /lb","template":"RegPrice"}},"name":"Colorado Premium, Corned Beef Brisket Flats ","description":"Colorado Premium, Corned Beef Brisket Flats ","brand":"O'DONNELL'S","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7063095_e7a5edf3-97e5-423a-9d94-c7d7bc6adba0.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.91911"},"productCodes":["00257007000001","0257007000001","25700700000","257007000001"],"rank":{"salesPrice":13105,"salesQuantity":480,"impressionCount":22}},{"id":"736334","categories":["Product/meat_seafood","Product/poultry","Product/meat_seafood","Product/","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/poultry","Mobile/P+C/Product/"],"price":{"ok":{"regPriceText":"$6.49 /lb","template":"RegPrice"}},"name":"RNDLS P5 CITRUS CHICKEN BREAST PIECES C/R","description":"RNDLS P5 CITRUS CHICKEN BREAST PIECES C/R","brand":"RANDALLS","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.919"},"productCodes":["00251407000005","00272034000008","00272038000004","0251407000005","0272034000008","0272038000004","25140700000","251407000005","27203400000","272034000008","27203800000","272038000004"],"rank":{"salesPrice":29340,"salesQuantity":2108,"impressionCount":0}},{"id":"457116","categories":["Product/meat_seafood","Product/sausage_ham_bacon","Product/meat_seafood","Product/","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/sausage_ham_bacon","Mobile/P+C/Product/"],"price":{"ok":{"regPriceText":"$3.29","promoArea":{"promoText":"$1.99","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"Gluten Free Pork Chorizo","description":"Cacique , Gluten Free Pork Chorizo ","brand":"CACIQUE","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7059353_82030e55-4da3-4d15-8735-89c831df2d6b.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.91559"},"productCodes":["00074562005094","0074562005094","07456200509","074562005094"],"rank":{"salesPrice":10644,"salesQuantity":4288,"impressionCount":54}},{"id":"149993","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/fish","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/fish"],"price":{"ok":{"regPriceText":"$7.99","template":"RegPrice"}},"name":"Ahi Tuna Steaks, Previously Frozen ","description":"Ahi Tuna Steaks, Previously Frozen ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/8510759_8c79cb32-5ba9-4829-9e35-cc48e5a8afe3.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.91512"},"productCodes":["00255304000007","0255304000007","25530400000","255304000007"],"rank":{"salesPrice":23757,"salesQuantity":2102,"impressionCount":191}},{"id":"160003","categories":["Product/meat_seafood","Product/pork","Product/meat_seafood","Product/","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/pork","Mobile/P+C/Product/"],"price":{"ok":{"regPriceText":"$10","template":"RegPrice"}},"name":"Boneless Pork Loin Chops ","description":"Boneless Pork Loin Chops ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/9365958_6dbfe862-7f83-490d-a237-00da06b81293.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.91489"},"productCodes":["00251324000003","0251324000003","25132400000","251324000003"],"rank":{"salesPrice":52920,"salesQuantity":5292,"impressionCount":76}},{"id":"785518","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$8.49 /lb","promoArea":{"promoText":"$7.99 /lb","validityText":"Valid 04/14/26 - 12/30/26"},"template":"NewPrice"}},"name":"Traditional Beef Taco Meat ","description":"Beef Taco Meat Traditional ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062597_dea692a5-1295-4fdd-9c01-f1145f8a70aa.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.91406"},"productCodes":["00250200000007","0250200000007","25000027","25020000000","250200000007"],"rank":{"salesPrice":44672,"salesQuantity":4372,"impressionCount":44}},{"id":"200381","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/shrimp","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/shrimp"],"price":{"ok":{"regPriceText":"$31.99","promoArea":{"promoText":"$27.98","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"13/15 EZPL VANNAMEI WHITE IQF SHRIMP","description":"13/15 EZPL VANNAMEI WHITE IQF SHRIMP","brand":"ROYAL WHITE (SURAM TRADING)","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.91125"},"productCodes":["00081841790015","0081841790015","08184179001","081841790015"],"rank":{"salesPrice":34947,"salesQuantity":1256,"impressionCount":83}},{"id":"242940","categories":["Product/meat_seafood","Product/poultry","Product/meat_seafood","Product/turkey","Product/poultry","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/poultry","Mobile/P+C/Product/turkey"],"price":{"ok":{"regPriceText":"$8.49","template":"RegPrice"}},"name":"Jennie-O , Fresh 93%/7% Turkey Patties ","description":"Jennie-O , Fresh 93%/7% Turkey Patties ","brand":"JENNIE-O (MT)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7083847_1138fdc3-658e-4b52-ad84-49fb737960c5.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.90913"},"productCodes":["00039272000623","0039272000623","03927200062","039272000623"],"rank":{"salesPrice":38922,"salesQuantity":4610,"impressionCount":39}},{"id":"46381","categories":["Product/meat_seafood","Product/pork","Product/meat_seafood","Product/","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/pork","Mobile/P+C/Product/"],"price":{"ok":{"regPriceText":"$6.99 /lb","template":"RegPrice"}},"name":"Pork Chili Verde ","description":"Pork Chili Verde ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062813_04ab2fed-222c-40c0-8732-4a97a6636c7a.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.9062"},"productCodes":["00251729000004","0251729000004","25172900000","251729000004"],"rank":{"salesPrice":29559,"salesQuantity":2480,"impressionCount":4}},{"id":"46634","categories":["Product/meat_seafood","Product/poultry","Product/meat_seafood","Product/chicken","Product/poultry","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/poultry","Mobile/P+C/Product/chicken"],"price":{"ok":{"regPriceText":"$11.49 /lb","template":"RegPrice"}},"name":"Foster Farms, Organic Boneless Skinless Chicken Breast Fillets ","description":"Foster Farms, Organic Boneless Skinless Chicken Breast Fillets ","brand":"FOSTER FARMS MEATS","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7540470_4a23d22b-7a57-4345-911b-b1f8918e7b7d.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.90561"},"productCodes":["00203160000006","00254442000009","00260622000004","0203160000006","0254442000009","0260622000004","20316000000","203160000006","20316046","25444200000","254442000009","26062200000","260622000004"],"rank":{"salesPrice":47201,"salesQuantity":2432,"impressionCount":13}},{"id":"46124","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$18.99 /lb","promoArea":{"promoText":"$12.99 /lb","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"Choice Tri Tip Steak, Beef Loin, Maxx Pack ","description":"Choice Tri Tip Steak, Beef Loin, Maxx Pack ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/9194226_66d951fa-896d-4bb2-a6ea-9facb2e32a43.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.90467"},"productCodes":["00250535000000","0250535000000","25053500000","250535000000"],"rank":{"salesPrice":22145,"salesQuantity":814,"impressionCount":169}},{"id":"46175","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$28.99 /lb","template":"RegPrice"}},"name":"Choice Beef Rib Steak ","description":"Choice Beef Rib Steak ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062703_a71672b2-7209-4bac-a6dc-8c70be3c13cd.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.90432"},"productCodes":["00250670000002","0250670000002","25067000000","250670000002","25067042"],"rank":{"salesPrice":50224,"salesQuantity":1918,"impressionCount":268}},{"id":"47042","categories":["Product/meat_seafood","Product/pork","Product/meat_seafood","Product/ham_smoked_cuts","Product/pork","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/pork","Mobile/P+C/Product/ham_smoked_cuts"],"price":{"ok":{"regPriceText":"$5.99 /lb","template":"RegPrice"}},"name":"Smoked Pork Hocks ","description":"Smoked Pork Hocks ","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7063088_5e0c9559-faf1-4af7-8a38-5794430e8f40.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.90162"},"productCodes":["00256703000001","0256703000001","25670300000","256703000001"],"rank":{"salesPrice":15715,"salesQuantity":1177,"impressionCount":57}},{"id":"46276","categories":["Product/meat_seafood","Product/pork","Product/meat_seafood","Product/","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/pork","Mobile/P+C/Product/"],"price":{"ok":{"regPriceText":"$6.99 /lb","promoArea":{"promoText":"$6.49 /lb","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"Pork Blade Steak ","description":"Pork Blade Steak ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062758_cd5e9c89-9218-4b9f-b3e7-98b11c8f9e19.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.8934"},"productCodes":["00251103000002","0251103000002","25110300000","251103000002"],"rank":{"salesPrice":13231,"salesQuantity":1435,"impressionCount":99}},{"id":"83692","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$10.99","template":"RegPrice"}},"name":"Grass Run Farms , 80/20 Ground Beef ","description":"80% lean 20% fat. 100% grass fed. No antibiotics or added hormones. Never given animal by-products. Simply put, it's good for you, the animals and our land. Our farmers and ranchers raise cattle the way generations before them raised cattle, producing nutritious and delicious American beef. Grass Run Farms cattle are free to roam and graze serene pastures and never given antibiotics or hormones. Taste the goodness of grass fed beef. Taste the difference of Grass Run Farms. US inspected and passed by Department of Agriculture. www.grassrunfarms.com. Born, pasture raised & harvested in the USA. ","brand":"SWIFT (MT)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7091403_375732a8-1c7c-454f-a1d7-d2bc167d936d.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.89211"},"productCodes":["00076338965250","0076338965250","07633896525","076338965250"],"rank":{"salesPrice":35065,"salesQuantity":3290,"impressionCount":64}},{"id":"713158","categories":["Product/meat_seafood","Product/poultry","Product/meat_seafood","Product/chicken","Product/poultry","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/poultry","Mobile/P+C/Product/chicken"],"price":{"ok":{"regPriceText":"$10.99","template":"RegPrice"}},"name":"Just Bare , Hand-Trimmed Boneless Skinless ","description":"Just Bare , Hand-Trimmed Boneless Skinless ","brand":"JUST BARE CHICKEN","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7078001_5fcb96a9-d213-497d-b437-bea27a52614b.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.88929"},"productCodes":["00024105592055","00074960596675","0024105592055","0074960596675","02410559205","024105592055","07496059667","074960596675"],"rank":{"salesPrice":48406,"salesQuantity":4468,"impressionCount":81}},{"id":"457117","categories":["Product/meat_seafood","Product/sausage_ham_bacon","Product/meat_seafood","Product/","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/sausage_ham_bacon","Mobile/P+C/Product/"],"price":{"ok":{"regPriceText":"$3.29","promoArea":{"promoText":"$1.99","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"Gluten Free Beef Chorizo","description":"Cacique , Gluten Free Beef Chorizo ","brand":"CACIQUE","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7059352_404a86f9-705d-451b-b068-f6549927fd79.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.88718"},"productCodes":["00074562005087","0074562005087","07456200508","074562005087"],"rank":{"salesPrice":9201,"salesQuantity":3626,"impressionCount":100}},{"id":"209912","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$10","template":"RegPrice"}},"name":"TSMC PASTURE RAISED RIBEYE STEAK","description":"TSMC PASTURE RAISED RIBEYE STEAK","brand":"THE SAVE MART COMPANY","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.88471"},"productCodes":["00250019000007","0250019000007","25001900000","250019000007"],"rank":{"salesPrice":94706,"salesQuantity":9474,"impressionCount":47}},{"id":"46196","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$14.99 /lb","template":"RegPrice"}},"name":"Beef Chuck Shortribs ","description":"Beef Chuck Shortribs ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062714_10ac095b-b25a-4b9e-abfd-a3a76ba58a22.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.88248"},"productCodes":["00250700000002","0250700000002","25070000000","250700000002","25070032"],"rank":{"salesPrice":36111,"salesQuantity":1355,"impressionCount":93}},{"id":"713156","categories":["Product/meat_seafood","Product/poultry","Product/meat_seafood","Product/chicken","Product/poultry","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/poultry","Mobile/P+C/Product/chicken"],"price":{"ok":{"regPriceText":"$11.29","template":"RegPrice"}},"name":"Just Bare , Boneless Skinless ","description":"Just Bare , Boneless Skinless ","brand":"JUST BARE CHICKEN","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7078000_35ffa38c-2090-4d81-929f-08f186f543dc.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.87955"},"productCodes":["00024105584050","00024105591058","0024105584050","0024105591058","02410558405","024105584050","02410559105","024105591058"],"rank":{"salesPrice":37139,"salesQuantity":3332,"impressionCount":16}},{"id":"209565","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/shrimp","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/shrimp"],"price":{"ok":{"regPriceText":"$27.99","promoArea":{"promoText":"$12.98","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"BLUE SEA 16/20 RAW HEAD LESS SHELL SHRIMP","description":"BLUE SEA 16/20 RAW HEAD LESS SHELL SHRIMP","brand":"BLUE SEA PRODUCTS","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.87826"},"productCodes":["00876059001066","0876059001066","87605900106","876059001066"],"rank":{"salesPrice":225818,"salesQuantity":10680,"impressionCount":1206}},{"id":"686903","categories":["Product/meat_seafood","Product/poultry","Product/meat_seafood","Product/turkey","Product/poultry","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/poultry","Mobile/P+C/Product/turkey"],"price":{"ok":{"regPriceText":"$17.99","template":"RegPrice"}},"name":"Jennie-O , 85%/15% Fresh Ground Turkey ","description":"Jennie-O , 85%/15% Fresh Ground Turkey ","brand":"JENNIE-O (MT)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7055902_732109d1-c78e-4eec-8d0b-48c3906b9613.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.87509"},"productCodes":["00042222130271","0042222130271","04222213027","042222130271"],"rank":{"salesPrice":65197,"salesQuantity":3476,"impressionCount":54}},{"id":"194165","categories":["Product/meat_seafood","Product/poultry","Product/meat_seafood","Product/chicken","Product/poultry","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/poultry","Mobile/P+C/Product/chicken"],"price":{"ok":{"regPriceText":"$10","template":"RegPrice"}},"name":"Chicken Cutlets, Boneless, Skinless ","description":"Chicken Breast Cutlets, Boneless and Skinless ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/10011747_f8e9c9d0-9df3-4c81-a10d-c690d13aa913.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.8718"},"productCodes":["00254115000008","0254115000008","25411500000","254115000008"],"rank":{"salesPrice":50580,"salesQuantity":5058,"impressionCount":99}},{"id":"46195","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$18.99 /lb","template":"RegPrice"}},"name":"Choice Cube Steaks Small Pak, Mechanically Tenderized ","description":"Choice Cube Steaks Small Pak, Mechanically Tenderized ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7634126_8f84abbb-de92-46c8-bb5f-b56158c72253.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.861"},"productCodes":["00250699000007","0250699000007","25069900000","250699000007"],"rank":{"salesPrice":63008,"salesQuantity":2931,"impressionCount":53}},{"id":"194159","categories":["Product/meat_seafood","Product/poultry","Product/meat_seafood","Product/chicken","Product/poultry","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/poultry","Mobile/P+C/Product/chicken"],"price":{"ok":{"regPriceText":"$10","template":"RegPrice"}},"name":"Fresh Chicken Drums and Thighs Combo, Bone-In ","description":"Fresh Chicken Drums and Thighs Combo, Bone-In ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/10011746_db8555db-0c27-4e41-b596-ba977b55a77f.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.85853"},"productCodes":["00254114000009","0254114000009","25411400000","254114000009"],"rank":{"salesPrice":47440,"salesQuantity":4746,"impressionCount":55}},{"id":"46542","categories":["Product/meat_seafood","Product/poultry","Product/meat_seafood","Product/chicken","Product/poultry","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/poultry","Mobile/P+C/Product/chicken"],"price":{"ok":{"regPriceText":"$3.99 /lb","template":"RegPrice"}},"name":"Foster Farms, Fresh and Natural Cage Free Chicken Livers ","description":"Foster Farms, Fresh and Natural Cage Free Chicken Livers ","brand":"FOSTER FARMS MEATS","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7768595_3a56ccb1-c13b-464b-b9d3-9113676bb1f7.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.85126"},"productCodes":["00254125000005","00260813000004","0254125000005","0260813000004","25412500000","254125000005","26081300000","260813000004"],"rank":{"salesPrice":13544,"salesQuantity":2350,"impressionCount":56}},{"id":"76186","categories":["Product/meat_seafood","Product/poultry","Product/meat_seafood","Product/turkey","Product/poultry","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/poultry","Mobile/P+C/Product/turkey"],"price":{"ok":{"regPriceText":"$10.99","template":"RegPrice"}},"name":"Isernio''s , 94%/6% Ground Chicken ","description":"Isernio''s , 94%/6% Ground Chicken ","brand":"ISERNIO'S","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7092813_f3ef2ff2-0cf6-4789-95b3-0e07e9edbd45.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.8455"},"productCodes":["00084632441967","0084632441967","08463244196","084632441967"],"rank":{"salesPrice":27344,"salesQuantity":2530,"impressionCount":75}},{"id":"667667","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$10.99 /lb","promoArea":{"promoText":"$9.99 /lb","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"Choice Beef Stir Fry ","description":"Choice Beef Stir Fry ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062702_7807065f-6881-4bff-b934-dde6cacec281.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.84456"},"productCodes":["00250668000007","0250668000007","25066800000","250668000007"],"rank":{"salesPrice":32880,"salesQuantity":2775,"impressionCount":90}},{"id":"46173","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$20.99 /lb","promoArea":{"promoText":"$13.99 /lb","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"Choice Beef Chuck Eye Steak ","description":"Choice Beef Chuck Eye Steak ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062700_4dff7f1a-6d28-4436-9404-0ad431d2613b.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.84116"},"productCodes":["00250663000002","0250663000002","25066300000","250663000002"],"rank":{"salesPrice":25364,"salesQuantity":1480,"impressionCount":288}},{"id":"210231","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$11.99 /lb","template":"RegPrice"}},"name":"PASTURE RAISED BONELESS NY STEAK THIN CUT P5","description":"PASTURE RAISED BONELESS NY STEAK THIN CUT P5","brand":"THE SAVE MART COMPANY","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.83705"},"productCodes":["00250879000001","0250879000001","25087900000","250879000001"],"rank":{"salesPrice":83160,"salesQuantity":5343,"impressionCount":32}},{"id":"733445","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$30.99 /lb","template":"RegPrice"}},"name":"Beef Ribeye Steaks Thin Cut Boneless ","description":"Beef Ribeye Steaks Thin Cut Boneless ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/9518929_365c552f-eebd-482b-827c-d88f02037c7b.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.82308"},"productCodes":["00250723000003","0250723000003","25072300000","250723000003"],"rank":{"salesPrice":41992,"salesQuantity":1735,"impressionCount":173}},{"id":"173085","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/fish","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/fish"],"price":{"ok":{"regPriceText":"$14.99 /lb","promoArea":{"promoText":"$11.99 /lb","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"Fresh Atlantic Salmon Fillet ","description":"Fresh Atlantic Salmon Fillet ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/9322284_6df2b058-50e4-46cb-adb1-27e6cc9cdcda.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.82003"},"productCodes":["00255820000000","0255820000000","25582000000","255820000000","25582040"],"rank":{"salesPrice":23677,"salesQuantity":1631,"impressionCount":85}},{"id":"46310","categories":["Product/meat_seafood","Product/pork","Product/meat_seafood","Product/","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/pork","Mobile/P+C/Product/"],"price":{"ok":{"regPriceText":"$7.99 /lb","template":"RegPrice"}},"name":"Sirloin Chop, Boneless ","description":"Sirloin Chop, Boneless ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062777_70f4aeea-11ac-4353-b42b-d93bb67c2f71.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.79444"},"productCodes":["00251350000008","0251350000008","25135000000","251350000008","25135048"],"rank":{"salesPrice":17057,"salesQuantity":1557,"impressionCount":37}},{"id":"194175","categories":["Product/meat_seafood","Product/poultry","Product/meat_seafood","Product/chicken","Product/poultry","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/poultry","Mobile/P+C/Product/chicken"],"price":{"ok":{"regPriceText":"$10","template":"RegPrice"}},"name":"Taco Meat, Diced Chicken Breast ","description":"Chicken Taco Meat, Boneless Skinless Breast ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/10011749_5e4e5f8e-df65-4b40-ac3e-43a9b2a78841.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.79021"},"productCodes":["00254117000006","0254117000006","25411700000","254117000006"],"rank":{"salesPrice":36448,"salesQuantity":3646,"impressionCount":39}},{"id":"191434","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$11.99 /lb","template":"RegPrice"}},"name":"Pasture Raised Boneless New York Steak ","description":"Pasture Raised Boneless New York Steak ","brand":"THE SAVE MART COMPANY","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.78587"},"productCodes":["00250325000005","0250325000005","25032500000","250325000005"],"rank":{"salesPrice":66169,"salesQuantity":4665,"impressionCount":104}},{"id":"427319","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/crab_lobster","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/crab_lobster"],"price":{"ok":{"regPriceText":"$5.99","promoArea":{"promoText":"$5.49","validityText":"Valid 05/04/26 - 05/24/26"},"template":"NewPrice"}},"name":"Flake Style Imitation Crab","description":"Fully cooked. Ready to eat. MSC: Certified sustainable seafood. msc.org. Certified Sustainable Seafood. MSC. Www.msc.org. The Alaska Pollock and Pacific Whiting in this product comes from a fishery that has been independently certified to the MSC's standard for a well-managed and sustainable fishery. www.msc.org. ","brand":"TRANSOCEAN","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7065719_f1081715-dc64-47e3-aed3-3b5ff5a1a874.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.76814"},"productCodes":["00715166086071","0715166086071","71516608607","715166086071"],"rank":{"salesPrice":11430,"salesQuantity":1990,"impressionCount":122}},{"id":"202771","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/ground_beef_beef_patties","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/ground_beef_beef_patties"],"price":{"ok":{"regPriceText":"$10","template":"RegPrice"}},"name":"WM 80 PERCENT PATTY FMLY 8 FOR $10","description":"WM 80 PERCENT PATTY FMLY 8 FOR $10","brand":"WILMAR BEEF","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.76602"},"productCodes":["00050233000209","0050233000209","05023300020","050233000209"],"rank":{"salesPrice":29824,"salesQuantity":2996,"impressionCount":25}},{"id":"36072","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_poultry","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_poultry"],"price":{"ok":{"regPriceText":"$13.99","promoArea":{"promoText":"$11.99","validityText":"Valid 03/29/26 - 06/27/26"},"template":"NewPrice"}},"name":"Foster Farms , Crispy Strips, Classic ","description":"Foster Farms , Crispy Strips, Classic ","brand":"FOSTER FARMS MEATS","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7090907_a200263a-8da2-45d6-b652-b510e1fcd89b.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.76239"},"productCodes":["00075278909744","0075278909744","07527890974","075278909744"],"rank":{"salesPrice":24907,"salesQuantity":2080,"impressionCount":29}},{"id":"733383","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$18.99 /lb","promoArea":{"promoText":"$10.99 /lb","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"Choice Beef Chuck Steak, Bnls, Thin ","description":"Choice Beef Chuck Steak, Bnls, Thin ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062682_59af80bc-c2d0-488a-ad7d-8c65286a5107.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.75769"},"productCodes":["00250625000002","0250625000002","25062500000","250625000002"],"rank":{"salesPrice":20782,"salesQuantity":1305,"impressionCount":109}},{"id":"46541","categories":["Product/meat_seafood","Product/poultry","Product/meat_seafood","Product/chicken","Product/poultry","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/poultry","Mobile/P+C/Product/chicken"],"price":{"ok":{"regPriceText":"$4.49 /lb","template":"RegPrice"}},"name":"Foster Farms, Fresh and Natural Chicken Gizzards and Hearts ","description":"Foster Farms, Fresh and Natural Chicken Gizzards and Hearts ","brand":"FOSTER FARMS MEATS","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7768594_58aa4c1a-b8b0-4dfe-8f74-b590e8b7b0f8.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.74701"},"productCodes":["00205400000005","00254124000006","00260812000005","0205400000005","0254124000006","0260812000005","20540000000","205400000005","20540035","25412400000","254124000006","26081200000","260812000005"],"rank":{"salesPrice":8918,"salesQuantity":1399,"impressionCount":9}},{"id":"46074","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$19.99 /lb","promoArea":{"promoText":"$13.99 /lb","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"Tri Tip, Beef Loin, Choice ","description":"Tri Tip, Beef Loin, Choice ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7322425_8ac1662f-d08e-4bcd-8c15-327c23c59255.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.71719"},"productCodes":["00250315000008","0250315000008","25031500000","250315000008"],"rank":{"salesPrice":11353,"salesQuantity":398,"impressionCount":13}},{"id":"46194","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$17.99 /lb","promoArea":{"promoText":"$11.99 /lb","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"Choice Beef Top Round Steak ","description":"Choice Beef Top Round Steak ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062713_9b149109-5bcc-417d-beec-26cf233a17a2.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.71273"},"productCodes":["00250698000008","0250698000008","25069800000","250698000008"],"rank":{"salesPrice":15658,"salesQuantity":1082,"impressionCount":41}},{"id":"281328","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/crab_lobster","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/crab_lobster"],"price":{"ok":{"regPriceText":"$3.99","template":"RegPrice"}},"name":"Flake Style Imitation Crab","description":"Fully cooked. Pasteurized. Ready-to-eat. Crab Classic is healthy, great-tasting seafood. The Heart-Check mark does not apply to recipe ideas or serving suggestion. MSC: Certified sustainable seafood. msc.org. This seafood has met the MSC's global standard for sustainability. www.msc.org. Genuine Alaska Pollock. www.alaskapollock.org. ","brand":"TRANSOCEAN","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7065716_3b96f5a9-fff5-44e6-92f2-61b02ff9a45b.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.68878"},"productCodes":["00715166044170","0715166044170","71516604417","715166044170"],"rank":{"salesPrice":5518,"salesQuantity":1484,"impressionCount":64}},{"id":"46309","categories":["Product/meat_seafood","Product/pork","Product/meat_seafood","Product/","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/pork","Mobile/P+C/Product/"],"price":{"ok":{"regPriceText":"$11.99 /lb","template":"RegPrice"}},"name":"Pork Loin Backribs Bnls . ","description":"Pork Loin Backribs Bnls . ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062776_61fc6a6f-ed4d-46a3-83dd-23a03e901c95.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.68326"},"productCodes":["00251341000000","0251341000000","25134100000","251341000000"],"rank":{"salesPrice":8031,"salesQuantity":937,"impressionCount":56}},{"id":"281329","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/crab_lobster","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/crab_lobster"],"price":{"ok":{"regPriceText":"$3.99","template":"RegPrice"}},"name":"Crab Classic Leg Style Imitation Crab","description":"TransOcean , Crab Classic Leg Style Imitation Crab ","brand":"TRANSOCEAN","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7065717_7cd455a9-2002-4b42-ba1c-c966d7fe6af3.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.67798"},"productCodes":["00715166044187","0715166044187","71516604418","715166044187"],"rank":{"salesPrice":5462,"salesQuantity":1464,"impressionCount":52}},{"id":"47049","categories":["Product/meat_seafood","Product/poultry","Product/meat_seafood","Product/turkey","Product/poultry","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/poultry","Mobile/P+C/Product/turkey"],"price":{"ok":{"regPriceText":"$7.99 /lb","template":"RegPrice"}},"name":"SMOKED TURKEY DRUMSTICKS C/R","description":"SMOKED TURKEY DRUMSTICKS C/R","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.67774"},"productCodes":["00017520800027","0017520800027","00256721000007","00290134000001","01752080002","017520800027","0256721000007","0290134000001","25672100000","256721000007","29013400000","290134000001"],"rank":{"salesPrice":10280,"salesQuantity":606,"impressionCount":24}},{"id":"46725","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/fish","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/fish"],"price":{"ok":{"regPriceText":"$7.99 /lb","template":"RegPrice"}},"name":"Dover Sole Fillet, Fresh, Wild ","description":"Dover Sole Fillet, Fresh, Wild ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062953_c5575823-f0ef-4536-baea-0efab17b2dca.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.67739"},"productCodes":["00255007000007","0255007000007","25500700000","255007000007"],"rank":{"salesPrice":14472,"salesQuantity":1837,"impressionCount":72}},{"id":"203328","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/clams_oysters_scallops","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/clams_oysters_scallops"],"price":{"ok":{"regPriceText":"$1.49","template":"RegPrice"}},"name":"FAMRED PACIFIC BBQ OYSTERS IN THE SHELL","description":"FAMRED PACIFIC BBQ OYSTERS IN THE SHELL","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.66612"},"productCodes":["00252260000003","0252260000003","25226000000","252260000003","25226043"],"rank":{"salesPrice":21200,"salesQuantity":1990,"impressionCount":131}},{"id":"86315","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/shrimp","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/shrimp"],"price":{"ok":{"regPriceText":"$9.99","template":"RegPrice"}},"name":"WILD COLDWATER SALAD SHRIMP","description":"WILD COLDWATER SALAD SHRIMP","brand":"BORNSTEIN SEAFOODS (BORNSTEIN SEAFOODS, INC.)","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.666"},"productCodes":["00614133200246","0614133200246","61413320024","614133200246"],"rank":{"salesPrice":12547,"salesQuantity":1256,"impressionCount":64}},{"id":"46185","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$32.99 /lb","template":"RegPrice"}},"name":"Choice New York Steak ","description":"Choice New York Steak ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062710_fdd0b85b-db2b-4235-a31a-7fec10372b47.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.65168"},"productCodes":["00250685000004","0250685000004","25068500000","250685000004"],"rank":{"salesPrice":27412,"salesQuantity":1696,"impressionCount":105}},{"id":"36068","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_poultry","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_poultry"],"price":{"ok":{"regPriceText":"$11.99","promoArea":{"promoText":"$8.99","validityText":"Valid 03/26/26 - 06/25/26"},"template":"NewPrice"}},"name":"Foster Farms , Breast Nuggets, Classic, Value Pack ","description":"Foster Farms , Breast Nuggets, Classic, Value Pack ","brand":"FOSTER FARMS MEATS","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7090906_1b3d951e-7c4c-4191-b7b5-3d3646aa9044.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.64651"},"productCodes":["00075278909690","0075278909690","07527890969","075278909690"],"rank":{"salesPrice":16619,"salesQuantity":1828,"impressionCount":25}},{"id":"173288","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/shrimp","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/shrimp"],"price":{"ok":{"regPriceText":"$6.99","template":"RegPrice"}},"name":"SHRIMP RING CIS 51/60 WITH SAUCE 10 OZ","description":"SHRIMP RING CIS 51/60 WITH SAUCE 10 OZ","brand":"SHRIMP KING","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.63888"},"productCodes":["00850008378287","0850008378287","85000837828","850008378287"],"rank":{"salesPrice":2628,"salesQuantity":376,"impressionCount":121}},{"id":"733430","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$18.99 /lb","promoArea":{"promoText":"$12.99 /lb","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"Beef Top Round Steak Thin, Choice Sm Pak ","description":"Beef Top Round Steak Thin, Choice Sm Pak ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062705_a350bfc5-f819-492c-994d-16341aef8a7a.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.62198"},"productCodes":["00250672000000","0250672000000","25067200000","250672000000"],"rank":{"salesPrice":13337,"salesQuantity":903,"impressionCount":17}},{"id":"85512","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$17.99","template":"RegPrice"}},"name":"Tilapia Fillets ","description":"Tilapia Fillets ","brand":"GREAT AMERICAN","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/11454441_86271d28-ad83-4780-9f0a-42d8126e4d33.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.62033"},"productCodes":["00829944092144","0829944092144","82994409214","829944092144"],"rank":{"salesPrice":11809,"salesQuantity":622,"impressionCount":107}},{"id":"83713","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/fish","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/fish"],"price":{"ok":{"regPriceText":"$5.99","template":"RegPrice"}},"name":"Green Valley , Lactose Free 3 Cheese Mexican Shredded Cheese ","description":"Green Valley , Lactose Free 3 Cheese Mexican Shredded Cheese ","brand":"GREEN VALLEY CREAMERY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7092218_f99f8227-fb11-4fb5-9f23-ad2f7cfcff9e.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.61564"},"productCodes":["00081312851023","0081312851023","08131285102","081312851023"],"rank":{"salesPrice":6876,"salesQuantity":1082,"impressionCount":17}},{"id":"160001","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/ground_beef_beef_patties","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/ground_beef_beef_patties"],"price":{"ok":{"regPriceText":"$10.99","template":"RegPrice"}},"name":"The Signature Blend 75%/25% Ground Beef","description":"Schweid & Sons , The Signature Blend 75%/25% Ground Beef ","brand":"SCHWEID & SONS","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/9114266_2c827b63-4052-450d-94c2-5189b34786b1.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.61376"},"productCodes":["00023964616018","0023964616018","02396461601","023964616018"],"rank":{"salesPrice":18197,"salesQuantity":1656,"impressionCount":31}},{"id":"773066","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/shrimp","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/shrimp"],"price":{"ok":{"regPriceText":"$35.99","promoArea":{"promoText":"$31.98","validityText":"Valid 05/04/26 - 05/05/26"},"template":"NewPrice"}},"name":"Cooked Shrimp, Tail on 16/20","description":"Master Catch, Cooked Shrimp, Tail on 16/20 ","brand":"MASTER CATCH","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7061927_9b8c2f18-65eb-43ac-b433-6a4c83d3b8ef.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.61153"},"productCodes":["00070041120166","00070041820165","00098487009517","0070041120166","0070041820165","00731149651968","00823237041895","00843237041695","0098487009517","00984870095178","07004112016","070041120166","07004182016","070041820165","0731149651968","0823237041895","0843237041695","09848700951","098487009517","0984870095178","73114965196","731149651968","82323704189","823237041895","84323704169","843237041695","98487009517","984870095178"],"rank":{"salesPrice":32725,"salesQuantity":900,"impressionCount":274}},{"id":"201269","categories":["Product/meat_seafood","Product/poultry","Product/meat_seafood","Product/turkey","Product/poultry","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/poultry","Mobile/P+C/Product/turkey"],"price":{"ok":{"regPriceText":"$4.99","template":"RegPrice"}},"name":"Honeysuckle White, 85/15 Ground Turkey ","description":"85% lean 15% fat. Per Serving: 240 calories; 5 g sat fat (25% DV); 115 mg sodium (5% DV). 21 g protein. This product contains 17 g fat, compared to 33.9 g of fat in regular ground beef, per 4 oz raw serving. Gluten free. Featured farm. - G&J Anderson. Raised by independent family farmers. No growth-promoting antibiotics. Antibiotics responsibly used only when needed for treatment or prevention of illness. No added hormones (Turkeys raised with no added hormones or steroids) or steroids (Federal regulations prohibit the use of hormones or steroids in poultry). Our turkeys are raised by independent family farmers that are trained on animal handling practices. No preservatives. Inspected for wholesomeness by U.S. Department of Agriculture. honeysucklewhite.com. See honeysucklewhite.com for more information about how the turkeys are raised and the certification of our farming program. Attn: Honeysuckle White Brand P.O. Box 2519hita, KS 67201-2519 1-800-532-5756 M-F 8:00 a.m. - 5:00 p.m. CST, honeysucklewhite.com. Product of USA. ","brand":"HONEY SUCKLE WHITE POULTRY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/11127810_62e49405-d38f-4429-a791-0b92eedb2e2a.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.59075"},"productCodes":["00038057500914","0038057500914","03805750091","038057500914"],"rank":{"salesPrice":2254,"salesQuantity":386,"impressionCount":21}},{"id":"46178","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$29.99 /lb","template":"RegPrice"}},"name":"Rib Eye Steaks Bone-In, Thin Choice ","description":"Rib Eye Steaks Bone-In, Thin Choice ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7615489_fef3a19d-685c-450b-a36c-bd446c41a6e4.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.59028"},"productCodes":["00250678000004","0250678000004","25067800000","250678000004"],"rank":{"salesPrice":12206,"salesQuantity":457,"impressionCount":75}},{"id":"147034","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$12.99","template":"RegPrice"}},"name":"Gorton''s , Beer Battered Fish Fillets ","description":"Gorton''s , Beer Battered Fish Fillets ","brand":"GORTON'S FISH (SEAF)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7086097_9843deb0-c99a-4751-8e02-9816ae337581.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.58746"},"productCodes":["00044400153508","0044400153508","04440015350","044400153508"],"rank":{"salesPrice":6027,"salesQuantity":474,"impressionCount":46}},{"id":"935921","categories":["Product/meat_seafood","Product/pork","Product/meat_seafood","Product/ham_smoked_cuts","Product/pork","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/pork","Mobile/P+C/Product/ham_smoked_cuts"],"price":{"ok":{"regPriceText":"$5.79 /lb","template":"RegPrice"}},"name":"Cook's, Bone-In Ham, Brown Sugar ","description":"Cook's, Bone-In Ham, Brown Sugar ","brand":"COOKS HAM","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/9981470_7b8f2c5e-16d8-486d-bd0b-62ab6340fe42.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.57373"},"productCodes":["00256504000002","0256504000002","25650400000","256504000002"],"rank":{"salesPrice":6718,"salesQuantity":831,"impressionCount":17}},{"id":"86505","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/ground_beef_beef_patties","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/ground_beef_beef_patties"],"price":{"ok":{"regPriceText":"$11.89","template":"RegPrice"}},"name":"The Butcher''s Blend 80%/20% Ground Beef Burgers","description":"Schweid & Sons , The Butcher''s Blend 80%/20% Ground Beef Burgers ","brand":"SCHWEID & SONS","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7077817_1121cff3-ca85-4ab9-9c48-25e78178ae75.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.56786"},"productCodes":["00023964745053","00023964765051","0023964745053","0023964765051","02396474505","023964745053","02396476505","023964765051"],"rank":{"salesPrice":19543,"salesQuantity":1644,"impressionCount":47}},{"id":"935920","categories":["Product/meat_seafood","Product/pork","Product/meat_seafood","Product/ham_smoked_cuts","Product/pork","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/pork","Mobile/P+C/Product/ham_smoked_cuts"],"price":{"ok":{"regPriceText":"$5.79 /lb","template":"RegPrice"}},"name":"COOKS BONE-IN HAM STEAK PINEAPPLE","description":"COOKS BONE-IN HAM STEAK PINEAPPLE","brand":"COOKS HAM","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.56246"},"productCodes":["00256503000003","0256503000003","25650300000","256503000003"],"rank":{"salesPrice":5116,"salesQuantity":605,"impressionCount":4}},{"id":"20505","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$11.99","template":"RegPrice"}},"name":"Gorton''s , Crispy Battered Fish Portions Value Pack ","description":"Gorton''s , Crispy Battered Fish Portions Value Pack ","brand":"GORTON'S FISH (SEAF)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7086090_934c34ef-f53b-4254-9355-b670d68aac87.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.56093"},"productCodes":["00044400112505","0044400112505","04440011250","044400112505"],"rank":{"salesPrice":6306,"salesQuantity":526,"impressionCount":18}},{"id":"46431","categories":["Product/meat_seafood","Product/lamb_veal","Product/meat_seafood","Product/","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/lamb_veal","Mobile/P+C/Product/"],"price":{"ok":{"regPriceText":"$12.99 /lb","template":"RegPrice"}},"name":"Lamb Blade Chops","description":"Lamb Blade Chops","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062836_3515d52d-839b-4c94-af4e-c5aab9260f60.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.5486"},"productCodes":["00252101000001","0252101000001","25210100000","252101000001"],"rank":{"salesPrice":12166,"salesQuantity":760,"impressionCount":19}},{"id":"20522","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$12.99","template":"RegPrice"}},"name":"Gorton''s , Whole Crispy Battered Fish Fillets ","description":"Gorton''s , Whole Crispy Battered Fish Fillets ","brand":"GORTON'S FISH (SEAF)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7086104_0b9eb40e-8047-44f8-8a86-b17707a6dd86.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.54567"},"productCodes":["00044400157506","0044400157506","04440015750","044400157506"],"rank":{"salesPrice":6017,"salesQuantity":480,"impressionCount":18}},{"id":"62459","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_poultry","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_poultry"],"price":{"ok":{"regPriceText":"$14.99","template":"RegPrice"}},"name":"Tyson , Crispy Chicken Breast Strips ","description":"Tyson , Crispy Chicken Breast Strips ","brand":"TYSON (MT)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7077771_ee36fe50-f917-4505-93c2-1590081f8b79.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.54062"},"productCodes":["00023700014108","00023700038036","0023700014108","0023700038036","02370001410","023700014108","02370003803","023700038036"],"rank":{"salesPrice":11411,"salesQuantity":888,"impressionCount":40}},{"id":"601655","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_poultry","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_poultry"],"price":{"ok":{"regPriceText":"$13.99","promoArea":{"promoText":"$11.99","validityText":"Valid 03/29/26 - 06/27/26"},"template":"NewPrice"}},"name":"Foster Farms , Popcorn Chicken, Classic ","description":"Foster Farms , Popcorn Chicken, Classic ","brand":"FOSTER FARMS MEATS","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7090924_95bd72ad-2943-43fe-a81c-45dade1e0853.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.53005"},"productCodes":["00075278995471","0075278995471","07527899547","075278995471"],"rank":{"salesPrice":9502,"salesQuantity":790,"impressionCount":24}},{"id":"319845","categories":["Product/meat_seafood","Product/poultry","Product/meat_seafood","Product/chicken","Product/poultry","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/poultry","Mobile/P+C/Product/chicken"],"price":{"ok":{"regPriceText":"$5.99 /lb","promoArea":{"promoText":"$3.99 /lb","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"Chicken Breast, Boneless and Skinless ","description":"Chicken Breast, Boneless and Skinless ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/10123137_96a474a1-89d9-4336-8f6f-6677b1d42726.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.52865"},"productCodes":["00048000167071","00254270000004","00280961000008","00480000167079","0048000167071","0254270000004","0280961000008","0480000167079","04800016707","048000167071","25427000000","254270000004","25427044","28096100000","280961000008","48000016707","480000167079"],"rank":{"salesPrice":3837,"salesQuantity":549,"impressionCount":14}},{"id":"178942","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/"],"price":{"ok":{"regPriceText":"$7.99","template":"RegPrice"}},"name":"Beef Shaved Steak","description":"22 g protein per serving. Gluten free. Since 1914. Family owned. Quality foods. U.S. inspected and passed by Department of Agriculture. oldneighborhoodfoods.com. ","brand":"DEMAKES BROS.","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/9933231_81fcbb91-4ca7-40de-bc2f-fbd629520590.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.52336"},"productCodes":["00052294008873","0052294008873","05229400887","052294008873"],"rank":{"salesPrice":7974,"salesQuantity":998,"impressionCount":67}},{"id":"20503","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$11.99","template":"RegPrice"}},"name":"Gorton''s , Fish Sticks Value Pack ","description":"Gorton''s , Fish Sticks Value Pack ","brand":"GORTON'S FISH (SEAF)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7086088_2e6932e2-32df-4e9e-972c-d038025275f5.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.51925"},"productCodes":["00044400102704","0044400102704","04440010270","044400102704"],"rank":{"salesPrice":6844,"salesQuantity":572,"impressionCount":19}},{"id":"173088","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/fish","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/fish"],"price":{"ok":{"regPriceText":"$14.99 /lb","promoArea":{"promoText":"$11.99 /lb","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"Fresh Atlantic Salmon Fillet ","description":"Fresh Atlantic Salmon Fillet ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/9292425_e4c97280-233c-4e4a-b818-3d0ec06ab416.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.51831"},"productCodes":["00255821000009","0255821000009","25582100000","255821000009"],"rank":{"salesPrice":11035,"salesQuantity":1077,"impressionCount":26}},{"id":"55747","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/crab_lobster","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/crab_lobster"],"price":{"ok":{"regPriceText":"$3.99","template":"RegPrice"}},"name":"Chunk Style Crab Classic Imitation Crab","description":"TransOcean , Chunk Style Crab Classic Imitation Crab ","brand":"TRANSOCEAN","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7065720_a786c532-ec28-40f1-a879-71038ee7b8fa.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.51573"},"productCodes":["00715166104010","0715166104010","71516610401","715166104010"],"rank":{"salesPrice":3130,"salesQuantity":858,"impressionCount":5}},{"id":"18868","categories":["Product/meat_seafood","Product/sausage_ham_bacon","Product/meat_seafood","Product/","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/sausage_ham_bacon","Mobile/P+C/Product/"],"price":{"ok":{"regPriceText":"$5.99","template":"RegPrice"}},"name":"Cured Longaniza","description":"El Mexicano , Cured Longaniza ","brand":"EL MEXICANO","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7056105_d4def335-cbd7-45c6-9a0a-ab57b793b448.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.5135"},"productCodes":["00042743180137","0042743180137","04274318013","042743180137"],"rank":{"salesPrice":5402,"salesQuantity":902,"impressionCount":5}},{"id":"77607","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_poultry","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_poultry"],"price":{"ok":{"regPriceText":"$16.99","promoArea":{"promoText":"$14.49","validityText":"Valid 03/29/26 - 06/28/26"},"template":"NewPrice"}},"name":"Just Bare , Lightly Breaded Original Chicken Breast Strips ","description":"Just Bare , Lightly Breaded Original Chicken Breast Strips ","brand":"JUST BARE CHICKEN","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7059959_09afd2e5-2eaa-44ed-8b79-2bdf03c313c7.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.50646"},"productCodes":["00077013615590","0077013615590","07701361559","077013615590"],"rank":{"salesPrice":13059,"salesQuantity":894,"impressionCount":47}},{"id":"236644","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_poultry","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_poultry"],"price":{"ok":{"regPriceText":"$13.49","template":"RegPrice"}},"name":"Tyson , Dino Nuggets ","description":"Tyson , Dino Nuggets ","brand":"TYSON (MT)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7077775_38f7b107-e1fb-40a1-b152-9fd753d9492b.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.49061"},"productCodes":["00023700014528","00023700041890","0023700014528","0023700041890","02370001452","023700014528","02370004189","023700041890"],"rank":{"salesPrice":9603,"salesQuantity":862,"impressionCount":11}},{"id":"859639","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_poultry","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_poultry"],"price":{"ok":{"regPriceText":"$15.99","promoArea":{"promoText":"$11.99","validityText":"Valid 03/29/26 - 06/27/26"},"template":"NewPrice"}},"name":"Foster Farms , Chicken Wings, Hot ''N Spicy ","description":"Foster Farms , Chicken Wings, Hot ''N Spicy ","brand":"FOSTER FARMS MEATS","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7090921_0273dd95-23a8-44d7-a398-946cae50720f.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.48873"},"productCodes":["00075278994962","0075278994962","07527899496","075278994962"],"rank":{"salesPrice":8978,"salesQuantity":742,"impressionCount":91}},{"id":"20517","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$12.99","template":"RegPrice"}},"name":"Gorton''s , Crunchy Breaded Fish Fillets ","description":"Gorton''s , Crunchy Breaded Fish Fillets ","brand":"GORTON'S FISH (SEAF)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7086099_1006019e-07d5-467b-a02e-47e52ae3b8c2.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.48826"},"productCodes":["00044400154505","0044400154505","04440015450","044400154505"],"rank":{"salesPrice":4632,"salesQuantity":364,"impressionCount":16}},{"id":"88995","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/crab_lobster","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/crab_lobster"],"price":{"ok":{"regPriceText":"$19.99","template":"RegPrice"}},"name":"HRBRS PASTEURIZED CRAB MEAT CLAW MEAT","description":"HRBRS PASTEURIZED CRAB MEAT CLAW MEAT","brand":"HARBOR SEAFOOD","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.48368"},"productCodes":["00049029700003","0049029700003","04902970000","049029700003"],"rank":{"salesPrice":13093,"salesQuantity":614,"impressionCount":72}},{"id":"103218","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/"],"price":{"ok":{"regPriceText":"$11.99","template":"RegPrice"}},"name":"Swift , Beef Marrow Bones ","description":"Swift meats. Chosen by families since 1855. Delicious. Every time. For more than 160 years, Swift meats have been at the center of your favorite home-cooked meals. We're committed to bringing high-quality, delicious meats for this generation and the next. ","brand":"SWIFT (MT)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7614222_5eb41a1d-da12-4c73-b0f9-cc7b1d66e8ac.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.4818"},"productCodes":["00076338997046","0076338997046","07633899704","076338997046"],"rank":{"salesPrice":9208,"salesQuantity":770,"impressionCount":53}},{"id":"83712","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/fish","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/fish"],"price":{"ok":{"regPriceText":"$5.99","template":"RegPrice"}},"name":"Green Valley , Low-Moisture Part-Skim Lactose Free Mozzarella Shredded Cheese ","description":"Green Valley , Low-Moisture Part-Skim Lactose Free Mozzarella Shredded Cheese ","brand":"GREEN VALLEY CREAMERY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7092217_006ce906-4fe9-4aad-b3ef-7fda3cab0137.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.4818"},"productCodes":["00081312851016","0081312851016","08131285101","081312851016"],"rank":{"salesPrice":4352,"salesQuantity":682,"impressionCount":6}},{"id":"77606","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_poultry","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_poultry"],"price":{"ok":{"regPriceText":"$16.99","promoArea":{"promoText":"$14.49","validityText":"Valid 03/29/26 - 06/28/26"},"template":"NewPrice"}},"name":"Just Bare , Lightly Breaded Original Chicken Breast Bites ","description":"Just Bare , Lightly Breaded Original Chicken Breast Bites ","brand":"JUST BARE CHICKEN","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7059958_a6030a21-668b-4dc6-a197-cae0f7a19ebc.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.47194"},"productCodes":["00077013615576","0077013615576","07701361557","077013615576"],"rank":{"salesPrice":13323,"salesQuantity":914,"impressionCount":51}},{"id":"199556","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_burritos_rice_bowls","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_burritos_rice_bowls"],"price":{"ok":{"regPriceText":"$5.99","template":"RegPrice"}},"name":"ECHO PACIFIC SUPREME SMKD ATLANTIC SALMON","description":"ECHO PACIFIC SUPREME SMKD ATLANTIC SALMON","brand":"ECHO FALLS","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.46819"},"productCodes":["00058138102448","0058138102448","05813810244","058138102448"],"rank":{"salesPrice":2866,"salesQuantity":494,"impressionCount":0}},{"id":"139757","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_poultry","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_poultry"],"price":{"ok":{"regPriceText":"$13.49","template":"RegPrice"}},"name":"Tyson , Chicken Nuggets ","description":"Tyson , Chicken Nuggets ","brand":"TYSON (MT)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/8319228_77686c36-e8e3-4f5f-9e23-05567869e28b.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.4676"},"productCodes":["00023700060266","0023700060266","02370006026","023700060266"],"rank":{"salesPrice":8440,"salesQuantity":780,"impressionCount":23}},{"id":"337136","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_burgers_patties","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_burgers_patties"],"price":{"ok":{"regPriceText":"$19.99","template":"RegPrice"}},"name":"Harris Ranch Beef Frozen Natrl Patties 73/27 ","description":"Harris Ranch Beef Frozen Natrl Patties 73/27 ","brand":"HARRIS RANCH MEAT","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7092836_e7dfedef-5105-4870-873b-b34cf68907cf.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.4649"},"productCodes":["00084706012147","0084706012147","08470601214","084706012147"],"rank":{"salesPrice":17990,"salesQuantity":900,"impressionCount":138}},{"id":"954518","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$12.99","template":"RegPrice"}},"name":"Gorton''s , Fish Sandwich ","description":"Gorton''s , Fish Sandwich ","brand":"GORTON'S FISH (SEAF)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7086098_3f946655-84b2-4faa-9cb0-ca32a4eb9534.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.46302"},"productCodes":["00044400154406","0044400154406","04440015440","044400154406"],"rank":{"salesPrice":4078,"salesQuantity":330,"impressionCount":12}},{"id":"634505","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$9.49 /lb","promoArea":{"promoText":"$7.49 /lb","validityText":"Valid 04/14/26 - 12/30/26"},"template":"NewPrice"}},"name":"SEASONED BEEF TACO MEAT","description":"SEASONED BEEF TACO MEAT","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.46255"},"productCodes":["00250199000002","0250199000002","25019900000","250199000002"],"rank":{"salesPrice":5108,"salesQuantity":525,"impressionCount":6}},{"id":"20518","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$12.99","template":"RegPrice"}},"name":"Gorton''s , Breaded Whole Fish Sticks ","description":"Gorton''s , Breaded Whole Fish Sticks ","brand":"GORTON'S FISH (SEAF)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7086100_3e7ab7c8-5385-4844-b498-de12f0f4a38f.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.46196"},"productCodes":["00044400154604","0044400154604","04440015460","044400154604"],"rank":{"salesPrice":5144,"salesQuantity":398,"impressionCount":11}},{"id":"46446","categories":["Product/meat_seafood","Product/lamb_veal","Product/meat_seafood","Product/","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/lamb_veal","Mobile/P+C/Product/"],"price":{"ok":{"regPriceText":"$9.99 /lb","template":"RegPrice"}},"name":"LEG OF LAMB C/R","description":"LEG OF LAMB C/R","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.45727"},"productCodes":["00252402000007","0252402000007","25240200000","252402000007"],"rank":{"salesPrice":5809,"salesQuantity":258,"impressionCount":68}},{"id":"83715","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/fish","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/fish"],"price":{"ok":{"regPriceText":"$5.99","template":"RegPrice"}},"name":"Green Valley , Lactose Free Mild Cheddar Sliced Cheese ","description":"Green Valley , Lactose Free Mild Cheddar Sliced Cheese ","brand":"GREEN VALLEY CREAMERY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7092220_e04448bd-65df-41c6-b4c2-c82c7368aa37.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.45245"},"productCodes":["00081312852013","0081312852013","08131285201","081312852013"],"rank":{"salesPrice":4488,"salesQuantity":716,"impressionCount":23}},{"id":"601656","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_poultry","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_poultry"],"price":{"ok":{"regPriceText":"$11.99","promoArea":{"promoText":"$8.99","validityText":"Valid 03/26/26 - 06/25/26"},"template":"NewPrice"}},"name":"Foster Farms , Value Pack Classic Chicken Patties ","description":"Foster Farms , Value Pack Classic Chicken Patties ","brand":"FOSTER FARMS MEATS","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7090925_d35153a9-979e-4d5d-b70b-7d254f4fcf5a.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.45128"},"productCodes":["00075278995488","0075278995488","07527899548","075278995488"],"rank":{"salesPrice":8792,"salesQuantity":972,"impressionCount":88}},{"id":"733416","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$16.99 /lb","promoArea":{"promoText":"$9.99 /lb","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"Top Round Roast Beef, Choice ","description":"Top Round Roast Beef, Choice ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7322427_15fd50d4-f797-42fe-85ba-a561a978ece4.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.43766"},"productCodes":["00250677000005","0250677000005","25067700000","250677000005"],"rank":{"salesPrice":6210,"salesQuantity":267,"impressionCount":4}},{"id":"198431","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$10","template":"RegPrice"}},"name":"PINK SALMON FILLET SKIN ON","description":"PINK SALMON FILLET SKIN ON","brand":"GREAT AMERICAN SEAFOOD (GREAT AMERICAN SEAFOOD IMPORTS CO)","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.42404"},"productCodes":["00829944004963","0829944004963","82994400496","829944004963"],"rank":{"salesPrice":15280,"salesQuantity":1302,"impressionCount":22}},{"id":"19775","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_burgers_patties","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_burgers_patties"],"price":{"ok":{"regPriceText":"$21.99","template":"RegPrice"}},"name":"Beef & Sirloin Patties","description":"Richwood, Beef & Sirloin Patties ","brand":"RICHWOOD","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7056366_4ccbe428-5527-456c-8c24-a64f053ba933.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.42228"},"productCodes":["00043115465104","0043115465104","04311546510","043115465104"],"rank":{"salesPrice":20276,"salesQuantity":978,"impressionCount":84}},{"id":"859641","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_poultry","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_poultry"],"price":{"ok":{"regPriceText":"$15.99","promoArea":{"promoText":"$11.99","validityText":"Valid 03/29/26 - 06/27/26"},"template":"NewPrice"}},"name":"Foster Farms , Chicken Wings, Honey BBQ Glazed ","description":"FC All Nat Honey BBQ Ckn Wings ","brand":"FOSTER FARMS MEATS","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7090922_4582e19c-d52a-438d-9685-393cc1e4fba2.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.41688"},"productCodes":["00075278994979","0075278994979","07527899497","075278994979"],"rank":{"salesPrice":7333,"salesQuantity":610,"impressionCount":52}},{"id":"198208","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$10","template":"RegPrice"}},"name":"GREA CRAB CAKE RESTAURANT STYLE","description":"GREA CRAB CAKE RESTAURANT STYLE","brand":"GREAT AMERICAN","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/3217905_57e78de3-5566-4b1e-a5f2-4cc63f1334c0.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.41289"},"productCodes":["00829944013750","0829944013750","82994401375","829944013750"],"rank":{"salesPrice":11180,"salesQuantity":1070,"impressionCount":10}},{"id":"20520","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$7.99","promoArea":{"promoText":"$7.49","validityText":"Valid 03/30/26 - 06/28/26"},"template":"NewPrice"}},"name":"Gorton''s , Breaded Fish Sticks ","description":"Gorton''s , Breaded Fish Sticks ","brand":"GORTON'S FISH (SEAF)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7086103_56ee929c-8e20-40db-807e-0481fb017513.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.40855"},"productCodes":["00044400156509","0044400156509","04440015650","044400156509"],"rank":{"salesPrice":5370,"salesQuantity":716,"impressionCount":8}},{"id":"159093","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/shrimp","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/shrimp"],"price":{"ok":{"regPriceText":"$8.99","template":"RegPrice"}},"name":"GREA 31/40 RAW EZ PEEL SHRIMP","description":"GREA 31/40 RAW EZ PEEL SHRIMP","brand":"GREAT AMERICAN","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.40303"},"productCodes":["00829944012463","0829944012463","82994401246","829944012463"],"rank":{"salesPrice":5243,"salesQuantity":534,"impressionCount":73}},{"id":"159094","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/shrimp","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/shrimp"],"price":{"ok":{"regPriceText":"$10.99","promoArea":{"promoText":"$5.93","validityText":"Valid 04/28/26 - 10/25/26"},"template":"NewPrice"}},"name":"GREA 8/12 RAW EZ PEEL SHRIMP","description":"GREA 8/12 RAW EZ PEEL SHRIMP","brand":"GREAT AMERICAN","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/9644950_bbabdd55-cc9a-4a45-80f3-0145ff93f24c.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.39622"},"productCodes":["00829944095367","0829944095367","82994409536","829944095367"],"rank":{"salesPrice":8430,"salesQuantity":686,"impressionCount":577}},{"id":"158603","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$11.99","template":"RegPrice"}},"name":"Seapak, Shrimp, Tempura, Oven Crispy ","description":"New look, same great taste. Includes 2 oz sauce. Sweet & spicy orange dipping sauce included. The Taste of the Coast: Great seafood is closer than you think! Create your own great meal memories! Looking for a fresh idea? Visit us at www.seapak.com for delicious seafood recipes, information on our wide variety of seafood products, and the health benefits of adding more seafood to your family's diet. Facebook. YouTube. Shrimp is Good Food: The USDA recommends eating at least 8 oz of seafood a week for a healthier diet. These shrimp are farm-raised. www.seapak.com/smartsourcing/. Find all our shrimp & seafood products at www.seapak.com/productlocator/. SeaPak's Coastal Home: You always get the best shrimp and seafood at those small, out-of-the-way places where shrimp and seafood are a way of life - where you can smell the saltwater in the air. For over 60 years now SeaPak's coastal home here on Saint Simmons Island has provided the inspiration to perfect our recipes to bring you the very best the coast has to offer. Try us and we think you'll agree. Try us and we think you'll agree - there's a taste of the coast in every delicious bite. Product of Thailand. ","brand":"SEA-PAK (MT)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7084781_4007802b-508b-4ecc-860e-47ac541c7c51.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.39211"},"productCodes":["00041322109309","0041322109309","04132210930","041322109309"],"rank":{"salesPrice":4444,"salesQuantity":372,"impressionCount":24}},{"id":"770306","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/"],"price":{"ok":{"regPriceText":"$7.79","template":"RegPrice"}},"name":"Beef Liver","description":"Skylark , Beef Liver ","brand":"SKYLARK","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7061130_79f4c7ac-80ab-46ab-aab3-fc73c86b067e.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.38929"},"productCodes":["00079041226380","0079041226380","07904122638","079041226380"],"rank":{"salesPrice":5317,"salesQuantity":704,"impressionCount":88}},{"id":"736390","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$33.99 /lb","template":"RegPrice"}},"name":"Choice New York Steak Boneless Thin ","description":"Choice New York Steak Boneless Thin ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7062720_a2b036b6-ff27-41b7-a44c-f3dfaba5ad65.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.38859"},"productCodes":["00250717000002","0250717000002","25071700000","250717000002"],"rank":{"salesPrice":15205,"salesQuantity":955,"impressionCount":10}},{"id":"80886","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_burritos_rice_bowls","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_burritos_rice_bowls"],"price":{"ok":{"regPriceText":"$12.99","promoArea":{"promoText":"$10.49","validityText":"Valid 05/04/26 - 05/24/26"},"template":"NewPrice"}},"name":"Honey Smoked Fish Co , Cracked Pepper Honey Smoked Salmon ","description":"Fully cooked and ready to dive in. Small batch. Smoking. Made fresh from sea smoker to table. Always fresh never frozen. Sustainably fresh fir a happy ocean. Biggest catch 2x the fish. Compared to 4 oz packages. Freshness is our main ingredient. Well, that and fish. And smoke - hot smoke from honey coated 100% hickory in fact. But really, the secret to our one-of-a-kind, flavorful salmon is that they're fully cooked shortly after leaving the water and then sealed tight as soon as they exit our small-batch smoker. No freezer. Just amazingly fresh and healthy Honey Smoked Salmon that's ready to devour. ","brand":"HONEY SMOKED FISH CO.","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7065025_0db12ecd-157f-46b8-93a6-81f414582c84.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.38225"},"productCodes":["00660646000354","0660646000354","66064600035","660646000354"],"rank":{"salesPrice":8365,"salesQuantity":644,"impressionCount":0}},{"id":"16777","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$11.99","template":"RegPrice"}},"name":"SeaPak , Butterfly Shrimp, Jumbo, Golden Crispy ","description":"SeaPak , Butterfly Shrimp, Jumbo, Golden Crispy ","brand":"SEA-PAK (MT)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7084778_4e13b138-525b-4e26-8e5d-c8ab3ad56cf2.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.37403"},"productCodes":["00041322109002","0041322109002","04132210900","041322109002"],"rank":{"salesPrice":3900,"salesQuantity":328,"impressionCount":19}},{"id":"140319","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_poultry","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_poultry"],"price":{"ok":{"regPriceText":"$13.49","template":"RegPrice"}},"name":"Tyson , Chicken Patties ","description":"Tyson , Chicken Patties ","brand":"TYSON (MT)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/8319225_c72c310e-36d6-48d1-9d35-a665456aca79.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.37309"},"productCodes":["00023700060235","0023700060235","02370006023","023700060235"],"rank":{"salesPrice":6570,"salesQuantity":618,"impressionCount":20}},{"id":"762788","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$12.99","template":"RegPrice"}},"name":"Gorton''s , Butterfly Shrimp ","description":"Gorton''s , Butterfly Shrimp ","brand":"GORTON'S FISH (SEAF)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7086095_115ea9ec-f4f2-4dfc-b0b8-68f999d3f4e4.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.37215"},"productCodes":["00044400139304","0044400139304","04440013930","044400139304"],"rank":{"salesPrice":2264,"salesQuantity":188,"impressionCount":12}},{"id":"961604","categories":["Product/meat_seafood","Product/plant_based","Product/meat_seafood","Product/","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/plant_based","Mobile/P+C/Product/"],"price":{"ok":{"regPriceText":"$9.99","template":"RegPrice"}},"name":"Impossible , Ground Beef ","description":"Impossible , Ground Beef ","brand":"IMPOSSIBLE - PLANT BASED","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7069983_d806c797-7d34-4344-b9e1-51646ab362ff.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.36992"},"productCodes":["00816697021002","0816697021002","81669702100","816697021002"],"rank":{"salesPrice":5470,"salesQuantity":550,"impressionCount":49}},{"id":"87327","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$14.99","promoArea":{"promoText":"$13.49","validityText":"Valid 03/30/26 - 06/28/26"},"template":"NewPrice"}},"name":"SeaPak , Butterfly Shrimp, Classic, Golden Crispy, Family Size ","description":"SeaPak , Butterfly Shrimp, Classic, Golden Crispy, Family Size ","brand":"SEA-PAK (MT)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7084797_1b4ee056-ae37-4684-9638-d359c7024977.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.36934"},"productCodes":["00041322224972","0041322224972","04132222497","041322224972"],"rank":{"salesPrice":7856,"salesQuantity":584,"impressionCount":11}},{"id":"20514","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$7.99","promoArea":{"promoText":"$7.49","validityText":"Valid 03/30/26 - 06/28/26"},"template":"NewPrice"}},"name":"Gorton''s , Garlic & Herb Fish Fillets ","description":"Gorton''s , Garlic & Herb Fish Fillets ","brand":"GORTON'S FISH (SEAF)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7086096_40096a00-dbb1-4ed8-9dc2-a3c1c0219920.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.36476"},"productCodes":["00044400152501","0044400152501","04440015250","044400152501"],"rank":{"salesPrice":4693,"salesQuantity":628,"impressionCount":22}},{"id":"954519","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$12.99","template":"RegPrice"}},"name":"Gorton''s , Whole Breaded Parmesan Crusted Fish Fillets ","description":"Gorton''s , Whole Breaded Parmesan Crusted Fish Fillets ","brand":"GORTON'S FISH (SEAF)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7086102_ffb2e8ba-8343-4591-8b17-0be721504130.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.36464"},"productCodes":["00044400156400","0044400156400","04440015640","044400156400"],"rank":{"salesPrice":2420,"salesQuantity":192,"impressionCount":15}},{"id":"124304","categories":["Product/meat_seafood","Product/pork","Product/meat_seafood","Product/ham_smoked_cuts","Product/pork","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/pork","Mobile/P+C/Product/ham_smoked_cuts"],"price":{"ok":{"regPriceText":"$11.99","template":"RegPrice"}},"name":"Smithfield , Boneless Ham, Honey Cured, Sliced ","description":"All Smithfield brands are driven by the love of meat. That's why our offerings are so vast; because we all need our pork and specialty prepared meats our way. Smithfield Anytime Favorites Pre-sliced Honey Cured Boneless Ham offers a sweet, tantalizing flavor that's guaranteed to be a hit in your house. This sliced ham is fully cooked, so you can heat it up quickly, cutting down on prep time and mess. This honey ham is cured with delicious honey for a sweet and savory taste that elevates every mealtime. This boneless ham contains zero artificial ingredients and is 97% fat free. Keep this honey ham in the refrigerator to ensure peak freshness and flavor. Smithfield has set sustainability goals because we believe we can build a more sustainable business and contribute to a better future. ","brand":"SMITH FIELD MEAT","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/8305230_a0a6fb50-1bb8-40ac-bea1-2f7c23a42d2d.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.35818"},"productCodes":["00070800227402","0070800227402","07080022740","070800227402"],"rank":{"salesPrice":3568,"salesQuantity":298,"impressionCount":4}},{"id":"186536","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$9.99","promoArea":{"promoText":"$5.93","validityText":"Valid 04/28/26 - 10/25/26"},"template":"NewPrice"}},"name":"ATLANTIC SALMON SKINLESS PORTION","description":"SALT & SEA ATLANTIC SALMON SKINLESS PORTION","brand":"salt & sea","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.35701"},"productCodes":["00850066060001","0850066060001","85006606000","850066060001"],"rank":{"salesPrice":4564,"salesQuantity":574,"impressionCount":22}},{"id":"352445","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$12.99","template":"RegPrice"}},"name":"Gorton''s , Popcorn Shrimp ","description":"Gorton''s , Popcorn Shrimp ","brand":"GORTON'S FISH (SEAF)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7086105_08ebd58e-b5e5-40c0-9285-b81f1330d2a1.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.34151"},"productCodes":["00044400164009","0044400164009","04440016400","044400164009"],"rank":{"salesPrice":2467,"salesQuantity":202,"impressionCount":4}},{"id":"902465","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_burgers_patties","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_burgers_patties"],"price":{"ok":{"regPriceText":"$19.99","promoArea":{"promoText":"$18.99","validityText":"Valid 04/16/26 - 09/05/26"},"template":"NewPrice"}},"name":"Bubba Burger , Angus Beef Burgers ","description":"What do we mean when we say, ¿You¿ll never bite a burger better than a BUBBA!¿ ®?We make the Angus BUBBA burger® using only 100% USDA choice Angus beef chuck. This gives you a genuine Angus burger that¿s high in protein and gluten free, with no fillers, no additives, no preservatives and no added sodium ¿ just the delicious, high-quality Angus beef you and your family crave. Since they¿re frozen for your convenience, BUBBA burgers can go right from the freezer to the grill or the skillet and to your plate in about 10 minutes ¿ no thawing needed ¿ which makes them the perfect choice for cookouts, get-together or family meals any time you want a juicy and delicious burger. ","brand":"BUBBA FOODS","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7065420_73a72101-5b81-4bc6-928a-368ea7cbdacc.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.33846"},"productCodes":["00704639990021","0704639990021","70463999002","704639990021"],"rank":{"salesPrice":10101,"salesQuantity":606,"impressionCount":62}},{"id":"762792","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_burgers_patties","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_burgers_patties"],"price":{"ok":{"regPriceText":"$19.99","template":"RegPrice"}},"name":"Moran 80/20 Beef Patties","description":"Moran 80/20 Beef Patties","brand":"MORAN'S (MT)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7072442_4957ba16-8474-44fa-b8e0-ce279d16322e.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.33494"},"productCodes":["00034779600505","0034779600505","00854986006026","03477960050","034779600505","0854986006026","85498600602","854986006026"],"rank":{"salesPrice":11274,"salesQuantity":564,"impressionCount":15}},{"id":"20519","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$7.99","promoArea":{"promoText":"$7.49","validityText":"Valid 03/30/26 - 06/28/26"},"template":"NewPrice"}},"name":"Gorton''s , Crunchy Breaded Fish Fillets ","description":"Gorton''s , Crunchy Breaded Fish Fillets ","brand":"GORTON'S FISH (SEAF)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7086101_bd9d7d01-1c95-4ad7-9e28-83f7fd4eb83a.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.32355"},"productCodes":["00044400156004","0044400156004","04440015600","044400156004"],"rank":{"salesPrice":3809,"salesQuantity":508,"impressionCount":2}},{"id":"124331","categories":["Product/meat_seafood","Product/pork","Product/meat_seafood","Product/ham_smoked_cuts","Product/pork","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/pork","Mobile/P+C/Product/ham_smoked_cuts"],"price":{"ok":{"regPriceText":"$11.99","template":"RegPrice"}},"name":"Smithfield , Boneless Brown Sugar Sliced Ham ","description":"Smithfield , Boneless Brown Sugar Sliced Ham ","brand":"SMITH FIELD MEAT","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/8070899_d1177363-516d-4238-b489-86ac1efec88b.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.3205"},"productCodes":["00070800227419","0070800227419","07080022741","070800227419"],"rank":{"salesPrice":3920,"salesQuantity":326,"impressionCount":4}},{"id":"338347","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_poultry","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_poultry"],"price":{"ok":{"regPriceText":"$13.99","promoArea":{"promoText":"$11.99","validityText":"Valid 03/29/26 - 06/27/26"},"template":"NewPrice"}},"name":"Foster Farms , Chicken Breast Portions, Orange Chicken, Orange Glaze ","description":"Foster Farms , Chicken Breast Portions, Orange Chicken, Orange Glaze ","brand":"FOSTER FARMS MEATS","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7090905_766ab7e6-790a-4b07-b9f0-31ed2ace62b8.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.31909"},"productCodes":["00075278909416","0075278909416","07527890941","075278909416"],"rank":{"salesPrice":5131,"salesQuantity":428,"impressionCount":19}},{"id":"46203","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$4.99 /lb","template":"RegPrice"}},"name":"TSMC BEEF BACK RIBS FROZEN","description":"TSMC BEEF BACK RIBS FROZEN","brand":"THE SAVE MART COMPANY","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.3158"},"productCodes":["00250710000009","0250710000009","25071000000","250710000009","25071049"],"rank":{"salesPrice":2461,"salesQuantity":251,"impressionCount":5}},{"id":"83716","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/fish","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/fish"],"price":{"ok":{"regPriceText":"$5.99","template":"RegPrice"}},"name":"Green Valley , Lactose Free Pepper Jack Shredded Cheese ","description":"Green Valley , Lactose Free Pepper Jack Shredded Cheese ","brand":"GREEN VALLEY CREAMERY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7092221_ad48be07-1ac5-4800-ab3a-3ebadb0e9546.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.31533"},"productCodes":["00081312852020","0081312852020","08131285202","081312852020"],"rank":{"salesPrice":2612,"salesQuantity":410,"impressionCount":1}},{"id":"46118","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$29.99 /lb","template":"RegPrice"}},"name":"Choice Beef Ribeye Steak, Boneless Thin, Maxx Pack ","description":"Choice Beef Ribeye Steak, Boneless Thin, Maxx Pack ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7615486_9592cbd1-2baf-4580-84b6-a906754bd62e.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.30899"},"productCodes":["00250525000003","0250525000003","25052500000","250525000003"],"rank":{"salesPrice":3380,"salesQuantity":95,"impressionCount":18}},{"id":"18865","categories":["Product/meat_seafood","Product/sausage_ham_bacon","Product/meat_seafood","Product/","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/sausage_ham_bacon","Mobile/P+C/Product/"],"price":{"ok":{"regPriceText":"$3.49","template":"RegPrice"}},"name":"Chorizo, Pork","description":"US inspected and passed by Department of Agriculture. Product of USA. ","brand":"EL MEXICANO","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7056103_81680bc3-9244-4e88-8897-b2e0ba7e22b2.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.30829"},"productCodes":["00042743180106","0042743180106","04274318010","042743180106"],"rank":{"salesPrice":1333,"salesQuantity":382,"impressionCount":16}},{"id":"140320","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_poultry","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_poultry"],"price":{"ok":{"regPriceText":"$13.49","template":"RegPrice"}},"name":"Tyson , Spicy Chicken Patties ","description":"Tyson , Spicy Chicken Patties ","brand":"TYSON (MT)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/8319226_01793cd0-ec5b-46f6-8136-f8c34c797b23.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.30277"},"productCodes":["00023700060242","0023700060242","02370006024","023700060242"],"rank":{"salesPrice":4416,"salesQuantity":400,"impressionCount":37}},{"id":"92039","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$12.99","template":"RegPrice"}},"name":"Gorton''s , Potato Crunch 100% Whole Breaded Fish Fillets ","description":"Gorton''s , Potato Crunch 100% Whole Breaded Fish Fillets ","brand":"GORTON'S FISH (SEAF)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7322351_67a03b03-cc04-4d9f-84b2-f225331fa625.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.29831"},"productCodes":["00044400153409","0044400153409","04440015340","044400153409"],"rank":{"salesPrice":1882,"salesQuantity":146,"impressionCount":0}},{"id":"762786","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$12.99","template":"RegPrice"}},"name":"Gorton''s , Shrimp, Tail-On, Breaded, Beer Batter ","description":"Gorton''s , Shrimp, Tail-On, Breaded, Beer Batter ","brand":"GORTON'S FISH (SEAF)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7086094_814d144a-329d-47a9-9039-32c4fd1d4545.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.29643"},"productCodes":["00044400139205","0044400139205","04440013920","044400139205"],"rank":{"salesPrice":1542,"salesQuantity":120,"impressionCount":16}},{"id":"85504","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$7.99","template":"RegPrice"}},"name":"Seafood , Seafood Combination","description":"A combination of blanched squid, cooked surimi bites, blanched octopus slices, fully cooked mussel, fully cooked clam, blanched shrimp. Great for bouillabaisse, casseroles, ceviche, cocktails, paella, pasta and stir fry. Use in your favorite fish or shellfish recipes. Product of China. ","brand":"GREAT AMERICAN","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7070832_3cbc9437-7850-4b77-bb68-b94a2b7e9232.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.28821"},"productCodes":["00829944011800","0829944011800","82994401180","829944011800"],"rank":{"salesPrice":2748,"salesQuantity":284,"impressionCount":45}},{"id":"209046","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$7.99","template":"RegPrice"}},"name":"SWAI FILLET","description":"MEKONG SWAI FILLET","brand":"MEKONG","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.28494"},"productCodes":["00813135023260","0813135023260","81313502326","813135023260"],"rank":{"salesPrice":5592,"salesQuantity":562,"impressionCount":11}},{"id":"92041","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$7.99","promoArea":{"promoText":"$7.49","validityText":"Valid 03/30/26 - 06/28/26"},"template":"NewPrice"}},"name":"Gorton''s , Crispy Battered Fish Fillets ","description":"Gorton''s , Crispy Battered Fish Fillets ","brand":"GORTON'S FISH (SEAF)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7605654_72af00dd-5e92-4ec1-9dc3-6922a53d2af8.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.28493"},"productCodes":["00044400157704","0044400157704","04440015770","044400157704"],"rank":{"salesPrice":2659,"salesQuantity":356,"impressionCount":6}},{"id":"87154","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$14.99","promoArea":{"promoText":"$13.49","validityText":"Valid 03/30/26 - 06/28/26"},"template":"NewPrice"}},"name":"Seapak, Coconut Shrimp, Jumbo, Oven Crispy, Family Size ","description":"8 g protein per serving. per 3 oz serving: 270 calories; 6 g sat fat (31% dv); 690 mg sodium (30% dv); 4 g total sugars. see nutrition information for total fat and saturated fat and sodium content. derived from bioengineering. since 1948. shrimp & seafood co. includes orange marmalade sauce. includes 3 oz sauce. since 1948. includes orange marmalade sauce. includes 3 oz sauce. delicious seafood, trusted quality: at seapak, seafood sustainability is our never-ending mission. we're proud of our ability to deliver the highest-quality, most-sustainable products available, conserve natural resources, and drive positive change in the industry, to ensure delicious seafood can be enjoyed by generations to come. www.seapak.com facebook; instagram; youtube. need a new favorite recipe? visit us at www.seapak.com. search for new seafood recipes, discover the health benefits of seafood, and check out a boatload of seapak products. best aquaculture practices: 4 stars. processer. farm. hatchery. feed. bapcertification.org. committed to sustainability: best aquaculture practices (bap) certification standards require companies to comprehensively address environmental and social responsibility, animal welfare, food safety, and traceability throughout their operations. this shrimp are aquaculture shrimp. shrimp is good food: the usda recommends eating at least 8 oz of seafood a week for a healthier diet. product of ecuador. ","brand":"SEA-PAK (MT)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7694503_f9e60edb-762d-4320-a4ec-99ee87bd1b2e.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.28363"},"productCodes":["00041322224996","0041322224996","04132222499","041322224996"],"rank":{"salesPrice":3810,"salesQuantity":282,"impressionCount":4}},{"id":"173926","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_burgers_patties","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_burgers_patties"],"price":{"ok":{"regPriceText":"$13.99","template":"RegPrice"}},"name":"Shabu-Shabu Beef Chuck Roll ","description":"Shabu-Shabu Beef Chuck Roll ","brand":"KING","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/11127921_c047ec5c-550d-4a3c-80f3-ae76f82c8edc.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.27953"},"productCodes":["00816782025984","0816782025984","81678202598","816782025984"],"rank":{"salesPrice":9176,"salesQuantity":662,"impressionCount":22}},{"id":"173010","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_poultry","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_poultry"],"price":{"ok":{"regPriceText":"$16.99","promoArea":{"promoText":"$14.49","validityText":"Valid 03/29/26 - 06/28/26"},"template":"NewPrice"}},"name":"Just Bare , Lightly Breaded Spicy Chicken Breast Strips ","description":"Just Bare , Lightly Breaded Spicy Chicken Breast Strips ","brand":"JUST BARE CHICKEN","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/9497527_e91f0a44-b621-4dc6-a477-d01ba9e852b3.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.27906"},"productCodes":["00077013615637","0077013615637","07701361563","077013615637"],"rank":{"salesPrice":5165,"salesQuantity":358,"impressionCount":21}},{"id":"179345","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$12.99","template":"RegPrice"}},"name":"Gorton''s , Breaded Tail-On Coconut Shrimp ","description":"Gorton''s , Breaded Tail-On Coconut Shrimp ","brand":"GORTON'S FISH (SEAF)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/9862016_c7fcc825-a979-4642-85b4-a2275b74d256.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.27518"},"productCodes":["00044400139601","0044400139601","04440013960","044400139601"],"rank":{"salesPrice":1804,"salesQuantity":146,"impressionCount":8}},{"id":"954427","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$9.99","promoArea":{"promoText":"$8.99","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"Sea Salt & Pepper Gluten Free Calamari","description":"Oven ready, easy to prepare. Dine well, feel well, live well. Sea salt & pepper calamari. Northern Chef Sea Salt & Pepper Calamari are hand cut from wild caught loligo squid. Our tender calamari are hand tossed in a light sea salt and pepper, gluten free coating that gives them an irresistible taste and crispy texture. Serve these calamari with your sauce of choice for a snack or as a quick entree. Precooked. Look for our complete line of products under our grands: Royal Asia and Northern Chef. ","brand":"NORTHERN CHEF","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7073361_113e1f13-40b3-41ee-ab65-310adc9f7f6a.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.27495"},"productCodes":["00877971004937","0877971004937","87797100493","877971004937"],"rank":{"salesPrice":2299,"salesQuantity":238,"impressionCount":13}},{"id":"954497","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_poultry","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_poultry"],"price":{"ok":{"regPriceText":"$14.99","template":"RegPrice"}},"name":"Tyson , Buffalo Style Chicken Strips ","description":"Tyson , Buffalo Style Chicken Strips ","brand":"TYSON (MT)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7077770_1220e1a5-afba-4aca-8c13-da44eb9c54dc.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.27248"},"productCodes":["00023700014092","0023700014092","02370001409","023700014092"],"rank":{"salesPrice":3397,"salesQuantity":272,"impressionCount":0}},{"id":"132919","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$7.99","promoArea":{"promoText":"$7.49","validityText":"Valid 03/30/26 - 06/28/26"},"template":"NewPrice"}},"name":"Gorton''s , Beer Battered Fish Fillets ","description":"Gorton''s , Beer Battered Fish Fillets ","brand":"GORTON'S FISH (SEAF)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/8319288_1f50b529-0d66-4da5-9c3a-87f567dec391.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.27213"},"productCodes":["00044400156301","0044400156301","04440015630","044400156301"],"rank":{"salesPrice":2286,"salesQuantity":304,"impressionCount":18}},{"id":"100148","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_poultry","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_poultry"],"price":{"ok":{"regPriceText":"$22.99","template":"RegPrice"}},"name":"Tyson , Dino Nuggets Family Pack ","description":"Tyson , Dino Nuggets Family Pack ","brand":"TYSON (MT)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7605573_be404296-8234-4235-b639-589db26f4d65.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.27119"},"productCodes":["00023700058294","0023700058294","02370005829","023700058294"],"rank":{"salesPrice":7757,"salesQuantity":340,"impressionCount":3}},{"id":"87155","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$14.99","promoArea":{"promoText":"$13.49","validityText":"Valid 03/30/26 - 06/28/26"},"template":"NewPrice"}},"name":"SeaPak , Shrimp Crunchy Spring Rolls ","description":"SeaPak , Shrimp Crunchy Spring Rolls ","brand":"SEA-PAK (MT)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7322327_62794dc5-05b8-4480-ac87-39ce0252f553.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.27084"},"productCodes":["00041322225009","0041322225009","04132222500","041322225009"],"rank":{"salesPrice":3976,"salesQuantity":294,"impressionCount":8}},{"id":"18866","categories":["Product/meat_seafood","Product/sausage_ham_bacon","Product/meat_seafood","Product/","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/sausage_ham_bacon","Mobile/P+C/Product/"],"price":{"ok":{"regPriceText":"$3.49","template":"RegPrice"}},"name":"Chorizo, Beef","description":"US inspected and passed by Department of Agriculture. Product of USA. ","brand":"EL MEXICANO","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7056104_9df0fd40-2207-4a84-ae0e-4a2f49e8cf2a.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.26978"},"productCodes":["00042743180113","0042743180113","04274318011","042743180113"],"rank":{"salesPrice":1500,"salesQuantity":430,"impressionCount":6}},{"id":"173906","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_burgers_patties","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_burgers_patties"],"price":{"ok":{"regPriceText":"$12.99","template":"RegPrice"}},"name":"Sliced Curl Beef Short Plate","description":"U.S. inspected and passed by Department of Agriculture. ","brand":"King","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/10050246_62a076bc-cadc-433a-9bf7-4760d7f262d2.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.26955"},"productCodes":["00816782025960","0816782025960","81678202596","816782025960"],"rank":{"salesPrice":8135,"salesQuantity":636,"impressionCount":9}},{"id":"954431","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$9.99","promoArea":{"promoText":"$8.99","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"Honey Walnut Gluten Free Shrimp","description":"No preservatives added. Oven ready, easy to prepare. Northern Chef Honey Walnut Shrimp are made with our signature crispy shrimp - chemical free, lightly coated and sustainable shrimp, a creamy honey sauce, and candied California walnuts. Simply heat the shrimp then toss with our sweet and smooth honey sauce and sprinkle with the included walnuts for a restaurant quality dish. Pre-cooked. Look for our complete line of products under our brands. At Northern Chef, we take our philosophy of Dine Well, Feel Well, Live Well. Our Dine Well products are carefully chosen based upon the following criteria: High quality seafood above industry standards. Consistently great tasting flavor and texture. Responsible practices to ensure the future supply of fish. Look for our complete line of products under our brands. At Northern Chef. ","brand":"NORTHERN CHEF","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7073363_cb4ff11b-5927-411f-8ed0-d48783f44c49.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.2598"},"productCodes":["00877971007068","0877971007068","87797100706","877971007068"],"rank":{"salesPrice":1834,"salesQuantity":190,"impressionCount":22}},{"id":"87328","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$11.99","template":"RegPrice"}},"name":"SeaPak , Golden Crispy Wild Caught Clam Strips ","description":"SeaPak , Golden Crispy Wild Caught Clam Strips ","brand":"SEA-PAK (MT)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7605632_4d3febdb-0d09-43d0-b011-63d163a33565.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.25945"},"productCodes":["00041322224989","0041322224989","04132222498","041322224989"],"rank":{"salesPrice":2925,"salesQuantity":244,"impressionCount":0}},{"id":"140321","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_poultry","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_poultry"],"price":{"ok":{"regPriceText":"$22.99","template":"RegPrice"}},"name":"Tyson , Chicken Nuggets Family Pack ","description":"Tyson , Chicken Nuggets Family Pack ","brand":"TYSON (MT)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/8319227_cc1e4d65-496e-40a3-aa74-184a037d1c5e.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.25828"},"productCodes":["00023700060259","0023700060259","02370006025","023700060259"],"rank":{"salesPrice":6987,"salesQuantity":306,"impressionCount":0}},{"id":"77836","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$9.99","promoArea":{"promoText":"$8.99","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"Jumbo Butterfly Shrimp","description":"Dine well. Fell well. Live well. Oven ready. Northern Chef Jumbo Butterfly Shrimp are breaded in a two step process making it truly great to eat and easy to prepare. Our all natural jumbo shrimp are butterfly cut and lightly breaded with a gluten free coating. These crispy shrimp are versatile and be served as appetizer or main dish component with the included sweet chili sauce. Simply heat in the oven or air fryer and enjoy. Look for complete line of products under our brands: Royal Asia; Northern Chef. Precooked. At Northern Chef, we take our philosophy of Dine Well, Feel Well, Live Well. Our Dine Well products are carefully chosen based upon the following criteria: High quality seafood above industry standards. Consistently great tasting flavor and texture. Responsible practices to ensure the future supply of fish. Look for complete line of products under our brands Royal Asia and Northern Chef. ","brand":"NORTHERN CHEF","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7073364_cf013140-a4c3-408d-859d-58d663d43bce.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.25628"},"productCodes":["00877971007464","0877971007464","87797100746","877971007464"],"rank":{"salesPrice":2065,"salesQuantity":212,"impressionCount":91}},{"id":"87145","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$11.99","template":"RegPrice"}},"name":"SeaPak, Shrimp Scampi ","description":"Shrimp in a blend of real butter, garlic & seasonings. 10 g protein per serving. Per 5 oz Serving: 420 calories; 16 g sat fat (81% DV); 630 mg sodium (27% DV); 0 g total sugars. See nutrition information for total fat, saturated fat, cholesterol and sodium content. Shrimp is good food. The USDA recommends eating at least 8 oz of seafood a week for a healthier diet. Contains a bioengineered food ingredients. Since 1948. Shrimp & Seafood Co. Delicious Seafood, Trusted Quality. At SeaPak, seafood sustainability is our never-ending mission. We're proud of our ability to deliver the highest-quality, most-sustainable products available, conserve natural resources, and drive positive change in the industry, to ensure delicious seafood can be enjoyed by generations to come. www.seapak.com/smartsourcing. how2recycle.info. www.seapak.com. Facebook. Instagram. YouTube. Pinterest. Search for new seafood recipes, discover the health benefits of seafood, and check out a boatload of SeaPak products. Need a new favorite recipe? Visit us at www.seapak.com. These shrimp are aquaculture shrimp. www.seapak.com/smartsourcing. ","brand":"SEA-PAK (MT)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7084789_3f1e43db-98d4-4537-9402-0f0a1afb6add.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.25281"},"productCodes":["00041322224514","0041322224514","04132222451","041322224514"],"rank":{"salesPrice":2134,"salesQuantity":178,"impressionCount":0}},{"id":"172782","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_burgers_patties","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_burgers_patties"],"price":{"ok":{"regPriceText":"$19.99","template":"RegPrice"}},"name":"Bubba Burger , Smashed Original Beef Burgers ","description":"Bubba Burger , Smashed Original Beef Burgers ","brand":"BUBBA FOODS","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/9292465_17ea801a-1d12-4faf-87c5-d92cbf24d069.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.25053"},"productCodes":["00704639960062","0704639960062","70463996006","704639960062"],"rank":{"salesPrice":3878,"salesQuantity":198,"impressionCount":28}},{"id":"145709","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$14.99","promoArea":{"promoText":"$13.49","validityText":"Valid 03/30/26 - 06/28/26"},"template":"NewPrice"}},"name":"SeaPak, Classic Popcorn Shrimp ","description":"10 g protein per serving. Per 3 Oz Serving: 230 calories; 1.5 g sat fat (9% DV); 560 mg sodium (25% DV); 2 g added sugars (3% DV). See nutrition information for cholesterol and sodium content. Shrimp is Good Food: The USDA recommends eating at least 8 oz of seafood a week for a healthier diet. America's favorite popcorn shrimp! Contains a bioengineered food ingredient. Since 1948. Delicious seafood for over 75 years. SeaPak, founded in 1948, is an industry leader bringing deliciously convenient seafood straight to your home. From our most popular Jumbo Butterfly Shrimp and Popcorn Shrimp, to Shrimp Spring Rolls and Clam Strips, SeaPak is committed to making great tasting, high quality seafood products. how2recycle.info. Scan this QR code for recipes, to learn more about Seapak, and follow us on all your favorite socials. Facebook. Instagram. Pinterest. Customer Service: 1-800-356-7094. ","brand":"SEA-PAK (MT)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/9292378_f362d134-b12d-49d0-bfac-689428117223.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.24935"},"productCodes":["00041322248930","0041322248930","04132224893","041322248930"],"rank":{"salesPrice":3654,"salesQuantity":270,"impressionCount":5}},{"id":"87148","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$11.99","template":"RegPrice"}},"name":"SeaPak, Calamari ","description":"Wild caught calamari in an oven crispy breading. Includes tomato Romano sauce. Includes 3 oz sauce. 8 g protein per serving. Per 3 Oz Serving: 190 calories; 1.5 g sat fat (7% DV); 740 mg sodium (32% DV); 1 g total sugars. See nutrition information for sodium content. Calamari is good food. The USDA recommends eating at least 8 oz of seafood a week for a healthier diet. Contains a bioengineered food ingredients. Since 1948. SeaPak - Shrimp & Seafood Co. Delicious seafood, trusted quality. At seapak, seafood sustainability is our never ending mission. We¿re proud of our ability to deliver the highest, most sustainable products available, conserve natural resources, and drive positive change in the industry, to ensure delicious seafood can be enjoyed by generations to come. Committed to sustainability. www.seapak.com. how2recycle.info. Facebook. Instagram. YouTube. Search new seafood recipes, discover the health benefits of seafood, and check out a boatload of SeaPak products. Need a new favorite recipe? Visit us at www.seapak.com. This squid is wild caught. www.seapak.com/smartsourcing. ","brand":"SEA-PAK (MT)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7084794_38c63051-e537-4e9f-8ded-ce4674abd5af.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.24442"},"productCodes":["00041322224934","0041322224934","04132222493","041322224934"],"rank":{"salesPrice":1806,"salesQuantity":152,"impressionCount":9}},{"id":"227033","categories":["Product/meat_seafood","Product/sausage_ham_bacon","Product/meat_seafood","Product/bacon","Product/sausage_ham_bacon","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/sausage_ham_bacon","Mobile/P+C/Product/bacon"],"price":{"ok":{"regPriceText":"$17.99","promoArea":{"promoText":"$10","validityText":"Valid 04/07/26 - 06/28/26"},"template":"NewPrice"}},"name":"REGULAR TUX BOX","description":"FARMER JOHN REGULAR TUX BOX","brand":"FARMER JOHN","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/11574996_e931fef2-8294-49d5-88fa-02cb8669c288.jpeg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.23914"},"productCodes":["00050500229838","0050500229838","05050022983","050500229838"],"rank":{"salesPrice":21031,"salesQuantity":2060,"impressionCount":2}},{"id":"209141","categories":["Product/meat_seafood","Product/pork","Product/meat_seafood","Product/","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/pork","Mobile/P+C/Product/"],"price":{"ok":{"regPriceText":"$6.99","template":"RegPrice"}},"name":"AMAZ GROUND PORK TRAY PACK","description":"AMAZ GROUND PORK TRAY PACK","brand":"AMAZING TASTE","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.23902"},"productCodes":["00075756051507","0075756051507","07575605150","075756051507"],"rank":{"salesPrice":7002,"salesQuantity":962,"impressionCount":2}},{"id":"178931","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_poultry","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_poultry"],"price":{"ok":{"regPriceText":"$14.49","template":"RegPrice"}},"name":"Tyson , Chicken Bites, Boneless, Buffalo Style ","description":"Tyson , Chicken Bites, Boneless, Buffalo Style ","brand":"TYSON (MT)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/9440683_4857705b-bd3c-40be-adf5-8173e0eb4d10.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.23785"},"productCodes":["00023700014054","0023700014054","02370001405","023700014054"],"rank":{"salesPrice":3229,"salesQuantity":240,"impressionCount":15}},{"id":"179346","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$10.99","template":"RegPrice"}},"name":"Gorton''s , Taco Crunchy Breaded Taco Seasoned Fish Tenders ","description":"Gorton''s , Taco Crunchy Breaded Taco Seasoned Fish Tenders ","brand":"GORTON'S FISH (SEAF)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/10123083_b7fb8fbf-895d-478b-8f0f-fba6739eb39e.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.23538"},"productCodes":["00044400158404","0044400158404","04440015840","044400158404"],"rank":{"salesPrice":2054,"salesQuantity":190,"impressionCount":10}},{"id":"179347","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$11.99","template":"RegPrice"}},"name":"Gorton''s , Cilantro Lime Flavored Taco Tenders ","description":"Gorton''s , Cilantro Lime Flavored Taco Tenders ","brand":"GORTON'S FISH (SEAF)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/10123084_e9acba28-bde8-48a4-a836-90cfa1275430.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.23268"},"productCodes":["00044400158503","0044400158503","04440015850","044400158503"],"rank":{"salesPrice":1968,"salesQuantity":172,"impressionCount":2}},{"id":"830761","categories":["Product/meat_seafood","Product/poultry","Product/meat_seafood","Product/chicken","Product/poultry","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/poultry","Mobile/P+C/Product/chicken"],"price":{"ok":{"regPriceText":"$5.99 /lb","promoArea":{"promoText":"$4.99 /lb","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"TSMC THIN SLICED BNLS CHICKEN BREAST","description":"TSMC THIN SLICED BNLS CHICKEN BREAST","brand":"THE SAVE MART COMPANY","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.22881"},"productCodes":["00254277000007","0254277000007","25427700000","254277000007"],"rank":{"salesPrice":1288,"salesQuantity":229,"impressionCount":0}},{"id":"169229","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_poultry","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_poultry"],"price":{"ok":{"regPriceText":"$14.49","template":"RegPrice"}},"name":"Tyson, Grilled Boneless Chicken Bites ","description":"Fully cooked white meat chicken, seasoned, smoke flavor added. 20 g protein per serving. Chicken raised with no added hormones or steroids**. The Tyson Foods story began in 1935 with one simple thought; every family deserves quality chicken. Today, we're just as committed to that promise as ever. We've spent years creating new ways of bringing great food to make mealtimes more enjoyable for everyone. ** Federal regulations prohibit the use of added hormones or steroids in chicken. In Touch With Tyson Foods: We guarantee this product. If you're not completely satisfied, we will replace it. Proof of purchase required. Questions or comments? 800-233-6332 tyson.com/contact-us. Inspected for wholesomeness by U.S. Department of Agriculture. tyson.com. tyson.com/contact-us. Scan for more from tyson.com. Questions or comments? 800-233-6332 tyson.com/contact-us. ","brand":"TYSON (MT)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/9682185_9edf784b-e93a-4dce-b52d-89eb7f95cbc4.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.22822"},"productCodes":["00023700060457","0023700060457","02370006045","023700060457"],"rank":{"salesPrice":4072,"salesQuantity":304,"impressionCount":8}},{"id":"178939","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_poultry","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_poultry"],"price":{"ok":{"regPriceText":"$14.49","template":"RegPrice"}},"name":"Tyson , Popcorn Chicken ","description":"Tyson , Popcorn Chicken ","brand":"TYSON (MT)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/9861960_8032b336-aacf-499f-99f1-42bf9b5bb2bd.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.2274"},"productCodes":["00023700060129","0023700060129","02370006012","023700060129"],"rank":{"salesPrice":3632,"salesQuantity":270,"impressionCount":0}},{"id":"954430","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$9.99","promoArea":{"promoText":"$8.99","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"Coconut Gluten Free Shrimp","description":"Oven ready, easy to prepare. No preservatives added. Coconut Shrimp: Northern Chef Coconut Shrimp are produced without the use of preservatives. These shrimp are lightly dusted by hand with coconut flakes. Just follow the easy heating instruction below to finish them off to a crunchy golden brown and serve with the included sweet thai chili dipping sauce. Look for our complete line of product under our brands: Royal Asia. Northern Chef. Pre cooked. Northern Chef. We take our philosophy of dine well, feel well, live well, to dine well products are carefully chose based upon the following criteria: High quality seafood above industry standards. Consistently great tasting flavor and texture. Responsible practice to ensure the future supply of fish. ","brand":"NORTHERN CHEF","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7073362_fd9d51a7-0b21-4250-b863-2f11ecd277b9.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.22646"},"productCodes":["00877971006344","0877971006344","87797100634","877971006344"],"rank":{"salesPrice":1560,"salesQuantity":160,"impressionCount":33}},{"id":"54957","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/fish","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/fish"],"price":{"ok":{"regPriceText":"$6.99","template":"RegPrice"}},"name":"Violife , Shreds Mexican Style Cheese Alternative ","description":"Violife , Shreds Mexican Style Cheese Alternative ","brand":"VIOLIFE FOODS","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7069429_a2896570-1d51-43c2-96b3-ff8555aebd98.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.22458"},"productCodes":["00810934031137","0810934031137","81093403113","810934031137"],"rank":{"salesPrice":2083,"salesQuantity":298,"impressionCount":9}},{"id":"901525","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_poultry","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_poultry"],"price":{"ok":{"regPriceText":"$14.99","template":"RegPrice"}},"name":"Tyson , Honey BBQ Flavored Chicken Strips ","description":"Tyson , Honey BBQ Flavored Chicken Strips ","brand":"TYSON (MT)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7077772_4adf37b9-6790-4d29-921c-d5cdaaf75cd0.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.2227"},"productCodes":["00023700014139","0023700014139","02370001413","023700014139"],"rank":{"salesPrice":2777,"salesQuantity":220,"impressionCount":10}},{"id":"178411","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_poultry","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_poultry"],"price":{"ok":{"regPriceText":"$13.29","template":"RegPrice"}},"name":"Tyson, Lemon Pepper Crispy Wings ","description":"Fully cooked dry rubbed chicken wing sections, with lemon pepper seasoning. 13 g protein per serving. Chicken raised with no added hormones or steroids**. Now more wings air fryer ready. ** Federal regulations prohibit the use of added hormones or steroids in chicken. In Touch With Tyson Foods: We guarantee this product. If you're not completely satisfied, we will replace it. Proof of purchase required. Questions or comments? 800-233-6332 tyson.com/contact-us. Inspected for wholesomeness by U.S. Department of Agriculture. tyson.com. Scan for more from tyson.com. Questions or comments? 800-233-6332; tyson.com/contact-us. ","brand":"TYSON (MT)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/9861962_2c30240c-4e9f-49ea-900b-23d60ebbbc47.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.222"},"productCodes":["00023700061546","0023700061546","02370006154","023700061546"],"rank":{"salesPrice":3205,"salesQuantity":246,"impressionCount":14}},{"id":"142477","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_poultry","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_poultry"],"price":{"ok":{"regPriceText":"$19.99","template":"RegPrice"}},"name":"Foster Farms , Family Pack Classic Breast Nuggets ","description":"Foster Farms , Family Pack Classic Breast Nuggets ","brand":"FOSTER FARMS MEATS","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/8319337_45928465-e0f6-4450-bc21-4f3c4069eca6.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.21683"},"productCodes":["00075278996423","0075278996423","07527899642","075278996423"],"rank":{"salesPrice":4329,"salesQuantity":226,"impressionCount":6}},{"id":"169207","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_poultry","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_poultry"],"price":{"ok":{"regPriceText":"$14.49","template":"RegPrice"}},"name":"Tyson, Grilled Chicken Tenders ","description":"Fully cooked boneless skinless breast with rib meat, seasoned, smoke flavor added. 20 g protein per serving. Chicken raised with no added hormones or steroids**. The Tyson Foods story began in 1935 with one simple thought; every family deserves quality chicken. Today, we're just as committed to that promise as ever. We've spent years creating new ways of bringing great food to make mealtimes more enjoyable for everyone. ** Federal regulations prohibit the use of added hormones or steroids in chicken. In Touch With Tyson Foods: We guarantee this product. If you're not completely satisfied, we will replace it. Proof of purchase required. Questions or comments? 800-233-6332 tyson.com/contact-us. Inspected for wholesomeness by U.S. Department of Agriculture. tyson.com. Scan for more from tyson.com. Questions or comments? 800-233-6332 tyson.com/contact-us. ","brand":"TYSON (MT)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/9280887_840dbbab-d0b2-4642-abaa-d5d4cb62badd.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.20709"},"productCodes":["00023700060433","0023700060433","02370006043","023700060433"],"rank":{"salesPrice":3520,"salesQuantity":262,"impressionCount":6}},{"id":"156926","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_poultry","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_poultry"],"price":{"ok":{"regPriceText":"$11.99","promoArea":{"promoText":"$8.99","validityText":"Valid 03/26/26 - 06/25/26"},"template":"NewPrice"}},"name":"Foster Farms, Classic Dino Nuggets ","description":"Shaped breaded chicken breast patties with rib meat. Per Serving: 230 calories; 4 g sat fat (20% DV); 420 mg sodium (18% DV) <1 g total sugars; 9 g protein (16% DV). Serving families since 1939. Chicken raised with no antibiotics ever! Chicken raised with no added hormones* or steroids* ever! Ready in about 7 minutes from your air fryer. Fully cooked. Microwaveable. No preservatives. At Foster Farms, being simply better is our way of life. It's what we strive for in everything we do. Serving families since 1939, Foster Farms has always been a brand you can trust. We're helping you redefine what's possible at every meal because good food feeds good times. Better care. Better quality. Better taste. That's the Foster Farms way. * Federal regulations do not permit the use of hormones or steroids in poultry. This is Our Promise to You: If you are not satisfied with this product, we will promptly replace your purchase. Simply return this label with the reason and proof of purchase to: Foster Farm, P.O. Box 306, Livingston, CA 95334. If you have questions or comments, please call 1-800-255-7227, Monday - Friday, 8 am - 5 pm PST. Inspected for wholesomeness by U.S. Department of Agriculture. fosterfarms.com. We'd love to hear from you! Find us at fosterfarms.com and follow us on: Instagram. Facebook. X. @fosterfarms. Resealable for freshness! ","brand":"FOSTER FARMS MEAT","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/11127854_3633d570-01c8-423a-9347-3aed7072db5d.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.20333"},"productCodes":["00075278996430","0075278996430","07527899643","075278996430"],"rank":{"salesPrice":4950,"salesQuantity":542,"impressionCount":13}},{"id":"222968","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/shrimp","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/shrimp"],"price":{"ok":{"regPriceText":"$27.99","promoArea":{"promoText":"$23.98","validityText":"Valid 05/04/26 - 05/14/26"},"template":"NewPrice"}},"name":"Cooked Shrimp, 40/50 count ","description":"40-50 Cooked Shrimp ","brand":"MASTER CATCH","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7066429_82769a2c-55c0-4d94-a69f-33d6ff1ba746.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.20052"},"productCodes":["00019964205956","00027241744814","0019964205956","0027241744814","00480000224925","00717544137047","00890620001750","01996420595","019964205956","02724174481","027241744814","0480000224925","0717544137047","0890620001750","48000022492","480000224925","71754413704","717544137047","89062000175","890620001750"],"rank":{"salesPrice":21146,"salesQuantity":988,"impressionCount":138}},{"id":"193494","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/shrimp","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/shrimp"],"price":{"ok":{"regPriceText":"$31.99","promoArea":{"promoText":"$27.98","validityText":"Valid 05/04/26 - 05/14/26"},"template":"NewPrice"}},"name":"31/40 TROPICAL COOKED PD TAIL OFF SHRIMP IQF","description":"31/40 TROPICAL COOKED PD TAIL OFF SHRIMP IQF","brand":"TROPICAL","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.19324"},"productCodes":["00647283224978","0647283224978","64728322497","647283224978"],"rank":{"salesPrice":4186,"salesQuantity":122,"impressionCount":4}},{"id":"926916","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$16.99","template":"RegPrice"}},"name":"Gorton''s , Fish Sticks ","description":"Gorton''s , Fish Sticks ","brand":"GORTON'S FISH (SEAF)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7086089_0b55033c-3a98-4a96-9318-14ccbf2915f4.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.19054"},"productCodes":["00044400103107","0044400103107","04440010310","044400103107"],"rank":{"salesPrice":4043,"salesQuantity":238,"impressionCount":1}},{"id":"178413","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_poultry","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_poultry"],"price":{"ok":{"regPriceText":"$13.29","template":"RegPrice"}},"name":"Tyson, Rotisserie Seasoned Crispy Wings ","description":"Fully cooked dry rubbed chicken wing sections with rotisserie style seasoning. 14 g protein per serving. Chicken raised with no added hormones or steroids **. Now more wings air fryer ready. ** Federal regulations prohibit the use of added hormones or steroids in chicken. The Tyson Foods story began in 1935 with one simple thought; every family deserves quality chicken. Today, we're just as committed to that promise as ever. We've spent years creating new ways of bringing great food to make mealtimes more enjoyable for everyone. In Touch with Tyson Foods: We guarantee this product. If you¿re not completely satisfied, we will replace it. Proof of purchase required. Inspected for wholesomeness by U.S. Department of Agriculture. tyson.com. tyson.com/contact-us. Scan for more from tyson.com. Questions or comments? 800-233-6332; tyson.com/contact-us. ","brand":"TYSON (MT)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/9716009_5793fd67-f4ec-49c9-a968-3a2a86861dde.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.18749"},"productCodes":["00023700061560","0023700061560","02370006156","023700061560"],"rank":{"salesPrice":1992,"salesQuantity":152,"impressionCount":4}},{"id":"178412","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_poultry","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_poultry"],"price":{"ok":{"regPriceText":"$13.29","template":"RegPrice"}},"name":"Tyson, Garlic Parmesan Crispy Wings ","description":"Fully cooked dry rubbed chicken wing sections seasoned with garlic and parmesan cheese. 14 g protein per serving. Chicken raised with no added hormones or steroids**. Now more wings. Air fryer ready. The Tyson Foods story began in 1935 with one simple thought; every family deserves quality chicken. Today, we're just as committed to that promise as ever. We've spent years creating new ways of bringing great food to make mealtimes more enjoyable for everyone. ** Federal regulations prohibit the use of added hormones or steroids in chicken. In Touch with Tyson Foods: We guarantee this product. If you're not completely satisfied, we will replace it. Proof of purchase required. Inspected for wholesomeness by U.S. Department of Agriculture. tyson.com. Scan for more from tyson.com. Questions or comments? 800-233-6332 tyson.com/contact-us. ","brand":"TYSON (MT)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/9716008_de763a17-f253-49bf-b3c4-4f846e0f6a0e.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.18702"},"productCodes":["00023700061553","0023700061553","02370006155","023700061553"],"rank":{"salesPrice":2330,"salesQuantity":178,"impressionCount":5}},{"id":"178669","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/crab_lobster","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/crab_lobster"],"price":{"ok":{"regPriceText":"$30","template":"RegPrice"}},"name":"Crawfish Boil Bundle ","description":"Includes: Cooked crawfish, Andouille sausage, Small potatoes, Corn on the cob, Crawfish boil seasoning, and Cajun seasoning ","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/9556814_79e4eb79-44b2-4a67-b951-7fe9d582afe5.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.18068"},"productCodes":["00255509000000","0255509000000","25550900000","255509000000"],"rank":{"salesPrice":4634,"salesQuantity":156,"impressionCount":6}},{"id":"945658","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/fish","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/fish"],"price":{"ok":{"regPriceText":"$6.99","template":"RegPrice"}},"name":"Violife , Cheddar Slices Cheese Alternative ","description":"Violife , Cheddar Slices Cheese Alternative ","brand":"VIOLIFE FOODS","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7069424_897ac06a-e637-4693-bf5d-c659c69a8d2a.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.17985"},"productCodes":["00810934030352","0810934030352","81093403035","810934030352"],"rank":{"salesPrice":1572,"salesQuantity":226,"impressionCount":1}},{"id":"178415","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_poultry","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_poultry"],"price":{"ok":{"regPriceText":"$2.79","template":"RegPrice"}},"name":"Armour, Pretzel Dog ","description":"Chicken frank wrapped in pretzel dough. Contains bioengineered food ingredients. Ready in under 2 minutes in the microwave. Inspected for wholesomeness by U.S. Department of Agriculture. www.armourmeats.com. ","brand":"ARMOUR MEATS","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/11492827_10bf9001-fc61-4113-9ec9-70c6d1eb6d4d.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.17363"},"productCodes":["00027815020955","0027815020955","02781502095","027815020955"],"rank":{"salesPrice":323,"salesQuantity":116,"impressionCount":0}},{"id":"156927","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_poultry","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_poultry"],"price":{"ok":{"regPriceText":"$11.99","promoArea":{"promoText":"$8.99","validityText":"Valid 03/26/26 - 06/25/26"},"template":"NewPrice"}},"name":"Foster Farms, Breast Nuggets ","description":"Shaped breaded chicken breast patties with rib meat. Per Serving: 190 calories; 3 g sat fat (15% DV); 380 mg sodium (17% DV); <1 g total sugars; 10 g protein (18% DV). Serving families since 1939. Chicken raised with no antibiotics ever! Chicken raised with no added hormones or steroids* ever! Ready in about 7 minutes from your air fryer. Fully cooked. Microwaveable. No preservatives. At Foster Farms, being simply better is our way of life. It's what we strive for in everything we do. Serving families since 1939, Foster Farms has always been a brand you can trust. We're helping you redefine what's possible at every meal because good food feeds good times. Better care. Better quality. Better taste. That's the Foster Farms way. * Federal regulations do not permit the use of hormones or steroids in poultry. This is Our Promise to You: If you are not satisfied with this product, we will promptly replace your purchase. Simply return this label with the reason and proof of purchase to: Foster Farms, P.O. Box 306, Livingston, CA 95334. If you have questions or comments, please call 1-800-255-7227, Monday - Friday, 8 am - 5 pm PST. Inspected for wholesomeness by U.S. Department of Agriculture. fosterfarms.com. We'd love to hear from you! Find us at fosterfarms.com and follow us on: Instagram. Facebook. X. @fosterfarms. Resealable for freshness! ","brand":"FOSTER FARMS MEAT","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/11197656_8e6c5f1b-fc8f-457e-9081-92f283e9e2df.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.17316"},"productCodes":["00075278996447","0075278996447","07527899644","075278996447"],"rank":{"salesPrice":4752,"salesQuantity":520,"impressionCount":3}},{"id":"945655","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/fish","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/fish"],"price":{"ok":{"regPriceText":"$6.99","template":"RegPrice"}},"name":"Violife , Shreds Cheddar Cheese Alternative ","description":"Violife , Shreds Cheddar Cheese Alternative ","brand":"VIOLIFE FOODS","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7069423_a995997d-f644-4dc7-8b5a-6540a5567749.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.17175"},"productCodes":["00810934030215","0810934030215","81093403021","810934030215"],"rank":{"salesPrice":1104,"salesQuantity":158,"impressionCount":1}},{"id":"178932","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_poultry","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_poultry"],"price":{"ok":{"regPriceText":"$14.49","template":"RegPrice"}},"name":"Tyson, Lightly Breaded Chicken Strips ","description":"Fully cooked breaded chicken breast strips with rib meat. 17 g of protein per serving. Chicken raised with no added hormones or steroids**. The Tyson Foods story began in 1935 with one simple thought; every family deserves quality chicken. Today, we're just as committed to that promise as ever. We've spent years creating new ways of bringing great food to make mealtimes more enjoyable for everyone. ** Federal regulations prohibit the use of added hormones or steroids in chicken. In Touch With Tyson Foods: We guarantee this product. If you're not completely satisfied, we will replace it. Proof of purchase required. Questions or comments? 800-233-6332 tyson.com/contact-us. Inspected for wholesomeness by U.S. Department of Agriculture. www.tyson.com. Scan for more from tyson.com. 800-233-6332. ","brand":"TYSON (MT)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/9861958_4112b9c8-925b-4a1a-a6d7-51d0e4573c43.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.16647"},"productCodes":["00023700060006","0023700060006","02370006000","023700060006"],"rank":{"salesPrice":1768,"salesQuantity":132,"impressionCount":1}},{"id":"178944","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/"],"price":{"ok":{"regPriceText":"$6.49","template":"RegPrice"}},"name":"Shaved Chicken Breast","description":"Chicken breast with rib meat. 24 g protein per serving. Gluten free. Since 1914. Family owned. Quality foods. Inspected for wholesomeness by U.S. Department of Agriculture. oldneighborhoodfoods.com. Born, raised, harvested in the U.S.A. ","brand":"DEMAKES BROS.","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/9933232_8816c8c0-5e65-4a88-b006-92ce99ecd8fa.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.15802"},"productCodes":["00052294008972","0052294008972","05229400897","052294008972"],"rank":{"salesPrice":674,"salesQuantity":116,"impressionCount":0}},{"id":"85492","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_burgers_patties","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_burgers_patties"],"price":{"ok":{"regPriceText":"$12.49","template":"RegPrice"}},"name":"Red Bird , Original Chicken Burgers ","description":"Red Bird , Original Chicken Burgers ","brand":"RED BIRD FARMS","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/8071027_b73ad7d3-422d-4f64-b8ae-896111a4b4e1.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.15743"},"productCodes":["00686443312001","0686443312001","68644331200","686443312001"],"rank":{"salesPrice":2035,"salesQuantity":172,"impressionCount":12}},{"id":"178938","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_poultry","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_poultry"],"price":{"ok":{"regPriceText":"$14.49","template":"RegPrice"}},"name":"Tyson, Lightly Breaded Boneless Chicken Bites ","description":"Fully cooked breaded white meat chicken. 17 g protein per serving. Chicken raised with no added hormones or steroids**. The Tyson Foods story began in 1935 with one simple thought; every family deserves quality chicken. Today, we're just as committed to that promise as ever. We've spent years creating new ways of bringing great food to make mealtimes more enjoyable for everyone. **Federal regulations prohibit the use of added hormones or steroids in chicken. In Touch with Tyson Foods: We guarantee this product. If you're not completely satisfied, we will replace it. Proof of purchase required. Questions or comments? 800-233-6332; tyson.com/contact-us. Inspected for wholesomeness by U.S. Department of Agriculture. tyson.com. Scan for more from tyson.com. ","brand":"TYSON (MT)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/9861959_acf038b2-5652-4166-9d73-686bff788963.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.15297"},"productCodes":["00023700060037","0023700060037","02370006003","023700060037"],"rank":{"salesPrice":1937,"salesQuantity":144,"impressionCount":21}},{"id":"193882","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$10","promoArea":{"promoText":"$5","validityText":"Valid 04/28/26 - 10/25/26"},"template":"NewPrice"}},"name":"FROZEN ATLANTIC COD PORTIONS","description":"SALT & SEA FROZEN ATLANTIC COD PORTIONS","brand":"salt & sea","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.15074"},"productCodes":["00850066060025","0850066060025","85006606002","850066060025"],"rank":{"salesPrice":2440,"salesQuantity":310,"impressionCount":4}},{"id":"92042","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$18.99","template":"RegPrice"}},"name":"Gortons , Fish Fillets ","description":"Made with breadcrumbs from daily baked bread. Breaded fish fillets. 120 mg of EPA and DHA Omega-3 fatty acids per serving. Trusted since 1849. 100% real fish no fillers. Will caught. Natural omega-3. 100% Real Fish: Wild-caught Pollock, a mild, flaky white fish. Real Simple: No fillers, no artificial colors or flavors, no preservatives or hydrogenated oils, and tested mercury safe. Real delicious! The Gorton's fisherman. Trusted Catch. 100% real fish. Sourced responsibly. USDA dietary guidelines recommended seafood twice a week (Typical serving is 4 oz cooked). No one makes it easier to enjoy great-tasting seafood than Gorton's! Real fish, simple ingredients. 100% wild-caught pollock. Breadcrumb coating. Vegetable oil. Although great care is taken to remove bones, some may remain. www.gortons.com. Find easy recipes & special offers on Gortons.com & facebook.com/gortonsseafood. Learn more at gortons.com/sustainability. Questions? Comments? We value your feedback. Call 1-800-222-6846 (Mon - Fri 8:30 AM - 6:00 PM ET) or visit www.gortons.com (Please have this package for reference). Try unbeatably fresh-tasting fish sticks and fillets!: Beer Battered; fish sticks; crispy battered. Reclosable zipper! Made in the USA with domestic & imported ingredients. ","brand":"GORTON'S FISH (SEAF)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7095368_db852e70-fe7c-4d16-b23e-c663536d947b.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.14557"},"productCodes":["00044400191005","0044400191005","04440019100","044400191005"],"rank":{"salesPrice":2316,"salesQuantity":122,"impressionCount":0}},{"id":"989384","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_poultry","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_poultry"],"price":{"ok":{"regPriceText":"$39.99","template":"RegPrice"}},"name":"Buffalo Style Wings","description":"Winganza , Buffalo Style Wings ","brand":"Winganza","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/8140557_0493ac18-5006-4a29-9bf8-425464a50b11.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.14158"},"productCodes":["00629859117150","0629859117150","62985911715","629859117150"],"rank":{"salesPrice":759,"salesQuantity":20,"impressionCount":4}},{"id":"73940","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_steaks_roasts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_steaks_roasts"],"price":{"ok":{"regPriceText":"$14.99 /lb","template":"RegPrice"}},"name":"Beef Chuck Flanken Short Rib, Bone-In, Sold In the Bag ","description":"Beef Chuck Flanken Short Rib, Bone-In, Sold In the Bag ","brand":"THE SAVE MART COMPANY","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.14135"},"productCodes":["00250703000009","0250703000009","25070300000","250703000009"],"rank":{"salesPrice":7781,"salesQuantity":208,"impressionCount":0}},{"id":"173104","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$13.99","promoArea":{"promoText":"$8.99","validityText":"Valid 02/04/26 - 12/31/26"},"template":"NewPrice"}},"name":"PREMIER SEAFOOD CAJUN SOCKEYE SALMON BRGR","description":"PREMIER SEAFOOD CAJUN SOCKEYE SALMON BRGR","brand":"PREMIER SEAFOODS","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.1356"},"productCodes":["00828684050155","0828684050155","82868405015","828684050155"],"rank":{"salesPrice":1762,"salesQuantity":190,"impressionCount":11}},{"id":"169237","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_poultry","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_poultry"],"price":{"ok":{"regPriceText":"$14.49","template":"RegPrice"}},"name":"Tyson, Blackened Flavored Diced Chicken Breast ","description":"Fully cooked boneless skinless with rib meat, seasoned with blackened spices. 22 g protein per serving. Chicken raised with no added hormones or steroids**. Fully cooked. The Tyson Foods story began in 1935 with one simple thought; every family deserves quality chicken. Today, we're just as committed to that promise as ever. We've spent years creating new ways of bringing great food to make mealtimes more enjoyable for everyone. ** Federal regulations prohibit the use of added hormones or steroids in chicken. In Touch With Tyson Foods: We guarantee this product. If you're not completely satisfied, we will replace it. Proof of purchase required. Questions or comments? 800-233-6332 tyson.com/contact-us. Inspected for wholesomeness by U.S. Department of Agriculture. tyson.com/contact-us. tyson.com. Scan for more from tyson.com. 800-233-6332. ","brand":"TYSON (MT)","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/9996935_ee31e2e0-2823-4b43-8cc9-2f114207f9d2.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.13196"},"productCodes":["00023700060761","0023700060761","02370006076","023700060761"],"rank":{"salesPrice":1663,"salesQuantity":124,"impressionCount":0}},{"id":"173103","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$13.99","promoArea":{"promoText":"$8.99","validityText":"Valid 02/04/26 - 12/31/26"},"template":"NewPrice"}},"name":"PREMIER SFD MEDITERRANEAN SOCKEYE SLMN BRGR","description":"PREMIER SFD MEDITERRANEAN SOCKEYE SLMN BRGR","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.12828"},"productCodes":["00828684050148","0828684050148","82868405014","828684050148"],"rank":{"salesPrice":1672,"salesQuantity":174,"impressionCount":0}},{"id":"194153","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$24.99","promoArea":{"promoText":"$15.89","validityText":"Valid 04/10/26 - 04/11/27"},"template":"NewPrice"}},"name":"RASIA HONEY WALNUT SHRIMP","description":"RASIA HONEY WALNUT SHRIMP","brand":"ROYAL ASIA (FRZN)","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.12773"},"productCodes":["00877971006696","0877971006696","87797100669","877971006696"],"rank":{"salesPrice":5111,"salesQuantity":290,"impressionCount":2}},{"id":"173113","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$16.99","template":"RegPrice"}},"name":"MAMA BEAR SALMON CUBES","description":"MAMA BEAR SALMON CUBES","brand":"MAMA BEAR (SOUTHRING)","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.12597"},"productCodes":["00850040325027","0850040325027","85004032502","850040325027"],"rank":{"salesPrice":1189,"salesQuantity":62,"impressionCount":2}},{"id":"205913","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/shrimp","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/shrimp"],"price":{"ok":{"regPriceText":"$33.99","promoArea":{"promoText":"$29.98","validityText":"Valid 05/04/26 - 05/14/26"},"template":"NewPrice"}},"name":"BLUE SEA 26-30 COOKED PDTO IQF 5X2","description":"BLUE SEA 26-30 COOKED PDTO IQF 5X2","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.12515"},"productCodes":["00659878009440","0659878009440","65987800944","659878009440"],"rank":{"salesPrice":1355,"salesQuantity":42,"impressionCount":0}},{"id":"85493","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_burgers_patties","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_burgers_patties"],"price":{"ok":{"regPriceText":"$12.49","template":"RegPrice"}},"name":"Red Bird , Mild Three Chilies Chicken Patties ","description":"Red Bird , Mild Three Chilies Chicken Patties ","brand":"RED BIRD FARMS","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/8071028_1ff5aa40-af19-4403-8191-17ca2fd57207.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.12268"},"productCodes":["00686443313107","0686443313107","68644331310","686443313107"],"rank":{"salesPrice":1386,"salesQuantity":114,"impressionCount":27}},{"id":"173105","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$13.99","promoArea":{"promoText":"$8.99","validityText":"Valid 02/04/26 - 12/31/26"},"template":"NewPrice"}},"name":"PREMIER SEAFOOD LEMON DILL SOCKEYE SLMN BRGR","description":"PREMIER SEAFOOD LEMON DILL SOCKEYE SLMN BRGR","brand":"PREMIER SEAFOODS","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.12233"},"productCodes":["00828684050162","0828684050162","82868405016","828684050162"],"rank":{"salesPrice":1430,"salesQuantity":158,"impressionCount":2}},{"id":"156718","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/"],"price":{"ok":{"regPriceText":"$9.99","template":"RegPrice"}},"name":"PORK NECKBONES CUT 2LB","description":"HACIENDA DEL VALLE PORK NECKBONES CUT 2LB","brand":"HACIENDA DEL VALLE","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.11153"},"productCodes":["00827492000109","0827492000109","82749200010","827492000109"],"rank":{"salesPrice":745,"salesQuantity":62,"impressionCount":0}},{"id":"172435","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$16.99","template":"RegPrice"}},"name":"MAMA BEAR ATLANTIC SALMON BURGERS","description":"MAMA BEAR ATLANTIC SALMON BURGERS","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.09833"},"productCodes":["00850040325102","0850040325102","08500403251020","85004032510","850040325102","8500403251020"],"rank":{"salesPrice":1129,"salesQuantity":52,"impressionCount":0}},{"id":"172665","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$9.99","template":"RegPrice"}},"name":"MODERN MAMA'S SHRIMP SCAMPI BITES","description":"MODERN MAMA'S SHRIMP SCAMPI BITES","brand":"MODERN MAMAS","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.09415"},"productCodes":["00860012921713","0860012921713","86001292171","860012921713"],"rank":{"salesPrice":439,"salesQuantity":44,"impressionCount":8}},{"id":"156710","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/"],"price":{"ok":{"regPriceText":"$11.79","template":"RegPrice"}},"name":"PORK FEET CUT 2LB","description":"HACIENDA DEL VALLE PORK FEET CUT 2LB","brand":"HACIENDA DEL VALLE","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.09357"},"productCodes":["00827492000024","0827492000024","82749200002","827492000024"],"rank":{"salesPrice":801,"salesQuantity":56,"impressionCount":2}},{"id":"82333","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/party_trays","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/party_trays"],"price":{"ok":{"regPriceText":"$6.99","template":"RegPrice"}},"name":"GREA COOKED SHRIMP RING 61/70","description":"GREA COOKED SHRIMP RING 61/70","brand":"GREAT AMERICAN","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/9660101_17ed4f72-c944-4243-938c-e7043c21a3f4.png"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.09357"},"productCodes":["00829944094056","0829944094056","82994409405","829944094056"],"rank":{"salesPrice":1398,"salesQuantity":200,"impressionCount":0}},{"id":"156715","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/"],"price":{"ok":{"regPriceText":"$12.79","template":"RegPrice"}},"name":"BEEF DICED TRIPE CUT 2LB","description":"HACIENDA DEL VALLE BEEF DICED TRIPE CUT 2LB","brand":"HACIENDA DEL VALLE","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.0917"},"productCodes":["00827492000055","0827492000055","82749200005","827492000055","82749255"],"rank":{"salesPrice":741,"salesQuantity":40,"impressionCount":6}},{"id":"156713","categories":["Product/meat_seafood","Product/beef","Product/meat_seafood","Product/beef_variety_cuts","Product/beef","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/beef","Mobile/P+C/Product/beef_variety_cuts"],"price":{"ok":{"regPriceText":"$14.99","template":"RegPrice"}},"name":"BEEF FEET CUT 2LB","description":"HACIENDA DEL VALLE BEEF FEET CUT 2LB","brand":"HACIENDA DEL VALLE","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.09016"},"productCodes":["00827492000048","0827492000048","82749200004","827492000048"],"rank":{"salesPrice":749,"salesQuantity":44,"impressionCount":4}},{"id":"173102","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$19.99","promoArea":{"promoText":"$13.99","validityText":"Valid 02/04/26 - 12/31/26"},"template":"NewPrice"}},"name":"PREMIER SEAFOOD WILD FISH TACO KIT","description":"PREMIER SEAFOOD WILD FISH TACO KIT","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.08347"},"productCodes":["00828684050131","0828684050131","82868405013","828684050131"],"rank":{"salesPrice":755,"salesQuantity":50,"impressionCount":4}},{"id":"172666","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$12.99","template":"RegPrice"}},"name":"MODERN MAMA'S SHRIMP JAMBALAYA BITES","description":"MODERN MAMA'S SHRIMP JAMBALAYA BITES","brand":"MODERN MAMAS","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.07784"},"productCodes":["00860012921751","0860012921751","86001292175","860012921751"],"rank":{"salesPrice":369,"salesQuantity":34,"impressionCount":4}},{"id":"179276","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/prepared_seafood","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/prepared_seafood"],"price":{"ok":{"regPriceText":"$17.99","promoArea":{"promoText":"$10.99","validityText":"Valid 04/29/26 - 05/05/26"},"template":"NewPrice"}},"name":"STARF 2/5 IVP TILAPIA FILLET 10X3LB","description":"STARF 2/5 IVP TILAPIA FILLET 10X3LB","brand":"STAR FEAST","primaryImage":{},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.07643"},"productCodes":["00813135023000","0813135023000","81313502300","813135023000"],"rank":{"salesPrice":3499,"salesQuantity":214,"impressionCount":2}},{"id":"945657","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/fish","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/fish"],"price":{"ok":{"regPriceText":"$6.99","template":"RegPrice"}},"name":"Violife , Mozzarella Shreds Cheese Alternative ","description":"Melts great! Packaged in protective atmosphere. ","brand":"VIOLIFE FOODS","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7069422_9453f3cf-a2db-4382-b2dc-70336e45ab6e.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.07525"},"productCodes":["00810934030208","0810934030208","81093403020","810934030208"],"rank":{"salesPrice":153,"salesQuantity":22,"impressionCount":0}},{"id":"227392","categories":["Product/meat_seafood","Product/frozen_meat_seafood","Product/meat_seafood","Product/frozen_burgers_patties","Product/frozen_meat_seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/frozen_meat_seafood","Mobile/P+C/Product/frozen_burgers_patties"],"price":{"ok":{"regPriceText":"$16.99","promoArea":{"promoText":"$16.49","validityText":"Valid 05/01/26 - 05/10/26"},"template":"NewPrice"}},"name":"ANGUS PATTIES FROZEN","description":"MIAMI BEEF ANGUS PATTIES FROZEN","brand":"MIAMI BEEF","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/11455889_5e7515a8-7168-4a91-ac9f-6b5aad988cb4.jpeg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.06915"},"productCodes":["00024627130810","0024627130810","02462713081","024627130810"],"rank":{"salesPrice":3089,"salesQuantity":166,"impressionCount":0}},{"id":"46947","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/party_trays","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/party_trays"],"price":{"ok":{"regPriceText":"$59.99","template":"RegPrice"}},"name":"Shrimp Supreme Platter, Large","description":"This platter is swimming with shrimp and more shrimp. A school of tender, cooked prawns circle our premium cocktail sauce. This is the supreme platter for the shrimp lover! Contains allergens: Shellfish. Serves 12-16.","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7063049_94475b87-298f-42bd-8549-3113315c41f7.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.02501"},"productCodes":["00255953000007","0255953000007","25595300000","255953000007"],"rank":{"salesPrice":119,"salesQuantity":2,"impressionCount":0}},{"id":"46948","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/party_trays","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/party_trays"],"price":{"ok":{"regPriceText":"$49.99","template":"RegPrice"}},"name":"Shrimp Supreme Platter, Medium Shrimp Supreme Platter, Medium","description":"This platter is swimming with shrimp and more shrimp. A school of tender, cooked prawns circle our premium cocktail sauce. This is the supreme platter for the shrimp lover! This platter is swimming with shrimp and more shrimp. A school of tender, cooked prawns circle our premium cocktail sauce. This is the supreme platter for the shrimp lover!","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7063050_92671c9c-8c46-44c0-a7f2-d2374752b853.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.01996"},"productCodes":["00255954000006","0255954000006","25595400000","255954000006"],"rank":{"salesPrice":6,"salesQuantity":2,"impressionCount":12}},{"id":"46949","categories":["Product/meat_seafood","Product/seafood","Product/meat_seafood","Product/party_trays","Product/seafood","Product/meat_seafood","Mobile/P+C/Product/meat_seafood","Mobile/P+C/Product/seafood","Mobile/P+C/Product/party_trays"],"price":{"ok":{"regPriceText":"$49.99","template":"RegPrice"}},"name":"Captain's Catch Tray - Large (170-250 Cal. Per Serving) Captain's Catch Tray-Large (170-250 Cal. Per Serving)","description":"A boatload of tender cooked prawns, Pacific Coast shrimp meat and delicious crab-flavored flakes, ready to dive into our premium cocktail sauce. Contains allergens: Shellfish. Serves 12-16. A boatload of tender cooked prawns, Pacific Coast shrimp meat and delicious crab-flavored flakes, ready to dive into our premium cocktail sauce. Contains allergens: Shellfish. Serves 12-16.","brand":"THE SAVE MART COMPANY","primaryImage":{"url":"https://assets.swiftlycontent.net/assets/product/7063052_e1bd2153-95b9-42e0-8093-b75caec8363f.jpg"},"eligibleFor":["SNAP_EBT"],"hasCoupon":false,"explain":{"score":"0.0","boostScore":"0.0","productScore":"0.01197"},"productCodes":["00255956000004","0255956000004","25595600000","255956000004"],"rank":{"salesPrice":99,"salesQuantity":2,"impressionCount":0}}],"facets":[{"displayName":"Brand","filter":"brand","type":"ValueFilter","items":[{"name":"AMAZING TASTE","count":1},{"name":"ARMOUR MEATS","count":1},{"name":"BLUE SEA PRODUCTS","count":1},{"name":"BORNSTEIN SEAFOODS (BORNSTEIN SEAFOODS, INC.)","count":1},{"name":"BUBBA FOODS","count":2},{"name":"BUTTERBALL MEATS","count":3},{"name":"CACIQUE","count":2},{"name":"COOKS HAM","count":3},{"name":"DEMAKES BROS.","count":2},{"name":"DIAMOND VALLEY","count":1},{"name":"ECHO FALLS","count":1},{"name":"EL MEXICANO","count":3},{"name":"FARMER JOHN","count":1},{"name":"FOSTER FARMS MEAT","count":5},{"name":"FOSTER FARMS MEATS","count":16},{"name":"GORTON'S FISH (SEAF)","count":22},{"name":"GRASS RUN FARMS","count":1},{"name":"GREAT AMERICAN","count":6},{"name":"GREAT AMERICAN SEAFOOD (GREAT AMERICAN SEAFOOD IMPORTS CO)","count":1},{"name":"GREEN VALLEY CREAMERY","count":4},{"name":"HACIENDA DEL VALLE","count":4},{"name":"HARBOR SEAFOOD","count":1},{"name":"HARRIS RANCH MEAT","count":1},{"name":"HONEY SMOKED FISH CO.","count":1},{"name":"HONEY SUCKLE WHITE POULTRY","count":1},{"name":"IMPOSSIBLE - PLANT BASED","count":1},{"name":"ISERNIO'S","count":1},{"name":"JENNIE-O (MT)","count":3},{"name":"JUST BARE CHICKEN","count":5},{"name":"KING","count":1},{"name":"MAMA BEAR (SOUTHRING)","count":1},{"name":"MASTER CATCH","count":4},{"name":"MASTER CUT MEATS","count":3},{"name":"MEKONG","count":1},{"name":"MIAMI BEEF","count":1},{"name":"Miller Amish","count":1},{"name":"MODERN MAMAS","count":2},{"name":"MORAN'S (MT)","count":2},{"name":"NEW YORK STYLE SAUSAGE","count":1},{"name":"NORTHERN CHEF","count":4},{"name":"O'DONNELL'S","count":1},{"name":"PREMIER SEAFOODS","count":2},{"name":"RANDALLS","count":2},{"name":"RED BIRD FARMS","count":2},{"name":"RICHWOOD","count":1},{"name":"ROYAL ASIA (FRZN)","count":1},{"name":"ROYAL WHITE (SURAM TRADING)","count":1},{"name":"salt & sea","count":2},{"name":"SCHWEID & SONS","count":2},{"name":"SEA-PAK (MT)","count":9},{"name":"SHRIMP KING","count":1},{"name":"SKYLARK","count":1},{"name":"SMITH FIELD MEAT","count":2},{"name":"STAR FEAST","count":1},{"name":"SWIFT (MT)","count":2},{"name":"THE SAVE MART COMPANY","count":65},{"name":"TRANSOCEAN","count":4},{"name":"TROPICAL","count":1},{"name":"TYSON (MT)","count":20},{"name":"VIOLIFE FOODS","count":4},{"name":"WILMAR BEEF","count":1},{"name":"Winganza","count":1}],"title":"product_brand"},{"displayName":"EBT Available","filter":"ebt-only","type":"Flag","items":[],"title":"sp_ebt_eligible"}]}} \ No newline at end of file diff --git a/backend/tests/fixtures/lucky_ca/weekly_ad.html b/backend/tests/fixtures/lucky_ca/weekly_ad.html new file mode 100644 index 0000000..1fe990c --- /dev/null +++ b/backend/tests/fixtures/lucky_ca/weekly_ad.html @@ -0,0 +1,89 @@ +Featured in Ad | Luckys Supermarket

Coupons

Refine

Category
Category
Brand

13 Results

:$13.97 Pepsi Products 24 pack, Poppi 8 pack, Gatorade 18 pack, Rockstar 10 pack, or Pure Leaf 12 pack, select varieties +CRV in CA. While supplies last.

$13.97 Pepsi 24 packs

$13.97 Pepsi Products 24 pack, Poppi 8 pack, Gatorade 18 pack, Rockstar 10 pack, or Pure Leaf 12 pack, select varieties +CRV in CA. While supplies last.

Expires 05/05

:$7.97 Bayview Farms Ice Cream 4 qt., select varieties. While supplies last.

$7.97 Bayview Farms

$7.97 Bayview Farms Ice Cream 4 qt., select varieties. While supplies last.

Expires 07/05

:$11.97 Quaker Rice Crisps Mix Pack 15ct., select varieties. While supplies last.

$11.97 Quaker Rice Crisps

$11.97 Quaker Rice Crisps Mix Pack 15ct., select varieties. While supplies last.

Expires 05/19

:.77 when you buy four (4) Butterfinger, Crunch, Baby Ruth or Kinder Candy Bars 1-1.9oz., select varieties . While supplies last.

.77 Butterfinger Candy Bars

.77 when you buy four (4) Butterfinger, Crunch, Baby Ruth or Kinder Candy Bars 1-1.9oz., select varieties . While supplies last.

Expires 05/19

:$4.97 Nutella, Keebler, Mothers Family Pack 9.7-18oz., select varieties. While supplies last.

$4.97 Nutella Family Pack

$4.97 Nutella, Keebler, Mothers Family Pack 9.7-18oz., select varieties. While supplies last.

Expires 05/19

:$6.97 per lb. Beef Chuck Roast Maxx Pack, while supplies last.

$6.97 lb. Beef Chuck Roast

$6.97 per lb. Beef Chuck Roast Maxx Pack, while supplies last.

Expires 05/05

:$1.97 Sunnyside Farms Shredded or Sliced Cheese 8 oz., or Sunnyside Farms Cage Free Large Grade AA Eggs 1 dozen, select varieties. Limit 4, while supplies last.

$1.97 Sunnyside Farms Cheese

$1.97 Sunnyside Farms Shredded or Sliced Cheese 8 oz., or Sunnyside Farms Cage Free Large Grade AA Eggs 1 dozen, select varieties. Limit 4, while supplies last.

Expires 05/05

:$3.97 Mission Soft Taco Flour Tortillas 20 ct. , while supplies last.

$3.97 Mission Soft Taco Flou

$3.97 Mission Soft Taco Flour Tortillas 20 ct. , while supplies last.

Expires 05/05

:$4.97 Ocean Spray Juice 3 liter, select varieties. While supplies last.

$4.97 Ocean Spray Juice

$4.97 Ocean Spray Juice 3 liter, select varieties. While supplies last.

Expires 05/05

:$4.97 when you buy five (5) Coca-Cola or 7-UP Products 12 pack 12 oz., or 7-UP 8 pack 12 oz., select varieties. Limit 1 offer, while supplies last.

$4.97 Coca-Cola 12 pack

$4.97 when you buy five (5) Coca-Cola or 7-UP Products 12 pack 12 oz., or 7-UP 8 pack 12 oz., select varieties. Limit 1 offer, while supplies last.

Expires 05/05

:$22.97 Starbucks Frappuccino 12 pack 9.5 oz., select varieties.

$22.97 Starbucks Frappuccino

$22.97 Starbucks Frappuccino 12 pack 9.5 oz., select varieties.

Expires 05/05

:$24.97 Coors, Budweiser or Miller 36 pack 12 oz., select varieties. While supplies last.

$24.97 Coors

$24.97 Coors, Budweiser or Miller 36 pack 12 oz., select varieties. While supplies last.

Expires 05/05

:.97 ea. Cilantro, Radish, or Green Onions. While supplies last.

.97 ea. Cilantro

.97 ea. Cilantro, Radish, or Green Onions. While supplies last.

Expires 05/05

\ No newline at end of file diff --git a/backend/tests/fixtures/lucky_ca/weekly_ad.png b/backend/tests/fixtures/lucky_ca/weekly_ad.png new file mode 100644 index 0000000000000000000000000000000000000000..159df2fb93bf553f925e2a5dfdb69c15c3eaa78f GIT binary patch literal 596208 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�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

H16vE5=XRn`=iotv>?lhv665)ub8d(!AYM zZ=ERJAJE{_Q+=%ooAGSDIAmgDd4NUxHuI{SnC2m2fLvb;{ioYpg;{Hz>-UBi8*6X& zj?|um@PTu64;q52-6(s_=;49M*sUL{sp6*_hz*A}O=UL8`t^3oa8N5PSMLEykvOm0 zMM^ct^xYZ75ux)p{BiGR<9xZYJY`Oc=m&B=23Vi&SsI`<=eNgBw)cIkFJk?|# zl8Ai-c3bBoSL1a_12N+7JKdmVlEx?`{U|wQ^<8H9xw%bE65iJzMimTBjpXR2_iPNBzLK3}5LMHLdbg~t zmhOgnlY4o_Mc|KpQ%#9P*n+BaW~V8T#flf z=(GQfsPouePQeu(9?6dA;}rRZi~Na~$g@6gYW^&^r;FS}TldEQ40^fS(s9+c=GYzf z`iLJfdvGGJ``mSwl$hlPt^T>@wsr+agvr7Wx;gZ=^IhCodpuA)BeH!JKLrKh-XP3?bbPPI+`PQ*2PMJpyfhm3Q(Mkn6b;8VlJMQ1Z!&O>)>=S{vab=GOSjP5 z28_{EpG1mG=Szn9GOfBi`=TrlvzvA8$yr?RYu=h)gwuG7Ezq9rU>|SLQ;?vp_-kL?w2AF8@4wlvou7|jrqlTZ8_g!oKSibe4bL&$t zmV;f*n=rg3zg`Rn?YiwjN(&Eu^=KY87@nFT)~kr+FCQbpUKL#h@bhbsS+S0E>gC}L z-*42*sgz!UfqD%anJRFnBkx2zDZ#9vufK>dAAeT9*srBi{S>@!;JinE|ND5=-T027 zKo27swp@cMmTcowpLdpId)c$1$)K$6HYo|ZLQ>e#I~$Rk_b0)7+T$WEHvuS8`mGLo zF7thM%?urkc~L04#CEM+ALsR7mc54=p6Ix1+xI>jKQ}}7ioVY$cfcQUWjGsM@^--d zw1pOkGLRG=+;6qoU@T$Nlbtnh)I9BtTZkNujy~UEG&xd|JWirBN^cg3x(rpE-SaMI zx14%zc8K^e5I*C6TwiI~q1R&?Drh~6tKj9S&+-{Z%d2v#c;0@+YtIYpm_R%U2ygiK z)d~jh;p&>;l2W94O1U*kV0pfM5D&fSA?9a}xL|D6;}mH=2|<%ETx7$BLK5oh4nuw@ z$qDcFhx(*}B!hst!C zkea)VL>`~kd?~`auPtx@?}MM%yxt^a*0M>X-ab9LR&&YSDHIG_>T?7^qN&4Iz7hPZXenJ1;3t6z}foSK+fF@ zOPN=$``27gEZaAnMD?4Uch^hcpFE&d`tY!p?D!t%QxQ!nRT}QwN$+doFE97~yu`jj zPtn>b5ZfeIb3(QEHt&3IZXxZCw~GTS4g)@lqBW0MchLQqv#qiQZzSfX#Tq)FE#i6L zvAS0%d%z`DU^nlwTpH9iNOHUP$Qk%<4C{8TBNp)SeD72g+UjHS zA^ep;va%XjD4?f`dUx?>;4>|EG@kf10JzNO)7X!3O8B*r75EMWzW9b(L*D6DNp6_o zE{dYQ&_&wg1!we>9j^h=-Q>EJ;H4>Hxks|T>l}u!`<`3-6}$U0^yfLeiFV;Oj zI$XZ}DB{Z&uFrOC-7dubFdf&FU_bE}J@i+0-t8OmjcQakt8k&y^|kRBb)diM%z&jzSsDUVHR%_BAN2@C~ z5`BD#VoUpD;=X#v+oM3KU2hRPNMLQR!;v z(03CD|M?vJat;=K81dN4U^A6D$gn=7P|Bi+Q&j%&VV((DIt7lTzj}3Xe~ix zU43e=@P8KWUVY@f%wCJ3QuIDQA&%Pwqa)ft2tmvn9_R{(_gf&*%l#2`9bX>8%r0R# z_w?{4R^yi^($4=G?Oo#$i?8c;-S0r`_eX~glU9Q6q354St3B{_?5Tt}00jqz;t?X5 zH&(RNS7khhe(1n*%se<~gkzbvW^fDrqhJkN{>w?Hbjvt3knnb+s%n;jlLrx#6Wy&B(uXLEPM*vKYh^S#)> z=y(E&zCP6`uF0SSZk&EzyjE&(ts3>#yck)yQ#89LhY%HpZ*Y!n%ngn`brFa)6b;x8dUNT zk7lrXIOnILoJ24f6q|{Bk1hPnbzd*Lz444zC(z8h5n+iHWq-TxPYB(L^Tq*iOXo zUe`5oe+wp#X#LN?i{2>LeqDPiyw$(|H_HZgl#?O0)d#xq>0B9D6Zrb9ANnixfuD~S zOUea8Bkxto%cT**U&U}g9t^g1y?N9J23>hZ@L1?m8_A1tG^)$9qz1TATV>lJ^k@jf zv*7D#1p31r$9=N0$^3Vdr>mj@J#AHA$jRpRQ1A}L7sPT#>6fdC36aYW??y&(ej={9 zg*EWqUC*rOKR5#6g9En1{os&=n(?1+N)DfXVBZp>=sM&jm+(Jbg9DOvl;vcP=YWvl z)64H6PBSg9yEsF>+CaR(97$f6(2&hR$`z{y&38(W$ik_x9MtH8Ao0chGncAHK{QaHB_J23dNp~Gvv8%5!9 z6Td>hJW$#}|IA2>+mHQW_PxjQ350lL4i|IXW_LiNOH*6qC^Mok!5e!uzvr zN)11W7a>WPMl3Dgd%QkF*Md-2D&zY^J~{qxCV?3K!1VBMi6i|tJyeseclqsI?TNk$ zqT+t}BX+Mx6rwpQ`N_k>`6@|x^#}naAIM$3KCnU^kLG;r{ejkk3m8fNQ|q1KF*fIm zw6$f77SjLO)R-}Aago0GKygGvU~u=j#M*&K$7ZpbKkM;2DkGy!QMB#x)%P-a!grTL z!>MtnHwyf+Mh>>z>@9wMT2llA`;8;fHm}+f|5cs&vGH-fRx(>PPk&ljvu^d1kcnrK zw_;lt-+^dmz#gBlJwM;#r~P%{YLSta3fsHWPk zT@)+&prE3HQX(RvA|ldjR76w+6a=IzC>=r#B|rp31O-$Sq=q7((xiqKBGP*eEriem z2_ZlrKJ?AyAIq!MV5hT$nP98AIVC}`Tz-&~U zcBS*3-`UH$CuciPCsQpvvQ-AcZUy?#b)&Zrf0(Hk(^h-}=nfUv*Q{kk3VoP1xiS%$ zQB!lMK7YiD6W=ML<}%m9$5!MGu;I;X$Yx>QCY)tNHsD{L?X|s*eN|T}sAt9 zGvH0MZH;XSr)g&gPsRX2(rC?ZweNv}O0%=mT^0)xx>eU|VOvpY*!ZKicG{O7S_iq6 zu4Irbn@y!6kjbZS1USo}_VPq@+zVKlC@Kz8@#t^X7UdmwNC_h6>zgLheo>>a5FUVz z-09sLTCZ|KZ;hK(+&eLZ#tU^FMg3~@eIV|0qZux#^C!JnHsH7uGYr~i+=ix=U!IKZ zo6^#JFU!0q94mYwS0lUT0PA9Dq%h`BR>A$*!0wlY^oyr=rYek61THiCzU2iIH7F`O z%Vlv=3*uABd}(~*0b%|Fz_5r5mJM(mW7bF2Z+r=%$w(C%F2E_C(H-q|ubGzd(>VDL zqQVzj-y1?Jou>VXLHj3`;2aWsU#Ly#hIp9Ix)nTlH_d|rhVO+tbk(hQ+EmXk*n~`H zz0nsdO7Ux(7cIS9B3H8zB&dd7YeAn(h^y3S6;a}8x#LW_5=Oh9{K)9!n|ITp)4klF zs-yQKU)`lJrXuU%{V;to@oN*>uRsG82qyk$Y)GG)@qJz1n)rsTu(uzMt~{I;)_F`= z@9a%h-!#-$KFT&Wv0Ckt%h##*5r?DRIAPws#T47m&6=3D7O|(ch(ePieGgb^5cu0e zoXtf8S^PUKP0z(vI1>%0JE0N1Uqg5s3oWZQMM3ooxHxrsE?2df5O^D_yj?GBAFjj5 z7t8+A#(ui0l-X7$I8oU!GHll-65FS~-SabUO$iMQd6w$Ea#>~ZzuMT7D!>s1=pSx> z_rE2@$lSKs*h&%{~!CVbtyG_!U81pV#X&a8x0_GqlGz9_RI638-N-zbC`qTi*M={siGTZj>nyxX_rXhn)c{BiByZEJIOfO8lea}; zwH&9pUcnB<5O1}tN&)*(GCtGZ63-q|Zv7XT-*XB0u_J%p!&=2_?~Q2g{hz?h_aIFV zjzQRslN|@L1-ICwq)$>I2C=t)GlscBV8)6c;!ew{;=0l`kRNz6KLvd!RxnPJ-oatx z5!~lqYd)I{+Yfr!LQAL}j0VUqyG=botP6u?cpu{NdE{{Gx47LjJ?Ar!gPSngF_SM! zW7JuYHW=1u;k`J`OOysh3hP-N343eN(qyiAbAcbw!#brvNcEne$`qt%&PG>zO9FdD z2~27thfXU#GADiO!%HlLanH(1Lgm_oS0@-yB8S&amn8;7MerfSaZ`Rr>_Xh|)<2Z4 zM^6`i3~R@;6g@koGvk8JO}#pcR)`F-;0<&Xe*X8Gb36VoyCe^V{ui?MVBem%|6zK= zg!%udmHbQS#vc4L(*NI2TlZdg@xMr8yWRhd=-u^O*Xv)3c<%F`f!hCJkMIAPi~R4W zD(C-9asQWF{(p11bYWTH)+99w5w;SLeC7%_>P#8IaQ_^~w{KcCZdU_0?aVt?)QK?Q>r%-8icX5y-JtQ5V$I?scd) zp!VBK#j`2DN2G+!DD5=xtuUwgIM-v((h)~3-$8<@;@LH4=F$T6c**zq;?>yr;C{yo zpMvOhRQ(HH@!1pxO@Ho)`-DZW2%3GV!X^|>UC^)JN(TiLOWyx_#;#j1L{g_VUp!bG zcqDyrLbk@5?J(SeE`RN$!Mn3cK~nHnc3y^dJ)fByu}yxEg6kHxU8hz)uxWmLE0eh0 zyD5Ojw|?x8m9`1XyA8vNJET=_B=d33yuZU&-78z3dV>|REe>W9O*Kacn0+A5DxO0h zDZ?{|MVcwZ*Varinf|JIk8~M`8o=ou(f_ichX01IM9t7_uvS)u0yekqmuN!WAJ<_vr zb!qAD6>E7dG**=XYAcCu>i%MgW^{wquk&WO>ebdc9Qf*`*Ha zF$Pdr;M#|{RR00VX*URjNaPDa7BK5(6N8!cjP$MHB=l6cbzQ?d#Q(ui+x&OR`>LVB z)ZAG9}=!L76Q@hGE2RZlO)b%uj+&Wl$NHLjl55FJ}xqnRkccMn_tzV?n&XHnb$PNf^EvMxP7w`@` zLQZ6Th0o9Bm1RJii{>*mjVEull zx-ty=>7%edYuleOQVWIxoIU5XSn|9(JSyk7S<`P<6-0xYZ!hj?zW^CNP63=?yYbHH0rrP4(s%i^p}WJAtHdp{9*%`P z`^r#D-L(hM16VQAM~U{FP7p|4ZT5LCu5J^pGH*-&dUI>H4hMjnkNhVO`>8fF&%Sb5 zbyUj_y<-TBL8v%U97wrd0L872vAhZL2w(dJcBbw4#ZS4t8L@@M<_c5sVn}k`O8htU zB)~Kd2gjc-YR;ZojvkEq%{;<`K-NbL}{YJzI!+>WErln>J*}_ z9fcf!he$}&nZEtYpZc4VE`q71F(wE_FZ7?%%cJmYnhrOJ^qXCVS5Ym1tz4ErR<-Q{QQY+x>brIITUYwW~z4eSNtmrG-vXa>#+?1dA?*(Ef zH%D3{>vm_OK14_J?aWTSe*4T9#*pQ!hb*o2_w zb^8*#*_>q@_lx86W8ABL#9StcwKv3mPO7;ZE+$})ym|`%E-8#UO8&di*zIoD(YhDYHj|c z(=TuS&2W#}q?dwi@oE8qeSen0_c?^lc=#eQY({*9gTX3LPTSiNLOKFKI1vi&5EE>gPbiZkN(u-h4Vf>ZR<84@S>LcN#cxqL3Its4d;z z;NGD8_>+$IyEYZ;Xd$H)PH8ISKU_e@1x@Ei@Zp>J_*h)MZDHj@SH5vfrS*=zP2)Cp zQor0+g!QblqQ?y-PDZ{=z!e$i^JIn@Gbp~D5#^k;7;2dS0gGevQ%bSNM8>0C2qmiJ z?e~hI8|Z)yS(oa2Ky>%g)0=I3&!R0QP=^aol%7+}FE-@LMI9O@Z^K`xuHh!g=iM!2 z9_k=jz8wy)G#aXlV3rF-7k!VG#zbpI!)Kr zbC$FwB#hhSjB*$Ak0X$O&38C!@r3Br3~rpDoPFO?o`?c;`AJRi(8FvX|FqTX8?MC@ zb-vCwmE-X13J?d4_Lm361Jbi)vvv5G+wq_t^;yT0c!ns4$Dbe~U@m2#q_4V@@R%#M z?9*#%j=O`Hv<)gpS4p1XT&@aJ2ep}yY5QE^VU^Y;JsQK4=7e0pRulfGsU}N*VYR#r z!8zr7QWvh#nOjRncSxK@zD_oft<{ZqYGzk9 z?FbF6lifLz8A(ND(*2o*Rr+uA8{;*JH2o7N?fd;c`yL_F|A{#3lU-2oD&e|JvO>t}l(m88rn}l; zZ?Xb|vW2>?v^WS~QHi%GGDK+N?BN@IgS~Zdf>rONFF_laJz&@=O9l_x$BoAJYBF|M zeD$5ZotH0nnJC04F3mWJsBYb>tk4t*l)xqfI+aU5v?4>+ns?K`2LT29JVeNlyJ^*Y z{Gs+^k8_RiS$R9Ax(F>*)7I$+o z*W!kIMwHPvx|eBYTZ``rYy0aaUu-75E&KFj4K*Y}-(AUc_Mz_?`;M!B;aUHy+q&d) zuHLYUgTYEu3MR_e-5FVYp8X)?dVh&d?j#@r6CXF;RzAk~@G@I@X4LW=eV ztzUGjy!_lrg#T%Re=dX``X%PX__L>LPIPNO`U$KBXx0Q_MHrvdNBVkdx-&>!s-w4- zp@rsFcXaTi9)%yWWX^tH_t`HjN&oBax;`@z<7YHw7zx##%ce=G%y(B}jpHw&=N9Z(mfK{ZS9dvxMb4O8qQ_N*cdoo_YgGC=G=o(4@=hRv?`dbruQ6fVbN{m0RcetaRb1{Z$H!&l^H$&I~&m$*E!K}BmXR}{O zuDU;B(GM7l%_Yp)dMWxQIR1N8r0}(82zQl1_XhD+&_;`pjaBgG((q?rQe}}fYG*N9 zMfe4a?uPJy(*@mQSL80JLLCqb>^x|x%fE+j2@`!&MhaET$aPQVSexHdeP}0hE{G+&*2SA zZ@REl^l;Cy8MuVnmo(FBmG{W^sZ1(}!-6CRud=~1)z8e!L}@cYX@w)xc?grHvU_V8 zFO=YH=kZfJU2>Gc#tH>9bp$fDezq0^1d7Zki~5CHtKPc0uJ_^$8|cm+hg8k}(}O*4 zgb6&OLp(AeH)GCM^vJPU^f3pd*WOO|k*mKU4MeB2_%;*N2DaXOF!%@7Ty%qnnb?$6 zYR0Gemzi5VimW#)tiM)B?8~bW0gU1@eX!ntt!BPcchN0p>%F2tJ)8uVB0J_sy=Eme z1A*bnx%91?rJFMWx6{~%iA^ncM3_49}w0a&^Y)@m}n~Zo-7` z7JL%UQTy&~Sg$%igk^8H4wjZehs9<&yNHW^Wm+j!uF^;6!{{9wcN$sf17A66c)gK?kvne-Ei}8ux=Qz9X#9JHj(^s%9 zlA;Fni?+jxmv+N!LdH~sYSIECHV!>!1y;(C)41;IVbmaa0(D<2C}6(7)e>mds>#Kz zRRqce^G^m7Kw&@QgndKLh|oIn5rZEIX)s~8!2>gyGWFYc)%oZ&3wR!yMK?e%EhKT$ zJy}tbqCGQ%#7q6War@8(qKeE3@fI7;Uk4*af;SqZTgy53Eu1$`i3F{3jen3@gr3#d zO4p#u`E43rC!fa1kDJ|O7C(zDr`~HZ`IhF?qikneJTqu35P*<#c&cOL;M_`Kw7%g4 ztz!I5E{bvj7n2ihcH}Px%#8b5*wun9q6yUDe!n2(c;J?ryl3Z#dOF}$>Sn?0xmF-; zA00JvA!)}__qkq@k(pigURjx(ofFkqU#Xk@mB7CYJv;RVP~IQz|Zv^>$~Wv8|vR{9ibm#Xaru*Z}&#i(Rz-Y`bD@3u;ZTx>4cR z(ebiKN{rHIeZ#3&4YZ`p#-3^p$W#>06g$NGpd3$P@~p6?Slkot)H@%zK|z~jzlAQ& zj>_;2FuQ7IQ>i{^1Fv*-G)*79fCyTj1+T!r6<%rGYWjJ@L1SYIn8V%5SNvEPmM?o( z-oJPklm~lE7Tu5_cRFXUAIZ&NXh@z(7{i`gmV*(5r%d+k78|!f#K-qc{j6}tEWFwe z2}UJ`lrz~=M1>S5^l4H?X=!pThmN4Z8X`XTpcX{q5XnPWcMSwth~Z;8zUyG|V>wuk z?A`mowZVO-)uvuLUL#R1zxMv`v@`{Noy zNuTX_*|b`TU`CpXzeh19UkT(lQ6-6}O7eYo?x2Bsh&R$*<t3JpSgZgj#f$tR;G$QBxfI}fqRY~+{^Xn&#FOFeedbN$7ejxaP9eX zcs=n2*P(w;*uDGe-y@%c2Y&uN>XZ1tb)q`yGOE6wwveJ5c^EgI@346yQApFq!e~W# zW_2pjro0a22MR2{Ty1>9A=O%OX*AdFdvRTs&-M>x0&cvFn}yZ1_rdHF*o)qIMTQjC zKRDr#J{=rl!jQW}8Zk``IgMIqC`Q|(C9LqCbN(D|(BE5mq0zU)W$E2`__p$pTmMWL zWMO^f%TI`4bO+H1ln;C=>t4FOCGHJLy*lWlM!I-l8R~ciJctW$l z_S{^Sf{O^hWNC20bY|pf_GVwtu5<&`f;r=}?B9p?gwIElD^ftl3!#!0l{JcjwS@E4 zKUIQ~?HIdTRd`k8SC=G*A9zfv2P{4~-LCqQFzAkoId%J4_h}mAR)in6FEh2f zg{FbZ%v{PKeKdMGVY&a$OZdU93VM;F8GIVyZ;36*Ub@pEjY+hrcU#RUZI9m#f(sL} z9E*}&igK%=_tk;23ZrCAEmm251BZOB1G3V5-r){PcElJz*D;tFM;dH?G8N2xr!c@+ z*Hz;M2f6f$&P(2pxokB+{NPtM{%Trz<^ab5VWt(@tC@Y{^j+k)EbMA8w=KUrDA?oK z{JmjC{e;3(7Qs#SE|}G}M)};0jOhwEo!{sq4)p-vyffjKkIBJI2I@`?8VK2U{fK47 zQl-mI8f(sP7oq}9tUNSP&rjr~)wuQjOcp9ara#P=G7BEdnKZR=3R;#ueQHrPh4mjU z;4|x}i`OVr$7a``=kVfl5BJntG|LKCV#hcdIfC3gcaB8quBIh z3-*_hN0g8oHP%1|F8JMibu)ECjZ#p{DEcXYXkBsjXRb|**mMR{yK(A1A1P$NYYxm> z$EDKMft-3Iv?mKQ^h|yAIJg(w8=CkoV zsVgvw21zkOsb~5fH=jGnX&BGpOSW3UqtkTW78*a>yhM2;vw&i_PclHGtub~V%2Nc0 zB}r@GEu3?8`CA6aL)6cb=sV(TQB$A=Nvi&;V}Cq^6TI3Al9H*pO0LA#vY6hhwG?Kp zExhwnS0MdVV8O@yB4T~O8*k!4J)6eZ`rUt5sVwZlF5t3HR**@YKxO5v6p{E?<9qkc zN|}6}f4<~5DKWR8Dyf&N&Tn4lkL)}sWAVMfEPiK7>!yCJ9rJyAqBSvT6FvEPVla0t z$t<-K!`8BxH7cq~U6&;IsPckuj#c%aP6}ilrfKm$4SOOaJ8-%8_OI>)VZ5_Y&um=w zF~{vho8@fYg{rjT6xNSM!QRNk&x73c+XKG8qNEW|a2i{#9xW7dD4VaRsTxyfY!{XZX@6fTbbR}kJ^q_trU>9uz&rJ-_^0E;Lqi;*F zYWJKGyj0Nn6*=e$MVRNWOg#FUxL=t$*OAv1KwD7E7E;_OX>% zk}#IKR7qQ&hRw$4gNw4hdM{ia|M67qZ!FHZ^Ym76#~#?(?fJyRa-eR;s`%eKed((O!7ETdIoOQW%e6F*@|G z=e)jKi|g+F5gcr z!-DJ+)EzU_Ju=iCf2cdY8_MR!?jbI8Pv_`{dlLXGaWN<76~6Zge%A5|uzUF%#D?%P zdv3aMYgJDk9o3nzuRbZez#`8bAFH&6Eb+rPnIu32_y2x>FZNy+8moZsl-2mUTz=Jm zSWN0oLw%mHsSZ$6s~|o7G+O4+63jV5U4P8opYk|(Nunb``nGbDe43|xtlg^6Y(S5F zwvsFZ-0QodS5UKTIR578%f|a7rTr|nj~nL`4AQdP$HKy%{+bQ| zmi@#SXjYFYG8=GdAE9~e{L0BcnDHn3SuURE${p0&ZN_5%p<@P%1cZ>i`UmQaZff`N zuzXD~65yma*1h&e-D~TV`79UdqNX{mcR#2$n143(4*>lEHcs^nB6D2PYlusj2!E`6Cm^)Yl#aTfS>a2GJ;*;KopS1&Vu@*SSTW&;#!tE5_CIQ%US{7O z9(jg!UYSwl>4mRP7qD^NoUDPdzq{i)&P+e7FRa~4H=#t=M_CA-Q}^{wf!L-#*!6p1 zjDm;ASgBlunKFfYKbjlc8rvSs*(0ljT)GoouXbLvSw5zL5_aZz5V+VZ@mI%i;d6g} zxXxZN4kN(Ofe~?g-|v_6g!7fvi6}$BLw$zzuKk!g7v9Sl36%QfvW zM|5E;c=VZF{H6o)URH=xU$4pfO72~!_DZ1{?oMS`VET#`GRw&o-4Qt5T!V$UD3%hV zJNdr(RczL}~()FjIn)=g--r~cTwk~kgwxYH zg{8f|cy!eJ=bhhWYKQ2AfE94vU=nLX?&BS7^5p7{dRh9Qv&&=d=S(ui@ZrPGHCoB+ zI+!t`$UK9$fDGfj<7$FoEgD@-k7{F6#SO%Ba|155u_e zY|}Yl>Ut%&a;%VI!Ki(FJv;EJ>zod#TW!59yZ~ml+n>ENw#Aw4fNS`4mpkc9K(PV9 zZW)3kf?XaIaFCS2X4T?78qHkcWrszDt*fso3Yyim9f&mB?V+D6ygkEHSQNW1i7h_n zpf_#{q#`-Gw&By-Fpl2PY2uRh54M6PO%Ri+5}93Swg1+ZKaqkm%`bQc+t-={q|@(D zbav*YEe6oc@F|cXOSl!;X2m1TBMXRN%8C8kbMcuV__L^vApXS5Pt(Hwt}_rI!uXN< zus!Vdk!^l`Wmj4&NA1n_tU-wSQ{vN-8yzjJ!Z1A(nrFa{(YFnA!_u_d!$a~Ozr=uX z=%TXgVMFD1x#=E8+S-K*EW0?A#>zY04@R*ogIgP&#oG>7tK;M>UZcRzkV%O+UHeR zm3R&A6JW=PqL#>`VtwQS^%ISfqQSoA^b&{EokU=_62aJ%^XB$%%5+9|rL#S4pmw{Q zhfSHhex`}Wg?hfx(!4*MN+{dAXrOcY>UAO>e3d}z>jhWmruS_W&ApLnXG}F_8Rr9w z)tYEE!EOWm$nip}L?wnD=05NG_H6=~s+pX|X_r)ysedLU8+JPv$T(cay)0mTgokIWm@m}b zclS-oqv5V3+)3#xpBZlJ5(~S222fBkP*MW4HO)*83H^)xw*dNJ1Cfv#$MIU8WJ=_QIpvQ z)ZvEj(1967UQ*JbEk+e%vQL3#Dey{F-4^(Qc}Xd@bY7(xH5@ftGYiv;>Eok5&igkQ zaKAUspT7ZnI=I@z&kLuZAcgLFE-pgfssiWUixs4*rWJ zoq$%?*3CA~!sr?pxVz9~(EdJcQ`RzF^iCrK_O~Un{TsLHb)cfG>`fQRLqH$3ze2t` zw89!1q*xeDvI%+4&Zh|>)a`hK3FZ!g3JTuPtK?pkep6t6Lg>piOJsj zbh=i%j;LbSX+%(e^EV~jTrjJm^kSOgQyl9LjCIe7Dvh>ox*li0b; zQI}j%{gKe|s=|+%v%Edq*qP{{K~pCCWSZx2!ufV1LTXq)v}P^iZw+q5U`HTlpAT)+ zu4E-jY~%doKYLP8vDtA&EGl_{1p4PWSScT<#_M1IrVQi~+vOY4a=niJ+tWk&#hwUX zlbv?SZ#g-eTa!k?o5p&HXEqm|{87@d^L*VlXZS>IaZq8E22Ot@klDL^mKCRl!aMeG z8Y)6`&Eh{{AKA= zExOH0hHQ|%{ermMQ1trxph151+J0Fz$@y`Y(fa-+CEh=%p*XckpJ;04N*?FQkq^vu|qFYJXTPD+G8-cbo4E}p2d8az2AqD4kKRV z57~JROg=leHkJnglK3SRm8CqyaW;R*f4G22WF>s%Slo4z1mWMhqSsl{N z`ge~zo;wkV@SjO@KvaK9xIYMHeKfOXvl%(vCX|^s2Fz(j-qJ(SknK%ys`to?PzMxa zWn$X_qTBfizW&XxH4ePE-f7U&cBgtamLuf(z{aIxeLcA$9Clc+?{^_RNNp>M-#|T; zyenXJs;z^wZ)$Hft(a6b8~$iO{w+}J7Yw~Vu#wgpU8}E|bTgJxG2*D<0;$y-tBJT2 zQy6<+l^}c%oo-eJ6lm_lGc(rOCH*7I3Uvh5spZKg`jW#MqJi9n*m7Ztu1tT-6cYbRKnAL(_N_3d z+CZ(Fu^{y5`fx`liNewO@=R-BhhX8?&mCp*>RQ=W%i}FUDOUKGds!Rv!XfN3siqsYm+;VNAAWmO{MJulNmj{F8 zdd4g;Uh|34*sIWG4(~O*i2j9VK&++2ad*r#@`J1zJwJZ0{M4 zSzS-l5IZ$}Rr^f9RK}DN-p5Dpu>ikWWx-lhYf`|zC9Mfy3pi{fZF(Qi=Kw)($fZmN z4VKSf)VD{XKo2T`tayIPKa{4|R1@qB29(1f&yIC$$Q_^ zE60Qok4L3Tm*MK56CTE99jm49f$&S_QrI#yI=OYC4 zHE5&#Kp^Pcq9#~{H1DB?Jf?LGB1?Os3oI}4vGJj#k3ye(Nuwe2stxKGMQVT21_dr| zp#J_6^1iWoQYPko*c3qjE)qCaUvKB*0_=SUsdg%fZ?p{@$g9cc1WPQC9NZ)~Bnxx! zBrXH}sJfdug1*$F91aC}^!K`vyOl`kEu&2xEqWzbH@zuk=iP5C{HL?#-dxEg)TlivySI~kemZ*C?S;12JW(QXIC{o33;oL}g z+s|}I`g!O9-q1fe1)rm?CnPP%A1G=)97?0o}wa($Y%|N_q{W=*_o# zmS)ByY%gmVtFw&bu?(Y3!l~U3fPUwL?`x%wkO6TWTHfwb1wCJ16eivzPPAIRwZ9SQ z1v)@i3f%bVz@dhY2szeVANL7a%P{~(eql!itwvbv2k!cTYGq1?k$MnhTr^fU(f#$| zE0$F)=AlxY?I(8GlrWxL^(_Pz;m=%%15akhx;Y`V2j!4dCRT^AV?I|1Cc z`sHhlBwsx_wL?Zo%4-q(UI__bi}KNs#mvIkA*idvhvTHGQO}{K$DiV^z4g^1THQCh zQg=DU{6D0_vu4PD?Y#}(WNn0hg4 zRr$2BKn@#|peuI>AnDY7?zrv^W`DEo8lOrHN}b;Ngt%I!z=H7 z0;Dc4SQ%#UU$8L4D?o2BhsKPOWD@s|EH9T6iLZcWm_=GE(CoZi26}n(Jv2dU(5UM0 z{>Ja$ao)WJ&pUO0JuNf$AB=%-Z)HPzlFB?NK1JjOwY1A(rzdE zSaQJ_nf5RWHd*()SDhMSl}4y%SX-9+i?}fd15J!Ec#qj^-Nd52h&t-ZgsdHHv5vIb zaiX$;!?WkO$XEz!;-lTKy<$?GRA#|r=;5HXYEE{XaHQz%SyXX7F*z`du_4!#mGu@q zsWqr$QsC(Og)pBO-=i$P^Xtt8+lN(Nh(PB8|3%HEXCqOAO`;k=R8p(+$nRRyct!JA9d(xkuvsa7in&e-N|q3iug8iS<-x^K z-+{ZQ;Ak1fm_slGJr85~x*T)*`4dP2^E6IxKnG(l0AZk87 zdEbuAj~lu7cQ6sR^9;bR!aRY3@-yu8qo`nJNs6NDg&3=`uQ?WMA70Fpw3UO^0Y=WG z(?A>OgmHeC9@R)+Wj!emQcajN%Wk#w>07Oj*k|@p*NF)RRS|*eo+Z$uAa8wSTSk+E z?3{P3ydT&X$?@&>!^@uh2%7ESe&M2q)A-Th0bqMw+^0{z+%a`eerA+?EvGHZAxkv+3U<4K{0=yjm9Sa? z?)_1Q3)Ha4Vfga-11oYpUw&%!OU)DWsbJPyL&y050#Vd}ByIyMWH&^907h>-=~1GE z^A*)B4*;2xnJy3estlQi<*857?f**eNE>NB7_=rKQL>zei1OBZd^YpWZHT4os**oH zN~SIYC@4Uwh{aH6N}c%jrYS(9x&YF9*YuQZI4v!?{7B8vTw|*s+1Z`CID4aKn{}%} zv)OS2P3$;_S_2gYa)L#&hV8RWVsu$$f=nK^1pt$jbN@O7Qm+f<5yEGe$O>>da;()|EvsX`)TS z@Ug;Uz4r<~zAN*NMR2I_uQi>=+T*}Q@1A=OeNE$ripsL1<@6E$7~{MWlw_T=@vJzX z1BXzZE8dx_|ByBr`}USr!06U+3fZrEqgI?xBzdbLQm=J+OX=bAaN$%fr88E={Nlx@ z3~M00n=vxVzf%920_WQLs_#+z+O8C9jRX13+=ZW3UMy(V9S)|qH=48uLcXD9WxkDA4zBx{ zQ1$9I49_1pbPRFki)Fy`EL0SbS?N_Tm$u{~uI=8nzZTPyA_x}VeHge=fcU$QNDsvM z(n{=3o%=pj7m%Kp-W4#9sXV{k&1)T@A+||Q;p_;w;oc~%`DL<{WJUkwX5vNvF;0Wm zCxrsVwRip(Sc*NVN!0aD@`i&h#CGicY(>Yt{ZY}qol>a`>B%O11+G47?fM@ge6;ti zN7Z^5b-q4$Fgr0PwCN$N)n=$WrOZJCjdgPmsJ&D`n)j^JJqm$hOTr+RNdd81{S*Qgu%T3Bn1>^B20^}7H?sTZGiVoX?kM-vE6JI zxG1D#sPcZPU)n9U0TM&FcsZ)MS*0u;4=~HeZYcPp$I6sSr2js?C~ax!!zp*W4%xl` zl)sVeyq_V8NRr?ay`?7N8Xnna1F+wf+yE1|HZwH=`B*{vIN1ZaT*fJte3}>kPk({wi)`%QDny3v--i!G-z&TRpi|&ZYxe$$ z$H39zvA?V$7uWxf6!LQL>4SB8GV9Mbjf=?7Ou09klpX5IhJFp$P~G z7=D7#4DL~<-mfVElmi)nO7==EC0)VgBo4MSpE%ftg`hRm)EG6SqHOHHfCVg>C>V zPIV>8k)g1Bk_l%lQAnoF_L13L*DjfARJ4Oe5|sJHm_Lucz`1GHRB(v!?uLc~b8s?0 zPoX=ygx{;E?i`~I?BfpQdJ&xW{d=_e!{Hm~!B?t^xf?}jn80P>?Il==tmD^RQ$HI$ zEg9l=NDGmR1JY7WE$;FtH@%S!MTYO98x1J*bCEAxx|DqFd9<&Zipp3`f3XePE>>j$ z0%xQQF4b)gTiEe$5iy-LV$m}<(C0La555~djpLJ z@kTmH{iv$)U!7|Bt+uM6ss||>dn|m&I0qeGpRNbre9(q`(jN=gtb-Dl8ckU@@j(>j z+$aCx0yw27GP^D03{*=snHqP0 zpNzve&pb!RHl1boPPiq9jumG^%4#3GcqVFjA3XT>jV!^ ztzx?4;3Y-Fg!$3&^AZyMw+-`c?2;v*YRCU6S%iL8Xdy$5-iKD!?7fi@*7!j}ccCYZ zG44_fs1lp;pTF-|v)jugcV+Y8!SMKVCvk_a1%+Ic6R&*MFn#9~{Bvr2MbO-I=BAJ^ zi-D~#cJ7i>sHB8C%s(Y_g6G8ym1(1mo)CeqBNdISdiPNP^mmE`Ek#9QM z+A`3Q!d`cJ(=}3X+W6t455es1*#fh&SfJZud^8$I5>|i5ug&@Je5F6zu@CM4O{Elq zu;)3N)qF%uqWQtcapWY4I#8CDlD3O$*)C0rQz@|~>K<2bFm-3S) zn_c#v$3p=n@$q()n+R><@>TA7|lFuq{CLj?JX@0uuy4$t(5Fn^1G}@t>i4Y~U>4OX3eSZVZ-xk}@^KWYyG| z8yk}fD({@jx*ZqbQggn17EDTAnvYW-CVV0+T3Bh$u9eS9-W@Y@4i0{TNuF!u&2;*e zf?W1r>>s+TgI%W*CpmXKs=t~%adYzZf$rz}5tp-k<0T_lVQ3g-TwLFvoZ!7;R$@j3 z?+71O;1Yf}KAs*&^>Fm$U=L1P#Xpm{=QkS@JB5Z`yt*shG|5z_e9YH%rpeb9pZsiPZ*N_e|@xqcM;7V%%EF=C@$}Ih`tyk&CltG^_<`zQZ<;@B{SCO^)W;74L(V%j^e0dorflWO2 zJ#*#fY*yy}7kISB#ofq&1M;LtJBeZ^_AEcNG?7>R3SeK`R#Ak#Ewnd33s_ni7U?7*!Wf#Yu6{l2 z&P(qXvs(;v3$7P0Z%T~eGY)EN9p?IhZZg|zFHQWJis`(m-m2beHm z7njEr(emhL2vkQ3_pIV*t_AQfF0O+anVCSL{b%Uep6ycx=`4)O&yuLetp=>;$_#;H zqO>6{E}x^0tGl>rUT>3r4&QlSvB>zobjU3R@=v4|fIY9@Y*_2%;^O|&U&2eglZC16s)6VzOjUJuH_({`hg^ggS7hqm8}&`8`}O_B_%Ne>%9NVl`r+ zUjllAvMvTB0ju58YU0z@*(4tK#v5M0#>_TSG)j`SQ z`*=<|Cf{zJoSB&!x^Pk>KJw$okB>}E-()G z8nsJDYgk+pU7FpEA4A~uB}sGKdvP6JQS~Z}c#$cf2oR|RiB@R{gU^8Kn zhfaL}f)tFlyh9}bf096&v;9CmO$lN>D65!4j+QEV0>jJ$^3m)a0zg_}{%xS3eL!JO zJZjzTp+{Q79OM0v4m&kQ<5)u6)@Wvf99n0Mr}9&NKx;?%r*u_JR!tA3UT3ZWj_L0DSARjIXb6 z8}RV@u02^V)E_#I-MY{^V3XfSPzKg@ll=sLPEL*_&}A!CT=yX*CI3PPYYPu2SB$hk zca_6sj57i6wgJ5B4I;*6tn@hmnAG)v=g;*7o?lq_9QfMJWyP))w(wNtwN>lO$1P4w zm6ww@1~L#`fo0|{e2O9Q0zJ(yhx3LSV$ zlyke5ec?^;iSY3|ey;i^(oC&`0Ly=bwdG&M>O!i3VfnEiy^e1SpMt!)=B!*Ig7WIMg|7tWa7muH{XG}v%?!qy7(|=)gX0syzI45YwET$%70kd@cg}u;LquGB4a-n zFdS8XF)i!Ox5$=NA7+@YoW&b25T{1O#9(s$0$*U-=n&aQStZ$HAdUj8m4-^J8{y$( z33m3X_^Ws9-M6mxFPNDty1G_jQ||R2Kfcx@flb|aHX?2~x9)c)eE=^K_&Ph`zXksl z#X!S<%c$nbh2XWf8;f|_>av*;X9Ix%#?sqSfP)xQfE=3;tMT|Nm`J=|GqG#u!!BtC zXBThCjz52&EY}1#Bzem6K!@LR1?B;(9^mXOvEh2Tym{9ScJo6NOr3fQS$oXSDX3;3I~IhZzo6o%^ux%_e}Wd-J{X^dm<1uW!*{u)6xQQX0SA zY_Fwb;8*{?&={$(g9wpKKfXf)8Mmn@0%n-k$?AQvKPc)2n|SE__ERL@&s$jg2RcO< zcuKjx-`k`qy*~*^`OH=7rl+U>`0D%PGZ9&s%hjT_uMlNa7ntXVQw>)!B|LJz1zVso zYB^e)b4k2Ht4godE%oQ0 zJMJ23YL?$FS7_H@Uk)PQNNPHWdrG0Q@xoClIFA#N(0eTIt}nq<)>0W+$@OpF%+Ry& z1#Pg%3gqPE%5Irur}w4`Z?29<5Ck3pJd+olHx}0HY5NdCR6FHyxafdNB`X6%nxL1X zrY3>qN($cA&Q9FZSE~m>a0AHGY$W)rd|{>4LZAZ&!f+B}<7TrNQO>Sg0mI$5fq%~! z0s1j-NjrocWFah{;ehva-nG)`U0?zoEAeW9JXS zzDHpFYim70B?Se+e?Kjr_rG8vxB)da+`l*Q7aL-8wY9Z@HONEG`m0w%C3O!5n$Ie@ zlK@x666i%lc&oMXf4)_SQZ0OOBZ=Q)^)dY8)T*kAySeB%IXS7RslnE)txeeEgWKjL z&p(&^#^6vd@$J$FwAQoRUQMZQXc&lpdg9qmB08Ws%VS|(!~s8Tf8Paw0W09w0$A%1 z0nWE0V$sR7AtmsQj*eC@g!qYT$jXB508I>0UFJ9HT<#|cRN`l6XI3D@54^txuV3x0VC3Qt zfE}gdDJjT8s0+d0$JY3jj0%>GRsx~K^*isHU!l!X#1rZzx$c)-y{8*}sVur@D_(1g z=^UY-V|Rap{#_vS0Jac!l?eAVgt*TUv^6zn=jN;|EdH;1VrGs$4g%+Y((oWSdEV@# zTZ8@RF{`N^OCgxj|3BPNlK=>pmH9S6a~YjRwY#rw6WoTc9UZ@4?9Ws!1OEa)CcqH| z78Zoie6CxA3x%yK-;a)tCSLvV174-m=TZRZK3zz`P4$T2K0?Y;q6e1qi#vxFVYu!h zRSlAr%2zN1F(XtQx1aC>hX(-O;{@6U0ILfO&)V47uw(yTK8>^%?X9Kchw&hg#>#~`V1lHf^)8yNf!=I5}o zuoOZ3zX4XV5NsEO1=Kz1zq=uUfxzV2&f^z(X;KotUB6feN}cfeM)=cv;Kt%LU53C= zuJ<`PAWeNTQa@TCEUT0w^gEV!HP5EZz;DH4UiX9Wk570Sgk9i3tm*|Ncq%rjbPXu* z*<8Rt(yZ#_29}#0eD5yj%hMEEfVAS;WwT#Z_t&&MJAAi+*J-9q1cJTh+o}V*tjfl( z`RKLPhX7>7VX4Lb%nzqDo3g`DZ{pz*!Hx9$bN3VO7Lx;H0jUv&O>qr|k@I2=F>6)k zeY$Dsz8e!5kKCtWSA{ycef zcHJZ2L)PLViN#tmCx{8yYDl>mOqcuOf4-JxTM0st4wHn1?nwZ)64k$wWA1!PD@U($ zp{i=*7y&4Y0Qw2k&$HzXGtc~_;g{yh^fgP-)xyqG)zq26NAlP zmES{hzfE+#3ziU+NGrB)NL|lbP)NM`Ua3B*@(`iXsitxIMiqF(iwpOt)Fe=D*9NVs zYO=C$DNGV{{Mwqb>3y$F|9aV;hp=johk^tXg#uK^p8{jKy14_ajfs7XM_Xt+=-3BL z&%CM*`(0SIf^Gxs09x@yF%yKhpTy^Z%9-HyYPmA-PM-8dt$2ec0B?Y`K%l5at-1(E zdYo;d%MVIdUFzw^LH5d5-xhS@fABDcMHiP$-1H6D2!&Fy^(fu9XCq)MpM!^L>od)P zyiO_Xa|;4G%si|voL8Tu2oOZ28SUm&ZiWQP+_Fvb^FfqdHs192+nF#ARO`1W#h*A+ zE6za7nw=0|w1FXDuWnEKK(Ja_Ss9afipBf&F?Kj`^ag}jtAW=ux#J=?M?W?Pcry>{ zN7!z_U$P!es{?c9`uqDq2;MIcf%1r5Z_E4I2COrM^fCRc)uKokU@`LC0y4FHoMa;q z3^X*7va*iOe}m!T1!vYx?m<<|5cFe2f7vipDRg0IN&B`K*OA_u7H2S0Cyrw zz4(E1@UX8|w-dy%>vjY-V>rKqR!J~B5Ld!77;K17|!~YB*MBD#I5k zN04u8p@IV3J>1PT24cu-cu*4X3bQ5^exZGCZi0X$UpR1UuMq@ZxQ;a=@TdC z1#tQz+^#PE4fG~oe?&Hsx7GM_e@6mp(1JG8%+=W14Zhn^x{~O2=l}RI5WMEshhXw* zQF=b|?HV^Q^B&w%JQjqvYwQE>&=x0z?8x{N<>g8O-Kl-&&f}=*8wKhTl9PXKNVnB= zk0Y4mqJ{Ti=AnV#GZ6zJz=AqsU`NzFipcMxqqM?(<7Z2{{==HuO<9RNP}j9L>XaPs z+}ajbsV~_|EYBDjF%b%y9hUnMGDHE`PeBp}g>dU$5>cK!%crN^m39bRLbtV`!lT%z zGefbzv~;)YcgjLxI4G0Y{$to95T~qE;uD&XOK)NEB4>VhxU=SN{t*(#Qy&$|02P22 zkgX<4hB%)3e{osZ;GQ>rdh5w{*xF1P`T*h95pE0^Ak)}GIn%fo*lHYmdwDrpNT%tO zL8h6>lL7_^&{q?hytf|kr5aTWofwQew(vlcE)RiRdNDGVDbcU@PkN>xuxQ*E!_FI| zu3sIqk(~FxmD`lpt^={U+juL{Xj92{GR#$7R=b(EuF8g5xNPb@W!#tAm zxbj{(2)ee%?G?h%h0C6xe{R4&X7}Fh0I8y_9a}-qv~x;9*@LNu`>t-zw>gIzVN9lbx>3X2^VmX9|}RuB-6B;|2`x|;Nbj- zpWmIj~NvhDbR}d#6w-bUh%@wOGQg=5g-W*S{>HnK{DPg$v zr;~mBJXH=YS?{xzCi8Eq@FG4en351Udfbsn4}^75xxP5}z_G!Cb!&EK74c|Z@WVrv zCE0E_e(10O^RMHUIjo8E2~I^k-wTK*cih!eNd|@l6if@~5)dBG5uXJ9kq-pg$lfb^ zif;z>puNgv7z*skuUk$xe+ZsRBC#kL0B@f#usp~Q--eN5)4&0XFZ|$eT?;6M{C2&T z=FJ*-ntO9i1{#ZioL919=GOf~u(?B&m8`Nsot{pqYNWS!WkchE?P1vJ0>mMYtNmX3 zCjPmU9X40t#-*M)Q1$P#@47b!=*q`MyTNZmPt|cHg5q-E$1k)Ho_stO2pX1$8>B2> z{$n^UFc*G0g~5Ow-Q~ge25KC4g=D(%uc$6hp6bGi%&yZ3N^?u>S>B^!5Bnb;D>>?s zpg3er1!e;+xIlEnvUy9Dozq^g$!)xu;wX1H6s^2`O7LRgxA_iINA3A)(igsYs&U!| zVFsuuQ4s_BLkJ?)lyAz>5R0P}{e)y&U= z;s_K6Jx~yrk*U=V6WUK$pEsUaD>`SdjV10C_zX1i9(^wZgg#hO6Kn7|#{5xD;X2dyI@r zi}rnef9jhxY@OO@K`8*HWL-6@Y^7pFhu3N`cyC$z{)vE&EZ6TNP-?)#cQU82RCevT zYJzqzqUo7~rvZGwX0?B?1X-0DUcySJ_$`^RPHS>-H_U&(ELP%c^XbpqD;`_*lN zY{AWz`l$8Yr_H$zppo3}4NLgM#`Fka^`)y8Lv{wfXj(XYNB_8_`eEXEjzZ>yp9NSmCM_)G12kyrGk@V_U^AIg3;8*#9bz0{Go}x?yVrWK z^VZEQ_0j|G*;r-aeIeWD4$}Sb-As~)N8{f4a4auh3f$CZlJ5JRhvYqfV*|Ct`&v-z zje=VJwPmd?mYn3*79Ny!($njpX`Y{68Jk^C!)2*_tOOLOL2^4mX^_P%^sHQ6hh8S} zYYTgB3ZZV@YbW~{>o`DnrH13w+;1iav3ECOJsodf*`d69ho*Y}h+qxs& z3BmYRIrn!?Tchc$rC*>G%;Q2KJXJcSzI&?pOLXQG189h2WcS;tttE~>RUrd`KpQHh z^QISZZV`SIBTy7Dp#ME@4?wPM@-tjUa8wS2kQ#>Wro&Hb5^pYEx*IOm!kvG}+PH&< z*;3<@%NHaRgq!IUR{d*bMvt>N!|&_f;V;(a+}lzdjcxbnqay5mn^d8{ z7eKg0amIe(PQ`~x3{nCW;?}9E$gKd^R#Jmvx?X_y8^Het(MZqz)YJtAoc(@|V!|Ys znvyd2<;$13xj6~nT;NDX2L}g-hnZMdw)o;6+^(Lcr&GX^5D^f#BdB>>st3pT$G zfk&z{0!wly(r83)JB?1hwz=5_++j2dM>$$pTZ827>ai#1+cg63^`1$uH9*Dg;oC|I za^3BKAyP|dguqF^RXT*gL5&uIQM>1HFfs<0VxgIni;Igbeymdj6C)!aWqeLLfA+_a z%>106KU$6Fv0nf&HYyI~*GOMHu^DcK+orp_k3bmQlk*FUr|RDjkOASG#Z=`lec*2R z6wn8NSHAvvlAD=n7hgceB}2W>76lquoc4iGTA=Y1M2I5Sdxc|CU;)NKT52SP)gA{7 z>%s#Rs*~W)RksOY7Llj|znkNhKffmeK@OUGxZqgf_Z8q)fAo_n4zTFfzsr%gw6vUg z-&h8y&BUgP{p*%L1}4fh*)DW_1dI<51VY^eKq>TUzOI1JEhpHV2$Qud7gR1PANG+dNauEm$V&5~Jy7DjHOp2jee*b=J zlVS4fbc5@MSEN_gbcgpjLwmgvTIg%Q47Y8k=)>_koIcmMaLlmEINQQ>y+2$;y$IlBpkM0ZT(=HG{?v8%U# z$3QjypoGcN!NEaFs(&(Hd^0@&P|^C$_W5nlii(E%`h`_>J-zEG>8GrQuttz5|Mn@8 zS~{+=pE>FbWFdfx(|NN$wo%<10F|WK%(0tUZDV0@XBw$FFU?V~lrp$%dfq;8583th z@dS_U>}-3)&D9kscZxu6ve6Hcp@1)0Ix|%8YFQ+gT~M&S>avLTQSd292I$u;0IXBC zdNTlIj6tZBc_#L(@1nNwBirGWt-9R^XvuZp*=|E2^5@n~FQCS#Qwi_^C8b6!O+EGX z9O$R`s_R>U&51EVZ|o|2aLEgYq!9r% zVArIe!BNTW6~IjK05d7@r`)R<#GK4-B?l1<(+n9?)-PW0Z5k z?{YRk_WRfWZ~@xpc5gtsK<(iBe9amN_mu>X8+9(ZOS-y5`1#wm%|=E>CIk*yqM{oY zoIvXh(Dyg*B`f_0%ir(tl->YZTdT%MQI&_A`!dUI+{Rony>El~r5O^kiCx0MEoLc=YTu#{Ih}69D=h`=-&a*nfezVHH>|cLl#?Bcs~d|r7JRcLUOX}ZdvZ6 zO`;rOX6;MdZGTZwkq##|DgH^moQ77DZNp2DdQe2&H-ftL3#9shtPW@>V;be4VOOkn zkil(drmmFEu?18Ey0`TUCz9FbPQ zA?R0cyzXTRqSbtiaYP2+tXhS&M@6>roxP5LFZR_DT zZviNvJ9D7@nmE0sJpLvPzOZwiTpqf!o}S)qgN{vGA;J3Z?qrj z0p*@ z^{E{wt#VfYskI{650%RrSaA~1Yb3d|OX}+0ONyTW%>^Ngj%d7$X*^SB`*9^R9X);N zejbf%MoClF(L~_Ao1)?v_zE@+i)(Q6VIW zfbnUL+c>{92wXKofOT%9G^qF#O}0C4d<4cUjwAdrwE_>S^ z+Z`h8UlGX=9D&qf7Ifyq^$yHh`U>-47OwH^2PE&2NA?jCaPipgXmxI1hU@A=0ya$* z?LU9+41R4GPbqA+BF7E7&t`xe6JH%}NTpu_MKSJwNc6fk48AMaDz!I!Fb!dN$q!;y&Y7_Zh`h1J@zI zwBb#>0jmc1aDP@R#M)%@@-HOTK3}+E>8yOY5k8EtwI6|#G#4DT;0yxUnDSNu>v3{Y zr|nh1B9VmULzy($86UR5-gR_zK%q?NxhzYJT+#YUO5;H6k{fWn4`%&1^WB2Y3&i}L zV0_w#55TxPUAKp|b_*i(RaM1`zo6mKeUh4Xh$lHRkbKOdAuY&_hK z&woS482ei|DM8}ZxCgE-n1sIj<(H_3d-?W_k|Y`OO`de2e4C!m3+8iS<`7 z>I-D}m@EfD@+`}1)m!U5r=Vcwa5pe6Q5TmVAX8zf+qIKnr)T&POc__6umrmw@X27z zBaW{0Xa;vQp@_>j3AvA8e$)fuf%cQG%*0cWlo;pV&7zf0Y0N4%?hd$kKDkz+jY-Mt zNM5xu_?{YQXu!Eq+SDZ4zH&cApGyur=mk0^8Bfd^|1mqn8b}a&y59bi(J=_We!t{( zaBu)(8fqwla<)K|?wb4<&=9DrCS4sVW%96ktQllGfhecfB;i{%jcna}T3T9-gCh4O zE}dqHSsU~U{E*DB>0hC*si1K{)umc#c_Uh(>`=pATT&9%j}a`o-)W<)?GXECOaq?x zS&xbXX+V)fjv$bFS)a$HMfjjup~b3G`!C7uy%j0tt0X{n;eLQ#!!0BS< zQNt5vun1s3d4S$RfG`GCi*rIIpFy9G=e`OAIUW5L$KrzL1aD@hrx||oNT_0^{7=^I zuVo>8OVJ@RE7s9hQF#G`7Qjk|VXX9nV`CJr0y<{)E#Mz=`1iRY2_V53p+B{bKA!t2 z;TNy@yHB&bKjHhQ)l(j`{3HTqE&D$Oo(S%it#ZI75Xd1Q;OqfE=*d*N{jKE&KVLmT zGI={5F-urEVsG*|g!t1l6g-F8>>Z*^5j$VHH#ls(*>|BHAekZG);GbL$ zK)1-n@aQ#&1v0RpP?-0*6)BJy0h2w(VTuCL1R-e>O*shGk8z})zpv77na*PwS!wse z3GV|Lj6$)@F~B^1xi?|JXJTb77HeNw1)sS>4e4D6DSDg94QG5pLLM?qBt#Gb)$4%gGuv!ORE45cC!4if;|eT8~>cxY#93wZ(bFr1tX zcfEilURu&4RZv!*7#xhinsy+au}^TENn3cv8lEB*(nzkScN5YW)|kU3V<&UCc>he; z%Lf^fkR#ZMIEJ$CQK%jN_r2y$%tw09-*k%7Vc*{-Fk#isXTav~`~C;fTvXB`Wki3< zrKd#`#QxKe1QGKKS-Zdlk0MLcN6TxemRB-WNKFJ>f8URB)NaJ99%I4ZRT{)>+slv( z|GtC2q9=Jcs%uM7?qDBSD;|60gtLnvP81Bc3fLn9fVU9zLjMZVfrb2^zF<8;CIaC=%84LJmGP_#k?o&*N3|10_BoBU^gfFAUJKLM`32S3;mu(`mt{hRsK z_~%mQe;aH-{{Na`zDax{qQ9Q_-xPJ93psEQkO$c&;0}6%tbm=uFB2+Ji9i;n3PKBY zb#;Ax`9K>5D=RB0DJd;2EmKpft9^g~MQ_{<;jWOC#sJ~UrxWnuO|DL(R}8TC|E+KO z=Pm_;<;xC{Dh=B`dxMcPN>uAwT3h+JqxyLzlK+pO2?})>9G3z4IOn`V^cNGGLhRu7 z*n$vW6t97EK6115Up3Qq{&*vl8E7FIAx~ELwi3jzFAoO-CjJ41`|0&@c7dP=E78B= zreEBEp9QbC)hw!>aXy_!&^xs~fUyq1X{#qZl`1uD$n{_)?Ny-2*vD^D>8AijIPlar zH+urO2{4A~O&@UFE+C&%tCSBa(0{HrfA2i19|4V-gu%0#)O1*CgiG5S6COWEV}gOi zQf!G0DuufWShO3w86;4&SsK}W^Iedz<#ROAL>7O;;^6hQ4{00N`0!_q`glnRet)bq z5(w2GsbFURKS2)2y>e-LcyK>N__e}0Djc-)s`=3PL*^*NL9TGyzuiB=n7uXxZUqRx z?&Lwfql#S6q~|RkyNkq!sZT()N^QAbS;^A;6NrlcBWmLMZ&8zu7pOR0u4e(&z>#&4 z)?*p7Elz8F*n%;RsmaMxF(ChF;Qc+@?*^&k!FdNy zN^2YYbGz**FsB59kXs2%yFn-!<@Y$yK<~*YQOp%FOoRtgT*AWs$4gCI(FAY3juu>o z8A~UZfY2lWWUN8?*r+jlX2*ocvL2%3T*J749l+v1D|B-BxuNE~#gE>KIHCUT3%B88 zWLqgN@m=qrQemB78Q%d2?)&Jp&IQ+c(@Eak(wgr4aI6yBuvj7sb8Y8sOxVP23-kN$ z_Vh7yPtrNLd>G`$Q3m+zIP@4|H)uleD);%%^PY{3u98n+<}9~~!X!D*!n{8v@JH>o zEo^dx;bWqq-vISUo+g^c10{L+=s-edR{bG|oK#vJ0*B!KChulW-zk>(Wx=B1MMNWB2B8@ikl2TSY~u^o$!pV9AVmaG zmo>#Ne}InE0!q^SK``hAv4rygKz=sq$`I55DZWn8cQgg1E9o0a&mDDCTT-nqmk>$xOmX3AWB)VnZWnjFNFbDTgVI#!Qo=cI#l6}cX;3ozY;X$B@NlAn#E$~ z(bll_)J($s9212|uNFIBS*NBHtAbCsM~E>+VHK1*<1IzITH7D&4KEzvOy+-}vHZr3l(_^<7LI$Zu6_1e8-kLVG z;DRw$^u)aiPcC~;*ii;#ULzTiXXcBj;_s`l1eH%NJlZq`bj79ea#ig<=||%ml9|vl zA?f#m23`L0vGJ*{6$Wj>qG`w6q)#BZ?J)@RQQ{M+ry_`~h0e47LRERGuUk$(0 zh%c72%4z_7q#kE|>(tK9|Hg`!mzNhUizJ^zLqi+Q+70Vh90NB(iE@DC;;^PW=lNkW zP^(Ny5~-$@T1%*2HI^*!@ylV@<6_>tgDU0ouV^t?6G-7pa^qAG9wTmIQ41y)lakIb zx^m9G__RgC*3zy#%MdX0Pzu6bj*=}bWSl2gD|Q~HK{r_MIC9QcB9$A~&qezU=iPHL zYIb(=8Bdy_>X=IZ!b3`TIj2WwM#2W{d7cjbw@RDXMGY5%=1}3tqMX3%ls5V z*8BIpSGdEmm7lTAnVtw1NV7IaC0ZX{0p|z$#r_a|26~q$-~NLc4*^@W>)N(g{jUte z&I3(o;$&l(FI(yQ@cj3Z-b;jEtg69Sc0TF!jrqg++p63{8%ak~oB4%LQa3eM9*^CU z38$x+KS3`GRvLBl!!j}r>v54S5POj3IJmReLI=fFH?l-2CEd~O9Kt1%$( z)i&f4jA4}ar%9Ct-^?J{p--QPbJ8r>w^rcX}=w2t4gsQTG!H zy-9)IoLgu3<|L)AI}fJRxF|7%tasb8S}nj7?X8TDYGE;H&}!8U^cl zlDblPWu+fj7)IF~pjMsh1njIID8C_M)sx_bXu{b=9pUE2M)#|uMfz-aH6tTR0&@`G z*<^o{2lPPwvSYggh{m*xC&_s1^St8)4$6cL(n|p4^IGrzV7B7s^03A1GdlFuGF)77 z6GZa1JNM^#=83=AjsYh^CUq5dhPP4F{QxZ3snOT6q0}L{{`^{#<;67!;lSSU@XTAnqXG_=1CCgK3{Kr$blRnuq1vBiT3c^od}1KOv06rewo#i(=4b?GN*wE4AQ9zT}F|3Na| zK?Ka{`-awYT%(}gXx5l4$1F9KF}DRCoES2SN#K-+FgZH1pV4`NSpT?sfLC(hm|3;e z9*mH6ku+@lO~&d%GU3=oTZ6XcxIpSchssp-;l=k3S5^0Xt?HdLQBF6lf;p@u`h~#L z^{%^{-Jg3osUMQxC-2M1)kW|0&P>h3kA-F|a%Z$-UE@qtjH>X_xppX6LSof1#ka76 z@Y;%s?)z|}tn8SiXA1Y`KFCIDU6hgIZL z_AeFUzV14MK=In)OG?$Ul@RC?;N%bS(5O-6z|SsVkgqR7CBsrw*X24#Z&slxP#59B zJXGt{Qd;$J+np}xwEWTT(>bqepO{UwzFk%B>wY3)cF`LWjx{nmRJdaCou;&e43So2 zJf_R6(ac_gnm6{z7#kO_V+pCi0YHH z`sc+W!vT$9SgJ`v<+t(=T!9+P|K`dPf#Mwk<_$i#7NBWveyX!~U0m5$q*^ZK&=6-m zx!SSj^Vt?WRvKtNZps{fsBv>Cp~1Rz+&~hMiSNCv%NI>+Oemb5hUa^=@4xqs`WlBg zAvrTMHIrb9ar;2y^K824jC^o4Bn+x9J1-QIVGdgiPw}Yb)+|FVk&^GTLQ60FWT%yB zgQOYGFZRd|Cd0on+M;pAZMUESBP{UOo;kvu2pvPkg$VBjVoz0~lrDS{Ym=>ii^ony zrGngA=$i$CV`iC3R)YVxtV`eU=|cn>$_C#Gh_$vAthjQ}W+No*f^YZTOIf+lne8*^ zS8?|H4olxyM?#aa89T2zU$1rp$6c|>o%f?LC){NxPo$r6=KbmE_$ZXQ!iH`Yu7k)~ z6H+Acfr*vBD9s-dsqvbJJ)`-aSp%gcX7uQJs>AN_bBr<{Llwn_bk*#r z*(5u!Uwya}UT$cyrqq=ri=KUK&JU6c-?2n@j2WbCXvXAKx4&6o#o(H*abB(UMx&=O zks${*cD&jNZ~ywM2}xLsl^YuP=N=PC(`c3=38FnTEFnDYN$DvXM$Mnc$Px{qI_+13 z;-#e}bi7ieP1)ApzGuw5$Y3cVU@JY3D5Q@QJlHc@iFQ>x3N3FA%OjkeMJ%=0{FOt?`Dns?7U5gk9}&sm`CX*w1{Cu%_iI)5l4a*LSeM zjA_=O7-Eg7SBYeQ8PF81drOeE5cumd)|88Bw5Iljr0%Lr)4nWj_lor|O_8E9L}mFG!BNefs>kVc z#S6c~UI-UFJBP{hw6{aiAx6oINNk!rw!yZBD$H_qg2>}+>EX`v;f-$#n6iqFj~d|3 z@}IfE^=cUJvL-Z?c2Du{7p!!V*K~{1y@lx;pZMxWhoUSiFpFzKRe*%Dw&&a`#MIq_dlb#@Y01Mr}Ff7ukD`<{>tYiCu z7^<6LA@85?jbS3a^fF2)dM`tH>VreaCp&!G8T*24UPuahU@MgZr6-7*XVu=uh`J*2UBw)G*%6v>}lOrL+)*;OVPs7JLDO=)k0@quwvSusvDHR{{q{>|y zG|X73sza7@@FbG0?Z}cg_|dpB7WB8R14VCKA@3@2wHg%mIf1H22`ytqn_6fPxB=n_nMtd7M~}r|d+%kDqh%Ry9|@#79#n@Z9C^ z5g_nst32w6R4<|Q|Jb-?QR>b5+-)&y&>g)Oec&SshV(+gS%R@8Po%K{A;+lvnOacF zzJifad8_1kfpqK>PI>KX0^RjdW==^Qd*GpzQ{N;}h=|B?AZCbRM3ymy>WC$zXrg8Z z6Z5oI8GR<=sPW%QdYhw4-CvmK&KKGW+9mrWeyI(dPa zK8-WWj%;(PKB2aSF&8mbA68>d4_B($S~Tp>lMM58KUfyWZ#0D~UGbB%gQ?JVxOVb- z%cPEQ)1aBNdf8|k$TqQ|8f=;cVr+S&*zadF&QI-v@bF{jB=Q!YTTv42O-TgpcX(Tx z2wI=+&<1(PZn@{oGFu(<<`J`z5QzZ_`mIDbT-Nr}+29#DNPjH1IK;n8>gx2B!)2FK zgK-Xgcb?_`!mbN@PF^Hq_r|a5UOfDb|9#~b3t9Y+86=brO8RR-;!3Y>a2|$Xnsvw! z=s>?Njhe@BYx2Gc;oM{%7ztLQO0jLmcXJ5#KB%F2q@d1Wmp1outereSamSmDT;rHSS#$dltJoIJ zYDC0^vyiZfp@edMB!1CxaHX4+;WLA+#Mc=mwnElact?n53d z3cjB2TO!w6hp_8@sqXmTYKABcLrrQuDIYb(kb(59E|u|8E0YSGok4_r2p49D;!W93?xWF zXc{V@FHjrOp7Dqz9Kd)Wsm|39znf67$cV#f#OZ$MZn@I2gjae9>)Av_#*G-WGKZU~ zi7zsONliX3L$VPOyJ3_4XIs^EhH$H0i;`kG4`!Lm>)_bfSjiQP16x~O$HlsUbI;s0 z_D6^-*~yvnuUM_88*R+7g+H;$XE^QvMn7uDrW0k>Zp@C_#fqF@tndBUA+=40Dbep* zQ=?1m$Bc0qsX}LV!K5#_3}4oGNfa9!;qix@LA{-u`fXs|XU-B>`(X#Fn3`S;VZ>8N zxdqZ1p_Gkss#zTD&Z8BO)d=r46TR@Iy#925IkJmZA!UqjA*4@V)cm$vcr#8X;~^%u zzLT8Ghn*@GjHCwIFaQAj7sdTms-~ChKZy-yDAt~9ZAx0RLeYWlk;1y_+{3M|SS2lW zWRvV=_sjR&BvF<5%#Jp~i;7Clr#_90_Q;dyXpc#Zom=H6Tg~nn=~a%BJ*P*)5?AML zmyu1wVGd)-*nKR`1^wZwA+$4!L6(mEt+v-YeX*O+$tYd61!I-Qq3T1jYUD!c#UL?>=?!?fVyzd+R0q^9%#qUDo|3i0jb(*Ld3!r_D=8+aa?~+2^r1BNE67D_ zW0FSZCsl7v?%j2+b5}W-jOFUy_FKk4wccbkx)nk`HyTNU$X$0U35J=o9m}Za8Q!5Z zP{fg7{vf50oy$nfpk0jyJe!7dCbEhN%QaYMF8`6-!fs1=11SX&F=L;NQtUK0J0v6B z3HjP|-J2VBmLbJ$(Lgtv9#2+v;@Uy!AApGL7NYJhg(tIPo{snOZ(i(K-M^8^o_yrY zf`_g#X|L*5GR@G2Gv7+}m#w6&ix|hwYfMs(vWdKV&&=$^nu2mfJPpn=wO}rbI91%a z^mNv8`-=ThCUmzcOoh!p(hqMMG~|2J9Hno1&A6y$9rtSnF$A3GoLEUq$D+?OhBRb0 zc}gV+NuSiPEhatQq~4Y~MP1Py#jp{Yhz>R}>PbT%7UGN#x7sOOLTd1&(DFcU2RP3r zGI((%+54&nYLgTz*&FjM%h9l#SkgoW|9>0{EyRf|yF>(7#4i&OE4^h+f`}yBO5Hwctai69_Ev?3TT~L?ls;paI=q3x_-TMGs$^@%Ux9p>CJ$+X zcf%TEM)Zf#Xgr(xXHbn3%bhppa+0t%(cvnkNb~^%8QxTx!`FolW+7!{uWeHZ&-gyr zZ#*OVs^vJs8^Wgihcl#|B(prte#a;-x~!4T$~%2{d}^{H(;6{T+Crb%B!@}?=QZBx z&TQr{$P#eLA01o%D+_srSiu1FaRU_mBIWbX(6bYtMHH|s9ToJ65tyJSB&dN;hX zRxExrQru39>lS^65se#zOIOg_&F=zVp?-qA{5;46-*kXAgjY)VwGyu_G&Z=@UM zecJSx)o=thKxpuIS~F);Q@r-2DlYACa|YGRxBwQuOosi@65_;Rdm*P?$;FtR9jZk? z3Gw*$1f6E5H6tCJL2#-CV8N>>YVs4EDZ^W!j=1V!=4YKCb@%h74w$Yx zcl%IO8nOi^t~yrQYi&)bwCv(LqP^_jr=q-cZS^ z&>H2XvHyA=r{|zh-GD#hP-(H{M>~!7!knP{+g`4t|bim8$vt z>4tYyuPO8^I#0OOqp7~|@u`Yj%;zIAzEzcO$bN@;4r9oU+)XefVm zgP)o7g>@|Zc_#f+R76txk$NgRel>eWzs{0y@1R7dz_^hDj;50G`~>OPUliD2NJM?3 z_6#XzpLy9Vxn>o&skfw2$YjW&7Ni;#JTOs2_^6KsyV2_W(X6EebNvI{5#mw~x|h{N zn{Jp&-_kmp>2wy?UFa-#i7s%{?THifPhMQqq*1E8h7DAlkJ6=Ot1`a6NR;XDzN0DG zw=!0@n$?+?IFGPF@3(rY9bB#cWKM`THN8`KMttUvh2i!k0e@0i%*y0J=NKvo4V3i5j$WRu zx9%0k>~(jHS7JPQ+2F=BKFQ^_Amv32^LFN#4J{9@l>V5*qj%N49#GCLlc{gr#{|OzV?8=a3*6OElWmKrCwJ%tsDl`aEQi z+JD6@(w^{5WV0D(&uc^u@B_r@Wrg)f%9rfgzpJcg2k6(aZS z@gq$QwArqhtgl-Zi?wb~&S^~DY_tX@=01*5rj3nUXLJgaS<#Q};CGCxBN8&k!45=Z zv|41clvNJh3D;>=-3JS3+^|cRcdR-<0>Z{HY{LTf(I(Tq^F1Cvby4`(AxZj*4L9lM z2i<++zqx~;p9%)~^y*mkM_TM_l;u4m#s!Sr(<>YxQ8mNrdQIkvcV}ZOzeBENd3+n0 z*^$6W52QN`3=Af~KD)#IMuF+tXdFe?r=q+qG=|W**k?7r`FcC%rsk%PdlOW3oiM6a z6O%M@Q!Be8$}KssnE_*4$6<=~pBW)gvV;vU`kXQ1Au&onHq30+v^QvuO3i+VEx^KF zBRC)nQ*-ztG!{O#S#o&z(Ns8jQ?l>H$FPPjp2TAfO|lPV7GtWq{FM?PSE6C+=s&%w z9|Vf3Yl>s>Bxz|@L)V(A)b@#|>1$dP6Zkl9zdeS?;5TajBcO-PF@};ihvY# zpFMWyf7Kvp5FxIMVlj*BK1?yzO&?UvdS4|}p+kh*Z`BP1!==IX*Li)*<^IOP}o zz7pz3V_!yUsbfg!p}30}WorIJT(caO`K@*;Nr-)tL(C zcZrRua7W+FLZ0VS3+5-1;@XfWC& zSy!o|S{dxHPHg%K%$04KxkiDK(y-Th3}zoJUVg3;?7WOBkmOpldxKQ+C(0%!#c^*4pMFTCiVsp18FR!C6^}8pD+eeb}ThGJRE@$HsnszD<3WdTeFGkZ|{w10b&}j7#xkoVwNzlzRyvM6duF6I`P%z4(zPY~) z=SvfmiUP#c{kG;RH{dR1I~YDAhghRVBeb#XWpXQ@Tdn>1%VKsGQ@xCzR$ zhm+c_sPsOSi#7763&EjyW-|>@dg+tH3^`h(SR#HVzQe3oG^L?zdxB=HLkr8{bJ+9W zolTiqH-14VHQzDN1>B;7M=Q<78EuS|4Z##B1J&I?rd7{^L&9NkLaET@yz$y6-gyyiZ@3kLu*EOV z!#+21C{=GYN%!XAjBv(|rGabXAk&Kw+m?bsdoDBrUFwXF7&aNhG(mVVCJf}?ysa6? zCol8V-S^086^tI!q>c!?vptkg{0|qf@Qevxy(8{jUy`e z9YV|tVmC40e>f_zpZ9)W-;&QchB-h^;GK=Vn3F}fL?g}{{Gfy(*u+isiO%COw_Fm@ zj||MrBNG$W2;Ei`we@y`Umq{E-8jz6*d6Zi@@;&dxBFP|>Y3nE($bp;N9vKdpahA1 zHeeqE-mMB8A6ljPzKqS=+uLKHZv6iC_eCG*x|<;+q&tUh>28J; zR63-)OPFEkmI0(hx*1?dLAtxe{rK+v9s4hEJgjxky{_}TE}<(x&;2lkb#QXQYjYTOP|ur=6y8hN5o3fu0bbr7)7DL3kg7I1Pf*;z9@`^D0>J zKm;wKl+QFqbW>ziXB#7nSO{NQ53H`25S;~g!K=`v6K~09iknAw@D)>;i^|U_L){Xj zzO8yFL>Gbl?~B->^extjyU1wz1sTb&7r%wNHr+g)sACC}2WvhFms!2KBa^^^!zY8< z-Gqvm;ct$48*Pf-A7+1fsCBuwxzU=1%>UHVagc=QAnBAc$ow4);ZspDzK{2%|GjC_ z9RV@(34Z4vkp#{qE2RIiL@6u(v>hy3r8U>=rft5P!iSZjiJpl@u001_sHmKj^`gk)0MD=-rC(tIwe_q7u*2A|5 z9=Bf-taD(LH?Y_Hr$O4Q0OU5YRx(WIuoH$Sh4@YTVr*bFP|!c9So!Gy2AnSS8Vt60t4FvIq-aEutysl6#;lSwJ#EEDE(_^2SRjyb%@N)Tp4+O~hfruhRSC=G4 z9e6Q>W!(anmi&(oH?@f=hAV+rCh)#0!^Y?XGB`Jo0z7j@|E0mq4|pJfSN#Kk3My?6 z1oTzww)ufGYLCAEjuWw~tgsp_5@82~Bq-_vDZxK~I{w~uG&Jx7Py4|TN-Fs<iwx)lDq@~srX(;CX=sNT@&Wsl9HPzSk%|hI9BLc< z2!a`*vlL4b?D8x%;te-{ImEVCI3=03sy8E+A4|@=#ZF&O3e|~ra;*&W-?-V*??v?( z6i^}0$*slt=7Y|vcxY4G>V2g9E2OmUkwV!tC>EnB%VJ>7#|-?QpYP0U5g<2U*$D43 zH+ep1CF0stzKOo&b=JAQZ9QVo^|jDlWgg;I_kHjE&Ze@HIIteuL@w@p9{yFH9oynJ zjEk4O)u?gje9TTBF@jGDyD!h$qdNtHOzol1I{&A)6Wt7DERF)gKJtT|Cz$W&g}(0Y z0hzs7{zqD5sNX05AcB!6+`YYk-NSBYvZS}S7f^9h3VVD7<<;#062BJUl3^VHq8a}b zK0vbdMeN^y1{wctn(A2*pudDXhu@yC(tHXX?5KQUTds~j|K~I= zkKcDH6RPw-nU(UbCzv0{(R z$NXYe5zM|G@KGr?jL2vTSA-KuW3fgrC<>=<$z&f6)`ZcQ%6j!4)o4+t-FLkKNhV3x z@z8;E*7P-=qXVyNSoqM~F}GU0#Db75S``BRYHDnGa(k^x*8Llv{qiBoH}Zj>K_bPZEVUNPKK!gCYK!~p6Mmjlb08txkr#N0V$VXl zww=hq7r|nggum>expE8}G}7VIv$Mb|N>5w6;bMEbO7qh{2VVH|*Zye7N#6mX-tr~a zzozicsdgZ9+kg+8I>ll*DeYtuv)0br85Eo;Qua?7i^{&d)IpZP8x&t|(#Ftr;iWo~ z=vKf64;S7+Ke52|&Y14tdz3B)XTBd64opLW;atq1+a6XfHc|O(;7RQnD4g8MJL1hT z9$qYeMoNlQC7!d5yC`%w%TI`RN@uACm1|S@`H8Pb8Uf*#PmE#h-=ix{UFn=nbaZqD z`LC_AwdXiyMHe!#c34tOWY23sQfHXK+&kcEthr(7ksy4#iSN z(Q&n--}|2V^)NtdU3xbU8m1Fm=0+@^NV6)h8Pq${Jl!{I_~`vyWc1V1)Ry{$S49Vn zZxrj`c8QUGGW@b;V$t(P=|f9{d4YU|a>|Gtzc*)9Y56g_{>4=2S(pNUZ>?UOF%o~; z*o~~6d}(U<618?EE2Op-mUJs|Wg!UFl&*5m(Mh+llYJcY6o?2Pju*D*8a5?)iVB@c zkOTt!9KiSeQ-M`BFDuaj$ML`8`=9d>76yu*oL#D%~U3I{ORNF_b%;O6LM;eZ8ptOS0nU?@u_f_ds_LYej z$~qn8)Ffum4%nINVX(-_2LQ0LMFtt1GdsdDrqGB+?Gx(Gfw9ZJR`;Fx!O9)r%g8oW zG%RR5`UTwN-vRWPR6?)OGrvP8c;nl)rc+zLBAii%-*kZMHGZLi7w1_@I#Ud&_pzW@BU%jGmvvN44PG2|CMPL!%*+dDic7R5hztby z`Sj)XhNJ!#I|}B|w(tGcO7a;iVi;@AE9A%O*$t@#8*HwX50#~<_X|dVA10OKV(R76 zb9?deZowo~C$;|FZBEnFm+b)rk;_P2E&rLFIHKghSgoSvZUt{S>$70Mbn|7T99?bU z>CdGhhp9zQ$@CAb#2*a8VY@{HU|a(|JZWep%h`MToIg1KglNfl6;I{gYD+cP@T`ez z(9g_@%1UB)&K&%Ue={-J0--5YsJ0FSxEr)-AM9T>FD#9ZOF(9AhS&kx=n2c8SX*>h zf&bZvpskga2Bk@}i;1&yCFlW&=C%NVXd|_c+l3L6{?tGOovZzvP{#lWyJ_y-C$u;E zH`Jd2mUt+?%Z8EE5anC1?OC&r?F#`04e?c_sh(L$k0s7kYPM$xomt2Tr18ryHS}Z9 zWEp7Xrn#YYpPIj~Oe8zC%Q>5A=@@~@D$c^%f_LrNx!BGy^yx`0qGu_vXTrpE3Jt5t z;dm|;$HT~Pb;DlY1I)qhM{O=GJ1Pr_sZ+4Cg(ry^>h#-qm`@)h_ye^JNpyP3e1)P% z{l6xj{dJm3AFNB-KeiSsPo@mwtkWzH6l^$Tq0?}%YpdD`FC>d4?sA)J(^(*8=97x` z2aAivB)Ro?gPe|YLiDH}F!DQG!VcMVLSo@Fu*eF@Rk|G2-)IKwR-V5J07E5VzMoW8 zBb8llwj2n996O>XtCR&!_zdIe<99l$-K*oxE2DpY^)v@v2jO?zzgmqz{fq-8+Nm2% zc>0g1RSeV6A%yl^Z@gW0M9qIIkzi9~T`0^5_pW*w%xnCs;WMf6;wOa-Sx1ax0^aCkF7V|vsdHWH@ z0%XDU72u6K(S5C*!UV7*jqkgjIE*m+fssDVOS(o6_gn8~r>EO)HnXQkO?_9xfB{c{ z!6-WApP06cb7_}d8{Q724^?rIVk zD_^P}l`y5|8nFHGezBdYLdz_ zc1qs6#@id^)#Sf*1QBGmCY7zEuleu(ZplRaN{AmJ@iVg&(865U_}(G~AKJM>A6Z5d z?lR7Uz#34I7V5N};^`71?sN_R+XXz%u+Wiz>NXWrxR#Qg9RTEa|4}vo8)H;!(W|8{ zhID#TzVPLL*>P_@Zql!vIr;g2fq=ON`B$Eq%;r|vvI~HDF0h$4Tzv(66GbtcZ-H^( zpT-@Iq4mbq)^z?`+gdam^B=G=lwrRTSsz!{1RqpQe-CLzKD6uVnU2J97ApWB0i5yG zV}VR)LM9at4#CJOUVWrS>9&hx{eVE1#?!>x4S@jEr{cKf%N|>7TYe36{TEJTWJR0q z{W&&hJ<(&;0{*GDlmXx@&-ZD@r2(%Tm8hJVWTkY1Kah^eI?3I9+7HT$&T<>yyTYU; zF#RRm+FwS_plu{%r-fTBp@SNxB?PPU_ z-GeXigOG$hTjqY~6@UBPS;#O0zWewK>F#M*8&C;jn@bov}KjbuO+J6p&?_G{cNL4mgN|e)ors;ygKtHdEvDfe3#V>>-9Hf$b zf>!4Vd7F3(#NXpQH*68$i!7bdY3=A3^Z2xBkpPYScR_cX6_9s-*3{ffu0VHfgj6|2 z0%$#X7>%EIn}UbBFoUMMK?ssHG)!l&Oh~jBjjLTWyn>i0P$T+QnAoB{x^RKvvmUOh zpzr9f9yk!DqGz$XR)Ta8mQ_yOn{yN??AU96tJ%6rNgkA<*<|w(rZwiSP>d#d#=ps( zUR6fh7vcEfVy}shGeQg3Kc$F1+qmAea!dO3+k0k_IepFApL@^PSiIF%(HSG_-b7NS zN)oPNqIXJ(#2G#Oc&f48SoO3*erzMw#d}xx@0ji*fudaDcc=Z*UU&U;OgUbYEbK%t z1S^PU*$Y}5UU%?LdAJC2Zcj-)_TIN|8yXQ03_;}@d$0l`eqZv;suP?o^4A?Sc8IjJ z-oRVLOr`DQ-zC!Pu|G+pv|_iX#eHX(>R(I;M(2=hApB1l*9Y`Jggb#86+p>oYZ|xt zx{FRtSp{|E+Z3__>OR0hscCT00UYdQ(7gFwv~&}1)K>mSaX{<~Xf8nl0{;vwqdCIt z{ol%S}>_k!CCH|o zn5{z)7wfRyrHY8BSq^sWnJ2Q*YnC5E1!lCxwkLZHdHHv&$oRR;75 zy!Fsf^4`IX*o(aof7$ki9n5y8#*Yi9aIXB5u>f_0OD$a(`$}1q3eK$Fttg(kEYEPP zg7NpKgpvQO(v?wpKg*2(z2@vr<0-W9#tK4C7j47E1e94;SC#RW{|F!5dFx90(2~m7nZN@OozDbIKkkyC#QteukqlI(|pKocoOx1=J z9JikZg?dtl%|7sDUt)s%cWaRHs$QV$TqZ)kM{`?%3|WgZm)rcwK@f0Zgdyp?MC_g@ zec?X=bmk&H2L{XPnB@&euNP6WQ)o)0&Q;aWXNSJ8A~AP@(OfynyoF7r*#F* zZOeKTzXU+KI=&<+v%}?h6>iUM8V)@@w zFTEPpid{zJ**t6aQk_nfkaf1Vhgi~A*fsF<4&%cZ;#gE76%>{FpMh8%BGV6CP^-^y zsuGI1X*c_Mk5oL#30;-FNsHhxhb*H(_p=A8h3nWAD+H*^W$P|>{4Q=aAhzy`jO~(4 zr?=$r*#NaFzu;KIvtCnwqUL@S8VQW$OgjaW8R>{^x!pnZC#DS`rwU!q31Gqlyw{m7lZ8F~7j;oaxDyHGR5AI3M?@-R-Uh zUBD)}>6X&?ID8^ue$||n^ScJuzXuEYvYoXe=x+kvO4qe;^nZ8^3C#V@(7C{90@-E( z`jl+&`@Km@=4GidrKF__u(|)t^L{eJiJ)sxe@BX&ttZA?%#rmca?*m3i*P3<0+(0Mx#_aQ9iAiO80;#Ko=Bi%kfu|rs* zcX7gL2~thh>0db~4^G4|^L>&@kT7EX=L3Et`2T&t9#mnR(Wd7n4v|H6@*8GZHjCff zwSBGbOo3U(Fz$$Rqjr>r5N~d{%MF0O*M&re|-DMBp3q1 z`I$NUT|+GCdkWrK|Kehh7vHN&o1>^teaL*zwPK0 zfk^r;e(x;l`!fM_(FciW*z~Q=1le2mk<`%zsY2`s4*LP`l{(%d#_Fzp0dXmj;%)>g zn{P^3tpOF5f}6NicHjAd-|z%^>$kk+MqV_EbbYpM%4+Qf@5YV)sbyhp4A=5V=Uo2E zU7d`Bsq_6IA`*V16BH$AZ%US)m#8)VvA?d7LI8On#K@;@#rK>*8?S!mASJA(gOL)O z!ls3yy;1TOp?g=i zY#??3sgleX8}BV12ph3Sw8dK&`xvwKGaY2GT|0t#sUrR8MUG40FG)FbuE1;kG$SHZ zgVMD<{utTrr;vt4>cw9Z2xgh{XMdz%4qxkjUY+D5X^acHSUnI#;Cs)(2!PAvBL8}- zeB$uE6H#AK`?onS<1=?-%Bg)y+x@m7_~l_vwCUun|H`5t8%gydwMHmC)OmLzL>_OC zy3*q*edv#Q9rfC#f`a!z9S=|&Q%Q}Jo1HBJH1d?cvH;%NEoGXYZtE?#Nqs$Rto;O~ zscUEdvBO3|(J1kz&ad2gmDiMSoux02+xAdYX>j-%W6RS`Ss|}w4cTSJIw?l_lOl`X z*A0!3oS$Wgeu^$RbE7Dl!2#ZmmJero49c^9O=X*D+3!iS$WL@CNfn z#t%_2F(s)H@nlpNr4`|;tet4Jk;Ri;^H&uh0#(@K(U_PA^A&}SP(KLmg$jH^(=;&1 zOiu0r&@R9{=-4>LLN2|KIR(xB69{gRC34m?z3Iz>lV>k|mr8JI?<=)|3g6;CSHPdh zWg&jy~T^bNnLQtp>ARlL<=^RPfD2T5kkOf92`Ahi44&CwIBjDUbWWY z7o=wTUrTQNB;kfj$A8pIL|B!4oQ#G}D&(&yO`#+vBN0+!qVL_ktzXF1Fcsq=4DUOjsASmwDnpP-~2U4-MgfRlld*>@K3f<){6 zpWtnxuMG^2?F7i6Nq70Yz+1(kvhwjpvy<2GYmt;P|vvZ!+*L`x#QTT+D!hY854GqQpnN`9%7#{sS* z1uyxJnHz%PGzx8RqKS>Za3G`8Z=|$86jZ+EcroE88BdyJm5hCw6m$LLC}W4rey2gU z*e=UdtNi1oeKfO`b!l0a1@!&C!X!p44#~P)cVT2v|8RmfM;WYRWR)A|)&2LK9B}CsY-0>JzvL zp-&#GQ!ba2jl}@M|0TMSCO=mQliZ!zS8&4+!w!M~H#1^aMx?ZWn7g$_pa?2vILlTW zr@a=oO}$`ug?C@2l~^38PipfqZZn?DR>q9tY<+#(eJo3HmcPE4TNSF*fck z>dP?lr_0WX&TVShf^Dj9y4pymfA zZxA5~ZpW`C3J~1T^bpFCSU`>|KS&<9frQU;VVPS;W^W8O?EGN%p1l*ID?l|!B(e>O zytlhrd}6>Y_>r7~ynI*eUEs~m-RqCe%?nLOuzfzO?L;Q^u|ck{x9)GGkk)7S=JOAO zN{Xf6CZx~qXnB{rs=DHDZ)(;nHr+nxmp@0a7P~@o+pwOuF<%xy49)dKpMlI>fXx=o zm`JPLyfCNkizbAX&0i7NtWzA(QY5Kyp^?5(DJi_RRFmwNg|#`|inBV&&8N{|gz4cF z_~4Z5BGIJ`un?0=M{}TTwk&siY_t3S9DQ0h36wbF>|m{4nufW~$f8^_w$e}FaE(0v zmz+3`fU}RSF)P*zoRl4816yN_tb1qY4QGfs=aV$oF2pkSeu%8S2`9Psb1z|%cYiE_XNbwCo*rD2~r_IiC=v(k~6qV;Wg z+-2U7>{P8pxr+c`G(|nli_%Wrl+m2BUt(4e0rB*5qNCB#dxXE>5TdZ_qA@RMCInK4 zk(XUsRqM>-K*;SDUnDW;SoUn2Z-RZ@W3frv=l*zS|LR?CtNl>i?!27Zi|6EgoOEK+ zF)mu6Qn6jpyNEiBcqURTbca~~!Q>oH=8GaQ*H>Zil#_7wP?K-lV_TX&W$lL&JfhSx z2Zd-M6D563=0B4K=IT{fXcVGBNUd_mx7EAWkDL0r(#!oUqNO8ctc2fuowsW37okMh z&B|cf`s@ts2=g9I_H61t*YOc{?jM)znjegHoGpV~WTFfLZ;5A*<`9;Db~Tt4D8S(^ z{Yl#j9s*WdM3>C)SG>6dQB9wO&Ya%I2@DKZ^2QC~2cxIOpo#NOCNaFn;CSk=7 zw(J0Xh=VDW_vZ&;s=6K;5vuzc4&v8Ajg^JQlf#dkAV;qc_-DEIW+{=$2KrWy{W)pU zB=^*PVle)=WXwi`ku~I}r@^esbwf74y~JLC?`_g8F#vN6{(m{usLT1O2iN&WYxMJ% z1uyy?Hwk)G)`c=(#btTr!0eSt9_kLtkCMTBjQQ^KR#6G7;#~O|Ha+n)0H6Kv&wMLnBen2Lo72E3TZ7R`HOs?soc~8TT^StTBxwjm zGZO8_{1O-G=1A*0{xdUnE1D>+D63ty)p}r@XhNfIKgAT?Q`Y`Yv0*ANV1f}r-V_c~Q(o6gt0ka;O-S+pl@rJ=dOhY1-)MBY6=@HfLjREAnZ&(rOO65 zbBkPBlBdcLpY7{rJ6UcHu%Ca-!)}q^oD0cHbbjeX%T|Z#&Z5y;sLK4TTl03x!_!<< z84|fk(B1Gz?UGF?8g?c^_u5)fQjbWDq-DFOR==}UKy@}n;|w?`}a>n&O-`~P{x6F#F-+e((mave67RuiqISitnd$}N9LGY z)>c-+R05KO)&u*QiMsl0kZhTQ_Snlo1Z5q^`pYH$j$|lk`5O<|plict3t5v>w8?nK z=8Z-RCV?XD!({?=7}|MyNz~H1i*{>y;!AzY{}^_P!%cTeqn`ZP&D?l@Yx{sU8E>ke zB%9q?rh;3JQ7I~Y872d)LIG6FUi$%w7vNRi*CtS96FH&Ps6Ed=4zZQntYyj--K=rP z`(CqjFgQAtYN8lzU^R{&C%k_c)czAPL@}5NiOMaB)KN~Kskng^7S8c*i9$_$LC7>t1#X~uDr%JpHXNLQV;&h_9E%Vf_kT`1CXNg~oA zCKD40dD2#NO*}Hz{XvG$SGGQ?4xWKIkJ5=}op=qE8;f+9Xroa;z)!-v_v$#nj#DGl z^&=bh+U=L}!O^-lFUesp=E-)irI;yIUKw~umsA((?l1S{W{*|i4nOjKn)_a|d>GDl z;H0gyyifkwpwYD6k|~zZX71>!+OP%e0;9~%H{Ua@a0pMxb?jF}=LMzajA`wifvl`- zh7Re){k`SSap&|u8g9}I83|V7`R~?aM|*W}&AkD!M*CSrlGidoGa*ZE8Cxy)Yuh04 ziozWmiC=C@~OUhgcxtl;o-G+AQXHq;P;nB^q%Ze351Rot}7Ote7%v`B7b|K3G~Vw`YJG^NYmy%Kglck0e5 zB=`T?Wwxh8-7;e46v={sL^iqPY7Q&gbQmFuJkGm4!jXcn3|$n6{=?VcJ2#a?AhEn~ zLk8ODy27%70T;EV%v?9a_DT&ZA(j#&fB!fe4TjGG>G#nzU{=s`h(N%m*ITWeDyy?j z(WU*dec241{sa`00+v1)8V^cURN>$TSCP_H?*^%+TyyLqV?K zVuSpOAy>$PU%&gg6Gy!svC<|2#CrQ$jpwMyw@Qmc8YIF`kO|9Nus8D24$lyW`FMvf z>@TM1s%=qH7E`L?@B}DMfCeJ%vfkj>JRgtl60sYKxV+c8km8P^1eIjnW^{95t#Y$r;>KXwo*{^$g)*Euc)g5P!fJz^AXe+#8`wUx5ELVLDe);J z^Xm%~YJ|P>oT&o4Y8BBdrI_@`5q7WpH{Ay(mLHES=N55T2@!o2i<;gpWfJDohPHp# z)ehcGb2gNNzuk8O(Y0FK&0HvxxSG|k{W^Jxfk$E55mW;FfhIg9RtpNVR?5-Zq`=rr zk->h0Y)CJAXg*4jc%w7HB{WdHHAJau^u2WD$j)@PxsCVj3$g9_3Ngolfy)qiqS$v8 z@kl+s>QKK_Z_#<8pGIN^1Do+U@~OJgo5WenMa+9M4kEihLgZ^TWNsde8Vfbq4=XE7 z_uyrt9wfT*b-UvCi<&K&+1$$@8|~wZ=8G^K17{F}BXS47a=8GX!VakKvvrNi;YO}{ z*_A99SZ6M`f(HhiV8$=c!-Ry948D9{4rDKRT{~an+No#-OEM6y<_fgtT9!3H!IiG( zf3??-b>(j{GW=-#mxlL;_rJ~WLf_7N^2bm=ifbY##QazKvn*3M>XJ-l6Y-`Eo>7+e z;4ar7s5;7?H`%130FpM-M^>s*@nK~3joUY10*tno^b42;Wh^wSYh%-gf-k7s$Lzzy z?;^-qdc_s<{x>Zs5IYc}KRbOzW8>l?gjVchDVs%Lqb8z*H~c$`Wd#fd9eu52<6DvQ z8Fkz|vDfY|k>o^7Kv}f^j!y=ZCB@)?j+2(`VDIfwQYO~RojD3W*ckXy9cmTDgjk(1 zDKeVBXwexu6mmkz3AkKiGQ`3dZO;rdir8OYM%#36%9h$CEtQfDa5fH`)m9DiA@sgW zCk-F758B8VH$dzvLvG?7+8cba=RPRdK33(o^LgBdDa@*PW|~Utd2W$=Au0aNpy~p8 zv74HcIM~N2@}-jXQDipCvrb_{YyQL*Qb`$W`=xAIjzl*nOLrQYZ?bC(Q<9neK`q_w z0PFs}bhcno_lSXN6g`isj#88{jR9Qer*wlwJe@y)E-LXyZElLa8l~xZjO#!1YMR*&h=Lw z^`;+kvzBATi+Ner8KK%FSK8#%m2vp_9b!oA8s@I`6SdULFMM;1nIPW0A@WnQLh z`2{x(In{}7j`#SV?--ewmb0$r+~>62iz=pdZ-RL3?t*vmR;7+ghj-0nOnBmRX1a|N zSj)6sV=1S66rf?YVu0?^ zXnwU)PQ?z$BZwkpWzdQ5#01$`#_>z56^##}??D1em-Q8mQV?_l8luCg=F{npaZVGA zZ@*+cUgD)qTB!0BCgIlWWOPg#CS%>I+@g~lZ6oAuZb|&>?dT@o`HU>MYlv1y3C;a< zy(dR)mMK3_(Bj9Z^OSWrA&cgr>~cq+iX1*GyN<4qJE48Z3orTq?E>mheXJ6W8V_Lt zGF)^-?cw89an&%*_1)j)C$^wW!g0Ue6F!d+x34N1 zZqP6pS%hQ{I_$-Of#+xJmHA$S;-3t!o=<0LXlWjd9;9WO^<#l0rrN*17l6JsQHvXT zjwTK8)azE{o2xT&4Sh1pizqTNG?DrE@1xp{C-q}bUB3^o!i7{P7zXM;)PD1;*EFdd z%Z8Q{$h9gk@YMN3EUhz}+Ee0TgSUjXrkqgNhrr_1Dr=?CGrxl&lIOciQ~k=e*}hfZ zIl)G~cjUOu3xQoNm-j{eB1fU=T*@M+&;G)RftgXzncpfih(gB_@D+-MK4QOB%G~5b6WP)$yBypF0L!tP`|zra2s#lDFR`y@ z1f!~o-vA0yEMZhuh{s>5>eo7w9KMA8;2~bw%BW#3J9XeaAxCT(|AJFJv260dvW*aL z8RJzIfpmCgC|=mhks^MvUaoXxdy{dc)^Ppj%F(>Li&0KymNMpY=kwc+KYm!whD)b&EN95f`Lk!<}T+Kecr_U5o$FBIwD&7F#^(u6Lg|hfH{oPZ_3dA zj5TPYxoJ0A;VP(`WlOKZIHwd1hc_9vWYW>dD-&DM6+M*%rcB~sa)m0qKI0M z3`>?`QK5sBDnrMIL;}q+Nf7xizu6}(Vh%RtQ8uDFzK#0QA*Ot*80KZBy!GJ6e-3;; z)b+rsOD-ltXg)eS+Yf|SGEktI49wT^J8oyx_Ni+*Dwn_dxQc`3gO>WqW=?k5o?B`jOlsE&IDZkd{AbyH%>TzNCRM~O1oyvVg<&Gu`k zCx``tf<9%m95MkP3o&`|sd9IR^?C?&1VwN_z(0CUy@j(6Xm}Bjc6koq_^>^YIS7aBVXT!~2u38o5M*$08p zv9{a4%U9h(PMO0lPf(#}Je+*h%U7H2o<~P#K9K;8Mp39>8Ii#tb0*=oW)r-jx)S5$_*>zrh*QMoQE zrAVTzJM>R77GIx};oH}?`(MOY%U~ROkIrgY$D`9Kk;qKE*kRrhbR3-OZ{Wk7-G`g8 zkt$BqJABMZnZj$t-jCC@AAwhysv{nLnN&ySiIE&w9xzhuSKj&>+Id@L zO7OeG;i6a+>|=Lu-KI-Et&8jSjI67Ij;bkohFEPwf|5L;zp7?|1nBCgcP~AiIVSr; z`H66fQ+!e9C#~yrQr(0{jL(9F(5!+x)lO|bL;dTVRi{*Jk2%OCK1;kIk1=$)WdYif z>@yO6jN+2FaoCW`v1UrqVO5e+@5p{a5>$y=@~LmLf92?@%bgy5QiREv|5D*Si%k`3 z=KN=t9GcDqf`IbR?l6&+h_IFnV@>nf7v2fyGag%0Q}e&~6h+BqDeBWDRN1nbyJw zhv&*`sCs@T9)T=Ba`htCIz@5MNwg@ktVbhUXexXg3f2bWTF2A{6E-`ViF*2s??T_t zi+ZN9ZmUYYWx2+=25J3{_GJ_0FO?>idl+rmMO`{23~aiR{SNko$!}j0@o0A%|E}l{7HM@8wSf}ee;Y{I)(oS6 zNvA17U|o^ZB4?Ub(rqDs1rYeT9-hw?Y38AS6whn3ItzkGf`xWKj8+ zO;@IH2KrA}!Ef-%U^|7%joL~ABlAGL2Q2~{8uXT`2@Ht#?U?CbD)#8IE6xFB9zZjQ zW$oPeK*)z%GsTJuI43i^Tx;Z5<`1SM{)}XD9P`IjR5$Mgh1g(q-JTV5Dg@4 zYFdNu-##fBwx7ZhEyMP9%QDIw5cp=}je##x0>Q)*dAb@}p**)DJ$6vE6$GIhyML*k z89kHEY0l0;hVyZs-?7Z9725Y zFVG~{KX>9T;8RG=6NM~VZ-pe{Ud>ll&W%uld%YnKKyE1|o$s!p()db+*p*d6)0f zp#wO{sM!5H~);cJ*jewKJ9rn-8Ab zEKJX%zmPWDmAWmd=-w27l(%}4GK;G?nkDT{Yw9U@c))~lZ(yR(M(6&dzJXu8cP9pQ zPOUstgQ2qLpSwF`Tq%2Odw&n4{>5`ev5y-3$`;@nAqt_v&x(^Pt{G4rQH}bl`_%Jx z1_Ow!_s4LCn1sDn)4H#N))dtE4>p9=qmv}4h!8lgG(%g>&3a*)bWoKL9ap~4P?rFw zE>}5gVU7$I_px`wSTX?890o<8v>BAB0AyUZ0v z5H#h+>$9+VFD8UHd17K)0+G8}v+`G#JQ%ihqNBon{I>zP=Q%cfo@Up7Y^+3LP*6^f=GS>VmR zZ0|h_`(ppE&ADR#xL{L#sZ0wAb9oQ z5xhKNVw-?cvHjyyahY^=CUzs;GN=5vh7WVy@S9?*YQ4=>13Sa;pHxSF9NbH~_rtkp zJ!(;P=~q4VlTX&!3_X&%Ul6WllZ!4e#~Z+c%g)@s?5~o~skmR@_~8cbVM$yWru}q6 z?u1ryYxZJ@isQbJNGGDkv_ZVFGQpFy0$gN2p3zctX<95*hE#9{VMC2-No`8teB4A;-eR-s&`XT|M@#_)W&^7`LYSJllB%i z674C@dnx@oc3>G}NlkVNtd)DQ0tN4xYO39R`iLk=(Z%8J8sUNt{e*-yy8XHAAJpS8 z$n-lU%bNrT^dYw2J-okEX+HSGR}>l`WxYM8p|NczXp~(kv&hLV^=!5QQUW6?)e3v* zCPVD#k~#%6bLFv+^Mw2CDB80prUVA*I~$zLi@&?VWz<5q&9RSUzt}AgcD{zHD*5xK$k37^4j6uBD0{x%)c)G9bE?1Sz+0^|Q4B+bnFAfIN9~DxO`oLWn_! z89m1Nh#&SrIl-CK?Q>4bkKx_C z_I1_IfDs;B-4}oRk6;}2_fOk zF+~IPibR2F)V6A;9B3VxzgE*(%S1PwT3$Zm3*JtTi;Dva8s%Obp#`(|Pra!*zulnL zI#)4Z-urU%q;VrP*My2Hm!qC-P>!w1X}1=qdTyC`Dn}o%lQ*9)_WYay6%(~fBogPp z@oDZwkQ*TgfyJ=ANSL7Mi@X3km7)P7L-<(EjMh&5dXd)&S>0AxcXaK-%KXyV`a8o} z&a+wVyPkv8dYkk#8O9vG!LyoS#J9f0cGc%Sif`a0YwFyscgFJusy)_=BlEC`G0cLX|DK^>R+L@a%P{`bVId*sb8vmc5r%OGEQA@P`^AM{V>HCIDC zIr8eUmmw}cmQd`OQ_83s74`AEu6i{p18@aszuww?^}JTqeI>0_uUJfxX(jC?nz`{N zw$oo*$!#%=49q}xw`^kOnP6=1i{M{telI_~e1(eEn@YCueI3(ih}7y;`><_}Odek2 ziKOYjD3{gYad-vj@d(lpK5QdK8T~4nAZfbF`Igc($*0QOs6K4@xzD^djulX#L)!|y zJZxV0vZ|!1db~pHr|whmmUx+crMP)i8CtGlNOtONV=0r>7bA;+n9$L;B|%|7foT96OilxzIL5;!x(JDknRrYP^1}MqoiRlItS9y-Ho7tL8qi5 zzkT2Lcz^%EbL=^G-_L#B*Lhy&=lw~##H)oe-wXL}QDBB9&+;t|Tvjrp z`#0ET!n3)s`IT5_bs(XY3n=sl*+J9R$|`#&TRfP47XzGH4&ByX3LdS!KMtQXQ5*Sl zn_yxRcxexQ3D-GPL$ivB!7CkMGi=-}bT8pi5^!bF5!5KNkeAIam0YnRCTM!@M%lML_) zfm^w4o1`Xzbl64FokSzPpYpi&zTbPIMZ~W9fC5L6(UQmn%$btV@Ldru{h5qkOO&Ay z5^XU_|DorjOh!@6~{hZ3=LH zek+w<=2P~{+NUfJNrgJg zhZ&YG?BH;5+y1STDq%G;(B}-zG77R<6#+adKY4}vckfppy&v09s}8*BA%aL!0}{*v zUIzx}_zrQo&5=}BYmwoCedo%LYzOt$-&Q)es~xVvRhHbO*SSSu5_h2mglDK44<>JR zsPuvEb}Z){rmmV!`>;W;_nk^f(&FqZK0%T^pUBP@Q?qWto0dNm_kKE*nj^pTY_-m5 zBC539csD|t%psq>mq5(#m2yRje_K7*s5Y*2Tjxrr45SvcUSJpRI{{~As-jXOFKVMQ zram_L-Ogw0o2a@}f%`2@^gTEXAIQ=NI-7{vg0^Ga4V{kTQ0+dHK(i}RvE;?h1}Ni+ zFMDJhLDUMa0xTss85!Je8i3M}xAMRXEJ!I0I5ySN{Jp5C7QME-P0cegsNB3RAICi3(_LvaV>Yn%}ts(i(!YSesSVT9aR+=Oi|S%1eDyQkiShWi!NU{ z#y9(Q-6QqsiRTe8lg;bbQyns+`Eu_ZwP0Efa)K@nu1<%$iiE)LVp?ZPws5vAXTwki z8=r&%Vf|eZa82_|e@**E)x>fF6q+G&@HfYP`L8=t-*ld)g^VG+DDNOa%Tib>YUBE9??(62D< z36$lfvWOG_!B>tB*|fRwJe$-U-#GE&qV{OE4yy_tC3`X}FK%HR5G(jq_-up(_vCkv z+ARi(^?loO=s!=-TJpgbT8C({3GjU6vm?-L)6erRDvRpc_w>fFi|r{_nofD7v@T^V zeTx|PHf0s+%qNQ84jMBacq%-0K5NB^%B!G96C%>oLCl}rP?l$cGHlPEvb_+yKa;}~ zUav9MBbAs?caZV9n#^@E4e)qlssEZ?vttu7;Q#jZ^FNsjt7N8aP2ayf+qG}c5A2e8 zE6ER7nWLC<8eEmw*6P!YI<)UwJj(L}gXQSK-YQ$knKxe=I^VzdbmAx~OUbqn?IXn< zc&gzfx*)ol0CHaBhNDHRwM6Ga#eSI1ipBz23x?&&(u=}_^3rNRLZI>~z*B!ysjJ+6}tT>iPivMk8a3%#Q z=KIc;jL7w+i*=Svl#w)$*$ZpxA+7aYR}j`tk>dwV4u0~?O##-Rs`6^Zb{vS=x>tYI z&Nw8-#fFZUaEvaIb2Vk)>Sw*Ff>qRa>t0W8YUO@I2rRL}?{Ch&Rb>EuyXM7Dy~#Ot zbb^ah=)YHr)6v|s**~R!n)tokzq?<5PK?PitFy~k&Ct{p%rc<;eNJgGxnrepT2dWZ zb*h15M74&AsrLz!T7!NxRaJKGBX>y$pM4+|P8~ovAgL+Vu2zFWxpJk*nmMo|5$n5= zF0|um<9l>Ihm5RDHWS7NuOyzyaR>A_CmI%0mklur#hdja?{lZNp$ZcO`s%yozZd5$ z8#KUIJL!7Wv-p<@88&*ps8?+Gn!jIrc!;n^1Kzl0$r|PIjC2^(Sa|9=8>R@$c`A z0ME$`Is*FgMv73;opZ!8D~v3JT6s!3lwRx61G*z6f(Xo~Z?q2Mt^G&xyQ)w?$VQF#kzr-&L`@!0u1l6$<0?EgcRj|MjU*RcVY;lDKgDpO5#yz+A4)NZ z^ijrU#wcI($dMLfWS`19QqPN#gTI^m#dRtM=dfv1sPO6km;}n$&?B@AHcYp z9Btn?!3KzlM^-#+wyq%&#g&xC(t_X9rQDpdL^`PjO{D``4v>3$k9E%^7?(*Bgsa&$ zx<}k?l`PY$lW3Lyx0`BRU;^3G<4VW9O!V`FD<{?3?@F`2nGyF_CY>7*l2S52{1|#3j!X4~5$< zjgsdxhO_EUkT#i1A|_KHizeJS8ZP3^nZ1M*`>&c7`SQ!TSF;X&h+VM>7L~4C+H??p zd=M{00Eb66DHiWj=?Or3Z8gtUF}#v4KcyZ40mB)INJ<$LwkB z6*w79&7TCwSLuDp%j)63zpUyS=b|y|b+hvR7A5{<55qT7&IAx;Y~f1fG+tt4=f$gt zD*G*V9sVm?;E&cijjO=oTo6L$s>A5!2~#fM1-Ec(JPqX>dCRe5pzW^hnCfm@mbz22 zDm}SGTQzIe>e@o;q87!ip@vgTiK(9P289}KFstIXx!uo2NMxX%n)B2w76)Z3Zox?r zAWdcv{3Du;FsLn-zqfLJ|7~HW=ZMy{>w_2vz{$Nv zR>}GPL&HC-?z@+@q3+>5Fbp~d`STp-FM^SWC)V5H*~<$@K=o9fh=Zoq?&6_$yFh#* z?Cnnp%Rhk%vNttAh2-zoN$&sbPgl1?(>a;*d;XNP7$~Vp>GTd-Q?X=2>TgtIc2&C<8C=jll48pYwex~ zl=nW7OPj6NQ>1M3DGFrAu9x6K4nv$FEypQuF3W1s<4?}UlGa(S())l^CozRn2FBQq zmUt`1b^N(ctQg$9$mzPjP8qQ30Id^TLc6KC0$eM|#(Tqy=o#U8zUSQ#sPk9_^C431 z;m->({t38o8st^)Dyex{coIze9K#1=eiPv<31go2i9qbr||I# zXqU}3aO_9w=p9mJmes!i1X^qT(jIn|PgWlS7>is(Pvu||jFG4xGn&a)a-zY=9T#Jo zKF;l4zb_g0@4HEx{Q};X_3G}ck0*q@Xn#Zgf4zVyn)o3JEq;Pq#9wCS28m4)9c(lo z#+hVjKVS=gPBfih;-xFphUNQ`?5fQ6sUbXdHgcIlJC4@qbkR7Fdi*0#dHv;y_?W)S zMsPHp`)xM07LF#7)c>v{`tTO+gF}aL-=f)Si@E)bEhV1|lu_n)&=8C3(EuZcJSR%#J2g~&qDPpSmlGt5C`{%)SKLLCj5fP==FzpknBp zw~!Xws0qomomD@czF;ac1gJ|myv;Yt#gsj@_~_S$yB^~BeM^U0E5BkS6#9e4dEt+7U{jTd89j zhoP^^1fFD6*TivX2{2JnK7lB!LH!jsr6_Ik_?6tX2gGj9dju+IGu0g4ySZNJ zw&ueqwQ8qf0xnckBBgZi@}-h{(F;l-*Ik5_n!g1pvZKDyPDMr9QFy`FHUO1nSDwgf(td0mh~wc$m+*-8SS>g> zSVcv}&W`(^D0eytOVsuEzrl_aHP=ik$*Jy=>5*83v43oN2R1Q}8vt{1ql*h3IyxuhH9l*@N9bZ@ND=6~l zcTzZm)fFTL5}5h|S=ThZ181cb)N{ZpPfaRggZ8}3fy^!6Jv2XXn|zx?o@X6qlQB^N z@XwxE>gmg+Kv@ZzCqu~Xgh&20_KH)hI~S#sUxcr(FjX>}aVS|ituGe^ng!e;4ylU6 zmeR%!XMP@0SNrE9qmRY5HQIN^O)W~MJ6T>O`XQkk&)n9ic}s5-P4uDDn9&d z4hbdO`fHgVGV{t40tohD-YJc7B85HEn^w(J~(g}NLZpK<^BtwX%(hr|Zn zI!5H_<5@5#;H8TNcM4l(yYecPXuX=DV8V0*U6;*a`gri>cNJQ}nhXxMx;VMM2%)E&_r~jbKpN2Ny=jZjOxL;c5S=k+_A1jiHqt zm!B!r&~9eeU;=C}nm@#BT$#WCOPh6mn@SBv`P(rn7`O4Bei#WQ&T(1G9#oO!_i;*Y zUN}y5Z%FVPt;3dDio>+YKT?uHf{puTT(p?tH%kPO4c|n@4O|+Ybbr;;<#=^U5Nb(? zP_Y4>z*hnEYCQ~&tGcb+Z1`Ny*T&zPoEJzr@{Flb+uD6Se0Qr()*m=@Lf(TVkC}Y( zEOp4nyVTAUE*yS17Rcyx^krpn@e)g)2Ed!_XG_%LSn#%jpFRI#OUu9H%8z$*Ip5vn zGpBE)n>lHxix{A2s0ip(7yg#Y`65}>ZMp4NwMo49pKPFUZIT}Me8uxD>>5_tPUTCz>7;{E~3F4Jq_dbSt_&{f&1_zeN|5J z9*i(#AcRIM_a1zy_L735Z2zdU#QE13F-3#c{+!1__z^o%H8nNZv3h0F@sYyrmsg@4 zK5GLf-ow~Lu4u2@!9Nv8m4kI`&V<;_y)DShWs-zZa>fGh*?)F6Zvy3G*V+p7uyY^w7Af5zrmj7>5WW*k>@+5pCy%Rw0@oee@P*X6S%d;rYBjeG9&#Eu}H#_)!9L z>Q%F?E?gBwJZC)+VftS6;weY1BezwN4Z8h`!_;_&FQ$Ql!>(CkV^zJIP2=D_T@(J6 zybUeBdHL5LV;Oxt0K+qU1lux#d-Z3ZJf^y7vj&Js}ekOKf#nBsbx|W1jq;j z)iwGKA<3m2vPNjCKa}F!R2vT`$v*INW?o2yG&eUF+lUx^W5jn-AP^{f zn0Cmu{xy+vUJhdm*8@AiTkH~4pUYl0*HdLjm{-2(3OKIv?6$KD6Y13FIqfJPCVHX= z35vV9^ohGZzPv#helo8zHLP0^rRQK}Z9IzB|3W7~9I)x5x!BCluC2S*z5rXF<*0qb z*W|j=W^p$DDV=>VF!aZUc|of(*&}tfs;7THgw}hOh%qAutwLwBNLN?c<=2^hEa*Xn zri!XW?!{{3ssVg0nJi=O4x_t4r+yU3JCR$` z_CZ*r`>_Iqaw5cnGX-P7T=)cmJEqBJX%XUE1%X1K9QNjaBc`dvJKdW`hH`kQQYgQp zOR^kueBh1WD2XFFC{%7?iRT_SMr%E#-XKe+2MG^Dn!s_g}%qrK2_ z2gvQnUJsg>8nr5C0V!`%h53OwM8EZKTD0O}4=u#95WVUzY^KetZJ#=qpTA5iC-SujR%T{@&O9J25dZA=7H?jAamh;`uMQr#2;1o?SViV6P(Iu?j5Xp%`Dt*OkEMLak46k3BWlvun@d^8COG<@37v|3 z?qG5xICU*MXL#9KV9b^X$Pu0d%o1cx$PUI-Bq7)b37f~QyN8FEo!)qE3n@vF_Q@Fv ztR6{_<0$@4Tsy>h54?Ig*>oV8FLn1m%-iToMS!D;zoLB!YAsOaaE1y^2GUB#A)3hi z+O6+D`my4dzPHJH^+H$)Hk9;7>7FsMaOFnuI>>1sQHl7Ws`;if(9;;ak}2BGM(LCg zu77;NBvxNiSlwq1Vz2xQ?w;|V9p9^m#TYu*9^li*ShsnHRWGO(lHd1pDqTIPuV-D% zKDq9|EoG(RYi(?AYiu|ag-SRHAPuqrm=yul$Go0ctW zzDVFKjE!k-c3SHCFKRn4P;e|!!fEmE7EQNdt9xP1K9;Sg!9k8q0J${rT`#TRlf~2d z+5Pv2(9)Z?#O&D88i42ec#51!V$X{Jd1Z&hdV723l%0xazD(xItrgUZv3x`nn>tm)*$O>8g) z6XkMEl8R7EU=BliLH@3O33r8xZdDVllmB0u`p120=+Vcce{fI#;U~__ZyD)o<^1aK z)E@s;u6gdC>xVbk2T+J9DSiu5aN~X%I_?_|RDom-s6M8+gTUdVc)cRwTuUBb2=N?- zue}tHfbI#f#(vbKxxp7%7p2XbNO%9_`wuqTKeawy&Laj>f5w^AH+op7cN8x;$51IW z`=~pp71j+cZ&c+)p zr!Ra+ovZ`^6vLO?BV_Z34VLruN2j&&qIIZY>@Q4K6*xcfPVe$o3c*lX6oZx3O-^^~%TL=#k(xj^dse#0UQlpFRb&Ef8vF3zGPPfw102_G{G*f zsvu0heBk9qXJEZSU|^uX|BJC_;WS6x_wRmYl0^U7uW2Vqxz;edC6~n`g>_*85o%bu z&ZE^moiD$6IO}Uhtf4LMI3UT$MwQu^2P}B0#cRv{+EyzWP6nl#@zQ-0Gua;(TD@;i zUL@bE8EqkMUA)ciLn3uw0JMKv;8^qc~I7*`utB59<>7x5DPGKKJK>Gpo88I87 zd6#vx&j^#Xs~dT#zp`IH0;N8R*zVuk9@E4AhSze77R#ok_Tg?Dyj0s|e?Ug!;9z#QdN>TsZ`W>GtB(Sp%17ZJ@okD$x6MT z`8rSBh~T<}IIv2@3NT?E=u@s&R<=}|uJrIz#jN3_nJgnU)k1VsX|h#SXCO|kN;u-3 zQ>xvnX6Gl+*Y;FStFFm9NsH{`Osnh`7mAC#LE*nkj>dyOLCR zd8ctJHTE&&hbT++2FKGGam+4JKE_W$Bq#YVC&}|Zr3bHvwvOk~dgmXv@Nz7+u|aZ* zkADe;H2Rt~SdW|zJ-;7haBI~drGAGc)f-g9u^+ygdaI##*L~0PWPNMe_jb$jNuGpJ zQBh4P{5inlIfmjHe6cu!cHY+i@=f#qe&?RC|9#YcJh;?2DMMJ=ds(Q1_xv4}U*NXU zaf5w!|JP)8l|28SSy_*&OgnEE49xC&X}Wr_)gB4KMs%xr%6nx)B^GK|1z2)yr+T3! zWk8kEg5d8F&Uf{ySP04E=N+kudfT_jF_SX5?F{7AES-PxavXDp4kB4{Tkwtp-RairMjo<8A zMLw~6-^#wRK$&jy;mQbU-SnOk_!ubI0ee-~ub4B9bzoosCc1J$zG(;KvehTG;> zvnW&*7IYXhyR~H}+@|B~fmDbzeSM`kL*ISvdyERw!9DM38N|)BiT*P6^Y>YEuER9$ zdy^LO-#mnaG%jv?rtQV@DWbYE{QPIl5vf+AkBQf38XlF3(N_vyAa8Ki(_;T3_!@xf zS8A4Q=opl%g9EB;$e?eBzS7r6pC%w7zslKZkr2iuvU~8NbTf~sfpNbkQG6+|-&Hm# z4kSbIxxftTM;@thuhf-RFccL{vMegG*Du7LXR|5figAW08a9(z36v2=Ho+hzq99wJ zQl6-O{~UL&Y97&ZeeOCVN>pv{1{YH9^%1Qp5x3~4U7Qo3rs7)a;yqm7&XNQfcg`A^ zq{CY_Hg1q`m;kUXlW)kN`g?C%6JMuORKch&1l<)_W;ZIXvE-~)M-b*Sr-1I5%cnyq}x?ijy?XYQ&HB~&TRzMW$BaK$F%e?oCVzBmTOgcWw>7TJ2y4pZmjEG z@Jt2`1QCg`NB51o$2{1s%{h4iCLknSXTrisCL?i7yP=28o_hc9yruh&*pV)qI^9W8QBgxf$wWcYXWa@&j}4ZB7X|R5fjNG;!%0VRC(C6My839|TC}X`*n9$YE3(bB1LB{_kzqQaYK%a>bcE#sY75ktG4w^Mh?% z0hAlsTmGo94 zI3EIMS<~PW%}ukEgmvMOWMPzC*!h@)O8;fnJDW}rQmDr%f%x%9D~fn^#fk*9+S!s- zJ+?81S|1?g0V(i`CRD#MGbzl?s}>mt1TMc&8Ovfqjx*)rFI?t{sd7j_tmxR^0GY>4UPFnHug?+_Kz?dtWrI z1BDMS#5cp{W=k)KzgwndmS9;^2XltB9P@T9~xC|7$^0>n;C!8g$$xY#+JsX*F^P&GW+5%8v=e zuP6i3tXdSC^$WMUMn zY(1r`t`?(?S>{B*s6?CAtBVK7%`6Jah36MojSIbQq2UiImKdG|tPnJq6W0uz_iIe%2ZiwhMAaBy0g zZ6E}&%v^!J;TiP$TDrAn-utR9yTr|BD7(pv8Z-V^zkQlV$4R#!#nna;i5_O13md)P zIEbUNke9F})KaxbQWz#6(OJ`-S6Nw$ICg&qpL# z(2Q0*&C}XAr%U#Y8QLb!gT>w+lSZX(rr^ZBxJx=ernKnJolN{eY}zp<*iQ7E#b|$j z|JOtgHZEr!h2pARitWzgY;JC@xwT0+VV3oAzFh5sLZNR0c1yErqxq)tU*4PD-)8WK zoGQW=uqns+|E)>NKTjd}kzA~DSPwy?))=KT6`wvKHAdSo4FG82qzlMYEI#`;l+th4 zdQ#rNO`d=g1X4&$yvnvBC~@Op+MQwJm1j}|rkEVE^?UIxR69XnO^7k?72CiZdA`sZ z>ZaP2RC1iepXY-bL_Z@+kP}dyBsonUF=A9S(t5DU&(Mj01_fJ-Yw!wJ{74gto%fly z658TysWOrE#Yj18l#x@QCd1fgh43(iS(`o%hmG|xA(k&Q>+_5>Rmsc?pY+$hZ-3RS zsl1_i{DBbS6`4i`e9rS%L;6G$CpsrP=o&3>#v{y8N;>yfAejwB%CB@tGafAF(DQDO z)lEFhzTOK6@ZUlwnO&V|UPtm};<->i0l>bUKM>30v*n3qjtxRcB3+1+m5l%%m$>{NTgi02|kcw`pwi& z@2bYvfJ)7=1|uk&s$*LTkmyG1i*%+*ySjkjjNQbMATO1dd~2YAugPos%ih6t<29M0 zfe+;DrKRM&dDcV{Dznhnke>b;YJkNL6gYz#jGXGi-k&x=iZKAL6*9z@j*Z@>gFPJ%6avW|#{{x4Qa> z?wR(*QGq@jj(SkP0o8sUkACw02fvvIMX)@U!h^l4W4<2SVJB3chB?_z=L!2OSToc= zY*HwBQ1l58GF*QY3S4FsS$Efs3;??6kX(OE?uq`ba5X-M3(w)oVD!Cx+JOMq9W)^m zP^l&XY!17d_8DJhs;+~P)^uIrIx%m(0!i@{=QPBDc8^H73^lcJtou}b6(d*K@&W9* zO;EaOc76f1P=gDSKa!`0@_$*Ww}7j$Y_0)s7$i44QIQ$kadT->gDFBc0DmKE!k}y6fU^1&4g| zN&j#&%{q*upt~rJ8)io}?JQ93=RD)ct8+!^M+>gzUd~Hm+S;Na)5uhhwYzC#eRfl_ zgK@;yCbw-mttv@(Oc+)82@030=A=(eW`>bucb#QI3xIoUKGH|2vl~i%r2Y1RZv?8E zs@C0g5GN!Aj(jfu#Ii^HYV;8T0@b@rOuV`N>K)r-tRtXSvGi3IM1jVe8Zl!JPctL! zwUo-CBW*}}&`1fI?l6$BveQN^&03lca0bqX?wz7AF6m<$5wo6DT@$_JhTDFkbTu_h z?I+ToY=P%TCJRggo)$4CrewKN##c{=kW@x_F-+(*foOGBxy%5b9WXz_EZs$KMz76< zwy4HI!z_}fX?d0ia!|tzk@iSo3q({XYs+4|KEj7)#cVY_ z${h!6iJNf+S(7!5dXTl0< z9`@f3+2%wu_nL`Q!Fv{`JWz`yqf^3P#L4Wh4m<0rg zOH$~w!;1!rE3;7-nE~n=K+D|bnYtaR>60^6X7s9CX0{E7%ZOE=?aCRg#+HMov)W37 zx09lU8Vp7y7iKzAnTe$RN?#|LqntR<5p#>QHt01ls=5i+~78J{!2w=@7> zznr@By}HyY%lFjWzwFfG4h&WhT15u5%C0jX?#y0!8JmO(H&*FH!l}u^W^TT8BS(IT zlUX=$Zm4>1xR&C=Q*NSW%uPOXu}jNg#3 zhRq%xIf^Fx?GMO_=erUYAMzekvIm;mil);WSL@?|WNm;LZw}duGqePH64(Z+8=q<8 z#F`#ZXZW8HxU5rnFh2THo`#V}GID95D&WO)939dW2ZgDR4)pb^IPYG8E&}+Khcw;# zumcs7gz>cd+xTSWvj{oue}eYlzLBhPitn=PEn2qO;|ZK8A|_GISI+jlF$tB|%Rh>t z&w}Ea*TmV2RmQX?Y*li|4kd{Nc=!}y%og@rgy6L{k$3aM(BNF(pWmVj32e-PzCM0)gzu1QSlb6 zAtp@iSZ@)XnC)*^Vz7u71w-R&@v*N+0b{ta@p0R}put@ceyjJset7ix3QcMA$MN5v zAg~K;#TdL>nz6dN%5p{{WIF!e?VI?|P*`TyrQULee*>A{#t5|{8z4+?@GfDZowCmwb#}$SNw}a>=q?W)&SagKf=cy4^cUA zIX>z@5JmDfTjh>5wVXEjjs4eOW_}w7f@=!}A79*le+41SMk>qLWM2SgSxbtFN_HS7 zqEsXM6tmHH6)BOTqbQbQ&XQ8yi;F)5fA^N_DYD^~6)Ajz0D6%k{p25B1|^Mi6^YA- zaZ_Bn@Sj$bANyS=?NqKjZ=BBXqpzNYaYc9OkOSDlYy$NH;)}`^j{Q~)#^Y>_W~d&j z&&HLhtQ0{hDLb`wZ}-S6J9G?e7RW6+N-E&&x!Qk%y3%Y%6^wP{s6#&n@CkYa4m~x3 z4GYg!jbE0(C?z0_uhA}kXC_R2+4o(&NRTJ;tJxkTMoEVHxaaPl2I0>$3D2Gd487S+~ueOa?uP%Z{xUUHbiblkXREm|6nB(BF zy)W^HDeXua&6jhs4(ecyzSd_!t=8XLfhtx!w9e6vsL811=pbr8UwUpkIkAba+Kl?x zE+w;sBNSUma*!J}+G;6`QsfM5dmM;*epmIGZf*0uyS*T!5e#qYy1QH}{BZuIrLB!V z+h-_&2}{!(KXmTGazV9a51VdpZwUokUln}u#a4xnt`C5c6atWx>v?i*86NRn7Mh!? zbz?#WqJ0Cg2#Mj&E@bOtewTi?7hteFEp~Hhvi)F^nf3_&`lw?XXTi9E9ZSiDz6{60AXSDx4JGt5q z7<2K8s4PW!stcM;U##Y=b$&|ZIq(L181LE zT%BgrlA={!rv4SrLwJ2R{xg{*N9|F52hMxHXyb3Hk|SoJEKmAHC{o~ta(AtB?}fIC zzmJ_|T{JNJYc$;HEqBfRUGDwot@Jf)jZQ6a+(Rk84HnM?mN8NA zok6wGtC!_Y&#q9!a=L3mC`ECu~L&o^s!gem;Vdpr38+si&)vCEI2YS{?bhZ&ei zOe3)bjTc9)+t_cK&kTs>Keg_4NN4wb?J$Mx`ClIG1RXVCLCCMp&|slmSAgr<3`Mq6 zHef=N$whqb3^%Ot*Z4_92T~w1^q=);oao}h>`&iEG^m0S`47lf7NWC7dUL#ohy zvj&`JsjL&6Ffyu$MEGK=X`d>_S4EZ`?@c)Zs;`IN$Gl6>(%kIj7!Vf|3Ba+AD1+AH zw6w#&YjL@dVJo4KXZJzmbJ-Cwg9JR%SLG=)hev)lVuI0nSYAWX)Z97 zp?(tdZtA1IUfo2v2d6aSRFye<8sOkqD~-sBxVDsj(Rc)yIig$6C%k#>&9A@YvXU}S ztPvGBcUJyLZ~oI;JCnPc`#EO_q146B80TxN5j>@l`WED^hKgpc*vslz{9`|{-ZGw7 zpn<2K@Gt@*c;@e#B{|($NErHT`1Y`NiT-y6HE(X_^}txXfE!ll5AG}R<1b8FsxgV3 zie4mf-1x@8_yqn34G!MJ!cLw=_06HQ&TqakS^q~lYu~GBKiX?P#X?MwCI?vEjRd4b z%AnNt^-#=Dj+ydL60jPZQSjy?t1H6d^xs%$d35w0U(l8rS?nf8YBr#QJ0%XCV$c#F zdE|;`ZA=~1z_=-P+~6lI==s5sl8R;(j>86T@t!A=Cy&kX`QSi^$!w9>?>1GVRzQvkt&P5qb)LyFf;;CxKPE&Xk6mXD5;iJ9E&c}=9OZSj$;uf7)- zat+JfH$D(K;DUI-UFO68r(lXEQhEtlVSn;@_d2dy;zxtcSQ}E`x={H0RX`TsQzxhS z7z%<;Q*Q180n}V1z^7CqJT~j)w=h}Ce>#vfiWo|O0DW7RxraxV88u_43t{g&2FG)` zxdgoh%?Pgr%VImlEp?3j9uf+D@e(TQc^hgiI`Y==RNVZ_-wI7Biqlb%)I-E7*>)LS zO!SseeDe~G;NOt465FEMDp#}fJz@ch!G0S~Qm{PXhPU=ZF(=Fi*U(B3EKSvE$+w3(kUIe5vxi9b+0S4RJ+b&B8B#h2>@irQ~ zWH{8gg+2}pJ(NwIK{E?Yd635wyzv#AtJ`LBUOJlR$w!>4%CSu3XkvJbi-sup`kxD= zd&0fOXSLRC5nrD>I7+7OhErp&ec3(RWL%dz1>rXR&7Xe%IJawMqMy-8{fO2geXD?T z7ZP1eF3#}e2M>3GV}e&ar=Q$G%gdMXHoo-A;(p!t&+g5cK)$ZiGsP+wSse2|#p($@ z-jsm+S2gzvU*CwViDl(@uBMl3(qbK`y=!;fH#3^twdvpCo_12qQIX8bpK0^!9r|0< zh6FrxuVgn(xwrNYCSyIm#l6HiJraq-5e})UuC6v|^KvjYW@vK#N{rRoBRBR_Qd8yM&ro>SGAz@48NgYWSrjS3^w3Z|wFB`@k7KNd|O|Oqs;T8j~m156ysT!Z^>0=Is5{8fwc` z0Rq}wvO@WpaLN))0iRGf{!zcTY7Zo5bMYRV}r?eTHbz4MV-447(Q zq1wK?IuZBkrS76)xG!_6rj*Art?46LoJSw9jaZt5HDt?YC$rrL7l9o5wpf0b>g(5i z_}m{);@yJ6X3fZOJjy*(20R^xe~YKeBMVPY&4Xs&3>(knsF#n}f7u6Tw%MYTx{5*s zcG@f$(5m8=49KEkb;X`o9zhByMAUiC9KcIRHup`BvA|y?JUFbe$W<8k?fxy4=EI_HmJ${2ZQp!18IgzWOL}W!M+X* z0~01zLnDYa(IJ2`?;C*#t_C$H45B&roz+a?S=|Juc%n1mpW4i`=>L2pKfh&X_lB5x zy6iY^{JSFce8(Bx*HcH)BM2hVLup#5D9j&bu|)emtMOt5UvT8x^@a?JXR^FFBwUm9 zGS-!YkEUwxBG;|BENw^mQN*gceFu97af6o8`}+FOfR4PMn4ji#EF3qM`Z6|aZ7#kd z3I&G9T)e810O;DGrNGVONL$*Zks`i;PMN8W&^91OzGz&faKv^M<2A$WK{ZB^7ajVc zygH^;5P{ljW8V0*uzkglGE0S>%WEh~qr^$c)rv73|0QIe9g|sS6Z4La)nVlD8#h~# zi>2O**4!htiL!!i@=S5znU|FRII%aITboP*Y?K5Z+jD2TqGz_o)5z)OpgepCuqvZA zlpNzMk(-n1)sDsFNy;3v`i`5`{ z*j71Sk7&LbR1WFt33H*tsv}MT>f5OT_;BnNap9r;{fdpSV!(PPrGuIJL=3mcfYJ|3 zg;XyU;6eaWrmyBf>@zz5UeWwtFQ6hTmA@huL6F6JgJTw(h!eFtFEO?m6j zp$%ZlG*V!#xgoQ{cY|qxJT7RHvw%$*@eDGeX$e5bz>{yXGvi}Vd_meUlAynq)N+(A zqu=eS%)VTG1H*x)A$zzOv5Kt+db0v>@q;x#-26c~c=>QYtGY!%sVORKBn{}T~$ zW@!HR<+$!ON=JSzfxM6^!ML_YcY|T4*)B3n@1QpZ z7q`ttbjH}li1+gW)Cii^3DIksMfS6gU`U$zR7pRdHZe(Ny`kcHftEC^L7+Q#?N_J0 zo_OS84kt;Bg?6+#DNg->DS*`7N8n3 zs^bPbVTz87A|maV;0x^4bh~Sb|aT$N< zN(x*DK$XCcH{7*zbY`9nFTAH+AB!)H+C7{F<>OlC z!9&mlcX!vu2@+g_I|K;s?(XjH?(Wj`w>o*>{q1|sy>|?Lgh6`sdaSCRnzLr%ADWF} z4Sfm9j|qyJKauLlv`o-b4w+d<+1U(~Cc);ou{^Tcr$dn9B2n2fR%*zjVY337iRSOg z)5C<5xKgZSCr4Zv`nRV@M5I`aqOWIm8z6ntOL`TAm+*zW1K5cGa`^ToR07XuT~`N2 zG?C7RWJvxy$ph^L@^@ZEmQyCWz?YL}<{yXArH0AAXwC29(#eMa?XvJ%10Hip7rLjEEZ~{(H!15 z(xP8{Zo_MmAL=(Mpu5DYF+D?Fep4b-MZu4TWpCuXF-dfq{yND21r~U0VL?q! z4$7Q?-$?yel`4d>1W*08^nDsptn3ym!5{l&bI??mR>>aA9N`vmA?%>5| zGqwC0F4iM1TB*1QoTA_;J_3V69gU2gS6zGehTo9G0grB)y7NfeYxl@8a4 z6su?u>|>$OPaAwR&F0^@PSs{tQ*@U|1shK`xKdc-wUyIr;!ISeZ{^|g!P#}$06W*W&JY3VZry?XJz8q47_9yh7DIP7_Y z*li${VxXo(Lq8XXv(KTnfW0W=wBT4AwO5NQh zA4cVAXJhLvCk8_UEUzHnH@n5JNrOt#$Po0Biu zbOSXedo_A@SQ6ICbV*Fx6U^lo1mk$dTe?tK5)rBom~s zZO6-iJYp&riGunehT`NHcEnQicJayd;g-UJ5vD^G&aOSNi-=(DHlFfo5tU($sC-rd zB87xdoATN$#d&?IMKl`u&U~53L`&Ca1tldGs0-M8{a3<^4DbC5$DCJoRKl2vW<2wm z3CW)arV^{{w*S`AZ&nWpBheANr{2E zJu-=fglX8m+Nb?Xmk&FZlhUr;(|oNegF!El-a;rIsNRM73z0xgCHkq~Klg^D+>m29 zFfyiX%%RgGK6KGujuR0{Dq^;OJhT`0B-i9aPpf6kh94r@*^n;*yOQRA@5z zihV}?*KgjiI79r8#aTRt2~Izilc;p^(UD?$B@6h15xePy1I)&24Ba-bBQZs*ccFbbCBEwbq38$VWqChC5T*TUHL7|52RaGZ;PPM<;u2B79UA@nK%x^779 zM1WNZS8zUyMtg1xXw9jW>?Rd#F=p1;6i+NlcPR+G(P?gcjdf{+ZI7=lG+bt7-PWHwBqZ2tsxb$FVQF4tqHd1qx34tL+8oOg;)oJkjQ_fyhOpQJj!^pNU56WBk&(**;53&lp9;^}-$5E>(&ZZNU?n}F=`9c?0fvJRPHqE5i zNyk!jgClWzljb#V8uVrKruJrl`Tj`gW?cSR>{212ZBbx+;GN`}~M z_xE>G)FX|wv0CH9-zBVr@?%w!WHEm?y{3`e_c2O>rSQIxGl|?PMsTGG_NXD(#qHei zJ}^GGK6bphL)c{e1bH1H0KRw#Q_sbXCsO}qq{d>EB;lLQ#%d^$N$n5toamBa9bX5} zp(lp*v3AV8nsmXiNE%4PLk9#xfNcr>yM!BG#B500DtbAhhQ<=#q0>p*d=k5K7^|>I zQYvU{tm6B$AZJF-p%z)l_gz(vK@MD7ORj|*vpuLhoWkO=o;lChR9B?%D<__24#QUe z$V83K;txBeqeX-xXSX961AMX8qF&~m+Qeg$mPr5&U3=BUd4zw1@j&1U$p*s@yvZ}& zaXEiJ_J%w?{}87}>i<StN5asn zQ(=ggV|02lG2@5?vXq+5mFF|X<_t(>i#rU@NRf00?7x#jZ$!5B#iz#Sd_J1Q zt>LKVyPPPXA`8m=EVVBGViCQq!8FhZ{g;Sh1QG@Ro)+a`rr~@J!`uuW@ntrqSN-XD zSaL1LiTMOs!QU!@6b(`^Hr+cFXqi9dt4?O!(n3i+uPm*EGy6a;SPOHC#M9C0RoJL` zn=Q(Cx;d1~;nefou$cdSUTAgdQue2y#OdQ7 zFQwj(NgHD?Jyb^ zmjKsyMI!2?3Ru_Jj)@qj|IGyi#eGA!MpJVY`4~K)6;T}9MbPZJgpmBnOC+CzeCE!O z^7HdMjatN{EM1ofeM*-PX^Dn&ao%4lsa?vZII0oT9j~j}(m5SVw5D}cZic?!%-8da zq$h5$vv(!B*wOH3V2nP8CR7@zTQ$%~e9rDzmJz%UDj2_i=C^U|%ME z>>F#X=+keiLFgW&8?2&}G`LIeYyCt36c@xXWvJZEAY|P9p$IXH%;bi{&A4sO#VW6p za<$2dHJDIs%^IWSB$U;rZKQ2O!y2-j*WRDGFg=d?b9s2kj#E>mr7eU0jEHk1ZJ|=w zVMO$vp8>gfcpqn~PRSS6%MFg(1F<=#q;ovF9e$*6bf>m+0A8f7zDO3qTVXPuDG^Os zev886bo3>6lGSJk8p-3s)WWgp6`OV`NH3nbfHSH0T@hWe2eCzeviOG@#^v{Al3tb$ zb-fBweYM(wbH622L-KhkC)y_~Gf`&|^Ht4QaS}DnQ(sPar_jYkm6AIHSqK6q@uc~I zT!#j+dV}GhOsgqI;r)DuqiACKAPz~8v?mT|t6b+|Qn>M}+_E&nd4}dfT3&Q@(rz6l z&qAY`!?2SWdh!s51#R}eXX&keyobn}D4@j4dg-w?z*W!IyWukyx2c&~CLmA(Y*}q6 z`R75i#hrVB4GD+t$K2q}u`;(*8m|k0S`{jndV;TK$HO~jpU_&&fbNu9ZeiS}-~Uw@ za@g-kIr*I(YD3;(-}|ER&z-87KX1!p_fS*d)}r6BB#KKVtX~orKQ^0x<>j zW*_P#e}7>$9Mm9)Iqx`|LD>t5fe2I9BP0@fmJ(0tcAPsEZAl*m4(Tx5-Zi3lOV!xW zs{TPr{G9G+^K-3njY`BOWA?79UmQP;Z^>)Ke>+ill5{MNTYz4$;NDXET=zxGj;3;F zm9*qHG+YQ1b6F0=AjngNx#?f`fRmv?F^nLxKL7(|jZ^EjnmnX{R$L4X4Z&8v)pEt? z&i_Xx=KudHx~TSQ4Ug+-0LK7IP3lj*!Z@cz#^A&WCrRt5Ug@d^ z&S#*XVF(CDUyI#X7NRrj&)h;;Q2YMX50<{44is2QFj}3ED5Nn{Ga)l!B*EsAFt_1S zB(lha-sRXLm>jH;WQRY5zE%yZ*ky|j-tKhG2uPI~kukt02nxh(R8v-xg;zluDkGm^p$)Yo`y$10ET-D<>f27*_-AmEez zvQx)dO*o0CY(|eDqVlTRT5Xr@*g8U(01OTgZi#v=>bWI!ue`~V*Dfly*G;DE0wB}@+w#~r*vCD#A^B8KP6cuQ;Oqj6uU&H5;(jOVrhR&L#{)oqg*KEw-LK)C)E4v*XcHe>w|~bK+4KW~{83$Q)#BDEsrLtUep|y{zIl&~Zs& zVIc_ag*=)GDco5U>)*hw6DYK_w6p{YqqDQKD~*N+j34JKjZc>waoq%8#>K~13i>!r zMo~zH3q0R(t~irbmbJ7z2T`T{a7|&-?J&(vDEK|9w_5GrU2hOWDT%I_Z^C5N7&BJfjnfLE;-$x^^c_!*dkg z8q>oZqw~}|tC0*s=|dVz;|JZ6Dtau){&?3i2F{FSJJG-p=MF^~4AzAE@In}DyPUqf zIXR}+!M!r24B@t7?9NR1ga6K~Qjw|Y=}KuVf}Rd$kl#NZEX=tKusi+3yS4YqdF@^G zSS^|?=2=YENZ@sFRpaFIV;<|v%g;NI80qNf{FqkC_2CTG0s3OZcsG==iRpb1;o^(8Ye}jd2=_ z%c)W1uH%lcL%qZHplE;p!O-h2(ulK#ldiVV0ArV11CS&kjCjrR2Nv0IinFRwf08el zvQ)z<%pGyjDoLRFn$>50&hDWa@>8~9@i(Wfm?b~JTGlQu{gb23OA9k3n*|2<t z`3!*VGPSgn%w_u)g)KV4CfpIU>cogCqAi#I4U-OP6Bs)wUWK+=b?owb%h-cb_&q)m z@B*dB7loxQu9MQ7_1dQ`k5*m!tg1Nx{Uw~|vr3^u0nM z`%mVU z^A!~Kc>vmZ`{R}KBjC$49j8B=+Y^_~iV~esqQfvBl`W6-;pi2_Sr$|<9MP73v|no7^YLGU~QH!gwSVu_Z%h!7c1V^l~Mx%9RbY3!a#* z|KK(iIIxK`5^FHZ=LOzH=p~jXyl8%UNWL_dmCcD7qRubQm&uJP^(XT;8mJ)s*lA1S z1~n@m{8>AxUmf+3Ty`lAme`G8u{AL?9qD)MxpJtEk3fd&31D|=zh8+MUb&k zSy;VH3`n*FA#NmCQA!oI+=bGY|9NNWOo%Y+z;xd*U4F#n&7a!=;B;a zVK&@wULF$>%rBrr>3wITU`(m&vqyXY0ko+FuLf--e7aMZ3oBBrU6wSLTJJ0W^6%ej zK>7D&1f_ci2R=^Ct0ZolHe5%ZKg@RGLjC=dvw zZ&}JP4;0`1@E>wNuEyEGS3dUi|I`c+e3VKwfHQ&4HvntZQL(riX4nV;rCdou7XQ8QBwY@^e^FosH6A6}pip}7$cyDa{ch}V zzGXi~U__&~hUB)K0{jDGVM`Q6^ESYViI&F3?Hn20(v$c#wA{XcDhN4`oeC$>ON-M{ zL&H6dr3K6grjUwZS%XhO$*@#jIIO8#>Z-3@T;^>O!oyEA-44}1k$V3IV&K}S{yOn% z3s3XLKhE#osb`jdkx*scSeA0Iv;0O%r>7$~{4YfT^>jeb6uF==oqJ_vz~P;Q(^>z< zYd!nPc%^wV5_48;?QytC47vNvbEC#$zcZu_C@}?zY|H|r^5fc7EoJ4~PU2@kHj0TV zCaKwwCGqOsJ+bt)BUO(PKtBH_EscT-KO9PNkKB^VVfpUrcno#!FcZ}o3*HCMiK|`v zi#FuWH0|?e-zPSgXM;(JN{h3i@4R9(3pIsUM2=?6xgo52Eoa+7LtSc;QTSIhXuA#J zqWpzSr$m>bSK0wh76g)>%7Rz7bO-F`4GJI2K%vxYwe7`*#Z5n zqodW#H4;6asCg`chnnGgmMRN_36UQhSh;mO_NwA~?rCVgN=+6O(H);0e55Ig!ge{@ zOZrAu(8RwQc<^;cs-+8nX_^lJ<|Mq24Zhebyd!$H32Xu>u zM~;^mp%#(+5X#jLVQjhkfX20z{29G#y(1{Wu3yz|2`(Y7W;GFK-suANMAmFuCh^co z!^oOeteq(5@n(GGB>3s(*$I;CfVLKnu(Arb_^eH+q+{htw?m%b#BYN?a&&ZgsoO?% zXi+l4`VHwZ;vpQB&sw{mC#LvpWTHJpS=Hr->1E(8D+&rq3`__#dj(aSC<$M#v0Mzr zXMONjfAldKt5?kYZ!X{khf%igYvZB0$0kZumkg&2H_$NEtZRKXpf&U%AuEFEA}T7OD~s#l&qG!~oLst&S zV&8~rST}OBvbKiG51^xRcib&!7*L& zUCmdpHr%>Yc>WNMb%^nd^3Dxn?gE&8sntFm<>)19)I3X;o$#x|6E8{KwX7R@pAY|# zjt_zDHagY!?_a!Bm6LnHTyHd- zKH#DOs6%tVAJl#Z#>K1K0pt8qK@kktBd@mRx1xe~w*`eIu0X}Qz(r()j(Fb%fprrG z$PONka0(j4CA`SZSi5o<`E|cTZibVpH8j#%t9%R@fCG1I-rY>p3c$NO>pw#38=2OR z^|pAw^0M+I{{{A_U`2viN~!W?|tW5Ve-k9X4H#4DwYolBU47 zWxl)yYKooZSgE!<0f~p`esU3g%G%4%4h{}F`Vvt_BPsKopxHD&x8RTvICb7G>(2GF zD$~g~>Xw@=$BVUSt^|T>M@{jw#ItmARQ$=mM-TwsYmncc(ADDRXw(LB5tN zr?7i*Cu&+FYx%V_*AjG6Vn{;oXn>ZN4Mv*|FvGOUC4Lp6cNl_$EkuiQQ(*+0C7O*m zuBX7!O8w+WLl)Tn8HxvNcnHzNUbr>`%3i?TtDgz8O$P`VXqAeXkY5X~0UW;%KEYfx zU*|U0P;Eq2?AAMeMpH`b!7zXMOG;^y1$-kMMLQ|*;RhDFC>_K9@9Z?8%0)nN{@*1M z-Ph0=L1$;E*Z!n_mvm+Ef@4GjmoRTtn12t7ntce&Li?|CIy-nJjebfq1)Bu@1M~$) zkwZ*>{rfj6$-cvXGBkhR1t_AFU>c69DV*K0X z0hsx5|AKG14w}XZbYxcpcpkU-6q1bj{m;ve?Hd(Y?Hram@8;n;=d0@ zKSlbV7tEkWgd!Y){C|^;(5L7RB{2Wz%l% zNua~*W2v@*KH2m4f%m`34+8`t{sDZQHgDT%EN5qDLBQU1a@t^wi;0bmjf(>=a1nUS zLg+Am9}UCIlwmLUwdL8@aN`vF!KrHQgwP+cr!w*3eRb^$f47ifj)YOQ-cQF{x6#cvJ z{=0`@A~`$1ybuO6Xt!vf`vIwJU_Qti3+-b&xB8<2LVA_!^#Q;%Ch|6SABL|u7yy*WhEuqsp>qXe%O>>S+$O^-u6JRiH%Q}dD=xdhK(8B7W`wGhl$8bU zx1xaqk(Zy3@KcCRV5Ug*GDQ1H4>$@9CDw~I^pRguJZ|Pe%Z~8{1@#~it_Mc1`$6_u zjZWy4_;3l~0c81q%NJ;Y_rvA{xLG0RbAwKnyr-<+Km~{hEuIEwOUv4S%$cZ62RXXI!c(W%Ao-(T~H^pus=A%47DFr63(_gdE>3?oI zq_2>PLR!b-Tx4whhRc}kV^|4jD(G^*f4sHV*Wdh!t95tQi55Y~Z3onf05SMJP}d%? zy}Y~(3ky5%Mso2q9^rZA4fmd!h9-&EvcO2xp)C=IOL(Axa zix3?~x9<7|74Sv=1b}=>BgWds#>NxKcKYHsXSy5xR2oSW*Dlu7;fga+#N+?{X! zJK(x1@H&e%=gPB=sw1_$Ck!X6PpVZW7|*WFE5IK9{G#z>y`+Redh!I+x57n;ddv6f z1`K36o)%Z1amMu(6$LI6M>X7ztM74>|DM*{7ggvNgvz48k~Ed#;S3c2`2(}A1V0Yc ze({3#kB%Hb1}?AbllS{mq(7jytpc&AIuMKYs=gme;l5OEeNZHgyaVRL~wpuP_<4K2ta7%U~>j_j6cbp-KoaTUIAUO5BDZ5}_P(%a$$L<8Hp z>UBBHsqF>629|{79~KLJJ%2vvlzwsoRJ2@17L1c9|KE@YsxPw)T5YyoZL#5M0+Oo0 zw&>SX)YM#_nW@q5McpC)SyEaG8MgMETv`e(EmyGsGO-@L2!G9^t#iinDDa*lt$?B$w(jF8*Y-Fbw- zbKUHr$3cFs4A(l0dn%B)my{d?Li3Ton-5P$DuK!SpIP;5--&dM2W~{J8$nd)FZqEA z(1F20dyDy%mFKN!+2G8(|HJW{4If>Nz;l%XewU>#GqXc;Vtm}2oowMrs5c z-~r=+4n;FG&9G4d7%LT^<^~8FJIdhCaBy*jZ*RDcmg=$AwJjj}TH^IjzlH$|NhI;XuKZ6Qy$?96yNr!32|ywg{c+I8u$ zs!@YqV+VpeD5zpI?$(Dm9$U_jN4)qaT#lGo<6FB{V29GuX55}}JS<(@m)|s353{<) zc=c38AqgnljEB5g*j{G96hv?Cvt(-C>_r_&F;ag|iO9sW!kmR9^Qq-5RQ{(fN1WMi zZ|P|rWHqsL)AKyKx;J%%P*(%|bF^Z;7oF~){Wm*DM$JVi@!*?Lj4M3!u5UwSZu76a z+v<1ILY%D!7Xvd@pq%wSI51|Hn?HWg(f!ge5yX8?Ci~oRIp$s}E?7pua6$k=^Hb=A z14W>&`FZA)H3UtnjJ|M|>Bo{eYZc`9IhDBeC2>p=P5)^Kz4rYK9796+)&5$he$@_+ z!Xo%&JADO`;In5wSd#)O#}7A%>zcJ{YmHldHtlF`rElHHI{G4PZhGv7rRMp(xKQe0 zI~CEg=}F&sMP@^+;J#sZ!|-da?!LH^zlgKeD2}|=qEle}bZ}h5O*upaU7Q$h6~bNH z-i5?NZNE^uZQ67^vet1w33&|NyRLYev%P0uhPXKC%5J{IMMdFBb(*%`&Mgr=;;h!s z1x<7f5R`;BH5BcI%Fmzao8VmA*yg=|4OF)J>mFFr*d?$SB9aAW{j?;m=Y8tXWM|jOIcB;0xPQ6v1T&FvAW6P?vU+h*E0@F;#W_g~`JLgXi z1kV*z^OQbXxXz|&&U$cgS%+IMVBDvD{RwMAx8X!FV{LIaF55`_C_5?ZrFFRtiB2`` z$3PiDg(nsotLuvXQIoWH8D9U`D{7pc5%ZRcqj~yziUUCkF~aIw%rSPR)fW=TWjqeng9}Tq!ilNg_(G4WGYigwY4Le4s6m~St@(Zn zjqQ1lD$yfay;c|DS+JR>w$1GM-g@N|xM?~ow`HAPlgGuX6XfaVq#kab581gbd%Th4 zx1xwX!Bn42I;nF5AL%RK4RXE*y^}FJbTx9LR}G-CG(#Pe!X z-}6D((`NZg(Q1rGo=2@aRb}@0vL@(~(`EuYqkvsMmuw}<-Q1i%`#`kU7j3<^EkFY8 zIs3xjoHt8sBkoOvCfC7Z?S^%D;hrKnD`q>2hQKXX%G+9pLpVk&$e_pkPqfy$s>}8O zj`wbe9Bs>1_uHo|hJEFXf`sfxbLGB7W_AQaOXigr2HXxEw)$R90mehr?$TjsM=bx% z1$^T0ChGfTCOynkdS8VflvJM3Savd4d(}9$41#}yC2oFq^8EC+u>_3FVFG?lywkAV z6rxcW)oks4{E)V*wd8)lP5TPloNC1C?m0qtm$g@1$Eni?OBsgN){GElMeC?yQ(xJb zgNyv;=?BjB4@Fu2SxohMv&{~Qy0~ij9d`Fqj#?|ndE0Hrx#n%$)4U{tmPfK@VfX7~ zI;z)vZ(QQ)PlrhsWzb!OHc{X=nm?a8!<6>QWV@xg%Fw_!H!H}APc;ymx86_~EmmuT zNof{Z8h5pl!^W|Cw3*l9SKc#zcyNDKW!1B8!dGu*aCq7{3L~LQ_PTcSd@5a;IvsC- zT+%&fGS8aVF$Qb8j^C%E@h@H9$)7}ZsjJ^7F1Nl43VWV5XtDQZVp#;Z>2V7+ zt$eBB-IH#&imML#&`q-28L?@t)4sHUmNsdv`=%jSOVstS=<+-nG59E*kG0v2aYI0l zNzQY6JCXj@!GWC9dYCZ!775+2V07h|8?<_uw6>l1H}`SK_;hwHXiZq>!~!H?C5&je z2m~nHlJuaAz3Z#SUntW$C-+bBjqhED_#BUh+3yHGJ*)KecF+ZwE4J#kx-VNBJfG5z z&&D@q*?s2$&3auviiz(gG}dEICac>xxo`KjyTq4TfWgh@isr1FMrg5o0>4H1bf)dw z%)O&l9Xjx>ME%u%KhF^7RZk~wb}}xV-@?f^Iw^ac$Uibl&k}fD*wenFZG6IvgYzKv zolue(SL2~Fa6V+B1|_AGi1OqY)G9M6k`S##%{X3w7w0$5K()aZ z6NgjdzGE^TJW#c6v6I?u!5`GZJHJk@to42%y7pC%*q`HZ17ECV!amWoT$1@|T+GJ< z5%d;E0vsD)y=&TAkBOVjhVN9%rVWW3>y9QO%6Jo;SNX~^hxR`=&V_HRP8q*H29XdH zw5L3swvMjWc5AZl7IWHGeG|Bw`Me#}(opnpnVwebwz-sg7$R`@a>wDFo(#p$ALKB9 zzAG}@--m=?T25*?lg1)gH|+9>Ko30oXaQAk^=Ee>@W8gAJmm89XJk%48hBZXoRvq( z?kUqtUv(OONP^n2o&lc_5#pjKl}IC-wOkoq7^c+rHk0e)n?JNytCOH z(DD4kdPGUOn}%K|rPCL0ByOg7ar1Qz>&D&EFo7oh&JKW-Z6X-8Ql4+f4&E}pv%cQt zXP3K>;7kj3Qe0L1>KOYd2y%bAmvh)LO&f2@!Zonkr@*~HTtVRmQoGorQF$en0c!DK|>OU3N z|2&6TkYzD`YkM~LvyA&^Zt4=P$5jT67C#PqI&_`tvI5Mk9xTSWjU_VV`hOCaG~H}M z7Rwt7?lk!4>cA~t4U*^y-K!NLjOedl%b3};^?pcaxozM!SVSQ80y0KjZg81(NR0#q z{I?SP^AXhK92P5fBR^fl16}iO{E5)` z|FCl)75H!re1;PS58Rbynye}&>PfoDXc#R1icFT_wO71$?i*pxy6ttOmmXX}^gdip zUnhbu*agIiUOJ~ayVF;gErjk!>>XIv}EOcs|5%`r=ZHk`rP*U~p5T zJ$>xnmEwn6qiZ6~tEzvNaGw}f$*ND>u|YJKxubl&Rfki1sgT2nx$1ndb>u-?+8A8# z`F*m=ahV8T!S*`VLI?E>Z%cVci!;E2M{o-b$l?XwzP&TyBNO+-p~t)Kw6+G1QJAo1 zY%ACvD;|xlr?S~TpGdFAKNDy-u5h}1-xu92P48_CfK6d&#D8b~`0-iEeFKs6)D{x( zj+0|%21C0xuD}TJe z#jEtgB6`2ccC`zTSAsSt9j}2)Uu6p68O_k1&Cj z%Bu~ehvk-dlHq7!E2hWn)e*rqpJ9g~*&BmvAJSHWZl2$w!<7fzYt@0C5D15-+l~p`^b{B7MZ|I3ATS%9JFL1{+bOPW7zx6;)cCAy-NmewRAL=vF zQszO)L;3Pg)t5$h}ylcKChbK;ksMxG>)+*R+Jg4k@6Tt%iA0;*DIW=80Zf46}xyeJcX&$o1-j zE}T%Ej9CN_nByr7r-AVZ4HElnutfOfa7}!i89!emaMxy*8Ex9;I`Ta$SX?(aPU4Vr zS_;x;>{+648(ERti)gFY0Ac8P24Pre(L>#NuKV}iO#6|6;&z&ndQ3-w zq>qb?jSG7xPPjtglZKN@cUN-b8eLF^#=v8!Xnbjv#%zme&GKdI51J&@6FA5e7;M*= z=G?H#`etWDEV2i@L6v5!ZzI|$aDP8Uqddw9xd6>9j=$a+`jwJMZff#2>!&_}x=O zqt)Hg=KwpnT=wO2R*()h5a#dY;1gKn)0EuTX{dEbnIHZno_v?gGFYFk2NsJXhDSV3 z*BCJ6p7uNrd5RuBDso}@;HqCZQMawRQAY^Eo6>c+oMzJOJX|$iS6Fg9M7I$0nPm4i*-`mXjulVN&5uQ{ zOF@=EG~hih@N8xDxHV%r=YL-Go^yx4!uTj5U-sE;5RNgtrN$kIJYG_zikaQMFK&tC zMv!57f8G%-YXKf6#&Fc&JX9I&!`N@|5K{*2aIN%X!HU*6>hDgc3&mh({HSqzM&vW1 zc(6YF;KO&H?zLQIBk{QUo?6AuXHnFB>b5mVkBqe0sDo~0yC~<=&5l_W$4*N%BEPj0 zdT9Nn__8d2F+1C|*QHyQ*F|RwLFnDgEU?~)oG!;(^)3C;Ye=8lj1Rn?!yZ}ZzJJ8t z#(KVJEGBM%5kPT5p#S8*I>F~w?SZ22<&o?4gKet$vxebt*L)poMt2B|gwWADB&1Q^ zYogREM4@CEuGhVsSV4C*Y1Gvl3lT^aMbn&wHqeuVrv};8+KD0R)7i0>(OjB$O~k@* zY&2@a41c=eT&f0^cJPbg;EK(VL>hBec4o)N2>!9t4$!F1&g+z1%?Mr$?Mk4B-p6(q zdmHS1|DGchRK;^U^{I*oEw;RZTwsq zF8rBG@2$VWM>oZI^>iojY*!R*-I)!T=7QEU{4{s-TP=$$1w|Q;2i?^xFsg-f7S;1{ z1dvhFvo0~cJF#4k*G>dN&v;EI+wjXbJEKG{hqLFpw_(~}t#&5u?sBBkTCPk_{~*Bg z*MiR(xnxG|8F5mbDvrnnx$%Gtb9mkM;N6(RZ7C)J=dFAKcV!O$b=h}CZ~04tM%_y5 zg}0+~BXCf8x0f;aC!Y3<;rejndgFDGhC_F*NtaP@1%AdOl3~yw$nf1zn|+N1{uKM@4$C)SA)bD0J=-KX@-kdqw5?Skb*jNZy2U?e!T?vHL}zP z_14w1X5!7xx>azftmYSFR*jb$PwVy=_r@^io`wKq6yQvwLu!3B!@-{@H?wsK#G$MY z3qWKj@M*o&OGlhIuG+MJzOHRRR-5x=76f2p{+w)Y5&%*H^F~2GK&7A}<0QtUEy}gdB70#eeg6+37 z&IS;??4ejJvk4{S@e}}c^zc~yo=3Yfgg!E|l0`xcC2@YXJ#ho6kB#45cXR@wqqh^*UWbk@(!kWK>ZZQBT+gae(QjMmyS>)i?dpxKpPN(Ll?s;a7~$-OHOqeG608H$1dd;lNn z;D5+6(@~U;Xx4bPWPC$IEhE6x29QLAH@-k^1lnK3-#NVufE)h{7X#G;w6B@~4fa@C z<)oY-ol`#qtYE^jroZAqK;j=zTItIa4WX1y`U@2Ue1T3T0Nr0~`+WHS z-8BkcW0RIZrU;<-{v>49gZW=56LDuYk^|d2QIpw+z91B_n}Is;{|0cmu�HM}ne7%$pD+ZaF| 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

~^zc^;SAXC0nbc9DSLMk|y{@cA z9&K3_9>Nu6Rz1U@yzr~rH(O6Pd!eA8npwGP4ZNu%h(bJ20nz_hG@$v;3LWz<4ER*7 zd>2!C?ZMMv+5=&LY zER{_Ak-#k!&09EfRqxz}{qk=Nr5uqq`C~b28gWiGw(lo}ve~RsR4*I#@P=9$-k$cL zB>Wl^DOhZqvv39R^8`}aPJZYN&^5)kW3&n^;poTHr28sCWtL!kOkBP z(5Qaf>u-@L_k36u#&9bi;fS&va_xw}=(;}L%Pis?xSBbVQI0U7va8SJ9g98k>>3Gy zT2itnjHm28_Rm)vd|mbc8#guMO`^fRwa}Ft`@G%B^=*ut|C%6rjLT=JoB<>5_YS*Q zZg|&OL_BeX;cdO3R6z^Pe+n}rLLJ^rEYF@6_b2}jZKSi`^Mi%hD~jVrhPBmB-0Bqy z$ql~fj;k)bwDOBbUXAvmwG)Fd6$etx+w^+c>bKzA6nN3%0L&Mch4{9i+~8G*D7q?a z#LOz)ntg2@W!@~tlQ^8z@|ekm6p0w&fFczh&-4RH^M#l51Cbz`$?i5s$6v1v4IR+3 zgBq_?TAJZYKEnUrAklvc(E@##H6(7sngg*{kH(i8E+I_? z%032Wxpp<@Y3p=j%t!NpRL82BV@*tx5w>D+yvl`AyO>LjEHJnPlXvD4h8@JLf!TLN zPA>KZMPxO}I^&;$^JPc$1&SpDOaeg%2F5DY;tH;mygs(hx2bIm(oZcUKNC9$Q9?4n zvGHXk&tL3cRujzu931VumjRP1WnUHlI5H}yyMBy{lXKl14urM>`)*V2UWIs_8Fl@f zH>jk&_?A|DGUvTtgSLtj{gX{2_=9vQP%d3P-a*GJE^a&yz|Y_F;P7(4-m-AC7;~^+ z>6U6m=C{9#r+l;{AY|daL5XW6PayRGEF+Hkb@$m@gZcBw%B6B8Fb7hkG>H~s{>At) zZ+lD>Dml?ZhqcNJJl+ZVBie$?s^zNNvA~jwq*p^c^HmEuKlxyiRm6{)E!Dd!E2f+* zGzZeWus8pQ+ z+x$2;Rd_D@xO(}!!GrFvK4oI9UcRY%6TQ8zz!<(0fy&3SNqV6FL&pZ7Jf#jfc4`z# z#6mfVaCw7CSAP0JjwJJqvONFoSV=zWSsXUB8$$1Di9mUXs8ba+MS`bkBO$j+7r`fwx3 znF7J0E*WcV8g{gE1cvGnisk}rZ>H*g}P zmVesNi5>jB_PvVUcW^PoNbvEOnAc{be!x&u50oJWXa-HN#xkAHoY! z){ywYB%p`wo8exZidNw%&7$Q5_LHAzRQ*##0v%WaqGG{4l`%I#_Z>YR&kgxZS+3)Z zfF(!lXGi`W@7H)o3rnlg7vT;Zr}?#eaK#x6#Q%q+I?b})A#)81k8iF##c1xgqwkiX zkl>Os?v9ICokl;;64+S{emR-}KI=KZl_rn*cmTC<_nP5@P*YW^>B{G5Iy{=Y*rj@S zDCP(B?mgq{YuCDPv zZ^*Z4)>9F^qcZqC=MI3d81g+}y+7ukioWJ}ULi~B92GpEC()j<_&p;@rtL%#5W>0p zWpjQ^)o*WRvT}7Ppv(;n&lMg2!CGvsnWpK7&ieZ4i6(By1sGIB^%`HQDf6%S<~Pr* zKTdCoB)1hzZlsJR{U4xNvT8jtz2y9uUW*uoeQ~jLB@0e!IZTaAu)7vOUUGE_hg1t{ zb_a`x5>$O@KNmlnrd%bBavV;O#HWttdSNgBbQ-&KWuruD&xJl(@dVDytffZXx%I2= zmmkpq&zzHF?H50Ku{ThnX9xBgM%5L^8|mqRd9!A`>Y<&!E_V|Td0*Rp`Y&``81!^L zP1JV0Uso{d<1IXFcx@7OKM)08h`!JN;Kt`7rmMLitW=&)}K-PeXK8(=yDoN0Y^U#wIm4D))5Ph7Z}i9Rls zKNxIrH-GG6sZJZ#3!+a|6Fkf7nrHF+&_QPJc>md`xWaVUktLM@HyU&ICI(MEb1dqG z?5BDKv%vUv_=}O!-KD5U||1w@PN$E9<-rt zprS@a$tZ{M8_jG57js9A>e|BAo=!O*--Mfm9S20Y+q?#}?m8CVY}UMM?J=yj7NR`ZVBYHsU; zRMa}~D2Bfl?rv^v9ZyI`^TpwqUBIT7tB*~)Os*f7tb{yFq;>Xb==(m*wWSXF>+qx? zb-8)1dNGCStUP>X6>z@&_5P^R^XdV0TIr|r)R*)=e!p_8?06@EFQ5{^ztxfe@6HOL z$2)synDvFViQK{G=L@nC@ris2o4u)4e6CCIe-qxg{-J0=Gsl@PvSM()H+zIhVdUZM zl^0b-lC3;U;|lJMrnAED^j%1PY0jK+Cj+*|LSg0xs9K$!9V#;cP}>1evK6eiJDO(? zmq2(GVq9sAV`u!5R849`hwM4*0#b_MZ&;LbAX=b%AV(r_X)4s>ME$#?G+O{R7YF;Pt}&h^!yddMDi37?DrjU zvM^g*zsVPgAskvV+CBEGnuqHVxxJkril@9`^ESt5$8;$SIZsXX;Xj@3Ul01sB95FR zwu%Xn^+k}A{|^i3suzn83Q~80u62W6U4XGOlRQS`+#JD7do(%VH$fp!?}G}%6Xdvf zgm6QW?}A~AEcCX++hX`FFgyrK6!clt;-q(LA}FT%mn>1l>qqV@L=L(drzo`Xk}X>` z!Y$fw6*D6VA`j1Ak&6C}AEx4YC*Y6R|Y;^&ReVOND{21cBBOGTW93s=jI zJ)D~(;eBtSkG!J9@VDDmEc)#ti}kD%`MwMAUMj4Tdb_+=C71)A>2yz|9o)OuC1^w>F)uHzTC+-&8EE8-E8({Gk&(%t7 zz3Cu!UG6B3BvV!7owB2p!6z77b4^xM+;PoQx=GQM z1aIgr`QYC*Z+oMhGJ6Nv`{I!a(#2D$#T(=@`^|C=R$sukSBJP!y!sYiyeLkVT$l0# zzzIs@P=C2+3r~HT&ox@mYv#rcYR`e)`O`06-L?-Cq0;};o~{eFQdL>^M;+3PCO9F&{coagyg@%?!CNnA*W{GJQL3#ZEgC1I z(d~91*S9M-NG7P}1Wz=8l;hIqb$JNHx!3aqNqB{@{%JaZ?T_*v!KJ!; zYtY@4e?4-1fLCMRNhpI2t74%-y~v}fEM*b{kob8a6f8jKUT7+xB(U)Bcg|f`4OfM3 zPG=JW2nlU?akK68r#`;8oU-$93-?vzs4(W$vy@Q@*V@;-tmx}M(mu%$?(!B!%grx>Aw(NFudvE{0p#-*ju zysM=}XRJ;U(M>DHlCp=-IGcE{V>X(v zLE2nkK5BYYsUl@jb?W9v^hlh+Gg5s(Nt0d<{jl0EA;G0Co$yuUqja?VSRn(kEWpAm z2K{KL2&suWm0BSq2CTAD6bjt7&$WFD^s^|hljc6%=qEr*jdmb z)Dz0Jy2tb*5yc>3@&(?Q&gss;A|t!5;KYedo%w)3p=z*2Nm-5#OJa?6x$M;ty+uO% z5nEM=tBecyD(-C!h%+o!BaLoLeCC9aq7ff6#P&Sb3GGK|mb?CsuS~QXP-o8o=(nfVb_wJ5 zjL%gWSsK|RXwhr&xlnSa_>u_jGGFbGNby2yRg)4Qr7xjmBChJ#NyWP#L8_v+52AA$=aZ{~MY67bC0i>lN5&Ogx<039 z-J6XshE7uk4zGK7B8Zu~JiE((JUR3d=eoCus3}NDC&uW~f#Y$T;^L{n&)ge+-XIAm zGduHn-@5N}DqLqiutaYl$CeP9`rE2iUx8&--}~dk7=rlcGz)0(f>=FIAcqbOs-NBc zazpfnB2RU4s%2%+Td%lcYWxblth*C6QJ9)&><6c*PeM8r-!CQs15r>azCEl`MKnYA_C5>pCTDIKJ}9IK9rVz$EhYJ3s!&;;Ln_B?dK zw{@!rDpu9vcNq$)wCg!~nJ8#m8YWQO@S$}%bCpNc+h3lE-fvX|5;<(p*`@}ksx*|Z z+_vivfLrmNpu3v?AKt+80MY9mOBc);0e@F#N-9be8Qo9fPTc=Vz7Er-cKHlGA@*Df ze{=C#_>R?PFyR3p89b%;AcmKRH9(lSbf5g;=qeW{m~!kI4@` zh@cDI#O^gNhRyDRrIx_51Hs=|W!DU*a_`y=J9ShsMF|v++vTLb^?lM%x^AMWR7VtN z=d4Me*&xGN;+e=%BpgWc=U0pjKFv+Q#>ABZ$ZwZX zh~yrl+b(X?NQ>@EYYsIPs8?$I0v(D(dJGg!Y^PO?hig_&2(5W9Fqs>RAQP@gb!xdO=xw z*+tDka6Dp=WTsV;rd(#VttlUGcI?-=Li5mt6$(~GLPJP9wy0)Kr(?&%IwYU{@M%RNCg6~ zolQ9v>_(`}sVlT20>7Bs@XZoADl3tmE$OTo5ZW6ZVdlRLOa>MkUC=xL|EM1h;Y)Q_oN zoREoA#!?}UGQ~vX&wUm($xrhmRHs|!ZXZ>|(`RrM2-t|fe2}{>p<0>UjfO3#{221D z*kRN1NcR-slZzh&5E%Rjm0lGNt27rSb8n!f<1Ogx6A2+(G3+e*ql^=*|A%5fsVkpMw$_<65FEb83JBK4iTQFHgD>IN4}Fd#sV(6f|8cl z&a`pV=RDM%a!VdcO^U$Jrr8Sm;RQsoq&YQdNc@i}ly$VkPCs2sSFXoaLp8HFz_W^@ zG&dQ*@2WgG8*YFygZJxc z&pX|wF39-2Rrv$c;RhhJq!s{~Q(@TzvY7lpOviCrD+>rE?Yfu}XS-|Im%{8Ui?--L z-Dra{=dNi7y7-Z%Q6zkHGrEV-p+J?O#E^G?!ZqeTQlGyt!fHHeYt;>aYupXf{~Q8^GpD_3Un6@ z$$W0PR|lAlINxkXt2Tv#%cR@PADH7?)bA~1&p4mW8k?7W!Nbb?Strc8a;T!XBN8%- zCYnj+x=3A#9pAxor~mH6N0i1-j!!3wrE8>9#hvsPqIcp*gj@0F%#DRh*?zpkN4)S@ zE~XDTWWWx9@&H2avum=mnt+aH ziF8Qt)f?{>L3gKn)m?rx8fI7}pC3qj-Yc&mQN5?wv(@H+Pn4gY3wPw`XpG(ce*Z;~ zY+DiBfL|!U91{n9+qj`dcPhfHMm5vNzR;r1y8G99SW+U z%j7(nV0Uy|&}WtOVu7;EymF0g!F&&kwqDgLh30T}3~He1%s#U^bi2tpdN~@Z^vXTQ zYR=}$V^n{+)DSw&0^~f7+MJw+WuDo?(-lUqPB+WR{v7%;pchT7O$Jkwz-3`r)3_k& zgq$3}*J@#VcXM~Ey#!bT4j|#T zB^tS`!!^Ea53vG6Ktjx|tdXlNAqhdxOIEDaa^d^FIm531G-*d!a_L^vA#*$4!5cC$ zWvVS4L0Srmv%sZVkN%OJr`DlYZc1uhJ@jDzP?}5|;#2$Bbf0sdc~s_b@?Og z1EZK^4x#?aquq{TdGKbI-}5AD*vY^>!!2`sYb7Vh%FrvI80 z4S6m@bwYnmENQwf-Xd57?sxWjh=rsR~F2*Rm*KcTJ$wq@OC%}SMg_Ug1EWi^43#rj`K=s&n-eL-ilnRg^r^hfS;R9Ave;6D zx8jUMQCl<@Q)9j5l`f}S+0=y_w%u-C*URHn^8~-UBW8Wbo_W!<+KI1I= z5H6-gnoI{xK-d%#9!)MVcOX054<69-4^CJ6KLQAI%!@yL^M?L2{xt(VW~r0=KTw%Hu#=5Eq<7=#_?S}OTGUG;6*eI_G)_2^jB zol69xRwO!Cs(A?wy3nelZlar*ODWwk*k`wDo%XetJ2IIeh&FbTfE3tpO%UR zRJ1q(7^RC`ZJs{S&f}>#-JUq^!k3QxI3J@*64b63GcQHc8rqL8xz4EA11|eqvkXv~ zCr+5j%|$LJj6_+te&!(fXe749T;X&NAFq)`ebgWU&T=hcCCg?bHaJ&Xm`;t+7>}3z7)ww z);g)E#2={{hbr;kvl{7*F$h(w>6lfdFeEwqG0N^;SDqQaYUFo6$VyG_hJF)p^qF!T z#5h6|SMu0Q{^bIF6uYqC5*e~Mi-T8A%uVIAFsW2 z8q@@^Q~eBHQaE`CghV~8E}Z!k&~HD{PMQxXJjv@$0|-6)jdSTfF8meRTOtO(uSDz1C3wS~y^ zgXP-|{SM*Ze=q;}v!oJa?-#H}7hgFQqG0jlOwS~;D)2~MOW{MH?#kuF(ZIK)BfCE} zp0pKOT;dMl5XjTF^SmKwC@+=PN0X4B)Zf7dbxe_MYg%KbIC)r%u`z}@;Rjt3eQvpE zBn()%q43i$b+k|{KL^=L>x@yY(a3y6LUmHfp>oD>^G-&rOOfCI((+Z#>WM2^Zu4p& zM&F9msOGdraW!}0L9;85wpUguoD_Jc;3MRJ0H^#-n)UGE1?o^_>{zyrTs*nsQO?s!nXY74rKRt?UDpuwSP|0{eG=Q&3ZgVTfg@^b1sP~GRi{-LSJ{zuqGhH`3 zrV``Jk_Q?UQ`xol6v22JIRXWV98bt)HFggz3%u@99QAE<^v^(h9;AN_7ND`eT(gJB z_F=LPf(C}Q{DFLF+6{UJIk|vx_@xT7BX=Ha1J&KH^C?(PeqSc=d@Eye9pASzlYwf= z7Q=r=%2@pOuK<2!o@*ZV=j(!T1`}uQ<^VT%VQFq|4fSX<+jjXqt|V@T3iDR?ZG-`C zglQe@zhBKwO`2!&tO>qkQqZf)Q)26}9<*Fav!i?VO9Wnce3$37%`C?tTK>1)RXxBt z%Ve2+Np;wOW(8Z|Woz*<5#A(nvv%HNgXn8s(3O+u!%NTG<;K(7O+o-qGtp4bzJ86+ zgJRv+l<_JuH%c3j%~6}bgAa}`Lq|LbXR$x=RcTEOrx1`Q85 z`I*pSY>84tB_v%&i%r9}{uehEHcjuzlMTu%}A@nH3?LYcc?|wEdGgf3B~Ee-sve*%ugSRM31O5mZVd!7ynN7`zOGhYIHWHp2f!i8OYD5&Q1+^HdIcw z$UGUDrY=0_2roTn!2_5Kt$Ao@`^cijiWPk%(6}~;k`|-*JRoVMID%7eGNa8vP~+v- zwYC$Mb@}q0S66){u00i6c&}urt5;j=Xrb;alF!RQV8ga(->9j>XZV#Z1&}%-FCAvy zrAda~wA-X}>L{Pq)aB=?lD6W9Mq=3Un36i`1j)9V5E1Qq$>0bu9-Sr1W+Xb%_iQlP z<sHbyQYR!1-bR%4b(#ZF>o5EE2%#uK2)I^x z-<9%fLoC22uBX_P@DKK3 z?P-;2TJYSmv))0dcI4D0}RUrcHpXET;j%9>WkG#l1`9SHNnVS7gIA-UXl(w|*Ns&e@d{F;7WC!gQLVMdguj^jm_DFY54gm6cjswYyEd0Unl z#TbeDvrq0)O1W~38%gxhkpNowtMCV^7~%J9ST|J+4PS3R8(D%XPGU&>c1eqn|RT+Y330BLJ~OU#~W_53A5 zQ^t(F2Q_yhcR)Z%^ZKFYbB)FE_su{AiP+!WMrn*WBA}DzI0TT&}Vab!(47nLO$gpkK zPgbY(%GKt+k*zP+3`E>)~irUu(qwA zpPm2IN~eDXV1wa8P+Qp5sHpoaRCNaD)zMBNeca7zn=el^h=Tv?0t)HNNkYm{r7AeC z@Fz!$j)Fx5{69C-vwkD9vhzV{5ei?1(32u6l{91r>J#yAgvz_ct>TW`*|@WKJVyOh z=kcRvg_iR0jt2)xIOQVL(<9)&%>If$HMD*pkxBw3mz>>s3Rt-StBR@VuYWj5e4N;8 z@F}Nd)C?X|)C3hLTYV|s((VU(Y#8E;8rK6AJsjr><}h1b+`6iB3{m*zj3h-I5`l8b zdqdk>v5wNtsHE-60=YB@YsT2Y$%9K|txXE&&o?GPYeeqHUD_)rh$`)>`ua}G4g3KM zznAV}DicI{*f{ks#nZ;EKyj#Yb-u&x->qNjGMQ=;nQY5dx1|ctfNTW2pX+`I^P($` z=KeD zM0-RxQ>g!Z;uiqgq9;tM!&Sx|NohEiAuKw_g)mXCe6%>$-~W|Aeew%j8wn^zKP2uu zsXB>>M%5AkG>;{p$dft_$%7c`XiCNS(C0^ldj)z_8c=H2@BzSDT-l?~y{S#Rt(Z|b zrIsn%R1d4e?yL)|zGV-d!+Vf1FcwEXB!C7W$XW&DIW*BD<{?z@Z$G!@uf+|> zLNR>Z{-@5cP4P?CFm2VmnL6ZKQNzIJxOC2AhXO%26QJpZ$zU3)%T?u~r0O)>JU_iA z7Vr3MW?Yzsnz3<1|F@?YmB8N)E%rk<5{7hm%EE8Dr6*9}W?iUX#$OEH9_%iEx{@)RF;kS zDYT`7w-j7fX3JF~X63kdownu?ZKhja2FA&xeZfE~zZDneK?bJS?KWU|l(VoaQ%i7P zr)AAhoP?X?5F1s2UC@cbF%%RzJZ-+{3zM&5pD!X9CXZu8(d z!ak)lATRSA%M=pyW{}(=97$t;#8motR>B~Y2ckPl*?0GAp!e9wtBB0h!zVOL6~lCi zs?m4B?j8P72tMmxv35M*(56U_?!zBc=3HWmy@XS%%Gy8mc4=5&@q`)2B4AuwTAqXE z>YVcBgcH{HhBBxrq|c}C^9Dnz=^8qh3cIsg+%XV_?p7V03R7I#SDs?&jG4qQuXp1M4LCq9f%XnB%3ze3~qsm(^rW@n+cOV>Euq8VA3l;Sa46Y+#K=(`A3NY0l4ZO?=3zPAw~SIsQ)>exDkH^C-5-(9+~zF z5k*;X-&IZyx?JepfvAy?P#54{>H>o0j;2Q;Om zuZQ_@<6|XEXI&ew0Y{3*!yTj(iepNON?A|xEp33j40-AGf>qE_--xe!E6i1sR9pCa zr*|_CGu$oc|F8h#W9#9-*58;HSkvJ|12C+o$iNwvKdNcvHU>VPTdNgP1FAecSu9jq zy2m{21!TX+6IPqv+a~iuUh;&6n!2<%JiPb86=7fli@RRm(hQO7_%8KdEooVqwu1!j zTP55Fyygu01PyCPiesr7x_e_-c%*-xUs!Y7j1R%9Nr3#vqDj1=>)EHd?|xRYs?%c)qD_u@U7)^JOV@to>0fK9 z;Hl}K!)A>%X;lf{2hy{DPaH!@{U{#)gWl4mei0`|BB6{^n>V&db*RHCx)7EP57&Agz&gO9hNQ`?-= z8$ZA!ENk}9CJ@^^iItUKDx7(`IoPKeJ^xW_Lm0Z4H^i@HN3wt<$)3BQ$#|U$y%B%9 z<0dzP!4QTU!t-xZCSNzcIyJ&)I|$D7Yf1-htGpA6pe^5codpi9fc(5{KsqyG){p_y02yd4Bkb&m75}^FHR)3>SWJHC6t` zSaTlXe%AbFc}59cwQq{_HZv7i?OwT7j|exJz>*`tjGxNw=H^nN$*e-cUz1L2dvg${ zX}baNB4MwWyG?5>dg$?6>@b69dbVa`a$O2$!zYmbo7eX${R3`h%VtyIS1tAj2(}C^Hnv6>O7l9ijNC!I2Eqd#}HaZP7uzkz|7(FH38oCZ9 z+6>paA0JcgS=_GOtWclf^WMiY+azXRE>^pmI$xhegN`>>Q0I6F$K$kHmhy85Se3Eo z@px;5nyiZ(pKcT$g#0IygYJksb=-#TWr5;!v)A+eNp))qXY(UXvItSr^6VN+=D_Np z+U|vs@AI+HV8fVG;(NhWAz_<1iQ4X|w#%rWZ3s#-4I4d;&27uaz+uaJAh`HA1eHR} zZR#K`vTDi&o+$kz)JNHY@+m2t+M*9nj1EjwdE6+xnax5#74a{pwTOp2HdqrkeRd4Z zM{pMdkC}{cZ3^`a^a1AEc5lg^um(;qGAp!uK3QFxY}rY=F!2GNRH)CCW$*F(8T^Vv z#~8L$k~kVi!)~jX*(SiijzrLWObZD}rl?h!Rf>H>uSH{^VYZQ-Z`9U!1x{T%76u{kb6ax(vd3a7z+Cdh5rA?!snKd^Pmf8Eb z`W8Z!S)(X}HMWR^M)0s^+0YGCh_i4_oqki~T8ho+-AO1E5Ske6{s&RY*2eqP>DmJG zu+yh5pSYQkwgp}8H;$vd#rWCyeWncSefz8CAaJWJF?BY}kx;F(q2Ik@Ufsju?E0hT zKr$eKgMj9%LsOlrNm2KrtgiN?Cr~LoBHYeN4!rQVpGBu06>3r}KVyx^m5i_aQ(~d-nzdb-gPh)b*K1w?kE|{| zpQ4VHs%zr{U}*TYg1c0nKwq7_z1nf1VlpOtTD34WO`oB(R%rShSzxYcM+*h9q21!N zCWBx>Q3ZFTzK%g1Mr-S!3OGi_Jm55op3(U549^-P$-WnUDyD zm=Wk3PiRtpz<2FFV#{51{&4a_)=<`6mTu5F@hL#hLY4p)Lfl$^l*A6e1XV|&{C-0cSN&Per@`i-cb}u2@ zhR|``%BpFRFm&ZrjIh-(FovEGSVK@WIP0YbWbXh@m5|Z>8#uvb`$h`|R1~`v8&;8r zKgARg7XiZ;g1!^C?JL!1=Zks5psGkdV>U!2cD`%5DOy8?R$QG1O;**SFLTHPMcPwD zh=12Z(Db%W-_f|7H?cA=X=)IKpSqZr>7_D>_t$isBDD8h$~t^fPNoc|xbbt5=jIn$ zukrJaotipfc#DCIWiQoWt_pG5XxgD8n%9qX1a$6YKkII=!w05@@3K$gI1TM836Z4K ze6Z!!6wgF>nUWadZ6`;3CwPko%tsihM+$@EEphuA_VUi)Y7SQN3MH7+Fv>~cr?33( z0elTJ7sxc03~loBH~!2eieuWG={l%u9T&Z`>Aux(a|KaXU6AUqGrykwny59iBs_h7 z4bHn6$*rvmA2!4t%OY++Zw5ru!`P#CP|4m%Tb(<7QK{BY9oh4Qm$b>8gBP0cPrP8q z4Yy3tF8EpaVH~x$Tu5ttkF(%}T1D-$@`X$-Mp9dwa(-KeoJOSJv?SKGmIkXq6OLNoXjHM-~HSSd|JYuA5}xlRdaerK2ts#0<8^{Y?Ud*k00 zq3gMmy83Mn^f_D`h#oH05US#Hrf8O&!P+rLM70(pNa&P-OO`6G3_Qj(aYl{Bg8uop zW#g>2idWD?tW7(v+zVtt{$qGxM?>eHM%#BVH7?%z&dgVUPJbmd0b3kXtJ_ z#-*w4R8$Ez0 z8m`_+-RSw&Ds94uiDa$E-Dayd?9S<}W5acG!fb?(H3Tht>jMVt@>8M@VEZ9VAI~$q zl(vHV-&%AuWND}W;aQd87HcM3I#l`pkEXZai|Xs!w^fwxMnbxK=u(;)x*MdshEAos zX6Wu_kZweJ=49}r<1EX5;BWe2$Osp?N|I;v1jgW2bwPmU2?=}9=Ui7TF-6Iztu zO5B^LfLPl-d?vUhyBP=`;(!7=RsjRoU1Pcq5nm~0)Y?`9Uyc@Pva$G-z@;d$WDV36 z2?B}Hp~PV?ZNU^P%Tb1&5vOPYz`|A}t ztB(;;N6Gw{J0D+XN7)DWZ zd_P?#^~%KXb@jLNE*7V2Jd=7s&Qa4DvZLN*1)rx?W(jnC^RboC{)(&~c8^=%O&_dOA)Z?fT`fJ>wqNo;%g zOp(uG*xbPV40Ap42(tqw*1BiQ0RMV8ro6krgpcPT|8Jm_fgCo-L z5)1}>!_;BaHG7ies&=)RJOGi*=shb(!rG*<12bNmZAm_^+2FoMT_?_53-@8$M~xq5 z1%ndw_&yGu-NsgWVFN1mK*Gx)PXSvT3Ka->iF*(6D@vLpDEe#u)@EJ=rLJR6V`|qM zjGC$nAOMFU8VxxGT}y)Az~1v%YS|-l;YQPPbX*)zHu7=SZ>|HzFLb|BQnK=^IM%(n z*74xpQj+78pIW!L9fYcg!b{&Yq92D$vmFk%83TiY^nTFKB!HsQGl*I2 zv`S`N^Tv+bjX(=+oq>sb=87jxK5yUaOYr%?heutLSEc4vEa>(@O1(MYJ_-j!rM-pmdjTw*3?r=6VYB(}Qx z;M3=&A4o-A9}dpZ&^P@#ru# zOWuL@*IscKod*2W9FOgXG`7uIw*~~*GecS8oZPfh_&)u+C0c*^>&Z|l$sql8s3S2V zYz0Mb_y_Z7-3-~sY}1M26_12l3rG}%{PEyCyk0DT$HmmWK6rYdLh|mA zRi|PkB6l?Yej+72Q2_+_iIK>0$`&f2iRxQ;iyqU&qBOG7vbws8ud0woO5L&>p5RDF zk+xOeFA6w5tx6)tdt4I}Q32b-R0_p(pL=vpKxCKEYsHM&In#Bv301})=Jpw*g8U+N zm>&gffLRbXOQcCKal_+t9=AA30dwAVmPm z>a`c+Dq})xoa`RTQVVIkFG(-PYpFDi`lz>m$;!)X)<&&BaIQ74`Efu6qt-(^6j9TK zuK1Gih|Fam|D0->nXEvJ_Kh%zDM2$di?i=6V+?;=@ zLyVY70??O7f=6;8J?yIJ5FQt9DPy22Z!doS!eP_A{u)63&aro-HXNnB`wb$-iCDOgUFliuUZ!v5Tnd}h+;Y>W?i(}`eIxr7lhwMH*!jGj?v|V~y^5aR zEZgE4U7GBi#d`kJ2mEdQ;+PE^%#N=n)$QDqn~wbRT71P{v7J%GB+>EKez5%CEI=?< zErj-RH6}~haj1Q+|!4lEmG8oVz?G*nXstknrIdolV z7j1!%nh+u?qLxb64?1*!b05K6o5j^->`REJ^0435CL#s4*R5Cc*C$sbq|Z7?KYf(n z%NR)=(`e()3GP;qrj^M3k+i4|t9CN>c6=`X{Cu1JKxQ8%?&A3EZr#(B4Q(NDxwI&j z;T46kY{I2@M4?_LX;_9OTZ?4zmRqESf2ks(ZDG#{wmD&sKiWtj^|_ zPllJ-R}S~W=OI;S>1d+m=OEgUbvzAANcfC;J^r@yhL!>wAd5i>*=@uW1UZ9RlVRf~ z*tw43v|*-v!-+s}I+?~JA*K$|A@rWa#*wB`0G7lsW?1SJn_i6@0zL>*Xtc$hl&E*u zw~y9_>bd!dMmW!CD${dN8Qsvz>^ z^*jAl7HMIcX(5)JO{giGCHlr5NS%**&M?A92yPpu`4DFb_CbA$V@6n2U8n2L3|@aN zh{~co2A+Qs-h{Nbms}h@k>!+I^L$AqrOgi(bYQg*cj4>rC~QBlWU<*2rba&DTZ>{N zeHYX|ckGEMPT7BHL*UwrF1K3dw98%YxBR2%>qGl`qw{@hH(nf(4iimYn{CnYSoQpq zhn-74ry!NiwV*)O@E8i#hsf{|&N`#gR6l{!Dxyd#;?B4KYiQ+bf9^eUUW(uP)eSG= zAU;-#^8tC#<4!#lBmxQtQXq99$)WEBbd22F5#&-r%Yi)zrEB_WPRwR6Znd0RK=JTs zu&{NbMeLovB5!g~nhvMV-!)l^Z&`ni3MXpj+8)kye@;~F#*xWW^q*aE(g){I%>>)( z2?SwEd<=oN>F0d13tMo+>4m6UDnP7gF;2=BJj{v;9hivGcW2Bc*DBFKbm0q_p1ewY z&Za8au{$uD)$hsEQe5F{gvNbvsvdZvK_QLH(YU3G#%Yxk_2Jw@?}F?V+x;F* z9I*Ag4rlnxPvw69Y5lYP0Cf-aEgvc!h&Y3%3Y`w=0R$~p__@&XqX9B1qjlXjp4udY zba0)C*g@DCz-*U>+tKTHN2TU5$J1v zU-fWg_0Iku8pFc8R%+yi<2}-(5hB;xdFV5EU=7-8U;8_*9W!Ny+f%ReZ8J?ZIZJe` zy)1x8K9MV{Y=xIqaCY<=t`phPP^|~ z7FP5OY++-2mC5E#-V_+xkniI1zui>xLm!?+CvMasDd>f!f2EzU|GO-Y4kKY@%8>Bp zje#~6LCi*InfrU+5YxH(%~b0Fthkjj#Y+>}t)R6&imJ4o^3Y0r}v0g ziixWatpv!ImW*qX1fB5B!ulP1n(5vhLOj8So1OmkO;?{(SEK z6KzyvRFgVl5ww0R<+M4Qs^s}p?T>_+GQdF06XVyyu6`;WJ;b9pP5|92*5HNl`ubRw zoA~DYnKR=NEuEf&o7Y7Hc8Bigll@?uoDNsp#TCh_Zf#9->$ngjjSUw{ebSJVs^*%C zPgWf>cg^huTQh9J$IC@T*r}5q*v9rtMw_1%Fl6O&1y`1N&vcpU=aUI-J1gku>op1r z)Yug-L@7(vGHmFPo|>8wb1*{fSnQTxhqtb=po~x5$Q3AT?h8j!NhjDI7_J@#0szsb zO7mh3Iw;5rWMOG8O*XqvMDci9KFGno^fxa-ZCNaIf+jezfeQGl>$BV+s4nYlR3mlM zAG>2)i4R3+6{_PCMxgjjpdLx{NleaTOmSRM34d4}QsmymXNGGvO;WQW=yiI=mETzW zIJ^66FWIutm5#1eW|cdn_vMQkhB$RuCj%e^LL!F~Qy>)Fb%8`O7BZzEE+bj|s!Ra< z{{f%9p(1cbl?3h=*)Z9BIS9ETJyx`w8c(IcYKvc2ebZ4G^(If#^BC+ivLGHe?JAxu z7Cz=h<}&X<5c@)-*OyKsZ2&&IxHRE$UmXk=eq!ML1im}04ZRz?>)HvMx*y&@wh|M2 z-qh}2LIEEi?b93 z*tiv4G!8r0{nor*-rjmU7L{bb{JxfNKiQs&Dc@NLTPpm7&eu_(NA3NL%ms=G$MIs! zeGo3FP6>?&aw$O=xm7UZtSB9^+hY7Nx~Pqm9?fQkv!wSLtQNY?gr@GZvu(I*`wzue z^-w5V2?>GI6k<@OR8^g2V4QKmXPa*C;^X+RyXr^>4HW15C=F-S<9?*mjm;fCO$QLQ z2Z&^vju{<{y6QW`??qqj?;TY8wIx8B*lX@OzOoZ3P7u19T|u=oRzwf%qcdzQ9KY>% z!-5~}yBftdjCIfW{aPICy7_&~8^`ovhu+(D!O88bmnb$hW<(Tuh*2&Sf?Hy5@wNw@@#1%kurg zJ{8ri#eW=X$2rCoDg47U=MAN4>xy?<>X2lC5H%Pe;7=ae$}{GL&*`@1c&sQR zBP&M(Y;^zrlp!jA-wjd@S?c~yyJWM3vC!OnqI#&V_C3nY8nA^^LHo>!F>@yGL(Y2i zfty~^lQaF6RYn*Q>)^92e7{>H{j4gcM4(qCAdPjBfZ=Yf7e1YXqtP6ys^r1EZ`#l- zt+uzebVkg+15u!rq$y!Fr|u=Lu5+~5^&^}=j)!+ZQe|6H9#LnjHLh1#A>n@!O zZWyC3@cqMu85leccBNr1t(2ETX|)DcJ^GzW?_Ww*!K>R`lOU^WkA%h`_*mv>tsyh1>)U>?&6)CFZSPnVD}r zPsNRYivrVgGPwt?gG13WsP>|L>gu@As8~=f2Rx#u(#kXN!@#w~_Kq+S*QH_2t~(;~F#mU)FxaKfE%pmh{7Mj#glVs& zukpSn?OOqF67A1KuzN*FXa}{av7;1i9j1aoJD&(8$+@A(>P0Zah|CDMt`8;2ZbvoU z%L>j)k7rrIgRw*k8}TL%50v++Dpe~Yl3*e(;Eo2m6)~(P9riOe)FzmIJjdJH<{| zpGBKH^t$iXzyd52&N%wpWkx^-!LUBfv>Usq?uXao>`fcdE%nj%b{+Df;b6szh|X%6 zeo7)C4j!AKD(Q+?p{nS1FxtrLVQS(yDokc-L)k z7uX(89Hup7Nix?l8Cf)296DBipuOKtu{$HfaeT?hH*3lVHM^ITEgg&^0RlQG`FiE1 zI@0c$p?FQ?4|@7z1GdE?uwe+Te0+8%vHWQujaGi1Yw4818nc4N*9h$d0bLh~OX6#{ zb^?sHxAmxI&-inFmZY75{~a+-sFrpULXdeu~yR~VF)9ckdw-h@U^ zWP3KZhx+}p(gT2PgWooDKTs?ttNkfUz!LQoz)+@B9ok3lgfP4=DpjM?@<=xL#ShoM3slT zal(Hv%hR@Ey~W{A-$neaE?0%qJ{21DMiYwQ9o}e>eiYLWBI~1#*^X;}AyU39hN+KQ zP%Son{990PmJ#WN@4%z~?Ye^uBIYWixx16Px}=@TdqdzJA3myX5BTT^V1K;DW;#DGp2||Gz_{|0!wOU zS7LU(tQU@q4Op=|j42fHg0##ynjOnPQy1ROwD=FOg9 zo%J~C`zoQD40i8fnBJ@22c0}7F<-EoE7EAz8-mW9d$EPc52q^ zoTps0ZCqJ1BAZF)QLf}1AeN%4+*S82l?Ut@a6z>cMQ!-$*ijy5;WzQwB7Rs(wPSe5x?!lK)>?$(ynw%b3=#1W#39P;7X?}6FRMHtG|Z|bMHqZ zb%xep|N2_*O!qHWE&_h4veFKY^oik6m1cpWHau558 zjgR&35=)Un6qUSrYFN`RP1@v8RF_=vaN4>XWfspIl(Z!@!Qb_Uo3#ovHNCA#9Cy{D zg%rYC>(z;u%DrzM_aLCZYzJE zgoiyTve=1Gy9|A|IX)$?cBv>ZBoGMd@=#xsS!Xr-cBE1H_cYme9cmSCM+?&9rzyz%erM9kJd;xSo}^POxdqzi(8tjVkbCoXWn+aH59xNs0K53 z@=oQmFjUrzs-V7W@08$j*k=`Wf6vW4qn5yLk&a?X3v8+9H3&_Q;tboa*qq9no0%3$ z&k3ZE=`grJQq7&JkYX5F8l>>PZ9ne-Fm+4NyOXQxLkj|j_I>VTzWr5mtSZxFfxs{- ze=?hJKm(!P_6cbOOoG?-B72G%WN;&Xd0hcW zA`yBVIS{I1F#Byd*y+LjytoCNMZlniu~=%s(_NS6oh+4Psx?q3&M*0ucgN`c+&U}U08 zyp@bd$)|S>d>{U6fHFdmX3qdL&a4oEb(*;dwSr)yjbtikIfb(?NG%@S@f2HGYcQDL z*Gd!*WtFWT8`%F)Dm!X5Xwn%=uB<(<%fQT4yxaS*L6M~!&B60hd!?pQPr_3obKIJ2 z#9x4fI?#1AoO2X8yxWir2WA}MEj9aY<(+vPi=Y;1h%=qN91ebd9Q`B1RY;zejx0J@ zkjNfdL1-1KZLCvGwmvBFnO-cpk#X0f6d+>0G(17h54Nzco+AAZj@XGQgT^R11<=*u ziGw1@e< zrFmoDW(%Ol_<`zZ->o5Uf9T?@18GH@_jlc_i{^Uy0Fjqn|IAWOTGatHlrR@8vY2v+ zq*BK#btNZ=$mDAlGV~bh@YGT9`SQZu-CZh9o~hhgBCp&}BpDiwy{Pg(VXFhjG_#;A z>mBA}`yWzG38%)t^B8WBsKA~{MD?{^i{j!xa#^Gkv|2y9q&~lJx|zG;3K^MT>oEsL zg;O7uSkO0y3TV*)Z9~uMPiEsah9)8fjvFj=U4-K9R(&Q6(dXM$+P-3syRT`>6|umt z#&yo6kzX7R$Ejc7Ho9{j-L+3o$47&o-S-}4v(7s{xhGHZYgRBPP(Ts18oR3> zgP-;*l9^Ii<_z5TJB=f?xbxqeTx?MkPjKif)_GctNA+B^h^IBJBO6f#J0(0&_eZELVT zm{B-Kf8bI_#8E^<&6n1=V-nB%{>=M8F=PuaJ>m5^H_ov+DG!qFafwAry0>peu2I2l zlJ_1mSaKuy%{aMn)g&o0jq^aGDYbYa zY&xqkey(w&%kyG5`1F)l29z3-aImB_b}a?H{VT^m?G5dth^g*%M^{uLj7h}c z>$8o`#@ce}zDIp>T8&?$40)d4Tb7w=sET}%MH4(p@2{pwW?I1*zWV;<`z{FV4lpBY z3!gYcvx}a!i9g$zAaI!c)X;R|!^~L1AYidOutr43Ogjvb^r89+5(Y$lKxspGz82ab zPD@u47Z?+WtKr~=yI-T#s zveD=J-mJHCU?GEqXzpO-Lz@1?*Jru=H|@)qc6cV*G_jW<*6_%sNI}wQS%iknbVilk z?eVji-W$7?65d`x_d_3@ztS9uWP6EKc#MjpXC%36FXJ`OaU)haU6-?izIF`3d3cDT zbYM-z(1AfLQMw2!F2om1Lta3!Eqms8GX2GHylf)c7-r02dDQVkJ2cBWjQU;a$!|4< zGMh1_3oS}MOL^Y*=heET?)bHSsTYu3IQ#QXPE%N!rmjKzI6#r zLM+p&Ytznu9o)mX#2QaOqAp*RF?~+DpiD-xFh|KR=IwH|y0lkPrFZ8jJ0GF!#aGS3 z?Qrj)P3NeH%# zq&c(YYG<57aAQ$%tPyOPdDE@vF>r#FWyFCSqPur`Yce)Gl`8D_;r~W|CwvJcn&9#4o~f0ASia5LRNee zQ_y6Yj*G?52!o#s=)&am<=8FxkgQW#w?=lbXvAfLye=3&U1T+zKmF@yZ-hXX>NpC3 zJbPo8R1`YQa~Mu*N=2oD92bhNoCzMVF_;u3lZM$I{~FK;&>t#cKg#OEA>i(C`#IHguTfp-x@6{R zNuS*TFmI@L#`T5Lq%xg{g&5K1z8c7kjzhI3ey9zu|J|%@?yT(WblJPbBTdag&(Jn) zrg#)3^i?6ipu-JeFVdZ`;ZL{EDED)xR!^U-!iQQ&2OZj_mur-3oO|uF;I5sIJ>q; z(X=b_%>EF@{jmRIL><@E{I;(vs5>y&jfT!ANc=p-bP5ktPqMs7+?V>rUyk) zb1;4_kvT=^Cbcsle#xl4kv-L7J1oPzXQ*ZE$Xr7g&&A0#&#GF3{>Vifg-3T;M=g?h zurp9f5|IF9B35|q$yC%?;-?kTNa{>0{>_ZpPVu#jWNE{GnA3`H3?nm8?Q0#5Y8|E) zIKq)k@&m7-mih<8)J1=}Um&4>Jw~z%fpIF3KmvM*tu1(y4Bz9`YW>l$ZqDo^Znn;y z5!lxkZz?xz-?E(et?3wx#g`EMao-xzLXfuMh7q9SdX2K_o>Xc|4sSadCKKLaG93gV4ZNguW)Wft3`Av zCBqw^4A7ra-_(w~tS!cof`rPj1O(o(haf-R8XZK>Ws!(-P-qWh^oRE*MN^dsa>{7P&}^%BEIAa(E7FTs$pX%gMopmXD3qi z`M+6;f_F?n7zoC+XyMnpp%KW_zI7>XY6OI;__iq|pBM|LxBb!^GUVVAFvp z7CC#|r}>5$69>6zwdi>sV3Ha&<|1VtLN1>nZkgU298c^T8S~MY5V;bUhmVG#gGeQ4 zYh6X8dP7*TO zQyYpD|B`Q=ZqEdVgN65ECk%Dy2GUH_}Dq zZcmq+>RN7+u7RydlrP)KesyY8dC?M>r5*zgFs2(pI;(aaS*g_bwp7rZ_I*%vmVuTD zS4Gh$@+*1ZDp}S?61O?_R(po>WK{S&T;IqO{sIkC**8RU#8bDBGMaa%Vrpt@?tm%F z>+-l)LDBdS4Ii^Zz*WJ1lTQX|84`;L`kX$ZCIVaqa_#Dy_e!Xjn*JzX0+biQBtKMT zs^eQ7(heFouT#Ypu~q`?bB{|f9|}DgLe29jU~Z8%UexqP@v&BFgPxgl>8jhsy$%_h ze?5(QtZ(1?Y9Z%q$9J{B^UPa*`-3ALi#$KIf19X%&S-3GbX9iX5Z&Q{3EWvQoxrD1`jP~Kh@MfEA3cL)hQmLViNoxDF#vf_#$T+rFF0p)9-daULnLeFp=z-J)zCVmM1 zJ_=9QBRcoo4Au8ACfJtabv(|W!6j$7M;89+oqy0r#Q!l0nfs%;%Cf6u%>h~FRF+&Z zyu@7gjW2`%DjjJI+ELKfm@Y-*5LFHKb1Dc5(mg(c#R|e$mlC zX-%AIe(^}WU-y<8PCwm@Jn9MbovwG4nvbCMeHqW2Qy5U$s?r@Er{LxO5EPtrIQBpL zv{;xhF&x_`yd0f53w~9uR##DH8aI|D=zV^zx08?Xd=P=7L>gwQbx$7hNp_Os%9O@V zNHktnVOE$nVmFHluBN7di4ZZUx?oe|rV)`~Q|KfMu95V4d3;O(?V9QdyDW71dy*@F zI&o%^!g!5y>@#U4J!y0Y(#4%vl?YRnEa{-T*k+;AsY{4J+RVT7;cp~A2plzFj8r5Z zJZHnu{d3Zpcg^aKk7qsR_v`fIr)bjC?SwWaMk5rFo~ z-wS`|{ca=CTy;NfDJm%gdhtswFrH@V4C<3oe`J+IDP41$OHxdb+I(ccvy;bmSkLrg z37(<-a>{EWi4<92B5&5Lp7LKF4vi2kWnL&X|v9u!8bO1HysXJGFihXSa+pp53v2O&a;wQ~V-*gE_h5Wyx!Ea>>BWXNPYAh2Pxxe)^WU?T(WaszmxB zXHGfG7=t6&V$HmDjuq)Y)))OD#X=BN47;CGt=^%dxrVFu!dE+YY2RB4WRD&|BcS%@ zq$CxmcGMC6bS01!vVUl;noEWn58BBL2fUf>`kjkc<;R&(n}L~9YHJEU0UAMrkxzUg zDDVW+Z*K&Re)l-t(yHIN3&v5y-FK1+cMnFln7p=Bm{PWi-3%bAQO52(t_!S*kOOu| zP>71Pnto|-VL*+eb_@z}C;qGK))9wv;46^d3Tsug^}xEhwYJf@sS#}Z!`pjO$L*|y zok3L{2h44H_*3Gs-YOeLAdsf_QVoAy~r>2CQoVdBec74SHb96L8s>B|Y<15LpYEq>93Y*a)Y zy-lxjZwp^UP!UFIww!g{AqL{xL|3N5BqjG1QL50huI6>C88iKSNy4pysCR zWQ$|-6JoPk9r3JP_EU)&mcj^kd3$S}#)VhwRbCCQAAkP%{_Z@dhziu(3{kaC*)VevK<2iPQ=IuW7pQmRxZ>+5Gor_=GRV z{@D4KM4gY+Fe;`f@NJjx!NsH%x1-JzC@seZO7rO-l`53tSi^3;3~xKzoRhu}Wv%MP5GL+lIj38&pZHiV6tV1@V^ot} zJ$D_mymG*kTy3PX#Q&A=!T2W~Wc^Gu{hyO~^oyl1q2Y=iq+!lziKIqU(bQ!qeGq2I zPJmh0GEqFcw-BD}a3X7BvDoLeIwW>q%O!)Ot2Ws!QT1{?)1w`zMhZ*}=yJDK(z~?U zn_TgDNlGN~|8_zjsc*pfs}PyvFHl8kW7n8|uc!*44(RRatg5Sx3BD zN!?t$x*)=dPjM0hT~?kejl6(lMIzMn?UoF9M)^B+9_tDSjb_qTCw=rOgFZR14%3A% zhR!w?FW>PtSD?K%YrY7mo|{uWEU{s9%9nx3FpAleA%2YMupA(sFBqz*Q+0lGPN|#u zE1`_pYy9hF>rN<6F=!+9DY3mhW{aH;a6aZ_SMj_d1&%y=k+Z zO{xV^)Qwu&L>#%EXXjh++t=irt&d@9W@0J;SjzRIcad_cQ~GM$|Jp4uBzS!>zwpt2 zFijJ?Vs9zH*Ol#BrpU-Z@Ce3@O8aG`)|E5j3_edhWPu@(z}$P_SYe7 z+#@JzLM)2&RK9++w`>D1tneLZSIn42nP4=f(o(CX8&s+`PlJhF`$q@*ETriPYe(liC}?Z;dg1;UMx2L3{`X~IWn(1toSKAy*- zCGv&!eE*Kj3@P^jvQaYuCy9_`kh|g6x^NR?YTYJVuRI6bGyt9^O=c8g+$V3JHUx2@ zO))OE59gkZcsUnk)bw>#RRYt{%4>tS;AY#REyIYH$)kG$YH4n+878qR33;h}*rsxo ze6B$#KZ`&s+X%OQvkiZO!O}OMY-@}|Y+SFpq+)#Nya5*#gFczDf19aW)s1t7Cz##a z;c^?IEsNb&v1I@1hpma<65A;ZVx`JW&jE5@X}O}jOUZAayAGn?p#J1?zzU&~TR6Cj2!m(Y!!oK_4u&S9UGO;!QUyoMZyMF-3B zjbAsV+R&$(5tVD_&@etyq~k&fEdB+$(WaNc?Djf&G`Apx=%?rRGKX#OK!8SlNgRRa zCvBc!HP*ic{51a+J$;A+h8cvhK6KH_*5yP(dF3TIz7Jas$0Kl@4pk5sTcggEnR`ZVx&e`HN57~a3%Sp3*`7x1QdmQzRnoXuiFC6kmgPq1#UEL|ogAyM~J3LgL7cb(gBKs%M41Rg$dRPog}gE z(SV@t6Fi7Y;or7@yLywV-gWQLOS#-L$@wmUzqXI?L*~;4FTX-$fA828Erl|3*}-w; zfvh8DOxa}IgOpD)FW&f)ZNO|{nR-7dVf0pS%=ZJ$h{40(q3%+z-^HN)^-B6qDkrqZJN;1HV5D(9&fIouxz|XkJ z4GL2y&((W(0HU@^wj5xzZtfvMm+ehX!l}-39gQTW#Xv^R2AV0(;H7RM^4m54h>1(@ zyu+vA?%WaPiJYGuNAl&>G9#l}u2ugx3%KV2;Js%jz=rj$5I@uQBy;lj_icBSEM?B-64o$RtlwFbpYRtC z75CK)diqkhcUk5!xYpH7p3^QTs$Hj6v~i#S;muxpd9~iPiRK>*&3Ym6Z8WAfHAPnR zYej{=EUNV$k^HRJ)X^u#>If>P-qi1G$<)xx=5tOoA#TG@6?ha7?!uqTLe4j z^pi%FF>NiC##WHsO5}HYy-|PfnJU4EA~{Y-MG9NW8l5g-*IZ^;P_xByR;kIA{RP(LxTy(dhPLoITS{f{N z=GQV!Y3xeJOASTLKz|b39@g}FDBDDg%){5;JZ?yk^cf#E3Lon0vZ96gkA}vWG?9l# zwYo>$1|>gQ5?3y7&%VyktWY&0;P$rADk6$RM@-|_xuuVD^ARu;GRwaCH7Ih ze4@jdT-=`}Cm)uFjwM5gv+y1BTdKKjzn}=t(sCW8(kpwORNhBPH$GD|4SQGmQz^G@ zk}I>$!@Cb+#T!aZ$2CLP8SvU4%h1s|aA`PwaI*fzbm7C;2>kuqf`3>Qf!mU+$0zHY4|v ziQF3G0|YcCa!D@3@0)3;Jarjx{rR2Ao6`Us?hwsZbZHctcez5exAwnpfh7pFDiN>= z>ppzBE;3k=W&Lpum@^Y|My8n4b1_4xil{;XU~<^7VSjrJZvwio`sFhw2jj_}16-wp zW^$%7N&mNBq0PLY_fHCVnBH!qnVnuuH2Ae^#IbZF8w8VL<*I-Tsj#L-2c^R;c3#R? zDgWkb=u6o_TO3|;g{N|M^Y)T4yl!!(xiw#JsHB%I% z6S2uNOoml#D-0Zqs@QXOf360HBHNSKd<*@=maqku?jz{c&v>A+&Ynp=N?BtANLbT; zza}hf+(#b_^(yL)$|K7ArdqT?DLi-X6NxQVoJ{nNRc<|L(m68dYc6yjE8sb4=9%?w z^iAjJNxg|#r;Acj0PsT6CPYdY6)&-G*Iav4Cul2BHQ&!_uX>Al#-#2JSDl4`Piu|Y zoL_BU(9;Zhr(Wl^&;l$&yclpUHBRjNIvCF{Jn2u{M59dDT8s|h96XG6oONt=p|ZZE z^Kc(2ngZ#YL+yGmOQC`#}CjxUEUZ>v{_9t7vrNK+?BNNdsp_aS7BO+a7$ zrO5`jb!H8<*HArMMHrBP&4!l7nj9hGm%BI((?Z9l!? zV()}#hU@L$4GI>FUHiO*KCw+}_fO>cq};VSK6HML06lxmHVTfAbG^^k(pjqIOk9Sh zlXXvA=vqBG4qv(RGZWg!+yWJn;X0ZemOAT@8#7ORD8sF-v{ETVlg+%adF`;t7Op@R z?~`AoM3FAwlbblEp7lFs{q}#6yEkoO;>6iPKW|IF-KWcsWFGllIneU6B`F7N&8S&# zcrRQbJk$4@JCq|wwfDHvrCVsyuoPROF45otSRUbzkM-C>`EexRL|SusrefW(II>(a zvWbb9%%v(;lI5PD=7v>`cSpa38HQa=*sX?G9o>VA2}w7yhppYbq)1TSiHYIF$A@Y^ zTlQWgU1Z65NCmATyQ_-{ONQ4s%Zj${V(SCg`garqkl8O@J8;bKz`n~-y;^hvRP_tQ zU(IY*S907V6N&r zxK2v8(ikrUX3O*O^*$nXrm=$4OkpaYI%_!DY8WtBdhWI8U|%)%d8*^OO1+(Rsi|PN z!j@Kl4TmDs=uptHbbUi_T0wpyrEaI5a}kao%oQ7DUVt7gLC+Lcazyew8FTG19*KE@ zTXWv7+wgY)tp)g4AtTCsLJ*jYfBdu)I8zYpv)c~8jxhQV1Z$Ya^Y~)_nVD$FG}ViX z2yW@in#>fo)}+t_j?$%FPIfJkpVmm%k~g;}^7})k#;vYq8E0cd3{~KBE&%zv_n+L- z>Ruac+=TGCnm)xLjoITo6iOQ7{I5{>@dL+7^fGw2Bc$DiNyw z1y;-wY3J5eIj~fxCKBq=wOO_^ET{ypfA1N*JP)(cNB_s7+q$jM%4tN^HcqaL5_%$W zp<<=L2%%|5#pyl!W-(y?vEDrN*u2&D^DgX@gS*a*rAQKiw@%>TD^T1APfq4kW(;R$ zG|9F^?eXgNHt_IlW3`5(D%-!xFF$Ql5zJgQ6O}tPvn>XUx)_t#1SeKe21ZdnUDS zYrZ4I*(krUb@~Zqq+$%|?$o_VQ?P19(kOgq1|C;s`EEoYL~K0Oh|k;_AcmFPTjO|l zOOctb!jZZMEH!1rY0UFAnO`b-YlTZyU_wm|lqL+_>hFHvI;)J!_$Sbx=mU`2?9`Ws z_axcy4ByA}A2)7QsE2Pv%2r(kgtT0E7iVL6-86tHU6!25P#e2%V9=+}1e4ME!ndTc z^&7i{I4&9#itHR(nyC+y4y7!V*u9#D=%*i?SQLyt2F4^)QDovGeZyYtIQ9_NR5nUn zkY!M^xE$(uU2^X0{4;a{ne00S8{v?hw18)dN#AyIS;7>NB8u1QY}{~MHNSktgnr;V zMWvIOjZR&aA5E)1`@JNyUE0Q$@lUhn+#)c17~T;Z4yh%pKj3`-q7n zG7LQoaU-BwOZhJ>2h&i*&uBIZ+{jyDBNjR68oEKu&2(FAJIbd!tf;}60Oq`KS0j`@ zidQmxUtwVrsvpDGH0KMYsI5(5+oc^DI!u{n9@ml9mu14?A}f4SXl3>%y>z4whO)HM zZY**c^%#c$kpWxVnPg_|pttz~Srv+QeV`1nmf-DxtL0vdxL+Y_#DCxIKkPmv}pPa zyZV=jul{uaWA2L^9EGrogq%7A-^wrpvS4BIAB7;ov?*+S!)^bj?I+_n6_ z@XG9B_rFy{bo)6G^`%4{%Zt3tBE#NgsCqQWQ9?$2RDMVrrnD`>+%*L!wEAw;R5(XN zA`4)ywnNdDMbql-Rzf|;Pi{u~&77YzV(E9Ni>4B_N>eEUCgs&ArVT%T?;2XW(A^Lv zv%?wKF(DD{THtsT(A96}rwVH00uD;obiZvN3XiD-GfHu(u2z5J-k;|Sti;F2t0uE& z64y#wYzM0|%VQPd)D1?U#VdT$$*_u@E@95t6M-9N`IGO)JYjaa?Ea!bug-P%y?YMd zXXihYG}?qQhUe?2a}|rSS*xH>)*)F&4u1S3(z_aaFtZD`5wDRh#k)Azoscng3K2V= z7T!hn&x@(aQ!Wha%#$Bzm(I)C3bZ!4-WOAYH3W>4@dOA#$Mj?}eNwMyA2NC7GN z*7TVP2=DwcRddoF28SBSXdr3FIGkQ16bnGEki4^K=?EV``{@WO7tPvK@#{11SYSylh2zF0JaT{Sas}r+bBPxdFpXjKgzbVdk4AM4 z8P}IK!7qQ~(%3?Z7dT>~%c*tYAAJfC=y-8B_s6{yo8Q$FI)7NKDfzP9qLX-Vjo(S5 z+2&oG@oaY9DRYd8N|G+bj!ZVN(4Pq4uo%cw;!(h(%f)-!WL#D8*dLfGC2%8No%}Ls z9`(E!E%c1}a`t?BM{4d9`m$ng+Vhb~BLPr%7BuYb6<1zS<3=^%HqQAimb1`9O zg{X$YMvVQ{7sL=;X5ACS@qr_Tn9zP8O4dUAi{_M0eEvt;wi{ypZ#VeVBKc*1FMt$s zS{;N8vkKp-Ps#uUNFN3zGKrgcx34Dl$VM0I9+q5HdGzl#I*fhgSPHB2F!lrMgsXES*Z3w>RUBy18) z!fqt}R%r>~+{VlVzufes%bC0wjEfF&QKl|yRS&0cL~>aw$ah=;VQw-FIeW-W{+p~T zpRWx}%u|)0dE`yL>$H!wi<=$zi+R}kiR{Z{e)>U*o+%`(0ZS}oW z(fK)|5;X&?{#eNIHqD=F4V=s_FLU0Vm#9`MX8~g9qS+OcsD2`M#VO@}pHQKo>M0pI zucjhqWfzM`7>vNi?vGX2GFZ^vgR*0!ue)A6Y{jYET;c$%iMz+Z_d(fH7B8&VjM$ww@y3ey)#jNh>Rh{^B zPIm0bL*fq)kK0oVh21jAfxT{1Rug`S$#2+V*-|de8OO}2$CzmI`=cKoqUlrl;-g57 z?sO-h<7=*Myy|o74=4V6ac)(s(BV_>uOA9s=T}8KpBHl6yA=?{c+&$FM#Z@Vqo zSW%y7C4fEP6Y|cx;Y$D+hu{OYP&!OVcAoHm$-X1d*ZUYhE$b?J-@Uh@8`XL7>3Zx& zdLk3zAi220QcAf~Q=~JV0de^)e3CBcakC(fa{ncxggU$VR_Ddp($e|p2~)}MDiCa< zPz$&knm!>Pcj0%_to{u`*)o|`@dBMPdv*;WI^Aj|l$)c7y_Lzvy0`9W;^4hr#B7$! z@E=wSedCDMq@FV(0{j$Cj`bjjyBe}%6wzscJlwfY{|nWcoJEUl`6jBy$KIJw=VDw4 z;&=#jyI_kXj>M+vtmTn++lUk!kIs3E`8soMH>`Yc@m$r?ty8O9wp7OScHwu=4sO1Q zhoiY`s3Cw`v2Y$sD>2dge40n`+Hy~ijW9JrLUsrqQ+Zy^rHh>OHnO5&*Gyp+$l}6Z zo%!`Jv6U=~&#AM#lxOaHhtogTjOX8=K^{a9T~$cv+QQ~e-E=Cb5@&U}sx0ZYMr3zp z%Q407GAKhdCRN-`TxP7D9_OUlsF`@!p}RH)#Em?PtE#1u zq|YCp?Uj;+1F?ySl5%B3usn%&8DfxyrcTE zWnexX+K&(d+^N4j4kHndfl4{Ug-F3s$C3ruQHV=>3?c>cvA1RZVQLmR7OpJ#>=v{i zB3@UVq5IYj1p#rWW+axQyqOx*O2M!tI6AIvUz;_wSLkLsPT_ z{Ib}J3CCM{kNMkv>AHQ*$$efVfEVbWj%dy*~adM3+z5bx#A<#Z*1=7=GNHm*?9xL$g=F~nWJQ! z+v%!}SENcfe1Ern+&0d^$)T;0{>O4#K`<+){74ckW~|{{7MLa>!HS0=nObGk#Y-8# z_X~rYt@BTAFdPBgZ@6mamORZd5l@|>=_99JuhzMa8$~@4mFn_(dSYbD-OAub%Qbje zzpz>pYT?n_pyoorXI%XRg~C6nVTjY)nSm0YSlz2&k??$HoWs2O&h7)MYt65&19Z1MpL4+Y2!#6=~| z%S2kEC41LMlRr-fx1qYZCrk3e6>*-cuHx0T2x{woR)*)oogz0Z6;8dnk_3kXadyrq zH+PE0(ww(d<4e4nTZ`!bbZxHQ2y{@5lPl7=@S5zQR@pH#GwC!q-Mq1G+=2A$`M7k? z;F$I_Dmvni|7N2+`{ns(9L#p)9RZ7OduHuxiLlm}TEfcsL-LMqGNHSWd((~Qy^PD3 z?+pFr?vVj{nV78#Z?Wk4F|g)mXA_f?2jB#CkJl#Efmr}iL{4ROMP4UwD6vAMjn0MQ z(;;_YWSJ>BK_n6-xfuvRUJU;}N8ZuGN{3=$4Pp*;()V@TxTVu~4C>iRHtkDmAFB>D z)ca!<{Bv(T{y`D&Ilkii&+TajRshbC9EakTa|hK|WYJF}mz$24nj86vXK5;EX*W`6--o7^T&P4#s63Ju_5f7y1z5cbQ|+XtV@LT9U#jxG z3z-_mc%L~eM;VNvRM*$7@MI?1EFcW_`2ngVy7>0<-khRKfRba~W*D;k`5gd>@*evl z&vbMw`I)l)hA*8j@cs6oVD#fDbpX%|nL1;{h&A80NK=(&clV%HY`Lw=0j#MNG&4Nd1@2+;XdKBe(Jm_3+P=$r(g#~o+Z0AU@uEI zevb`)6a-G|9$gI{H|}dclSF{@S(~YkoA)U0P2qInXkw8BvyaPY>8&vdOEHzmt11Aw zj0H6D%3ER;^wRS$AyS*h&ByG+I1!exSV72NH^ihC9{;LcPWt4eh+gtiOu9fLP<@a>vT1kr>s;mw+e7cZOU|mfh4PN)>6nqo59aY z_ka+Lb%Z`>RrHxJwKyfu0@4o2vj9Kb5Q+lj7qQ$d<9JQi(jdWVTkE>VfRmLN5B2@j zWRQQ#K}=++(atTctZ8e}K485WLnU-E&_B4_2x=n|*Q;E$=~8E`nCzl9$jst0%Ckd` zL!vrrQdhRjvw>ESujbaOP^D3vNp}!@?Dj!hUX45t@7?>5-?R*y8szT%bLE&!T2mc{ za!(1NC+Mx8ahER2M&w};iIIW$V`MLr@!_~$79Z;!&9_%0a|=l;mI^4YR8PuI&jcK% zezMFBGD7N-O7JKgEPRDC8QB`*v3m3=iPDI zx<%D-vn$qlkUVNk6s=YWcacKCeVdLE0(6{^q3)Lx=Ola^0!h1;W-1cu%&E?!YHF5s zgA^yK?;@}s!T?LVl*FhwIl?A|tIK??bIL|hAhh?9!KyvHc4o5y&Q4+U3LMPc7XC2# zY0!M!tT5l;K=VT~Kfp%3;=sMakU#TtXK~n6a>8t)2R8@|p_r~0 zn?p~m?JSgI6%EU$S0)H&scJ1-!B*bBt@~r4#6b-S2=^wjcWDL0d328`l3A;^&K<!|W$ zT4WC_4583_{;Cp6N}Qn9T84eI`s#_v6(hX&=|vg+%u0Bab*lQX|e=9f=7ne`fm z_tcmLd~|IK9@qPz)=ifX30^DZ!v)v#(0HYc=}|sShbp=~d7& zc_mgWjPt|KP!&f4{99PW#q(Fu2$=?dQ&U-i@5QgV(bF3an+bTv4QY1@!Z-?%jrLd< zVD!Y0q^ek~u+s2JCPqu6njEo zaeLhx`-)5RfS1t0Bf60zE-`*D)C;Zp!Gm))pSC4voR31lRJup=GUM+1Fka6oN9t66 zQsZ9?yxdBlChcFtH@6oNYl=f0oLYFOa*0t?k%vkWJ4RX`vcC-`D|sTVZkgLfFD^~B znkiU=;v0RXE}C)f0;Z`o)OKI@*vzS}zd1^}Ib1t?j})$0ngJGXAw-_xwxm~Ytkhhd znVpV5!hc`1?f6~YcRp%&Ys)t@j?=gCqZS}fL94J+mcmL>ev}X*!9s&L_aUgKR`^x* z5c8&C3)_Ef0UwfRjFOD=KJiGrasK}J3C^*vuMf?@1t-o+R&K3ridHI<(-UR|V{9dC zDz{kg5SXbYpIXHYzxkTwe2Htbq~C#ka~!svk9wt;FieKs;x}s-jLz zN=Amd#G=MY81MbOgtRjqeYFF-Yoss!lZEdi+-o=<7AnOwm#0x~qO?M5FABm?9IFt_ z*E;FxZYK+kwp+ndzZe6Gt-KxRrXwU3CJCWh26-B_pG5`hftwKKMaX0F4ICbB4=#>R za8L)q0;6~*PwE{>8u0s49qrI1nfr{+7pxU;-Qq>1v)t_ihvX{vL>pWX3DvA$ik2!J zF78{MdFuhv0b-`^c@#elUTSCD`OAuGlF++ zeroaT+qw;+4*sB4a>pgqd7a`o9esA|`~gLsz!eJ)0gjj;Ebkb&frn$M@w^VZZMSes zZ@TEG0O;lbqP`Zdny)WRXE8p*{sCo#mIgEQ2?!>ta2#?VeHuL$%qvlAzI72XJ9oD9 ztuW8}UH%;zu!;^cqu5>4)>AHcD6~yPEI-U-rwG_NAcSQPsu0h*D^whWJWaP7W2`fPg42WCUkrtu2&2sw~Y{UP;P$x{(v=Y7I`~ zdZXPW6$q*wq}DCkl>klL?uYYblMYRw6#?T+v~W#(u<{`W_x zW5XN3eMQJ;4oYqNb#LwJdhO9Js>hUFq7F=D5^rr?A;l#7DPvq7a?tLLwdJ7}C{labdbgnl&t@ha>g5v!{5k6HTN!`R41NN#*CuKJkb1UDN$kaL~(6Z`zGD&*{#kg z+WvefcO~q1^SOm*kXfXFEirGlQlT7}hLKZkG(w_ps6kuLx4BTgem4>~TJV#RE0F7W zKO^KQVph@Fe%0ip{9PK~Y+NO?_%XsNb6zioxr-D{LK+-gZD5V~5KIGnx)YLtj{ zBUOQ>s8iY5N6a)F`8Lgek_D%=LIOT<_HXHpvbgq#Fz&>w$ktYtU8<@|Ikyl8^zdF? zn4{*cdv%$0HgT@KZ#ylZ_EJTFi!cpvWy*8wYRmhz(v9M?RsxN5jnqlzwgoM=`KXn* zPVUVRV+dXgBK2JQ4JDun&d0@LqS?}%Owm#TqnXMx%6UNh=V z+I3Sg_u}bg9@u^+#5!io`u4hPj=qQ_GtXoHc>yLR3s$p z;j*!{Ut~)86b*Ef&XY9%tmbfNw+KuH^5)z8QfVnj%xiAqMu$lUpTE)}0#R@@Z?-kL zn^TY=sRW3Tgefcfb}i+HeKJSqk8Rm&;c;(5UEty2_Y{zkZ{_|b`^riDtHzt=aTMTG zzUjsU_A^q$z;Li;XN`n8c!@s+_$TrGPLlMqW2VnE)7e*6Vz+NSU&PvnaYrmvm2m-t zcqrk0nh6r!3{?|0wo^_QNNV{knsF47&x_+*s+VzWnYHunfbNqdO}XT>EtNtId{_5D z{>E?kRZF;0X?vtPI-kSa<7IndC+^LBtmElYzSJlgQkiE<|h+-~? zBteyVwX&=eM0UU#gP$(4xTX&Uni5(R)ZDV;rNLo{yQ~VFxM)|G7PXr!DO4Aam0}4E zDOL$;GU%-%4$7)(1r>`fkc2jGUYr7Dwc%lI+)yQ{44oYQRY`kHO1sga#5>M+a)^}X z3Yj%7PfWmxalV$_+r=O=>64SFwkDO;HrJ+27f8kPYQm=5VBWSP4@sCDI|uMji%F5F z5^-cO0^iOjqtaPFB^Mq`owu23hJ#*SUQSL<1aQagHsXVfG#QzG0j#GfYhzI-V_cxf z?*aSgJKOk)e7dA&1MTp6`UE@w8Cll-b*5-!W*yI)E0b|28G z(GLEIuoj86VXGRa*Ut1tvi?!-(%Q)ETOePXA4yAAu1}Y^y%VCXgRokm*V)<71Vjy? z*9Sdg3g3eYlxX?l$og}q`3N&?cv!tEfgCMPLdi107o96!6y)rCm5=K zXiXRPX)rh^w2Uady)+XDBb~uaxtIR@cXGhU zZE+?Ajl{b9O~3rQ=chVN45Uj3ijTNNFg5(SRrmso9?i`Iwwpdrv}y$#O57#v21C#d zcc9Q$i4w!k3qy5zv+tTboO|+eYTJS4y&*ActrzV|g-5|ti#to&_|`V3Q1n!L=2>ei z@g}Aq@~H%w9hhQXZa=a1WZ>gk@@LYyFpBxYBKB)xi;(8*S^pHI)@d)#m`b7QTnfw& zzID(w(-3zKGpZcsyIMfd)CuI43o}X!AjF`@pw?%U7LXJ9V9?viqAL9Y|AP{(T7BOg z!QfK#Z(ngd7^wMZpN8Xqj?8e(ZW{~hcxniWzKwnmSHTqxfQ(G$qfFju%bB=K5nX)m zs`Xx7>Vs?Liq8_qtN&~nihGr^^vH`UC+mF9ZOg38ub5K1bvrb9hAY?V8ha1{7@oWUjTnmV&lNj-4jkqy%{%&j(V*jILH_v||@w_I<|_gqR?0q!QMD==_1{AmO% z#U(DQ+gmXW&5rSPKuRIaCA<*VvgfYg%DFXZnJlAHNqKH!CvR2j`0)V~Y z&M9VeKS--HQaS4_;T4?6=qH4>ryS%N)SXt@!F+Hyo%)LTx*In`yl)!k8n?_NG+Nzj znf4y(eCEET7$|HHUuUv&D`;kNRK(Ei&%OgQcP8lbP{~2W@Z9HlwGT}v)gHTcqW}u6 zV|=E+RHPKH`Q>-Vz%K>pem-tMXZPL`g1Vw4^@MwVzU`Z&h6>$IP+VTPnFp?jb^|*O zN=cXr^0nIN*^U4BlXWhV6fs3u4$eUT?_N|AvGZI5mqILw0u)D) z95NnMRu-H~SSb0aM3GmSzWY7xTm&ocX8g9Oy<#p9g|)HWzIM4Dy!(m%=>U0HiP_bD zy+VOGDG(H?^K!qiaiC)vtdL*}q&503$6^WVB2NsY^qoSM35DVaB2`dS|o=_KH zDWF_U0}o*l*YZ}1=L@Tu7*QN9wJ2EF#;1XaOo}`YT7bLbB&TQL(29+Deci`LKMm+U zax}9G-fhNFQwVA@5*QLdKWCq&zQyY{_RU+u+Ul*XRak?IrEgIWwh}S;lZBPl-{A{a@(+8_re%xI|EMR6PabTu!x2GbUS*f6 zz$Z}F)~freb1N_wy1TjUc^YLAhoXC9R|C8fhk8$nw*vVbebM|JO1(({E@7;aM}NcNGCwMLy0u|G)LTV zgayw}89&mh&TKo|b){K=8}*IoRpzQIqoLpljgpTJHj5Bpd%mN!l1_fHN8l<*MIjLh zsD@;mgAeO69E<8dO#ix=te(gTGkVX`rv%FyR_0nsswSt5@e5!0c8*j7YehKcl?8Yu z{I4py1f<4HLW+AAgzuDrQ9o?Aa;% z6*KfX!Ro2YM^>w8OaF8(*UTYYWgI3SJ;VBXQrXcaEla z3fG=Kxu!e{sA4*`cw17S7wV22&5bCVvwcP-xA7 z!|DZbYx-c{zI@yNP)4nRoSdy!=cuvl^Ky9N2oxCQP!V`;mch@`rlc?DE-qg(W?G&5 zL@O&%Q~tU~L~R;fEDkA~_HCH;l1jL|#M=RvF8#*)OpTH6OVjyMJ$$DhBPm$WWVEzC zAi%*%e@Y=RdDkD2bX^(OE%2IU^EO5!!34cAc&RDKtxVf~0;F|7Pv_|2Bad?_-E97F zy^zLfqtw1OIixyEi2AF(@}c2{wWq8V&!S_9b;z&~{cS}?X*c4kNli+wMccU3<7e%D zb6qwH6?1_Ci2LR`ht#6G{yL%I`dMx7Y*}xlH6V8)zebG@G;U*)i4fTPTTwrf6{#(mMTS} z54b>1o>x*Tvb4%6Dl2P{m`T5ob9NqJOprigWkD19i1p{r`(K%7hz47zLt+dq3PHd7 zU!?OE@Pkm~x#d-`jxX((ekYt4xFpk5`xo{{M%(sn^6EVFuSw5UpZ@mAf}Yj0DKOa7 z`V@-FmN)9dnT8+@RbN{~&e%-UoL#c$kI$b`*M%I1>1T}SCz>pk9rxg;CN4K%c0;6a zD?(%LSSB82JjNDTIAdkvwhiC{n@oq3U?K8e!@-WgT>N1g_uD+0tG*65=?|Dv6`nEj zS~#2eyaQL^@(LPRDYovnr$J&MeTejJp3f`^0q=^ymhW^96dc9t3BQJsdXh;k-8 z@ob;AeJrR`B>k%bgSg!c!p?7LeCiWury|Ywk)HuivvXms!+ssDE(W3_kAT(_@H`F& z7lZeAUm8n6@r1p}eG~fX4f5l+Cn$UR9)Radpjz&_U&Znwng36W!?W%b7P}Q5STAEl zO<)oTE?Fk+F?BVhy<$%4vxU~ z*YNNMI5=SxU4*}qEMI{J*9eyX7Y*!#N?5c0pJ+S;{ud1$9UZ~{qTwMn`yVv0kY1#J z+X@fLfwcja4CICXE*5b4k;~Bk1q5no4Z&W2`Auj5%Lr^g$0GloRDW&qaB!08tF7)Z zf2Ut@_u7tZ>({(nii*y2q6PpwQ7|Db_mq58LA z|Aqt0{{X_o;6GG#K!?4Bi{L6Pg_&XhFPf6FGGo|l+6g4W|Dfqd{HyQ7u`JPqb;I)i z+w9HW(En|XtE{YA>}c5DE9_m8XeCjAh`w}3&z62ZH_OFC>!k;~xx)7yWUArnva4>A6wF;Nf8KO^A3XqFoz z|9{Yg?Qg-_ZTT;$3JVK^{{eiUfmIg4RcQIYv{{6>(*M6nEQy8qzrByARx*Q?|IfgM zJ-}EhQVq)u>KAKGQU7hX!H)*Ov+62$$LP){alcfzvp@KYjqMwi`XO`W zb@-UeTlSEbnJ@N$Bh&c`JqEJaU8 z_IG4Y(o0V+f)BbEWX~(D9<;M8E7OIlPscA#c$v~i{Lgo%{ooU&hnUBUaoWzaU|)Lh znuqnx%Tt7%#~ummS>*LP%D<%R4BIs~-mmdbo$Lv}pLs$_8r-e8bWS>VT8yE<=ak1y zn8KOwEzO9J8V78tiU`Kcc2{J#K%i$u@519xI$?fXyfic}#QY9?9@>BZnzeEcud@m; zpNj|x7u3EC4G+1KWhb&JX;#8!lyg$~)b83sovrLJiG&6xs0tf>5m@a-<^xyU4S>6d z51~_=zbr3O8Fn&#eO)NGd(hjE@|Y(9b5RgTeRdervofMOhim^bl+A3KyjcQ?2Fmk}|$* z@L6%Cm)my=Jw>*z1A{jTlcr=vOSVJiLVdxEb2AxUe_H)qmM{07vmRUEgt@G&->A4z z9yjF_CUrsepCQ;N)3zx7PKttE$iY)5hj4f^Z`7Ca3ZENWy`@I8?{@tplEX=m%{Z*2 zIt%7?IiEwC#2al~XXRyA8S2eQC_`rZcYD+R1S?!BT{hFgnT5pHpXy9k`RbfO?d5Op zkWIHR?_}@{Tws&*D|YR{R<@PTwj(e10Iy}9^X9iaCB01o4arwJPM30Sz86XRjU;*C zpLEC)gQ`Nt>J>&^Ckhvba~dn>3Z-SXEt^(mX{P#+d(ArTyY+xV+XVOmXo*OsX+8At zNM6lUtneuF<&K#jO}d45==3LRtee|}^76}LCXsB_odCb^ai9?21jkd5xwjN^j#5%B z%?L~m5PPSh9!?xK=m@zpN^}Ng-`=h?$l*24je2hdr3tMhL$U)kl&R62v#48(c_pD4 zS99SBy=H9}leLXfFZ~!;4edQ0D%Xk3UkYdZx*bcFm1E@Xc_cbrex+ajZohD=6oNE4 zUW2Qqz-n&LHPNf;v`IQW@emzzW?#k^_%(^LjWK;o5)vCkVlHZ}ubBKWnMB@&{JK@& zGtf@{X<*Am&wW;PUho5lUD(ifz^lx1BIZ~Qq zjSEvFE5hR6!eejbXl(k0YZP&ixfaTaS$c z*?FxHeX#QuQu1Wl`{`ZIr`;}JOc`+KQWAZKusi3|ebW&A&Ex*w*2$Q;DX}jw$v{#GES-0R`uYOvk$Ck@* z4PNR9d>_GeRw;$sp^8iHyF|CnN5aJZ(+Ao4EDx%7jZi1%i_jrGXBJtBU-3XHzs=0Y zFe2crXxZF}j}Av9$|0vzX4?Wt+#aJ{VurBxCia28|0;`AyY6ssYadi#%a!FPbCgY1 zw?5^sSPRFZ2~#Cla1e`t4!k9Iokw@cKQcNJsy_12(c>)dx3}vEIydNQvK(~jS7g)} ztG@yKAho@}7G2=J?sb<-UmBaaljRc8>5`c5=r=9pME6 z6q)j(m-_v$$zdsIC=bdxW3Nr(=&S%W;h_~KRA z7vHT`E&hhO{~abem2FhDw0f?EODs?M1kD%g%)L#E^+7oN31zv5gu@=JS!HHlmh+Xw z8*Q0epS8j0vlvHycl7z(%9kZ_T6p^(p+u@%L%X*J^!2+7(>QO)&=K=pTl;;UATt0U zzEz_6&#Ddk?E}G(pw@msC8zrdF zBhzAz1>aE(+9rYeHJXHw4wH*pOR z;g7~Us&6v;T%sJ5vSt0x#?m|2ueaIRpC2&693fA5TSw#f1U@o|64%76>DmRfJ94Ab zeHy-2Iq?i|Xs_5{Qo>(*k-pQNeKqHT{waJ0dgy)K;`^k1)Nx(0aB_bL_7geKw-P0_ z(2$LF#X%3w<3Bv+tN~nYpr`K#FRe`3Z|%Mz%X5%pqNVHDbmC$mC;o7g$n3Q{R*2hs zUF98!PP!vg{5G4?RVeFu-EYe1iR4BZeW=M{tviXtIjOz9+A`hP8%d36`T5#~tMxsA zbP3u9aZUJ^+GHD>PlTb_7IGQ{rF^D(6!^k+7sStDtF5LW&VY` zZFN&dt1oRPc5x)<6+ytT`o#KQUBkP0(w4vfpOl@hZ||?0U8v?!ngH!>R~U5OcXaKeGizl-gUY2G z_pY5Lm-)d9UgK%n)d_v#`i9TJ8@?gmd2+Y7=bPTeyRWU}4Ko|g z@l4HjJ{RQYWvqGgpAl6o4_$|R5xXPfP49dg4X~`r6@YtUglvmW^8aqm4?VH9j?$}t z01Fjzn(BA()%fggHI-$V>fgiL_Dj`b_XR{}X16)ZI&i)`E46l9_~E81d7fjx)JU;^ zRk5-NG%%$pHdgS?p_*oC^f~johbF8#Febj=xFX^PJs#|jfu63NSx^prbsIQ$)*sV! zRku?Cb%*$Ei1AQ1~8r1@7V)k1x*~f5{r6K!=r}V z>N$BSU^^2`wFNM{If$6Q?p-&&io|VGL2StOITYvEw(l;sXERfTbn5T!0ZQ?l-Dzr%Tf zZ4}U~?AI3A-!%v?9xg~G63|jpcNBh|zrGZXG0mOv67ocspQmM?K0Cgs*F0~bX9M&f zu1UVY%O!=9a?e`dj8(^--5!wFNqrgR-B|FyRv0RV>hJn640oLOJzk6%!o?Wn1n{k~ zN==vfxenC(JxBVcNHO?HU3!g3*FTl`U9Jzq1pJM}D~CvrxN!v>vKm;i!k9DvkF+ym3Mx|Sl7#EiweQJvei@Vwtb&kLW+mL0Z0or|aW6xsH> zM9gTO_M*QSK7M$;GZs+_jCz|`1G_b-=PiL561n!Z4)QAt+2x}u{SN-5mZiC@2(^A# z(%tQqa`CCfn>H`TX79v=bg>T+NkW364S@S|7TEkcnydJ`%N2`j%(=cnQgIu{$V*7t z&h(KSSbs_6Iu`Iia)ppb?Xi!P47Z!VedRG@wj;E?H9LOAxaOrDoVXQ;mzY;T-HjFg$^ za}h0XBRtw)ANMwpNKJx?t`xFGJyWbSn-iAak>;KJQ41lP0%Txj4#x&%6v~E0>MK^J9nQQx-fU{k_397uF{4hN=KbCH@pISs5>1s6NCq|^l*~_b zvUKSc8rQd!+LmJ>nY;+cy0px&V5xGge&^wHLIB7?p3>;uZ$E-psFL*49B&?CMvxj> z-D-ckq)ZY7wTAlNqg#K4h-1e3Vtf&?l{;})h)wY!XLVXLSOla(ef$1OEv-iC?X1S{ zm>jo1BByC?*loQh4_%%F7M4z)<1tp)4ZM67Up<+D=TJ8Vn=4DND z_o(B1PNLzVRvbL%*e=b~eOM5i?QDt9J1Tte>)Z-Xm#uoXxz8bl3r2*Q)FcD2(I!)` zo>tB|2QueiQ{LZ{USmuXORv>mF)2Zq;N=PCL244`g$7+ZI_=N2j(OW4GYv|G-m=4d z)%4iP#KUzf(b(2}2_BG&^LbZZE)&N zJ=Nyb?*Mkuvv*uQu|FibJj*x{SdbpC(_qR(5AE_h*~)vg)2VVIBIbLO@{Uh;9>vGM z%rGASf4RbXa|uKd^nJCuaNT#bRi%v;Cg{le)O64lvT5w{L2}yu_I3>y6KFl?8}2Bp zPi;b4Mn%lzRiUl!QBD7AZ0+1%KOOt&C{ zsASpIhCG$R^n8s`{MQS>`h5YRv$ICjlRiA-J{$7hr)N# zM(+eByKTFbI+UbvG}~P6wt3rx9PXNbPMPAOkhVM{SZ$Aa6I7No1bj{}ZM<@x|MCD? znp!%aAXn{S7Zpowy8d~>2#yLne~ivpwFEt-J0HrN)hNAYPT#6}>~iOOeiHCeQ@j5T(-1h-zSR@8BA4FgFo^WSoXgrrOTlHV` z2ZUb4kkVjV5eujnIkDq-irJffa$V(Ni6El!)^D<}D_}-|%lhq$?3!_srzi?Wa2o(3 z5)=v$;7p|6dO2;qZvQ*UfQ{73pMB1=$yRPB5pKhb|r0L1|4~<%{RoDHJsSjkA z{Eu&XU6keeLfxO*E`*qSuQ`sNpQFoshxQOF^Xv!dt3uQ(wOCCnuRvbxZI0}mIjZXq zs7Vs6m0VnmRe%7DpMJ-a0Te2Bsh$1oO78(}3Ib4>q*p(Ge?mZG!P!6Ngsv-*%(j@% z@iQmuIVZY5uaGxYrZu^`j>%A)TsXA0W`5B&V(w2%gF40)PyNo~%pB`-!Nc|G=)G>6 zGd*{<&BLF|@z@=qdziw%uV84~?sn9FU?ZD01(N_8zNquTj4LbbMU-4I;o+rzu5aFH zy6o94{j{@lS4!uDsi3+*sxk#eM!(yOEV9+PtEn>2BF5T~xL*-Voz^esZ*J;o{R@T< z{8djgV5;Rd|W=xmZbr)$twE|0ed$wveSQfCb9SJEV0Qu-i~9%S>IxmuU|@rA*F6Ra+6+A zq|0{Nr?V)5IjBpj++)DD!23og0w|vjJ{*GCbJSj@`7Ht`f))C*A1-G)tRtqgOkNov zfBU3Mf$-Zr?TLwh6wPC{`2ud2H2pA|J-3=nrT_PYY9V6XC2}p@_hjfaxG>Cw7cZq`Jki!52 z1MeD+=RD_opXdGfF$%M1&)RFRb>G)@-LdD{g`=svP1Nxmk;`~ z=25!&Fy_h?C~c&ulV~H}3u1EXpudZCH|k2&}pxDa;$Ry0)83)H zD>xuNf<{*ucS+{iS|$zAh;L-0SF8Xew7;-?G*kXfM6I-@%!FO z5RK3QVmWvxoHxkmKM@n~hkqhOgh(;0Ke1&X=HHZzLI(?4*TE|Y2vG~UTz=~NUlEFI z%RB#xP=Eve38efT^7s?Di838~17cu=>lf!c7Zj~iHwdH~X~>0gM2~+2fOv%cug>ze zSrFXOT)#_%E7a$8I=eW*ZM(nRjk2SCwuqdlb<$JzqzLZ5iHKS9C3cL6h)@E_ymT%M z3%VYQ3Zrv7Z}}eX&VF2Urn|N0CcL%##tk|sJ@TGfX#e0~`on960*Q||ywmXT@Nhh~ zjMP-o6*lk)(t>i? zz?v-4cHFL8P50O+#3yHMJo%kch$F>xfv9a6&v659AVm8y}F-=K`ClUhJRvq&GV^m+Im9c})dUzn=H)K~rn?d%@5JZeBM^A`^b; z#PIj=3%gx3o+XP&Hm@c8s`F{{jQ+D-=nl+Ju&8g#L@80om6fVy(0ki4Qh5KJx2HD$V}Z8(wX<<-?Z?KqY`LfsW-)YJZLKdLA7g}jmQAETU&$%jcMC|K3Y1(lK~96giq9`t#kx0m01@T}Ttpp=0r3|j zvfhvkdhb~=M0w~@d&g^4DCV(ZGQYjC6?}GR=*_(IWPiFyO8UyT+sd!1 zEQa$GQ>HLkZXM~$(dloMXjiVaHytf_GFF-3Dg`Z$u@63!;Nmph0j71ROJrHS@15+Q zyK^^IRox>J1Fbpxr{mMZm@k~XTr+Ez9VboW{(6JvxoXZv?~Q>qk{I<~5g`(NkM&%Gv!CQX zC%pzmMMYCfR%ge17iX(tF_S8RKhj(mWKRVUjs**|_-u`DbTi_Zv?`3U`Td%wY-F|q zJ{~P?RSuqmRpZr~?e7N#Q++{Qs^5f6bsSh53I;F{Ek>E>TOS=-iZ;vfQk`V?R&vi_)we z0jlVuMW2j2MlE|0kXO#*nt_3V-LAt8@Tf?yw*xAm83ezn@5MpJ#ZZcm4C_LT0W;52 z10U2OvDn$}u1VtSBp>y5fk=YsHdasK%%xOgsfCXsGaULJ#CV@RU{YKkV?N3kL#>~z zX5`mLG52Z^uWf9|E%;v1DB`>Lfh#8C&1_1F*qT0Qr#&B9`H8A6gi4t+>o8Z-@n(mA zb6-u<($`O~4_1cm$HWF^av|fi^piYxXwP?pe?^LkMvY~48d??Q6X2xz7SbKM32Wfz z@WlSe^0ZtDV{4w8ot3X9>v1g)U*l1;pPQbRjiV{zSNqUfA>l{abl>OvAR~sBb4Z=I zDt*DcsK3OZrMaXeyaG=^K)^DC3D#aHl3r9w>$QtHe;A_d<-dQ+l2(3pv_UT9W{=I3 z_4)Zx%V-bO?@@;&$sivO54Go3Ih+@XI`J%qq?D%h=I;Ials2ZxXNGECKIDpEp-`HV;MN6d$LC;mFyF`7<{5_Q{}y)C({U4M;X*OOjk~`QRk_NP?EH zgCzs3vqDkZGRn2un3R+hHw{EfHYw8!6&k)l#}~BZ~31{h%1T(mq8DU;nXy1 zvD>UnsP8^xU>z$4yas+N99xh{W!wjt)es)1EXBFJC*&+@wv4tJB2NSvM?N!Yeq(i9kBx6s z^z;-W^_tZ8w4E`}uODEkopb1-c2&`%J6s5+@nEPMeVpb|C?(0~va>*a4LiCvCx$!i z1rrk!BhHugyp)367}Mubx6(q^bCjwxz{5U%Rhh?M?fK-j7iQ47(|r1#|K~fDsB@46 z5(e>+4`X3rfg{qLMr7d*Y8lpRKDizngFfeuMfvsf+kQlGPcWV2vPa#G`?&^% z9rrrO>0MKDDjx^Fk6p`*5fqs>P0*9daM7M0m7y!8}w{C9r}uJebbH;FDv z&euEykrk>Ffu`n}ks%1>a>|twD=Vu4L74{BSib0CClzF9bQq{`7pEcp3|1Sp${tNE z=Z9r6i*JF|WwV8+JSBAkF{+_G6_!x_dmR+9idlDbTbfh}!~Ji|l{}hktvG?v^_~f3 z;c={Bse7uaq@|0J$jzukyoD;dn7$|69i|uiAiBovL-IOvkT1nx<>_orbFO7e60I6K z)|Kg>3>}8w&NP1e^C_PET7Z)G7CXKbl3LIEa2)QP>2>caZ)~PKiFP}4p3QV@Fjk0E z_85{2ve4Mq72_fjN6}`;4znX{&&+7eP0$BXUdzRpD#@QuSDATp)E<8@t zS(H^`BdGJd3W3NRZ$Z4JHI|A+bHTb%`E1CunKm6yPJa3{Q(n);<{7N>2M^} z=@eEw$_V@N>%Gv@+uH@xTl(;&t}dRGs89JE3NA^L=;TJ#wegk*$t_ zCOm#zP$ZX2m;0mnbbjaYfW)cfp_^clcBPp&%-SGZvgl~keuRc0Lm^CqDl;=#$BQfc za9=gdyCFL}!0LmBmpN3;YAdHiUQ?5lXXx<@BKVlbwmE-JXlUrSKu!35;mqVtMN?my z1<1!4dy^udoV6)f{aT$tW|g<7oyDLz^+}sXox=O5HAe6R5&%HfdDBvrL=H7Pv`(99 zd9A*9gHE2X`X61Q2#zBDkp#NafE;yBP1iNn8Rej5FI`=#jw}Ss-~Wo0(!efSut&()7kyd4(~H?c!Sr&YbSFWN7d4Ru>I*iXFER2N@_#BXnu< zvXc31WpO1qh`l`vRig=;x$`88zNlYILq=p-q~i4vWHaQl+?s9;dLcKp*;5Vo|Ih($M;sL@e0Qseo5jg_Adm4u@|FYOnA@;S6 zW*qY@Pn;8tecsO06?UW1ODbiTJv*y=y+vF3PPmG#K@khjxYH&DI<9xkCKQ{;I00bH}^Y&13V<1db;y; zWaGloxNi&_`ZI)H6a^o3GLsuHQ~4la&WLvvCRwCEs;XKYEs7e`Q*9F1o65?{N>5K0 zr(T|`b1WQiIzL$*rIIz#PjM!|PSL zazE5*0|GaVv+n_LAuEbNll!P3M#Jd5=VB8GxYeRBX0Q^e_hw~b z(Q9yF5qaCZFm@(RoG(J_*vIkr$_YZ)=b$LJk3MZhzPTptjL~BG0c7PFE~|7)(x*&U znyde?Z@WtFby#drEp$bd--v#tK&R2D9jB*Pwg2IXpTS9w)_};-E34FW0msLt<7=_; zUhcDi&`d^0M~^BAu^d#Y>%?uC$1Y|%aJ5sQG+2}x7PfU__;*H<;;eQlH}tDA0A1RI zJFK}Ee$Jcxvbcf&u?Q#k#oEdlK-2jLStwBg_!#`fYyO<&>y~T0nzFcup||vYZ~_@t z^R%Ee`GE*hA;TLny}T)wG|m*QodGc>gvEc&sq)-()f_h@juusy8*W6*SSyPhjw$;f z)r*uKZE$z5jVdcGn4Kp!>O=NTDlNatWX=s^5eq-<_CsSwczIqL?YjpN(4=L*_w=_y zK4Xf;iUGh5cg$>5%-XT9=xa%Pje<%uX??1SabrzjlE6?Pz2gy~VNxS)o&7l@dO23S z=WJL#G)VM0Ui{065oq)D*%Ph{uZolONS?y0)hL+aD;ZgXTRN3i<3-TiZQ$kdN0YuN zDrO;8y4uesycgS+-5P!?1TIlCNFBfuF`8u%%-q}Hx|1&E1DzopAqy$I zwOVpN;Z{i*bJm*#(R)@S6<9xjlfxoa*CzXl+By=Bu8YkZ3DKXYG*68>bIH|9LV8rX z$1gP&^WqIMJkFORN>h0+wEgA!?ZF!u)#Mi zuBJY31CY^oryzIeBrt#mmo?0gwtOogcp7vXeV#*AS63Gjez!VWEt|Re;1J(8i6=8m zFTvwi1m7A-G{5FIV~(DL1-D-jSb9=%;SNQEB1d;ST0I2 zPQl7PmB*T__iOYcd2lZ-R2<8^J+jYU@?w6T_X*J{Tl7BC6Vw&HI6H9ap4F)1K|qdo zy4lAkV`#P~_i*co^ZQ3{h3QO_^KND6vyjJf+0#+4d2s}3PQ5cH;NJq@T_?# z3FwZpWtRsUdNUuo#?I|AVV4g%j5 zssRJhOq1jzS_rX>U+imNG&~in^uxFEATCVJsTd~0vJiE;BS$UHPce|ndud20#XZDAS7w4`>R7D%bS}ISf+SeEQ`bwn~ zVyDxC1HuOi9^F`^KPW@{s{-HfwiFVqMiD4WtCI0hUhD>oo%KVY5|TYY9S|AnK?zcr zLaulZRrz?_W_WD=qVx1{(jY%W_jlAR=l6ZrD8#StDyv3VX9P!{lbP??Pq_};j`REo z0}L_4v8@<|_rE_}r$c^!7z-&WB#Xj&lP~q$2p9=1sE*v#?m54vj0J6by z+R(KBgi0}tkZtbJP?8F|LH)-eJbqtlNsvuKePa^GKORL@gkve_UVfa9q3@|jk`V#vH- z0vRZe>%r_%Q~$lw+NS1aQ4Ur5>gmx2J{3+e?Vw1@#DW$7=J=N54mO6(IEqZ?@4$() zb9CL6@T^>v^>7ZkLlDR`#;T;*1dt00>?I@fJS2Z{$6BQ&`!#sb8+UL_^IdO>mJ~TR#9;U?#TTSVoeAqrn57SLv;XBynDY|) zh}X6I$abr;lQqxleOj%s?^PaKlgR!`k3*}Xu^Gt;L;M9l0u7ox8lNW~BMm#vDOa8$ z?-Q4D(_E{*rb0E1W`2UWswr10aegj92%(vd6YTQWXL%-HNtDI9e8pjH#eI^8^W<&i ziJ~cg0jAZBI*O8XQ`PWTu6N)}yb?o03^+XG$XFZRbcPAAPEz zEU{^ZV0quA+z__$%~*o&^qgPAbwK*wJ<#h ztq{;@&`&{dPBv`UhgprI`Mo!M@npcY8L*;J-F~%&S%M0$*+Lh2gJ>Z2d?+Fr3wlQB zYtu|hDVn#GO|2GTuA*xCyNoc9n zq3;xl-5bqU&Oa*3&i(}~u&_7Qx*rK6 ztagR9UBKER_c^BrKPqdz!*1?N6yYutO+n(FHRTY!g-*E91R<15C+dm+6)q+CI25dl*Ku~jAlI_Ej+tWw1N~g2yN2hm0kqm|L(`7q9 zpVE34ecO9|++%v|Re9n;P^Gw`D_8*eZDidW&tgfx(I++IpS<8B=cvldUpE2G#Iy4F z)XUlsUQ|lrI$X=(Ogv5ANSPBKEOCCH;3M~dufKu^iMRfAi!)YQ<}+5P=n=j6y`vk%$pt&2ZwEfSWeDIrpo1)VjS?MO+Hr&WA(QV* zAU**0TFdM1Tb_7t+ZTg3Er|Jm(t*#Tfo4$VA9%c0h+>zpTOST8?Z0wgi6i*YZb=fW zM+pr&4t&o^fsKzLH8xC!xWBg~IMd$6*Stq)m73?WMxXBH-)8uO$u(0Uk=+loRYrXJ zD(!>s=wJi^d+Ya?bq=OUudT>=B30D6yT72D(lHlwsv+(4Kd3SJ)fuV$9ietE)(9}@7+4G zywaMPc>(G>asokB3M~<_@a|JtS=ryVz)JY2mN<_p@|j+I*rN71+XLF_8{@qQzJ*;k z;j(7rlhWErX6=e)V4l7=#$b8M;LZY#6`JuFgP=!7NeT}GgZ2T4pGbX0YceM916J`VE**P9{9vb32LKas(*K!zj_W+Um0x zCxbrvm1c_0&WC9HXhejC=LB>t+MVgj{ECVZ?tZki8G8@4Dt6(%Sz60kT+5!zbi3^{ zoordlIdWsXxVNWg&3SkLc8DTk)ShXVk4LDW5y()CQikaK!f&+8o@{=z^z2jwE%yV% zVc@nD2q@nm6j2!>D-Oh!t=4A0oZ@08SXWwo%$RZvW~<@WLX#&D+(BKAp}}P?agELN z{*M6S$7GBcx-~XQ451`aYCoMo>CXK8JS{MA=yg0xb%qwyTKCaob$73uh1E=!=v4PK zA4N&i)csDjX1I~YVS;0NjZw9`WJdqq4H@VNN|f#{k%7y!DM^Vw^kgM8tMTIelv4jn z;5!ng8SiwhPp>HP0-JXO*|@p6ZKgi^O*8^)aP{idkazFXll9rCi38ir)7^gq2~M5( z^746yK8nJJBoLTWYlJy30=_w-rLC%B=4Rx}sBbJTn!qI01d)}$yc-30Ubis2c?akNgAuN``Ab{}Y-ZiIF6WY@$Do7)T zX-}-5i_p-Lz}@%XcmqT)zu~0sa#>-yAc|zmTh3> zoRJq%Yd7x!NCbPa7E8xC35#;NuzRLC?b?0E)d7+9oR|Tzi!%_CLo^-?RI2w=stkDo z<(7T(iec!`T4!N?IugC3f~f2=33mJW7E`D8W7U<)vkjiP{{m_QK|}vrAk3gF zyocTU&Y=+ogY_n`<>x#KY_9qp&NcAT`r{$6r^d$e8G~IF@%>Ca`zq@!iuwvPSLwyX zGOkS8Y@-p^Ar2ATo*1Ey;cN5d73*cG7Nw!@&3zDSO5G0zbkz&UC$v6i_GW}BXCROe zoFy%^?g}=p*+A?}X9ShB52F#k^+XBORdr;XyT46znH&G=DoMbwxSCBT4s-*QpP{3j zsl2wyO@kotm7JU$Obbn{sLsvJwUObxy8tDQ%j#M#^f*=Ij}?x%VQLTde?^_OigY51 zDskx-FrI#*iWuLeyuH08C9i_G@f0~a1N^N&Lr>;8JYOu0-N;|$t`jJT^p1LIZM}&G zRsGP=u&_u#QD-47O$`kxWIT$VV8~ky4A{9CDHE?xZWP^{7$2XWeg5F4rY4MF1HIIN zRTG3&s)t6?G*}F0eY;bycwYpTL8uv|70W*KQ7M%lZG(rL)5y@VSRQU}IbE$JRR}*sSa|yXvT|0t*L|MJ%!q)OB*()KMCP`kU>B1c*msbU z^r{*ohNWrecO-OlbXe<_ZwUq=5C{+rPk}T~)3}CSDb0=)O-95c$4GER5mP4g8D0*? zgexqJ^a_3)R6&0Fs$ZW5qbc^tsr#6!v}%tNK+15l$6_1m8OSlP{FJqgL)qCHcb}cs zub>vnMx_HiPtx3^B_QI$oJJ!#4nG z@$m4_MADa6l$J(thJsBY8!jGqa^DGq1XFE}2ZVP`@F^azFSySOrk`ldE7tbS)<|t`-Tm4Q+DlNPE1S`U ztlt9+)7*ZBOzOE(Q>CZa)fXCM#9|qrYBetveM&}-8T7rhS#^b~xc+jbpZDSW6Zm&fl7e=$uU-jHHDDMz@%siC+Rjv2 z&d+2wyM6Sw><%SmVyGA0X*|#e>j(tVZKpmj0b#edw^!(B&hd5(aT$me zjO54y#_5#8tNYoo4SBe^=yQP@RTlH!o~x^J7%$S4k7vFf+zx2Q*4IFMnDik6Aqo_g z*&16WHn#jYfD;r%2_BMI`5-eK;~NWOqbv*_Nc^*L%-6hW?K!x=nXeu67s0<4~yk@2I* zqU)kJB0YO}?WpC#TQ+)t{}+LFJmd1VD+Q=fNi=dZQ>rBwsWeY6y7Q_!$gbEH=3tM+ zyfQ=M`4uFT4akm5c=BVkt_2W)92SrPBax1s=ujzkEPjSJRj8g1EJsF8!6EPq#~^&e z?Q`yhXBsKEQ2@5#%!2Q;MF{jDr7xKp1|nr%fMI>A-zXaMRx|Vhi^07~-;B`X2rXxh zW}L%;HIWUIl$1oHFc2a)(9)V59u^NV^{9WY#7`Mm7`?~_C*)zPf0Z?u&s)oG&AL~r z^-A$#Ir_oQ%}RQaH<87UMMv~|Gia$?+Y^G$-hh>d`={twg62wcMFsh*H-6qi^z>cL z9AK?f4vL;m=t6Su#qU>zM9?dz+bm|LvIKU40%e(o!P`pwZSSG75)u;T=Bw!$CUx_`TlS{eTEJP>x+;sG}Y@=&?$Qw0{1;uS5RmY#DKwpCJZ0 z)d{r@V0s~017oO%XMGe&#l#4g`UA-cJCbZ<_V@SAjy@Xlm!AVkC`Tslfl)1wLxrMh z>^Iw%Mde|e8Slr^zd$fj8?&-$?cjv9e(eDsXri2Rcb`=2)m|Ge?JJPI0D!SoOBzFm zBuH~DEJ8f!D3-c+kDT-|Z)T3&K-TSIA5^c!{3mp!U*5`+G(H=W!PFxd0j5axI;A1F ztrWKYZTE!UFjzGKxF&W~Hz;z@#|7Yw=2cD>^6tD3K_eX3OyXNCe?N#-+SP@$-jlIqwL`EtA2 zU&_kfKL^2r!or})1z|t%)!&x^&Q9UC{|Ur3Z`9$WI^EpDf?b)QIbM5!(i zFy~JWR(D*rVvT@o{u`_^!6h{?C6`=P_EyBvqG*E2Y z9P6x_r7gb}KxJ}NSXkA-K>9@!wa*U(bpuF3Y;+t1m1&!2M+eb^^0M=P-59k$8CvT4 z`U64BEMeZWFc*;8(T?7Vz}fHAtjf#))5@;iea)>VZV7lWeoEff}p zk^NHMQ%lx}27m&J8emq}t45WwtJoj;$;->*3T?gMziVe2bHA;)8pv;}(*JVjQ z2Ehz~#3}usL63$vFVUT{Ku3lCYj7WcKRK~5e2J;hgcVf$zovK&=vyae9~Qyx{n3Sm zPnLIt_`jy`cDd{r;p)7eb!n?C!N|t zN4je!W4_PpZyC||ly$W5ZzO;=E4e1z@ubMccdH1Vw9z4>{y*9fy&f1Vlkl@!)S zuX5`Q`{x0@FG`Xf;i28q%q)cq$U5r?!w;CCQn<;&35?YVbU!d$PW`ttTQ?+Vs6a6- zzR}cD^xj}IW3D+65-VufYXAl1DSNG7D%VC6;`9$GJ-N)skC&yZh4EHhHY4@&G zeKGC`MIw<0z{mq=lnQk8AVMnO%9|P+!O|9SJv(+=t~2XT1^{$?Vq(O0#s)-zHz&)0 zS36P`L&57DS4Vm@i(jy4R{+LF3y?HOx2vL+?7q=M1(~fWZEQ?^0gN2i346Fo0czc6 zKzlz=P3KwIuV&;*HGQh8_mQptXkkr_Dt5~M<1iE#=4L+DAJ==x`-_)smPZ?zX+sSj7%QLUA2$bKf z)yzz=l9T6(9M^QE@6vi!IjZr@vo@U1RBV3YC~Y3PuHzc{!)a=m4dj7$Vv~V#Rj@W* zLt8TbCY;MEb_iUtV?S?CfGac3mgyO-nwEm7pzv(k{tU5UH{5 zL+O^Bj~_o)Ryq!*i=ep~3(ghH9+Vo(=l|_AO%(sP)5Ht=kJBXZeDgw);v!}T(hTQn z4m_wH7?@L6$|Crjn$d-UK~#~RPJ^}}AMk)d_}<;yn zvF`M8_E8J7)+uoXl7(1I$8A`;1Jz%p z?cUojneeKhrpjZrKLS<=IXi^tsXqo{7dkB&6Abdcl3|8cpqW5S;GZ+mME#>ENsYLTt?AFhsfjk+@eF*xfGvs z0Z>{sF+F|IQu~W|uG!>>*eBg}I|+34NV|aQ@4GY7_f<$Ru1o~e&O7%KcU}AtBEb0Z zL;jW76>w7t03DAyi0^2Ixirv1kC)J5&aci0fZK^nlSDjuA3@M5rRQ7bV%Z&B0NMg= zfK0NyuI>cn!{&6@r2A)Cgch^_!HFVBJPZJQAa=mEwi*v7bc>6NJv}@G1qE4K&i0@4 zt-sx9fXq5|lZKI|o9C_7BFe>PHeDCaP_3u5Lxkc{fd1qomT;4JP>`iZManWw7Qp%+TS?<}_=SNC~H>*e>Lo-_v*&=v__pbg|_oS4sU!VQ^K%hQe z9{8tw5)S$j{^}A3GWpvWhQJ~u`>&HwU3Q|fM0d*tJOc+Lwu8_7-N$KQKHnb*G$1mx%6Bgrc+4!iU#e?cb2zo-1a`ZzrX`Jw+l(B7T{+yxmwYhUnJ!>aY| zZ8I>Be|O6o9U1uwe*GU!x4QfL|LJ`RIw`5Esa+oUcbhAaSO4$%=jP+Pod5s6QJ4L6 zLANfnRR*{&Ha`CHj{ZG83k&-HzG_89#s57$R4t1DGXB$8Di0(iqpz}+=daTm-e3k7 ziT{V(QDl1M!ng7_Co4~&lh;R{r?@tOb9w2W?yojJm%K9AT?|%p5o^EhfER863D|^u08H|_npPN_eH>+T? z;38iuCW$s34+zDrbKx8os4#H9rDMml!tiaoqXWLk=mxXz&0B5=ZH*!f3>^9S&wf41 zyfPA0*!bwd7!sDoioQkHp1)nIFcl#d{SH>xZoyg39JA1O6%{NDg8uKZBe-~1fYrX? z_IrmQfeHhIAi@$Mj9km4;dpyK$WVZZ5oEEO3%~zX6%>U&vq1&tX##`Ko?|!5TL5Ev z@?`4X$4t-?uc9q}B=`ne>|B!20A0842I1(2Nol-;I`2Q@1%LVYuq3)l%gX?=5&gD>6H^Gq`Z`Z{OS#RFq106@r zG2Xljrxi=b+(KV3J9?Y5du^*LF`mrtq#dl{pWj7F^U2X5V?2i$E&1X@!@5LHcPd&? z5tyyww=YKGjHLyC%7iq+a?B$psY}z(W zaNnzem^CAKPy)v1t(odDOgeFKLJZ!^mVm6e@va4%^_xnbM7|)ma6i@a6Q`wGOaC{2 z{|fqyXnLhF7ns%gocZ*R5CMVMvJX97vVnmLB!@wr3tbmhLC+*x8rwOJzE5nH;e%*X zmG*EMbVYROTTPjd$k}fyn_V0aG8~NEkAYyZ*r0h^km6+N#kJEC?*8RR#cGFiWg51N z6K>O{5{WFW&S!faEl3_1y?gE}k@8=ji<`B%YYt&hF{IY<` zt{WIX8ds8|J&`{!|8(OOYlB*@-NGC^q&G;V@PR-E>TcO~iN2yI`>E8?^(MISOa#8q z9=&$+-cnA-RkN*qXOL;xG-F0 zfsjw7=Hpffy=0m6r}S@3nhCFL;PB7)?b&pm`*@ziKO}Wb)o2tt^rbPatkSc^qhQyI zxKv9AxLiN2ZdD5H?|agsdNb2II2_H^O?*fl9S?(W9?Paz4j}X#WJl>mjgD?<JrP-d`cxOa=p@wRp#1ocW zs^OL1X_dm+n&I;CjEVvf7PH`3J;3Z^B$PT@H^k7q2_TvAB;-G2YGwc+5P7?Xr=vYC|P0Fvn0^~OPwPu;wfv73#1luQ*@nf$gJDoFLDZAEUbW_5x6>(W+6$HGgQo+4Ry_X%pLpGb~oKZcH-{{G&5ii$Zd zDk-(Ao%b{~FD;p8##J!KwwLCC>4<4^cyZ`pkT2C<5EaI%D-~vTZwOwfoYa;%JUr~Q zo~u!mi~pLUtbURUCJ@bipQiOi=*rb>q`@huoKGFJ2rj-Xnxu7d2KVd@qF z(Nkvi*NcJVds^NX-UyRyrg$N<{+`pB$uur=%BH3Te73%G3eFu$48!ApZ)~!R)i;Y_ zg$i8m-9uNtou^_91*$4oFR>jL4MbZRCjOKZ2d0hRrVQ6N zRlb-P@PV$KtTNU?lUdK*T3B*_8e3H+fa1f=37+($o4nYeKNC46 z`vxORwN0E{%@5w$UmWL~Y|l-Uc?rPxdk5+qB{L#x*UVYZxJ1J^y#>cx;Yj3IS4dr5 z&sgCwDHGC^r9wD}z!RrnMzxD5@2@d16x>!(X%~0+EWeI*70A)POB=u!KO#nTgGx|1 zWT(gALeN>hsk(Z-LcY+dBS`pJWRY50IAQudS@_i2NUpYR+Mag7l22ws!7VbqinoM^ zzzkCwf~QGH-lB;9n5pzsoY3U%74(VmTFyOsSIc@(JLu7gj}Woc0_O~(WCU*f`L5epg14~>any=VHp6W z6pf8kkXT%S0!?RUoY+Q`M!$1+m$NP9bg$TnmQR%)02Qx)wMpjHK%WH1;i=p@ zx~x0=ey}W>65&#r`dV9A0Yul@j3XlT0C0s?BO>$+=LE`wr-=jVLpgIrlKLhr1&AIISS9Fa2(Y{8vmjLe`mOgN`nNxbA28$p2SLRaM}PWnp2g+9 z|N4>|Trw2!M)>thk^&0CS#)bI*~MkJ0lag`mJJzh)dhm4(9Fg+!(M*-Y4j!0h-;J^ z<{phLo+#|@@LRH-y~cJ{DlCg(Vr=ZS{+P2j2s2kP$b!IS43fnvxyGc6NGH~`uD)LI zAgidz+1a_OfT8DG$ZamRPUG@4A=iKladxh*sTncW*VnhVxBuNSFfdS4!>iLbI0&lBdm5*JPgz({3Ip^Ul&6G9 z)+<^gSw?JiVqWH;h88TM5E7ofjWW_QU9w?LZ=F(;$k(e!g`S4NXV$6LYGrn)nmns6 zU%?xzJn)`?hm8L9%IDWiTqU!JjTC*YpR+^ZJ!%ovYywvVXI<1s5`lv} z*M;UFQOzfCRK6tg_vn$>!2?v@T7qO4JSEHE#cxSu^#~-MY<*I$MH|U7%9c#FUaQcu z))%HBr=l%>`5NUO)kFIv(BkqH$)Ywb`H153^(ABX zm*FDN!8w#-1*9F0{M|kQHd}j1qW^B6uqpT-0uDa*Px}OPwZi47|I$k$=wvU)hSPQh z9CSk3_qP@RG7>-u+vR(JU81koBDoX%tA_6Ne5}G*+HwUDaukzAo{70dR6g?9(>c$lC<%*8;yrS%g2~OfKp) zR<*{`&y9LrcTa3`#pRJ$up#XAVo~aJtroQGr^@pvVz{r)&2aIG@H<5Cd|eVr4kvZK z63r`Y{EtFH9w^t2$c@Ux4&{+*Bxl{b1IN&@-M=+n6{_F%#NU$2;~vX;P2tE{3yDa080v&VcUf6yy}sm!zM}Y#W?5WOsb%6d`D|7|0Ih$E4a0TyCPmp z0T;?qkAfvY>$R(?G{6f_qFmOV;;!W=Z;1A)-*d*DUUG3w8A9N*Dj zy?KJD%1B=@q{|vnQ;3j!V5GmpfvtM0Q1o?yhuwQ=@I))KZ|!!?xAjebc~)Z?wc~v$ zwTfXlK7;zaAAIkJ*_m8lUk@BAr?05S%c4eGjywjUiAkw$d7Ds;M-5YC-1C_#HEewH zxs`Ff5ecQ<5%GJRanh|XQt~vJ4=`R<@v-+Gx0?bs$8HtQU6TK6shm^*fA6yvdw&xw z(cigQW{XQd@xbw_kBcD1X{vEcax=N)Dv`*Y>kY3sfj4GGdk+f1qQd9TmJoR^Oj=LF z>Me5d-83a*3p$@g6=(+BO#HsdJ~qeJ8%i-qJ(Oj%f`jdWJ)ehLrzZ!rU2EI--@bN8 zJ_2@3Lq03^>Ufax5`|_l0S)(oPHb9Q=4z(r3ABV8qpX;+ujp$MybES8aF+;&9idXt zj)9QOeRQ?8@wsW1vtKEtGN$8RVhpSwrQ`PmlDDnJ8oOUNnpWNg4LN>`NU6a z&^wO+E0-k8ivI?9W>)lrZca@bhL5y^H#BW>S0prCi>DNE&pw^>^ zibu^DavJ93?3xGVZc-@GOMZ@?k4rjoGGW%AthloMO|uQ*VYV|R$j(BREqM8;K$pC#s=+wnyuM*NceY_z5Ki0+)O#<0=4(#QaMi&))Vyx-Nrsy>q;+RkDE z=fzX&71z?cTrI4ftQDv4!+z!8C=RKFj4yniftnTn;Ja<_Ed0|9gZ!scpMmVVth0UMBXgSr9c+Cq?y1;>fqWuGLCW~$RdM$);m^J6o)iSwU4_eXmaDPHh&|KNKh$Nw@+qb^&JT$!57m*YAr<34p8 zYbM#=21x3oCSXq(fxZj|5Av?GX9!>yn@h?0<0UrxY17#N;-_fa8F zC!B6nQ8n+HR_KvAuQOD;jQQ$AX0lNWUF!lhiQ9DZRrxYMRpASJ8L*2P>Y`jXl!T6)2 zBqbg0UwVn9``V+&Q0xYu53KI&?~gw4!p@)Vnac}@MY*wZL1n`Y z326y2rY|3j#jGK+emyvqS`S**&_F*oLAr+5sbHpjrBI%;<(*a*dm`oDmTxP)#Z7k~ zb4Jlu+?8zWq$MOAwEU9e44~guv)}xQ63Ld)(>iZ!3)EwYTiDvs*w*wU7c&8-MtA5a z0*uQkuw?G{MrX-P^gm~?UVU}qKb2svIMdo}y0|DdIm5>tcbMoMJh#I)4f%N!fh~g& zap}!xcuc<=5o)ovhi-xDu=PudNy{QmReQZvG#h-omfVt?3%3 z#ob+s6STNPad#3RP>Q=2w{ma^?vSDZf(EBJ6nA$hP~6?CANM)W`~3&kZ(n<6&#YOq z)^)J2!QEOkX6hna;#?n@YO>9yzE%vrJO_o|)-C3P=yd0<*G?aAV{NKUZBed30f8QV z<0pQ6BrA*`@8mf)dz2O#Q_Afpe>t%x{LRfaT>g=iY-G^_gp(CJSbhHl+j#mDUjhnS z73uR_(;8P*Y?sn9JYnS$TCF-3|6M#Gj2v?I@4HW?XpoENn@s6y_CZ(I-$B*ELN~vk zojM4PB|rtL2rB_V7WcvYxM?RG2BjkeUh|2e{*kQG+a;u%5Y{*MIeNptZg?x_F+3!R zzq0)x9qeWod5U>))AL-Z(H&G?w7gzRVdvKu=955+2W2DS{5U>k?N{G;5>!}1ZJD@G zuyV0t{qqpn`Drpv^;2G&<$I@h2Gx#3%C>NTi3ssB&h5phLGlK9GnPifYmif}9fNcz zVb6eK-B9V5+F$#=H?QAqtW3e^*?er?#ZEm&9Fdz7{CoV^i>2ROTL4OD7vu5x?>OU9 zg|-Oi&$l%If0{p^v)k@3A3@SjG8CAkEut*0aO%HuDy5R*>mxbOX)*WC022)1Pw`YR z=6PCip+|jEl}y^oB6T0lF)HCmmIl-%fm5nCxa!NOI0RT$^DoORtQy&0ky0@}eXQmh ze?Xdg0JSP@5#ai?Ix&0as%lu;{S_f3f5aVQjvw=91sE)F zn#@*)LuGT0zT=Z4Vz-~!`@gdU1ugl7KVB8R)7$EWf3bkZ8i`c=#Q#@;3@OAS#d`Gc zp2IRpKGT$^EH72af5lN}f4FYwr}ae5!oYmvuQ36-J3X>6{76Q%FxR6Zna8CB>UMEs zKQ%c+RMX;nNIw{;XP_^!xI0daLkH65SWQQ9;^m${>9t$4xY}I%JbL!A*-M&~_YEOc z#Vd;Nm+fF=l{rHtDuY%hBl6sVXe+Hd&M!;8=VJoqb8Mo6b8#Ss!fi%;)^Z-eDw?ths#Kl z&Pv7`*?Pe-l<@|_1e7n;ro=d2K+W=8J<}7fA7P>S?uA)9hkbppgUl~4RMSAq#R%2K zG|!tG4JU#u6;UOS@P=SD2hHyn&rKQm934* z^O<>Oo8jy*53ptIsj}ZY+B7xOG${LX7}*@76v+>MIF^RKf}*aZ0UK@a_k_f?%|jv} zr|vfqlAesIW_X1a)V6^F;d#UUiX?02PPHK%a=Rz{C$jsx5UfY#cS!+`>P`JJAgF>A z{;#&15dit@L0luH0$N$cS70)64+-Pa`@>FTV59${{XrO)gI6XsOE@i!0q25hfeV4I zfhOZa_fs-SbV4uc>WH|lPo5XQm^?jh zDfjVm8+vQa^vl)Y$L(qiK7t3S{)dkF_yii!eK>5FE-q9!<~VYH?Ns8FGl~+8e7j^u zO%$6fm0#$3?UU%6`;F<7jaMfrE+5f9upw5tbx}*ZR~!ONY=Rjd#vkpC{Db@*?*3|UI|U<0LY#PM~Zz@RpW~!f^Jo} z&=l!yyPs3nI)fN3keXj%l*C3AWF2ie0{c?d?f<(yLBLjnlv(Uu&&qzXxP&;Z)*uu; zo2a!DucVcx&A;uX8!EaDRb;8Mf8Y78){(qsX>j`biUl#iPzmN&%OcFX=bOo}hXJOZ@Í@Cd!K&cFP$k#i)n~o3~IvaYFM^ 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�!{e>Vq(qkq2*6l6XGYalvokQ%hrs)PL;sj}n? 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�v{Bq56@q|00TPA!MWBR(o&!~&`zhjr={nlR`@b2M7OPF*G|SECcyYD`qVZN@Nn09*e^`a0C6({OIWDx(h>Zv1EFLji2)XXa;94 zz)wx&>-VC9eo8b{<>suD^7gAE4A97P=?b+eWFSYzjv9*jZ*^LwsAeM#3 zzDZzjzL-znaNWVhUjhNW5b(^-o9SkaS#eSx%=Gmc0IR%~^kwONaf0r?g@|7e>*U6| z9kykVm$ZK5kWxlV%>&6(5ewB74^^QEX-K(NpIqp^2G4sn z$xTmudw`y8Y;0sTYE5oWeu)~VI@=o3x5??5U=7=MiPLlp@R1A*`}YRaa9al7$LWvfg|RE$dGgMyhIuXr)~ zYf;n=^0Dyl#%QoE>zf_;fhDtu-*pg^Arx^$*y448;W?Akh6oT4U_$!&xB8Kb3{01% z#4w=wG5tO=iW$F&7_B)hXtW&1uWTeT6UkgYVv@#4N9iCpwVi0?IkDwRn$w?83O#Sw ztsz`$Yb)oANvXjDG~9wjifQElK45-We7uKzXsc03c|Pe>o{^fJC(U(fBr(f_{mHMY}lRggx~i`B_S<_s>-JZ-+*`0X6q3C6*&VN1h}L>C zNsr2*&OX^xgqmq#3Xw2^18v*JlFOU!W{A>52?fyq%jg{ zr+C2z;5*hQ^!aWsSJ z;rW>I(dvEh}WWZpHW5Fr@NP5Kyl$OWu&pHY`GyNV%oqTm}4C_tOuoO7o6Rx^&WrvYv=>)6kKqC)tje08ymnbOtX~+zRKZOfzJ*A3b z)R7Z-TJI3oWrH~)BDLzReYaBBm^kt!@x{)NX{s31Oc)9j{qUw4^#wQA`kE8pp_D1J zEA4vy&RI+auCk(RpB3G1_f8DkyJe*7wJ6x7J2E;7{0YgJ;ACwJ9rlT77Ik@vkQ+PR z9s$(8u8Tn&N=n@%Sq{3%X+$4qr{~->DK<^@CL3(1M{?vhr!2+TYh_g}r}znT8tU%X z6PxYGTL%{_kv1CEgp^dLcjZ-A!>WVe&K!1i)I1Ren00eotv+$z}LXAqAgQ3@f$7>h03xTw2%L?(g z%NK591iJFLsdx7`M1Q=P)k4%lC#7|&hU1An>hADK2eglPF&vx)T4YRhS{#%2|ZOn-(H(nbJ)#dl@(+>cQLwh#i?*oyQ)kJFcPl_c2m00wB& z@%8Bus)}OzMk1dLX{EZyUh^&cit0I6+SVQww9+%EBG0qY{v3ZnHveMiwz+*Y#@Md= zDi044gq@h!)67HB^|T^!{$j@|*EqMx1;850v~(9=6C9^Zk6NQ*ZAn|up1gg(Robp? z*UMHrp1$F{ehLo~uC$ zdLFgR|9vi)CVy^jXO4Ynakl4o*4DkzyW6oJ5LS$jN5WsornR;O6Pq6!WbDVHf}SAt zvTET)jPq+VEYf|`Rmr?Agc*tjB3pj&vhKQomh6YI&;k6dl zsZXr$*)QK+{snQ29%`@Ode5VNxV+d~kk^3(1$S?=HM7#fa7IH_trT{dje`6>~nwB60@5$-}q76U|o6Ol&Vmg7{46rYK z0yUdvb)?r6v!;T=Kzov+I*vh$KNbKO z<+k>DYzD(9Gxitlbw0DU+P_5znzID=SY=Pr1;m zN)LZ8!C&Po&^NZzZj*OOE2OiG;wkCb1+`zwY*!?y@%2P)u56~LGV@Ho_5N8m+trw@ha=d6mGd<6epX!YF1GZ!xS2HVrc%D z$hcVibaH;bq!A`fKM;-FS)PEhP{(1W%0qa)qB8_ovm*pTxg&vrfdx;5R!?+SFGn}k zLML>%0(WMt&ByZYPTYgEc)ZiO?e&zFX1>&9Ndg^wE8hzVnn$E*JYIa-9JzL}awMvoH{dng{{u#E=PjOx=5Q zARtAWa`z<&Dq*t!DciU=l>HP1Zzk>chjHHqRS?6{5f>L9^VWW<3_j07@tXDqFZO|= zoniW-m@Za&IqU!hVI+oV^N$aew;wg0v@)uw&Stm8OjKDCCejMtbKIo4QPNK`@jqfe zER2l1q*o{HNQ{2DJ6b-8cXHdYeAd6=NnDoU#a>3^9(0fODAM1i6a>U{OHMbAJUxJV z6*qJ~U5;jruKVe8_u2pupMxH2j2`mO}Uq~t~JXYJuhc=Gv&!>cCSg0QnMh8`XWlMBRQ zZ^|pm z8by3Npo#_VRu`iDxS^oT7@Mx0hO6(*Sid|e6tSNDCx)Tq6e4hWa+k60>$a-f3h|@> zvNj!5+!$?+6#_wIa8dpK*LRLN=k(lM)4l|*2!g}23qa^0&wu*P3wP4S(rD-jt983L97kgDk&%%WDQz0B3pGT~Hts`)r2(wC zC^A@prS#xrR86P%Z6fv|c*;50-8FToU@iMW(cC*x)cDdUlE%iA6kSxWWRn>_rG<`b zyA@_-8STu}AWg;Ax%KID5D=uAb_YQ4-uV-)`_Xjj`yf2(wD2P!ViF|nz2~GtR9dgD zt`3K0RAXmMS6UO*=OAGTAf$4Nijp|2waxOl%%oC=L3^`xnIZh{S}W^rI45Oy6n%Qj zfithujLofOlJyv6={cu)=m=A2ocp(`sw2NA+TRcx`MGzsVv19gdNa;Yabofbc@7U*V>r8y?WvZggJ-Dw#r8a2KGjj zVaKTJ~9}?u9s;MxLKF zsJAjp!{I;qIcc0+m}iDSRgs6T#2Pz#_##z|Xch2LSw*Y3ikK{{t+NTPz>Vs2Bv4&* zt9xv_5J0IEm0MXEi5h=(zAE78PfZ!|6Kv;2g)>TGbd+rp9z zK->+WzKFf&mPZ`dwzHzel9kN9rd5Ik*9pFbz`hRcLxzzS7ZN^=FiW3SA>{+nYidLB zJ8xXSst-QNTygDwb!6__6PE)@dA(newQt}?^u;h6K*nEYeQwpq%~!ZQQfox0hGZAP zcDT9OyYv-#50GFP>TH2#%BRg8*lreK8J%*EjQHX7{AJXR$E-f%@Zg{zGp49vVA}b* zyl3svlsPqVbi@7N#hB5W2>m2rRt?J)9Ntaz>`EQf{CYY9micwDwye6Kl!9^@bEI~9 zN8pjr>fSZvj4L=enQpj6XSidyR%x8{(99~uH-Xos4ElAwk8=?dW0i{Lz_q?YR_f{! zMBt3-6W*U$S(9eZVNZ|#DLHbtDmGwqrAg|qf>Xg z)xOMxc;aFurB7x>5zgyp%in4^Btm6&)}m?Fa0zD|r!9}P^30~G$@65CJGu}*Js;N! zK833rCyJgHk=&&Nn2&8(MC(+QXm%_uE#bB~4IV%4iGS$T@Y z2~fPH)5KfZEb`w9t3#A^uwfzj@A&9>0@zLF@mSv7F7K;@R_Em8l$VEZE7b^4)^|ct z?L0rP_QVRC+94VuA|ngm)`an&!w*eOO;Z_Bp(IER)JL2&6V zgH~;XQgM%~sUsv|GCvlT{>(=^p6~W+>*;JMRtf{^8?RMWMV)Xse?p`h>VLNp#*Pza zhfuv%P|yu&kvT(v;82}WFM&ql!eiH1$JW^$_oTzo3!oi~ii$h{+E9K}+2@Vw57gM+ zx5ePiP}QpKeGbrO4#20Iz*kKDZ~!3blWv{Muqo`VzUthVaF!3aYR9)dTs5z4|q*Si6yL}Wp>-!_qyP4@iupr*%o*9F(Q?9RiO zGrmlAR5Qgm0Z;z=9uV_+ce3{jM2xc@N{9<_DAC{MEBZPgyXejTr-)WoSlBmFc>@+0 zh+#zWM#+>)3O|U5D@;9hsGY>^i+(FfbRo90FOP_1BQnJNASri5!Sz^;5KSnz8_m+5 zW0RsxeXto+Ci5UD#7SJ9qxDz#^*}hG3;3>FN3URapD?(CL=&oF!|_GxAd7Z`qx>w) zQGlAcTC9Eq2?NMfkReIRS$t{v3 zo1(ti5U0bY&Cx`6zP+Jtmy5`8LJ!_H$lM>#5wb%9!Y#WEXI3n+Jwzae;JEMHQfL8s2WPqhpY1x5)yv<|}#5z|Lh$qHN4JJa57efRZR+HSyRwT*^SdB23ZK+8O=b^v| z$&E`QaQW8WJfVD(QKuo{87a?|MY0|byOpJ-Y!I22l9DZO@2{2_Jxg^e)2MKJrsWlP z;`XfpHoKa93C}J_KYN$vK90n)YvxD3O2j&z5{eg6Iyg8SSxT7KEWTAH6B9Hgx5ov|qwqFv6B=E8tum5XQ+Aq0PkF=EwvZO7j{)ypD;%Ig??U z!K`D^4!8E8Tis`UuBT+ow2;dgp=7;UX-|RErH5v%5{DN%#YFAG)*qmqH!>^N!{xCU zdJx*m%B^0SSm=Kxn?bUW{Gn5Fm~B8?cD z3lM|Os$Zb5o(W@H>Z@%gCP5#4joc=Tb6Xq>R)>v|c&pm=Re`G-s0vWi%a7FFhMxJf z*(34ZQEHm>SLVPByE^u~ItG?ohSNP+E}%?{8W0;`6E1sL`_GY>tdnk5B^A@z)OdsA zn7Xmn`)0KH(>^Dq?%~O=&rK2Vb$gYF>%)$M%uP+X0PHHyv;8tqiE8_NIQeqKgWL)vD@ZvH{T|M03nCOZraSNg2Eis5 z*WwpeDsfpX47j$jRUiT9nz}|?L;T{0)v@WP%M)&6s;)fr>#OCr0^5}+1=!ri`Z}Qh z9NhXy2-1!#KA0#q*tQ<~`c!z$4Rq~ABdVrs7K>MjCSgrNG~DadA05bMrgxH_FZDIj0B= zdDc%TWn#W2UuDMK*!HPR3QUGnuuPVZ~|o zINRL5sKM%2or`xTL5;Gr+s;R)pk9n4-N=Ti7(EO8aC4F-8uw0H6J{%L}DMYy;O={W{CA5n?=|$ED#6hHO}aE?62rt zzP^1^Y!1r9r)}4H?4ZtY*5`Mm-C*5Zo{<>o4|u{m@>_tJu@>i z8d}=*X36junWX+CpDP6}W=8yWr43gko<0&dzw8oTRh_@2>|0mSnBEWO=6$acHAoN< zHCCiHpVP3tay{^~>w#|otd{}VJRIVShTe=i5ucZrH|M%p2vDUc_2|kOkmTjax7f=u ze-51eb6^7l7ftc2J4i8L1F_!x0cApV3yIlFaQ#pBT5yInjxwT)!QBQ)VHz45Qko5$ zMX)V;%J5F4Wgp=Q{HP?VKwR5n&My;zsxsqz;V&kf_&|5Tzz14YK324r+xn76cipB) zT)qn!vm4sqs^W$~w$1?XYSv$e3Sr_z=25IFSb>e*Za{UM`DO#8ID=@Rz)3R>aM%TU z61c*JCV>>|P2!u@_7a*$3gsSx#cKx{+{SY3Qwi_ipzz2@p28Zh4S2!U{dj^-pFe-z z1xX~za$K3fSV&Lzeb8M2Q<38&_RIB|@3$niig2oNPL?;d(i=-~BV_y*aT$==I(H-M zOWi8=c+O5KhsNcZL@Q1a-rfcT0>eQF+wHb1==4l-~a@$pt#r*_)jrx&}YjY)Iuac zOR@bzdQsW+{fRu)A?dgTW4vzR0v?|)Hv&Z7H5(stoVy&BX7@}~ge^?1g&79KO)Zqm zkxp!2LUf%7ChiRY8j7{lyDyuP!jqE)40$m8l|$r{`4gY127Va+SQYl1+F^S4SovkV zL;QMVoilG=f!Aci=E12PxKbD)E=k!$`v8e90hbzJoLk$~^E;*Yb2HxD{fH%6x~o)| zC;m+T_mgr#B_)pcOM0W8jTGwD6b+8Vd_((9Euz_;i7fRuG>IX))oJL0f0CNL>c6Co z0Wb6n_(>i|lg3Zz-n<9ebvmTFq9P+|vdU6Z$0)zt_*Z(u`xQ)YqIP1FQ{cp30^Lah zVtzhk8A*pSi9G@OpnSB!w-^6c`sc^2zAkOY37J|YWn)6xB(1fUA$)v00aw@-4xkTT zylA@OKd;^bz7hem{*OD93Gb1h`}3K(IV*w7%d_3_(b2)6AVLlg;H$G5_s#suqH5ta z9m)W9_e9aDXD`n)RffIih9hB;6iD1}j^ zqkhf9BTVW(QooQjRoK|bb(OJ56!|ETvEkWCUBn16a&M5jn+3tZ zrU3P6hQF}@P3!tf$L%Qqg!q!gvKV4eSX+ab7f`tYJALsSyGPU3t1b;SHK!#l*y%9n zB%0_TuA(PM{~dKm+zAHq7vO-2iHQJlfdVUp3U^~|jT7JsO0yZtdDd6Mfc@YNS*(i@ zhE6;0zV+GfUV$^&rD0Kf-|!zk;qpWWP4)J$<>vN4fc0J|&3PaN9!wRGFd|t%-iCYn0u0qu(b2LdTerK@84W01j!n^|xczh?f; z@3UL9MVgE&%aY56>o|Ga+W~PJK&XBr4oa#F&%b6J*?Nr(*rZdvTjmU2P#yD(&?aFs zQ$dhdsN4TZK{@^g7HWi5PM#|Wur`1rinMym zNP2*VS~+xGuhPTo7q~hH?t~}k6+Sq-u(03;rU>$yazW?NwY8KVEZYo`59P%5@_ruM zVSj{1|It&a(-CoV&dr%{c{=(d5+=hXKBsSDK^0HTPj|^534GIU0(T6P{|{}@9pJg& z^`fRd3$k`^X&}CRbBhoFzXHELJS=Lwbj8r8mXFuqWHaVjwxH%MDlF`+?G?u18wvK1 zG%zqQHa3PrFCNPC3ObR8-u|PhdPZ`UkqbUNx7wGuY0s@riZ}LV`2SK@G5rOJds%^C zm2y?OF6ZG1e0`W&DN|x%+cBFY;$M1-B!tp|$112^2BjPd=(-YtkB3Wgz$?$SbeG|q zF31T-;(*iEjk5;iN|L3Iu?Yk9=QEvELqvWoq>Z3Pj9?MDyg8h=mK?JTKr(|=@b0}I zT-RAGqz=7R0&Zf;2h6`jzzylEBme)CsuJ^HU|=t<%1qen2<3y}+YvdXET;pA6j(+; zTZv=%e03cI^<9*Kpvvt8J4w{(kGcxkEWO{{rE%BA1$VQG?+E^l@{*@y6dwozzdx_f zo$H4E01;m{5KMR|$N6g`zc@?cTYdek$2myiFV4?TCnV&sItR%PMtuo2EwYOKE<+iT z$UwqNf=pOk7CpdKtSYLilx|xx3g;TBs$#WB=!CLVP|Wie|6+8)gGZ#jJU_HX%TAz* z!UfgafKz2d+eUeNY<@n$bI2yRE3og0&V6@nsf}wr$|UjhFD@*sWg}^6aN40JrPi?7 z9e{cMM4Ejt$8BP#8Nm>lSQfvqYEXD`U3B5J+8gh5wq1R|J3lkyj;uGCZP@ZjGYQOT zJe%F!sFibS2RH;s66@>h0|rt)EfBji)v!s4=CuOk9Pi-UFD^2?q)Ai{6BXc03n*%oo8*Vdws;qE|e7p=~ zKi(F*#e}YW3+xPtQ~|D)7y~MhruVa~tPFk^diIPYgoB+O8=vJz5@CS)4H4xBF+<(B z=w}6YodDC1Reek}Wu#|rNcGfQQcmt636tOS;F>y54LB-l#7NFH2;_#~Q`&YL+~Ts! zbohRbV)_tis;sJpW68p|(pa28QPGC9XJgS9J2Svc)N%N8{qWyh8H16*K}_(7{2G6U zbpb#1E(S*6S57p@iBvOiDv%svU<=D;E#PZ|pFB_?4Yq%4xzW*9@HNX%P!D(g`KPul z3naXNxY@f`f26+$zd!FyKmztRBN~7j|6Ml5&BFt<;VblOc?+KOAA&aEZeD-$2in8M z#Rd1`AA+{{qa(*_v+55=8K^gZ%ojf2h^4ihvCDD)=)kU&Rz; zVcdTY=6dw+kX^<>i5%evFjW4Yd#apeCt=|05%`0v5K zWMlhZR_ElxThQzCKLavD0??m?fYtx&%L}SoNhe__C1pkq-KuK2@$6uI*H}%ze+bjGj(j1rHLg+m#sVU# zi#q~=T(FgZ7kvk-=O(e__e3EV6|%-?*h@eope}%AagXjlKLe2A63XWSSG@MS^*S?DX=2TJcN+X*S(+z&;Re6`j+9z-`k`6jJxWeF>eXH{c;w5tpkT z$D!heT5qVRbDe*+?zfW~LrSKfhfAV=MF)cexf?eiTLpEr#c7SDYTBj=PIMRPge$&k zT9Gx+Rr9)%orjnWF;)*twZsY7;;K4Vmzg0YNP`t6Ll6v~9Xap`^&z}+VXbk?>M1*j z{j6jBYDRcQD7hP5+mpvp0;dt2`X6cyr4L%4lwL00KtP2Py1Z(?(@>b$y0tO~zOdBc~sINrEZ`h3^+z(auWYr`&@ zuFi@*H~uSb__pA31<1ugq)QjNjSY; zQstmDU9+$nqwUs~!v&7rFsQ(OOI?$dy{rj5BZQ`t%h&kwi-MK^(%54 zh=habhiio-CC`dIRNrsQXDFtRM6H~h?TUkZCpZ3EWOornPw!x^D=4snwR(({{5-Um zJ23iacgo$ad@v-u+9HdIdx(C|eb2ocUF;D8zn||Oei|k3l^TsTUQ4}4cn_Srq4|M} zD`o^!6}@U6(QwusG_-Z6Zcq^EPzc|5KH&k9Duz#PjrfFa6v@nDp$$zcx}j+ zs_CSnJLE}oy^v?8RW%>qk;x3CArex@pOs+H?m?Hz%}q5h=iKP{Ilq$v^Oj~<-_;HT z(NT>T&i%88b~w2L&Wsi~qdKi?7gFOWvn2vQV{d7LnzGq!NQC-5SM+WT%7YzNLc7*vv&DM(UXsGmRe4#>dR`iLv42QgJp@GO0TJ5u6#Eh@_Qi|PU|+q7LW zZRSehjG%{wJ?Ib;*T>WUN$fB&+$u>^rY(V4n= zOjH9=3wAYdKLBKeNrr`C=I=w$4uT}5(p(R$&KK9%!Y_RZtot@>% zhYNS#epgHAxyu(7`mDP?`X}EpF35#w^{l5re7`I60Ggd>)vy8EEgP3*P~VE-<+>6V zaFmNH_}DTxEVp^ayfnuGREDr%uY$sjH`j`wV#fu$(VaO`FJrzu@3rx@^tO#qujD?n zaNGFAKO~%LIe+5X%;>os%Mqe+0VBLLocttm_6;qM6_^9cRP=1)nl&J=*mGl7`#X-n zk27e+{VUNY%(SETJeERF;;pAP9WU4Ag#=Sqe>~))OfIOdM8C2LSzR;8A(@Oe=%_dJ zLix%B$A*JTg2v|M$J%h-dkgQ!pPm2!KV7z-c{M{yZRNvOPTQX z{QMw`wPDggGBxAF)K=?;nagONC8cK&me+Hxw&3Nv7)y_6;kqS^<|^mATsjy6^J`}Z84)bX0md;_wSuk10D*PloeJtwcw05-g` zaUT<%5fCs@<>+xt&St`ke865e^6KV z6$(jHNc?h0N_o4&YQMZ6QDNU#uh0VcjT9;9YTiF3Tw`9EV0qO@73lMvDMMH=(Ffcf zJEWQD`1*X-Nt5AJZZ1-dtL+Q3z1C#OQ|EE5-^cUawM?po1i}1)C`~(nBblSEcI9Cc zIBgJ%>tFOf;n^J!sFDxkD9CQq5D>S+cW(#Q3m5Ll*(Eb%3k5Ko9g!o6qJQS+>!?L5 zqC5ZibiY7=T`fcxcuWd^QAq3Vu35tYE_ik)3B0BK$rGd_m~$DGmY4Up1*4Pt3>Sr| zDd}enXDAA!>D6I1Zed}e;RO%?5Z$H*AyFy-81kVU(m=ctOK(Xj0)+y(fz*r*KRm}K zFHXXiWHhGKT_zqx9cmfEAoiUMZe-B60zl0Tu*l)iq29{FgObO%Y8O%zIH$ zrg!6F7*-43l=17}Ad}f3V=x_RoV1?6?~B#pk41>&@I}V}_SGwEM@gh@2=Tw@;C}#Y zt)?9@{GTA{6X`uLZXV+WK)~mWQ=}2;2r$?H;~S&~>LR^_rj(C=NWD?8eb7LNiTJ<$ z1l|>9;2K!`?e-z#{baNiA*e`?#aEr=U+gFrGvC1G0Dtzs{3riK&TGs6j|ZAA9s(Bn ze=wyWM*|*MuGjLHkMLLC)gK}jyiY1tdOb1B-#){Te_%Lsy`?dFct^aFMD0N&eB8%c zTI1$sW@`-n2kBx#T~M{*3fXw}K`p_1V!=d{i$!^PAbw-7hTFQau`%QHNECo`>9DZp zL3qs1jkFh~r9ebOIv-)3ED>ASPN-QBeG^xHPo`T6-E zFK=gMbu~I7VyR(za&mHPOw0)hI(+_YH^05MW&+arV19mnz-iBg*~gQt+eBLplY?q= z;wggJ%y^X!Yc|n+go%8$(yKvz+B-0K@W7dn z(>ihLF~zZ#YwCYt{gehPl2GrQjtJS;KI`tfY$E-thjyxy7?YP`+>)m-P1o;O5@4QnA7hB?4) z(NN?Rq`*|96x2h{7$OB!Fb1_~Jace2Y@)juXqwj;BDGX}mK&rq)A$;>BLh{~R~n{^ zg#f7slQQq$(Rtt~V>+rdPid;sfj@K*Hwa{513>SZ=>01SIM@LEX2Sf>0S7;@ z_2kceVReO@{O21?_CEyef77tX#SvV8dwtyTEbO%a()2&>#osqZEJ**KZ<=&l4)B(5 z0%rfFe&E1?(SW?O>#zTeMr`=yf8O~&Mq|4q@tix*pXHXkRmsx#DVU4(o*tFwPgUe zzP_H8AT<0A*Zt^6qK=$IbyOR1Q4$?_1p#4e?CRf~5! zReVev%m`Ciun|>$nXUOiL{4$!-P>V@M0N@;=WI>**^Hl`i*|AQ9J=M_%Qw@hSf=*m zL{j#SVhc9h5Vlwq>K6{2oNWhz1)Y+9J5tz#>$czcf?p-^FwRShOSB8eGk+PmJ7OAN z3;K_JXi0tZEVbhfMQnsil2grd4XG@8N?h%qMA(DdjxP0muNpYMuHL^n=V3agh_dDS zuVx00NtoqTdVzL&&}oix&7gwu2Pf(t4M^1T!u4y+MU$< zcjJ%pV${!O>Dt-O28HJG=9pd)J zi5>I^`Md4L5iX6caB2smhfVi64*TO1|KI|Wox|FkpQ9>TQCJx6Fm7^NmC; zc`w?-Llx3g-?vIh*P}GX+t%>54?C(vwk}9%8jNgHQPUUgxz=}nAo#3Qs~WzX5lOp3 zRl;uUk=htnuojTn zAfe3sCfyzQAmANulFW}Vz|+!8GF`!zsErs+PE-1#buQ=-)M$y={FrH#yNMh~on zjz7|b+Yv(1S*)^5B)%V-4jIu@d9!u^v)59??W(lZP9B+?t1$)b*+fh=eKjL!i00$q67TRZmuivg@42(Y zGi?WXd4&nX3f3=u@`XuxYQ@@ArdEkp7s+nehJ{ArKS(&cgj*()8r}~4rVJr9|Hvk# zFZN8>5B)dhGFoMy%xE=Hx(Xd894pTM5n6-j8&5e)ylMjo>lp?LmQT_ak*cw z<}IoqqpXc`R;+JwG;qCFveIdJ-G!&8h69vjUUz)zSW*z8_ihR@U|{Ip6#S}&aj!`n zJ2_``>Py_S*FQh`h-0AQWuz}NF}>4+^}Tv=f1*Ij>tRpjJ)@{r%kP*I>Y{Q>zIS^p z#0+*~r<#{-h(5=hcr^rPdx zGqE73Q$MaBdKqF@V)wK19js43yS?Ti%@DAQ?m;9)1XUVG-16t&vg3Ixo3vuosw&-U zL1*LQpz7vCPoNim_AOE#>+9-qP%F3WtZmBTAVb zh#rgl(M}`Qn}XW-FJ8PDE7p+*)4jL!RslkO+ow*+YeVzRTX>z<0A0@LX^p?3P%`IXK8e9)Zq0}Sahi$1hqdDL_@7Zs7VD6m$hO2x<8IQW}tBBtk z_UKd2q)PD7l0M1YMMK5%Vl;6tfb!2 z7vDgyObxI9)ln7?Dg12T+1f)OO{e(yYRVXKeD+c;8c=WiLz=DF203iW#fOfuuk3Ci8Ninwey z?k%OHHK)J8#vA6+wwL)@liD$DGeVm|ir&r>l+{2qSSUpw%dcl!^WH?OB97v)i1V}G z%SSf|V_9!t{-hdQ^67|a%9>!JpwR)Fb5pS4Gz9`0!?7|QiHK)%1%vS071NTE-Ew!>ZDGSGIFD~y^<8B=k`Lu9 zphIVlJg^+ytF$+I>(!cg^osHz zRx(DMlT>H=yUwD%tg$--fwX0PWmQH8w=9kaY>Tk;{F{#cT^3uNam3MO^y8+oak&Ns_Ke zMSc@EvQQ*tNT&4Mpz-|f>lek*xbf(3VDFzXIn=-6AV#0ft$dNb=fi)CD469l{-n&9 z&D(oD8jkIyJGW+n8xiZ74{yr{cg+IoGq(!hXy^8uI_r`<{q$ZiqY1jX7@*Le@OBCkhyA+EOTe4jzHTV>fnB1tnF_s@>8N{ zQ>~M1;&`BarkPn@B+Js*iOAXGo*2eWx(U)Yz^!M%W+T8ybsu+I6{6OJZuC`DQzPw#I7w^z$QSD{rr5= zajQ)X<2zq63?ERB2@O?pO~eynrLz5c^6l~o&}$_0&9!Vd!(Dw`bB5%@^*{p=rBP z(=XADW#Fbz!HgAy><;9 zb!c`TdFER_t=c9vSgVLPFWWcM_as8kANXw32u@8^8N?b9-6@LR{7(3YbEv`kg<_c0 z_a>|78DWq<{g>uzQ9sD60_hfG7;jE|jF?P9p`vdcSN+G)1oVHS=ct&v?#b`qb% z(g{2;LbEhL(urZ$M{GIJQFFNS0RGIuOG`Wn)W`8Op?!d zJ1Bzgq$3p~rskNzjsNMBzwqx&CzK zLkM4ZXUdH){~Ud~9#xuddL~}tc74f;8{hkPMY0T^oAzp@;^Pm#vpKT&sQnpJ9kMm| zmI#mTSn~dS`9)mma%;9cacpXNiff`==L6=?F-l^}v-gxZviXaajUFtNj!3-;F!LWo63}3k9Xu&JvQZ}BAOo)m#+uv)W+`3)am4o zIB2l@)alE}$pwdmJX{(LCK>*q5ZTA z2dz2KmDFYEBLjAe!d>kP2Qr6WBGmT3MI>XiW52^As26hwG9{x1rYhdK-mmoRdq*W{ z*m$p&5n@Qsc-u!oEL1HYO%L-1lzp+Rz`W%+5Pd~^JxX?Qy2?sMgK&+5;t}C5$oFID zt)qcS;oG*8udXjx*HdF7W5V9Y?x!&PCut11BKmiQZ|b7aGh*@TKUNEjd|x0;V9Psy z7EHK1$^O#O$O;`b3~-Ay4aRo*ZR|JnnQ{%8GN>kIwHSOdhY#uHBFehRxS6>^2Wfg2 zH-%!Et6av9%&p^+;=D^THPpSD-o4j_^sKzjujg#U9erW=Aox{D7+vr~sjS|h*F&qH zSg358YIH50eM+*daDPhgD@}areUJUY4NlqEtX0ZMiuP1fQ}a)I&JQNNwPe=x3(MZ9 z`+o`|>!3wH50U+<#Ca8u?Wrt-z7m>UA7u&9vbIIKa-@?;=b64)PGX1 zDk&DsX%}j`Nz)wJ)UkX6jmZZrB3ef$tFqmwSa_Jsi}ckxzfb8Beu5Fb+{`!i1FWzL zg3I|4ryO;Q7a>smxAX16TYUBl6R%Ql{%%hS7k{i-`NeX!%4V9-8g_huBS1=IqB$fb z#BqB?hUr1X{_x92D-CUyWx24JOl|?LM2GY@KDK_4uHA~2Y=Tx)nc>y4BF%i7ZzTQZ ziqD#JAx=WoRIhXW;tPb*$-Eq-95g?t7z%6<)a>orv&y{@pIi#1_rkOkEW|oh$~u>fk1Ext^tBO!JXj2-QC?S zcyNc{41)yM!C`QM1$TGX0S0$j_PyO-IQR6q-Bs09Uwn@<A{;ZMG_#rI%-g5;a~V^Uv*T zTd|E#7=J-AVU1GY#pFKPOR+^2ZakZ5$v7`^w|#}|wJdPq_F3d5#Hh>hZd~Mkr)zMp9;5Rt$KUsE!)F8yysodv z53awe`=fE269?j(Ig0Rw>|GwPk}qn z9t|MuCcgADU1OuS)v2v6!8V!Ju$1YaasK}A*XI%`H!DVgr_6+o!k*SnB~yn`)_9D#zcC|dn9*C~wF=EO;YpYqVkP@~f-yNk8o3!d~Sjx+^0W-1i;z z&&+t>r&#k4g9WV8-xHSG?6l@0#dI+aAaM^e*=FK1!tSzT@;phI;cSveVW+n2TheF) zJazC=ag-%QLq|BM865Sbypkld5^d;px06wLjaMA?GE%6iN-RojYcB?;8ypqa<;Fk1 z{+wp|RrzD%EETevi5pe=Gn4csmDZ~3O`s#EE^ng2b$!!}=;1n# zYD~e>XB0B;=5{pTM90@sE6J5XLpx^+?&c(4flq zBoVh?D3qdK^(~ZVYfEY>!N=T~`~x zyM!-UyF?g3-t3;O5XFg7q|N`#)50NQlnXRkZnycE`C*VTbcYwtd+y_o7HIu-x?ljY zUJ3z)&GnNgQ)uvKCcN^c%l7!Ld0b0INl$O^jOm_0~?^>2x#ZrXB0c;d}5{y%DisbF;FOkHBMu#B6YZ zj^se{{O19%R3)^<jajD{vP5FrV#VSy&MDte@1H+)8GQr(aKZ>c@+Kqrr!ok z0}Acc8Z(FS87de>OWA%0$jP8c*lR&OW4Lqmq=V|tgnrjo|N0TI4cNI`twZXwYo#s& z;Z`_qD=k=C#BTh2IeV|-hUIsm|BQ{tS?5l1=WC8ViyiTN+xo?)Ph#5EFt2GmooQL8 zo3kGNtW1&chP+;~noSsnx;(P4a|!J`hlwBEaH|)=Rho9SYz=if3p8MNTgr}>+S<=u z2DPKXTR1@bfvwaoB8>|XvCbDB>6hZ&KOV?X`BUn^fY_coK7XhjJc%LtGE{|)4^o%}MSv?L2)bZ&(&FtnZI_{Fsj6+9Lr#5P^~19^hu z@oDKF3?hZT_eIs`m!M`oKX)Y4K4JG_}SaSBO2a@MP`T^Cd zYjs)ObUZhO{Izn#?R9uNS(*`n9;C*F}t`Sf^(Hg+{j8x5Z8&H@O(# zlTO?r|#9^kS=&q%!rksQ^n3^#+Vy%R-T!Yd8XE(<9F=z99PdW z%kOD!?e%@W6%wMem1Yyv!k(VzI((KE%YlziV%d$v*LpZeR7mh!N3e!9vPq4$H9N9~ zK$=E2^wZpkmDnCSqtTR+CCz$ArMTqSuXCgz392f=^e-+_8| zs;f|0c10XY06dK6m2Yt^ z>OWq6n;lXKVH7F;YN;vpmy^Z_wEkzF6EC1lFF1MFk^h^_Wp1)MQHJw%a^^E9?q73@ zZilbGsQJ8foOJh(!*t0&xPKW1{?f$o5@tITGLp!qad%KMp=PG=hnxI$+TUHVh0KUMU-(n?+22 z*YWbNZC`J$6hwql8@n{T{S6tGS3&-ZA=t&*?|!geX#lkRGmr)c>sfR0OLt#;sy@R#7)$xV=L?B*ebIqtC%C3R{R;(btME*xui-|zdzKG zX^0#-DXD0Ta$&tid5alr4*-IgS$*Q|PTDPJq4x;46-E6`z`WH-iqDIG@g|hsi`^1$ zp_;fq)p(E*W?zI7NjIOtVDkGsFaWgWAxQR5iXd!Td%=3xYE*T|p;2&zs#r$!Lp2`O zEcL5Air^X@-YU1~)&(1T2c0vB&CZ2j(oE6xw2G!5(_M(sq8qO$I1lnrb}hDv;?!{1E&n_;~o`OZuV?m1IGwB)1Rphrn$i6^m$Rd-}L{Phq{g%(JbKP&J1R$OxUbN%WG-G9$cNlAXf z>$zqptoHXup@-bJGOxRok=E1?(MG$jzy8~7ea{vaG63B_*mu{-XZ$iUv=wciTgVM_ z@*_+hiXy^Zb4(D8W63_R>hSJ0E;|79K0Ub=^~>&EpETf@I@-_|7f#untT%gNX}gh{L>-GqwWqDaTWa+L5VV0ZJ7p2-?|gh z->F(Vxq=XXasPO;JTC*L*Jo{iT`BOy+gU|Skx0h4 z5Mn$wZ)JsFK*x>xOe4l3R0YA>)lky)HAM38sq1L>t6M(LU2JQwS+r@|i{cp5721r= z^dxrIZT$R{m{c)$O(DT8pEM$o{r7kXg4D-0D>H0j{UBvryV$5*h#<}29?dC_ft>wT z85!9qfg_Pw>~6noJ&=>@9)>;3PDf{6m5z?h+bkQqKc~Mt`%NKhlhfkCbh$=P&f5XJ zURZ}yy--0)X5J2Pi>s_4HSQgE>lIc~t;YRVrfUeAX!rShrPNXF%at`u39-Xx!^Vy9t@`mk%LwS%dQsr~^E1$X?koM69-3~`7 z!%(KfpbEURBP@JAV{?F^7AcV0aJ(odrsUM@E*9d{*h+Y)A4{~v^o>fyXa1AO*nciu zQ)+8wBnOEE4A=4#V>u_M9B6K)-f6DFYx+3?lY<`7V;t(?Yjeg_4u_)NL`Xp&_S0HS zR`xr)*Z;XvU;B$hBGw8{FeadWcTXGP?+*q}2xRF2{JLF8W~OyBJwWKTME{zycLtOu zJ(EA5;zGzjN$~62lNWWP@kT1r$jjCjs-(*cgi@XIe7Em9BIR*d;y!G)bTV46^R6cp ze!7-u8ECo6$ws(U93Pu4lFz3t-z2j22y}Iwzv8d5GeZs4cP%a{c{fo+x-6G!D4fk}l0q4Vv(gp{P6z&$!R|@6^ZDC01 zql9aAi_iQj@wxYK7>0L1F(_NA1K1!E>@&%+-jyO$ZuMs6*O53bhdZGB?hZ?`<}$CM zS`!rVLaPz3CY$zz3xW2#<f310) z^7A}hleCS;OF0`KY!sfp)?K=??~hpSrR=3Jl`QHCTP|0f?glH)jpKu)jz$y zzU1=qeG}s7@_XUZbLzTTzO0>5s~;It{LS09CTIiK!t@{7q^02ydP5#tQjGr+&vunI z?iRm0RB+Xa58B{G6&59tV4@FNGRP|`wXSKg^8ZF+zrI>RJ0hBAi9#;oE7$)cGN8nL zUjoEOIN2)Mxb(e^EB$5(?q~Hdn-9WcQ8a;ecgTx4Wp8at-f#X>*4e$n?an(Igj3u}61wcG|b4s$+-Ymqw?uIF<|W5gql3K&6yb^|~>OYEzrK z$qz;MgdYYIbMGH`{+`L9bPtHsM7TVFHvD4_!fwhP>v6(s$HysW)jyTY1Ik)t8+92{ z2?o9+w)DC4lfG-82!hPHW*RHj&?*Yz6ysQUUB$Z$$+5zHIOUtXW`e`EvwvF{Y(21* zAblinuBa)&r9Tg%zVCutHOl^xMe`Ee!$}HsKTZKkNSt?(!(0&eSXYNS1j$tL!<@kb{@rJ$E&2agKxM|5fW7Tf7O2+z^Y8;@fogxHIGrA3x@VJA%H-W! zQ%AP<2QeHYy(u*u^#SLm(8P&CIzoxkmT0Dcf8NJ-SIfprgwgh4#hV73pnFnuNV2GJ zEvIMwhVJI7rp!xA1exzX>)XC~cD&c=E!vBJk+^jHhHGyXq-yEmxqBw2aemlJUgf>K zQT_v>r03{@3_%TOj`dWkpT))|X4CL9L&W#;5?w7kX-+vB>I4uKzTzv)(`!)nEPw}` zh*mlsLk=EjORVll1$9JNc&wUOk`&+f-A_4Nuz09iTpPe$6Ko0@?mSEb^yt4NJQdWC z9XKJ)pYm}HJUHShb7^&^(vnr2>9R@jS1i*SDws1;?_}tDI$>NNQ)IP1^a9N!DG`gl ze8B)`Xcb zB>PaH!A_Sl4(yLG>#A9`!BqPZOF+<$be);74771{odzw|8c?^ES6u9U4{kwv+z!7k zxFE;TPi%<5VmVDXhjOQhbrcwXIPF?gjF2#0P;kzPtUw9<*R*( z)AazeWz70hxZq$J4C!=zT-Bc}`x<>blH77xYP08GoivoX!#4X5CWM@x=*!M=?JqV; zJ{0`uFk@wGO}gfe7l1BxrKaB+4m)!d@)T~yCmR-SO4+;pA6SS05|Z)P7_t`HWRCT# zbR*toulZfgvaCjjk%oL;oK32bkNVZ_L~%_`@AS65Dcc*NOi&`){t8QRKyvM@@pOVV zNc?M}W#{2(RBH-*ajn&^9F>jM7cSTk=V>5z79{688!KWDzMq*C{9?O=Ylh9Wpky3x zs281q2-`r4i7J~Jv4*X=MV_^b0fxve@ZI&N{IaMbT|6Z{_2~K#1vMtEzrn$;O35zM zGSCQWOSwUH159+}X{#TaD4SHsty;@)?6MAaKSnAM2(e6SO-QyM{W6{s5%N!eXEzFqb*km;9bAQVj;%PrEhB%VEoo@&&8Snv_o~Kdl zu+ufG3(@G{l6-gHLC)0lym;4+jnv&^KK;4d>MSr2oH^Mu- zJI&d{7Aa&@{tI*EeAxsi>M{6SPf(yo-s^^ax=PfCe2ycr0{ukNabOa(M&I#$vSf~M zu%+o#w#70PuT7ULNNs9lp>SPa{X?~-bjdMKi!j47ZZ$W6bh*Lrn&PvkkF-;oNkm_e ziG}3>-rK>OKXlb~C!+Jt00I4r|4G?FLUz`#yLVsTv(C7_mI1PTY%BHkSnu#K7@2gw zoy7!w^#9QH`aXgpzrG^`f1(I|pRw+v;z=?g4cn&z1KI6_KBCj3uqQ^@?&+Td`HQEz zvBQkz4r@XV|FxyiqIm8dBQup(6j9}{&{-9jS)3$ZB+}VJ{?HwV#(DGBY+y0yyhtYJ z{-FKdt5oX0OE+nPdT8dDK|+Ea3H~~MU9JyP?6yjxW5i##fzXx_{89eehi7K{W5~Pk zE@BgWn&Fb7pCHfh-42^Tu|LVf#3$$yU$_N4bvBz8g7Ms&%$_%Q`2N^BI!6$yIumjb zMtqvNf>mYxrup7Ba&d5QP*PIDd219{p#oS00;d+PE64-GSW+aX>yS;l^LnXMIcbBZ z__UGZf<*HMWRnR~__ESnIk8+gCb@9_B8*!A=uM}J7SZP+d-5DD}A4XKq<8Osqb}i)w9Vlh-<~>PX~b^kpSc zT&Q|AXq)uXKrL}RUvBz~&w{JCk>oRC=n$M)UhgM+fAhS^T&z~9D3}OcTRf65@->~< zQ4-qN*m!zP@IUjoTl0jjfrY_V8*R|8o%lUIPiqk*U{XZoVJ4-}ti=$PRmwZ*0rQ{X zw+O-A+|>SfUNjzZZ-~7eqshqczB%h(z0&dY*gZg&Is4>6iE3drwE5k|GM~b-K`#h>yKK<%AwMAA$PIZN8TBpmw?NVRWvaXPmvnc$ySho7%NRv<@%uU{GttV1V zF%&(-T~Gd=CpHYxvBT*)hsS{q*9{?8#Q#1<+Dr-ANa$sk@ZT2^KVw59ia~>7jq33* zL$vjjr`+$@ z6xBR67pmul{t8t~dSO^WQg_-ZQOr0K!3c9E)d4T4)w-p%#D^(T29$4y2DeFzAX+(B zM;1knCt3&#!>(IRjKp8AbKyT!nMDfNL{(#rTp?{^uV&BFND)LFUCKlTQdP;y{i=-h zb#rk_^Mo~oQYnNJoHnJk@wRq7^&2X5k+N{QE(|YgjPMu$>z6;$YxGw!mm|acJvR@d9Vs z3#-4%K57!zXky(r)%bagU{b|4=4`~^|9@Yjg0v|ni_)nnHET1#%yL>H#UwZf^-5%2 zPmOJkE&eOm7z(syo}1)@%qzZu*Ck}5_^Vw{Bh|vsVLLuWRg>S);rMs6a>QlRNm6Y9 zs-LkYKFNuN6MI4NTm~CyPMZ$GemYUx%RI{Vi06b7VU1!=wlSsI$bZ!8vnkFRx~WkF zo#qDbSjbWGtomZ?efo%N_xrJ|yekk-aGRq9&#HuofgT@C1)GFD+2Uib5Ozu0GKjY& z!7&u)J5z@K4+784ML!a}Yl+~pHF^oh7I(vF zmcJkNIMdmH@0@lss1R*Fm=TSlGY~y-MpC8gsQEtuo9=K+1Nlm%4l97wGlh<(F)`|uvD+=7lb8wh2K9LH4E9-%+DOz* zUzqSs@)Y(0tYlry&2@v#pQ@DLk#tsC~ub*=UuVnxKOZckr9|2z=X9>ZqMf25IUMgKtse*4=l;fVn=; zaC9cs;+n)9H1$tw#y@0zW=;#l^cL zra|uUxgJ17IcmDoCHIld;uShC@*ckX-H2c{X|J_sW1L87vgN1q19b2*DUZ1x$?LqA z;T85B^mVla-S2h>VFs?X_GZcJZBt0V6GKU1{uScn|2%pmS=1Iva3sb(yc=)l+j-h{ zw%qDqK($T#Md

    9kSa%DsJJI%YdG`5S6TNW|B$K2+=7)DQ3EA{;?=vqe_!#}3_n zUXa;$P5gIlVtW4CwtATqrDS^76SJNhO_13UE|pmP9RNW|%V}AKfQeT&s&+O&!xM*bypG z8ndi-Y+K%np4-bbV* zd_?xP51_;Ge<3_4u`Euv#Vr@OI{wM*_vE$K=zZ|(BC5ve&qjC%&q}OrC{WS6!@`O` zZb@CI+_B`V=y=@kq{i<2z$@mDK2P(Aek1Oh4@n& zq#Ld4oYBdNvpu4#0YUwu;|{uB<9$Byx?*()1+2FE(`l6Wag6y@MbhwTa4*zs>J^c4)5mYkk8H`>MSE^)0rTyZ3zODQ@D9-9iSgE zveyN(0(;~9Uo3q8=&&{S-`M9E;=s~wvz^+o$-vitckdOy;UJ3u}%tl{WZkEc#&nzSSyjdrq>)W~-ucEd=+oGiJX+ z^R(E;{{D61mfiYi#AbD$>)qX)7ilC8Mi1yq?z3$m-&-%ns&K2Ik%0g5s&*YW8fHvM zCp-P(YweOgCibNmJDI4V%YPd+TO6cbg5cb|i|)NW-OZ3Y#%{FuAES{s_mt9JCnUb- zaSIO1f_452=SSFA(5ID%1&5QT9O(N*TsIIeA9znjw&d}EK6&&1Siso*rZTk34#Ba- zVaA|(Y2UJPGC|}vuSEFbRp=&~fMncZl^-+A*0D3-V5O@g`Fbksdw;E52r)D^4B80! z>PW4XpOFe5q6P1O<;&k^67HxC$J*Q1jZDAVelzd2_Cf1)*K8o3B+GB5&G9XbXM@6gRk~i}4!Uve zCUU+YUNArL3nl)LRq&KPI zFtNV{lc#6C?=5a^nFP0&PYo;Jn>trs86H+)%3xbqFB`J>yK5#M!B;yHHWAXG0$by1 z9BR<~0p0neh(10P8JSLl4n+-L#Z?1L8YejoJgg5gr|?DmpFwvHDJBj6Ol~Lct@2t2 zkikARA!uC^7N)HS+6dnx8=s&Ygf+`6*9tqe2n&XXZo;x-7$-_lwt3-Nf`qM{WI<)A z-6VGQINQEEaj4uFbHW7&*sAQwqZN5ozgMk^UEavUl&Ru7G@2ItcLZm_!pBqc^r%?} zJkDmf z0akAQX2sbKb5?p+wC(K{QmGdFK6kL~B+^VoGQQ(PSAktk-;bK>h6@n}oY%CyVQx z=}8DHzA&`EqQXR3Mu)GuXYjhoOj%<^@*X}zP5r0?j!RT+(DPOXUEj&f&oC@sOJW{V z;S20gVd=SkLQbu$45GH>g6H?PQWbsddHTU$2`S>bl>8)TFu7dQ+sd+P+{$MZ{SIQi z4T?)EX6u-yT~vYBug>11zt%%aGP_lHrw6}7=b3@%q{94QZJ3X~&VTO0A)bH3`f6Fm zF$&yU+nZOa(}Oc_pZ8<+h>}GSI_c9A0&5$cjjzL@(Wb7Of2Vjl_vgU@BSK-OXG2zZ z6JG?rkw~7tqAslyYtPbKZoPm2k~#GN+GXtI2fL5@Pr>?9|94v&F#g2)QDAUDIuTT` zzcF*5B~c|NB2H)3SNoZ4yxqS<6jrZR9{CEl8|pZc3J6L^spz0Pw%BdP`!(xxB|5uE7+qzhNl+*+)*Z$$dp(AqQ}mBizd7ZTni~i`#gqRzH{fn)+r+v@fvX zJdpdmUabK+CA&X*!<5`*##nzj2z-7kB0bG#!?TGCC}OYLS=5~77)}($J=ku%kbf&o#~8Aeap5k9;|fVu&-Y z$|NL6sgh)aCu;HgFH+z4ebJbB|6CcPv`cL2MzGotZAbel>!kn?cm>_)Zy9G4a52|} zm-m9D>4QpOe)?(H+%OsHY;A9Fv`j3${o};j*3_oTZNaXo{oQf;{R63$D9z$(0h>^P z#TV;cFVh1XSCgzS+pU0^35Qh=BNONPRH$6Ky>}e7n74^B_7DAR`GE%7zo>ExiJDZ& z(7e%bL{vjpc6ftCbyj~fPm{vME(+uqKbJqV9LoYE*@B(T(3pt+JOJd&V$)u$hu13j zCpKAz z=_!>g%gD%i`ztNX!7o@-qs`~OTWFGG+gMwp?0W@)`i>Bvjo{b)Au7#Z?-}Z8T_JX( zHF4zPXuy8wN{X#)72fisb3}YxAICOay^I1kieFU^S_TSxn}^I;+1$<}2O9Bge$s$- z5iAewzLH!fjv)RQ9+oE=2s5n;#B7JDpFv--61+!a;M6nTcw>bcfNSpt^M>rIR({Ta z^n~9MLqcuP2;necr+8Cx@Iwp)IaNuFjB@zv+uINMs)RbL;Pl8zVAe8N7e9tbM)Gw& zJ|u_k$MnNci1C)$q>{E3Zr3!r*YO3ey1I_G&kx^3{gqo5>CwreQczlQTz9@QtY9${ zG5X><4AEHJ_VhF#@K=paj`$L{<5|Vq1f_oiM9?a*uA37|ConbT@-;$QT@WYH$ufNR zqhvPltL!W(D)UYb6LrS3`XA;`)IFZgru>BOQX|k;?^@ToE(JDRPA1ir-m%GcXoV54 z`{iL$k${-Yzn@Nl<9GQv>+O;11bxViqLk^G`Yh7FwFK6V6;_Syw1A#=l-1m}bF<-PqbbZLV9OE%Sfz8lm*`k?ZMrSh3@U$^AamFWj z*OR(Adr}M?9TkcAPeh!x9%XJ3H$_R!k&^9Gc8H!3drJr2U~=$wN+8H%lKt6<>f!o3 zXz^bOc9A5!Xa?)|doUMr?XJ z`V_7-j?%|(Bc5*5>pa>FcQ`ak3*tumD3%-Fzlb%vwtQHJ&YucBf__wXy4Te@>&snyZ#rI*=hkB?Wv6}Lg+36ed%NF~MAXGQSosrB&$l*6XXLz< zZ$(oPCf4oYnjqw7Z{FTucJRMmW5xu7K&OrNt4uUQ#{1y|457zVY@t2FNFVv+7;Q0g zZnobGd)*S0s9$mZ4pLh=IyzcgN0L{2x`)@BO&0dKeuYg2u|H7QrGKJbFH337bbAzh z(HLag(;o9Y2+0)^X3H2$ckRr#+FyAZR|jSvF7?XA?add%q$35In0VW|TDq36TZ+?K z>b~8F&9qczdyJKyirme1Cd;Az`+od;a$-JRK!Q)#ZARkU7R=p2l4*O1EB?4DK+(tT zfqad!H&TgS$OdEEqBr5wBa_$dUd!%Bgc5TzAyS86?#z<@0?56`?|QI%djxH~%z!-I z-!+#n>rSuJlnEkNK}vqO?^U*1t1$j!zERYxSEWZW%*uzddf1_)eM^y$lfRJ~T&-R) z-v&z@0M|&!NTf-LiR>=?S@9b_*NQVoxBc4L#An4+g(6YhW5eCc|BAa*VW+~O@FQ|) z&i(?-bGB0CVH`{H)2BVlPbZ_DLfB0@!hXh&?^EoC$430i1oL;c5&_K^4)6J!=s+mg3}3W8aw8Pj;9Dm5zn7ZY_sXCcM>LgeYNq< z-#-b!BS$Z|qY9MZJ47jx=xP?9;CvG0CJsm8hW=d~_k%_z(?6cJZj@y_LA_Ud>+&TwsRW3|ncys0+DzW5T^TEk6%)*C08L1nfRA-m-R|8TF1a5t)B62h zsHIAFfvXQTujB^ened`@s!6$tO={JdQe~DGdh1ZLQ9$NOMon{Pm1UUWdRZ;IpW9Yln`f-Bw(3Vk^t_%|O&day6ZScC- zJDOLz4|E9TdfCp6M-`y-CjrM+Oz1*?kHp0BrY)@2u;?{}c!CVFIkWtdjt zi|up?s~Z=q#&iiq7V0|}yHt**X$%Ya#|W~*dD3Wz<=MM;Xw9Wk8lb=G0@9gSMv1 zc|001<+EM-6RUSX`#Z^s6`0;vrdjA^NG*r;NAekAdAYQZWZ-j?WL{%gaI@`k;4BY* zEHfiA|34N0rc_RX^JH#zaH|h5 z9Uwfqg3qdpoe%%ec#OKb)1So?vUGWVKcuZl@lp@meQ9^Jf^L5QTzN=aw^j14e#w-R z_hAKHe^rdo^0}x(95%IN*EBj8gEc$piL01!FGJv+gO`h3kQebxtzW0JC|Lgqffzky zL!Z+?z>Nc60jA)j?O|`TV(WSCX2R^Mv1Z!B45KMzFu9`5!DI4uxpe2U2W*rDIC~m$ArnfRK~gpaK#C`>7TjT zBa96C?jU~O0|@?!Y;V@P*(%|-xuEwYZ*>SBMXeuzoo9DtQI0+_n{Fl=#~J3Va5Ucc zUOB051%w`kV{`7wv0GWu#d2q*>`eKwkIXkW_{@-C@;98xS4q`t94b9VqPZ6I8pF8E zQ3y4*2fNEJ8-^ck^nDE#02@<$?3F@+f39GAh7sO%xAxnk>YTi<+6z`fZznLAab?J% zR}KWD7`LrM#wB>RuWwI(^T=Lvh%}{X&TggAb6eYMP!z(D#>^Wq zA4H}cbvC}NQyzraE;jfcVp{s{WN7+P(02v!xwV>z0Arapv(dp@|&*jEcFm z%rRX!X>ZFG@8?PV&fWR+m9f@bDVdrM{{^4O0sids-K`?=0Ehxc^dBzhGK-2>pGpZo zQWa}G31LKl8HF`#&p+OH-MI(4=w7-HVN8WTNVO1=6(a53l?-Jau(_p0F+X*xvbjJ# zmMv%FTi7dtGIS~h-sw7UEGjzw5RVuZF8oE_ffYJ5+bp&uC>_5sv}5vO8E)*uu4?kc z0aCE_;W4sC9RszN!e(J&VxF~boD7}!?M-1VE9ydPbEo1-(GU*#nAPY-5GrExgH*$t z1n5X|M@X@L?&x$#&A>*dYi@UU1!`n8s3-Hltmyzxt2FL+w^BVscsY2XLlAcZUnItP z+Q_JdcIs?L@uo}N^cSsO((|FatQr&x>0$ON zLiqe*;x6@a;be7wV*w>|aTtRroU|c5N$KAqVMkTtPj-O@H|w7tiuKDpr*77oLY(tX z?{04xR!Uf6j!83Ci)aoWVuzP1c^C#QYx=)t*!uGde)K6@4*lHsEO};5v5m zjxmk%*maA%j+uSM0{I{&Y9?h$LvX8AZsvwnL4}bh3i!^{E+O#-g~v2GqLIaRG2wCZ zmq-ATAeqMf>vL^){L~^B%=UDK$Xjj9K*R{IZX765Ah2 z0$kXai|fOD2Jy<8X5}~RQW!2Bupn=%eFt3EQo@fU5BU0G9g zvE8{v3Cq4asr#dA4znC9|;!v4+|?GXWXI6D37{bAl@Jd#j}iyzkEweL95M+1bCj zEOUyU>JoET20k8HEuY@r-!HCrJjoVKqw%cPw72g*b)TO*x9Fdpp3X)58dL_)>f0>j z?Z`*pzAryaT64Z*UQ{~ww!t5Y4=O!`^xS2svwxOVnST&ZPV0>YF%4)8W$GZex;%yZ zu{hBpO;bf`fT$67!YWg};yw=SSL;B}7M0~mCeQLhGTPr_O1vte{yW(PZ2R5v1;?5> z`K{3*Uj?%>^tsIEh{W&VaVYfBeS?;V>`HXBxXz=$(8Os9#5anu>|eQ5z8hV?^yj|f z%gNnLB??nWIw@@#y&SeFPbkx||0~GD@;UQitji2-QcX*C_c!JenESaahtN%yiW5v3(jM#W z{8O)lwAZ`~%`=2sIoXVcLccXulTlrbN7^(Ca>DH>p+auDv5TIE*Y`6%mFvWhDN>Cf zQgSzgTVIX_Xs1=|9w7^8+EuWv`C&or`3=!{8V%p34q5TB6GN8=wb!%FEc0`plnFsM z-fxncBF&0!jlaU#=*|6xm~bjMiEdiHAfyH7OR{$&8Pmg){sg|7`jIUgcydNQr27K6 zMo1%+dtdW9$8C9gxZ>&(aa!$c>)Nc#8o7zbQU7MGi#a7GVY?9}%e@nP zw#$%xY4#~LmQ4z%Y5SpKF2$;K*}cqey_}2DV`BXW5ByUPP}^bGy|X-4vOVxE@!D00R74aIq^*ksk^>I@q@=7?e6@;!XLxyfU7lhDOA zYMJIDEW_^nwQ?#q%zrzhcGg|`_XynoIjYDWmOoP4UFOapxC{zkc9yKg7NoeC{BXP2 zp`W%7{-Y5ODFm8NH&PxsOr6>idUFx}Y_*Sy-QkTbAjiv#-9nO|f5QAODv0l;d-D*l z{*}{y+JiD2s!7~IqP@V^{Kj2xo|8TTL~o1l zPxv}v7co|u?ivR=kVc@dyhf{Hh)n;uJQyRZk}nO0BbD|*ciMeFb4r5xzK;V1>_Cs2 zw(9Hj1*6y4w#xf(@MPN5%(GL4fqR((!%V~BlQb=)n2MYgX(&7EbQg^|#Rfe0TTq}r zgXXHRJR_+}$8UYk)+^JH6aKLsflZ<1v1rFUo2Tpb{qUUxJbW$(qlWGRcW1(F(9o}| ziI2S@5U9>wF~W4%x24LJ#`w0St=3J=$6Dv{X-YSakI}rPO4$8wdx;Dd4?$z^QGTvZ z(6+0luBT1$P$C%^8&_M)ix#PaP7h#vNlrM1Na67EB4tckV!h7zg{1(p?*>IW?tfoH zI2n@eA6Np1&gKr*V$+)VwOPD|Dl&KL>E6n+l5IY>##Wve|$gncCj6?`VT8KWo9vNk#&a-(&Agk)kb?DXk;7m`e{;ew|IoTASGP$@{UZ1nr4NXaD`btR zZH3ewb5Vpl1YSh-m&ALb(hInpq;M1v2S*Yrh<5oD)XxSu{n6`H|);@ zda?#P0+<}VM%ziX^gO@ylFCtY^&bugA_S9f{GTh?SNCk?@zSc!udJ80j|Z}U-AroS zJa?8N8dTsBv~O<@3OzCCc>k(LIP>qtvyY?drN6JE-zh~)V>h~Ha_%{f%~cjJO{F%= z6`_fs=06dS`7CoPo<=sNdsI=kx5DaVdnN4V=gLiUCV6U&lr{3m4?TEwUJ_7J?Lt1r z7*o*8T$JK#Ysg{crYCCLrL%J0&wth!r{?3zuOC%vq5hqy4%f#fZ!!)pOwKb|kNWD- zx`!}EZtZE_Hnz+>9gn-`hO0!MyGN?)YWFF(bReHJCd=+N^-fxyfe5dT!7KwfFVm|M z%P>%!N`w8bj;=U!HTJ2k&|nq(+~NruE6-HGgMpZE?(h>YBsggEd@>@4ld3SZyS`0z zBfLA2ZrDGy!)U%$e#AoM;qg;2+rD_bem(h{HorP${UA}|BU4I4U-FeLW;n0+> zU9ZXw^iK~oSC;z=={FNnoAUjzWA?tgLv_<9IQW8~K6#B}G}g4199XW5Z7Ll3Nh%or z^Qc&QNK>-l%28rz27_ypGTuoyHJ91DLD_ZLXH43{ravU6A^`QSeEzwyA-wv^-DuY) zufo3$Y3f;N#$**#5MAH#C@(B*EJi$r{cm`x=n3!{bh;j1z^5E8OwAn6CwZb2+P#|h zCR;TxDGvwc8Sx0|NRBWl1kDN#Of=i!xJIQ3D{$k{IyG34C{-YeSt#dqu6&u*Esjy& z+E|U}aKt-W?%-{z$TGX9D$d09w-$$#HP$^CP5zryF(ELVt%V)nnlYTgd2lY4mf~u% z9vA(zmOHF07m8=<#w5!C1RfI$c+@okzQSyCe=+kHd3A zh&^1?=y1fTc2lg|TD^l`v_Q-L9UlIir~C55t+K7ru5O4>@#hcCy|6ZIM~BnTsz zBa!SE2k>ZzwHlvCVsc88!tWF!c)9FaQt(cw0fPH_#in8(8P>3o-w`zU*>goVPB{%k zN8OEB7xEIXQ&a!|N7@I}1AE7-i4m)8!6pxz?NVsV8>}i$Scd^x-e!MJ!Sd#a;+=+b zPPvvg07+&e0G~i(xHo}ph9Bb@M-bVuz>tx)++*^`O5?+2|=?XwIpQKA-?le z1rlySv92?2N_>p?fDNtLc%kH+T@!rLqN~r|A4Owo0q=3nFJ1OHZ^in|4rz;9G*9!P z(q*|t3{PKA^{01y71up^+SY542JBdrblQyUHbC!HQ)4u5%bB*d7y8S8d%b(^TK=BY zEMTnUW#(XDr-)g_#{xB||fs8-Qe{iDRZU1I>2edB1isAUM zUu1W-Eq)mUuVetf46(%}=hA%UZiG`fwWE+u8ieZZvwA_i(dYg?7c`fw*<6Hkj-W?2 zsP<>>@Oy}LyHl3Qt?X=UJ`D<_yXk2lja3V%X{#%Mv;cJt<aDDZM&TWhzT_F&KP*holTZ8FUy8SwNjG~1o zbmy=9{bl_1z!M6QM-dKI^#jE) zZRL~DfFCZj*ZXM(r`7V3tl1y|QW&Ke0Q<R0gqV9#s0$RR+|G4C*-|{c|4A37Ef?Sduz@jb!Q4PxM2;UZ3a#Yw2zF>Y!1V zWt^ByHJ_`Czt%YE-X$!Q>~31g5$MNCZy>^TJ{$Zk-pII#+T*y@j~#M&XR7JB+M~&S zIop4k7c(-&67m0i8;tmi#2;+$ywzHEvo^yNY=K(gH5wNmlb@nHm#Vi6Ag%fIUo#^1 zYK1|6PcB_ky`tVp|8RBPdu5k<@8#j1`;b$Ru5V zI&|T;=@edX&761R*oLbLe`!2P)|x1Gf|yFT9t%J4MA zv4S>f{@NE1`nex?hvOsVI(xxoJ3%UE-mX%r#Hge>u+On{0p;7zCz_B7`BAu!#b*5H zr^ch9>j13>^P~p);iQ4RV(GYp;T60F#o+iz;MBiWmY2@dP{jB!{6UgKl zkqBmEP|b@Rt2hjrW%k}HH$tae{^Ld6244Aw5qSnY=+ooTRh zC(3!v>UmkUciMc)+PTZxSEWQDvXu%o(OQT8G{oYj`(H^-b^u#wi207Oog0^yOL1W8 z+F;u-%|0F5-9YaX-AQOHnwU@G)Q9~N(Z!hJZ9mQH({Q;hh9UjWdP zG_IZSqJAs0GECi%MK-kW7Aqg#NH+4jXFV6EFR>JI=9U}d+;j!S#J6|+#$&d5CQhTX zFVFf9cg-C9#bNFtR&lRNvo;ag)`MAqW(D2?*g=%Cf>RWl834`W66eD#hdht^}kKzA`gWXoFS|vsd`b{uqX!Rjs10 zUhdHXSD8YeS(Y@MwM;T(my9A$r_3-c8=IY&QPR-R(EEE(Sm)Us1(J+7ZXz?#6){Yi zFvr^5ve_L_Ooi5NrmX#)`URLmgG_LQIRN6$#otY?*P&#{?}H`t=3{GOlZMTKY|PoY%6|8VBvoY& ziUY2kOeAa#GAtMpa5t#j<_D1Mp^fX1E5Xxk}heCzOtf zt-Y*XvEPd-LZTOuA@aYwK*4V6P`zcBHZ_gBhHi{7rZuG`Wo~Gn3gT6ES+(OP)CxOp=vw05oeD`gnV6WoYK#+&oG@%=k6Wua)IDg)o(#idar`xG|_ai_%;%+eh8i-X3+#U>q) zo)@vjhU=5Z1lkN_2Sw4u6#DV0|0HR4T9E>zM)_L1*b@IZ5Nexkt6JmbdYD7^^4*XI3BHQjK{()y(spGVI4lY4q4;Th$pO2sr|ZTX+VSR zIy@B{Pe^;CwB!hL)PFwz%#<^N+vX!U<#(*Df2uR!z52wNN&Zz4s-J~KQ9o_*WM{uV!^(ePT2!5X z#NRvb=sIw16c23y49gb%{lNKHW7OqWzK%~rmP}ox`pIqYVO;z{29`%TrTA9f2{JZh<771@p_$v zR;`HOvLt!-bSQPlojS94Msp@guwBtUC8g1FEYq^>*?y$pYF=nzykTvj;O9WM-GHk~ z?fG@3>NGztJqhFyKiE(ALDz7=NL9y=L~0W7+dfIG^p4mGqb;BIjolu;Wh7SMMd0Hy z%rG`NvhX)C3@*+^d~wC^x3DPLw$;$XEZL~v(n!P-RoU>LWTeYxlC8iS=2w+kWUx}X z@g1X`0DIl-G_^V4Pli2-%jvLN#U79=WFZz18K;pQ==FHL84DSYLR)9jm|IfLbM?~` zttW$*`?V7qck>~WwNpVRlVFej_1D&gWc#JIwPp^lJXF3megmPhi#|rza%hjbfliLJsaRe==5)-x=;LH7 zf{yixKUi9?T_R5tBRRr8$BsPl$oCSWK7M8~r6)kJ*OO662O$BR+X4IkX7F|J3k-US z@UmYOP*8wjq-Tv`UILe=Q@%{~tj4I2##Aur)-?2LC2WXJtRvGQe=Aa-5mYBw?Zvr2 z!D$uCI`GFKQ(mu}Rh9G?A|{@d>&q^*JvGR$tId$kRX*b=PHJt5MVHQ*T*49LY;E!V zi~~zRlh#blk;MDIBx@;XoJ~t=)KEc%gNCEaFYkxXn=zGuF`+38-w?z_=0A_4X?bB+ z{1U8|D`V$pscw$*4!{6U;q=)wQxEupPD zcb+qyiG{j3pD@y@X8}boXfVnQ;YurJe2NY}WqfIEe=-M~%C0p8!8EK3W^cG$*j?4Hv zKxHPDNx$jv8FL1Y%h_;-v~y{#{qW#mQ-xH()#Gt3 z{ONG$wMqETK=zivbxN5!u*J4?H(hJ}ldU5T6_C+Km+PD8JQy{3?X6>5jqhHi)`zoN zn_XPMy`W`%2%@VHx6(TQvi&Ynw65s7svEZ@J?sy>jBw}QJ3f3G(vXVnu1?Gx!^6B0Y2dta7u6CFl&$T#p$9-p8gNYPK|iN|HQ`9a zG7a6SJC0rbu?JJFh=jJnFr?gJDN~fV2`{1lZRk%co&ynMVTwNMf8HBvWfEwViS;Jg z{MZixZPbAWujx9U=>zkVmT*{|GL(viU+9*RvK+|Fv26!!RHjjC814X-`XYbuUpSV?84BrFvC8gper4mq;x{lW25Opt^w5)}1PWx86 zhZ!Fhe-I@}Tlkzw98cm|5-2INAesl;l5q&)!$73-Ieiz}+pTI4|eW{_GiW9XLqzL)j zm2HmZw+9ect8-HklL_cTZx6vO`_&ylh0u3 z_!e~Nm%+BbZm1vm;)iR^&=v2>DgD328ll~{{uchpSsptgr_#N|?$a`=$6^+&n|SkQ zqjOKQgob^v-$qt%^T)=GqpnuP>4>UY^0x)GWv^J!EURtle6&xXLCT_-?3sU3qq}9h z0&s2-eHpuAzGu2wG#u1k`0L6nTTtO`_7)GmjCqZL8r!n!crwh)e^{veHJ`@ z`0H}G$nMMu?>G?R-S?y=3G1eLLZ7LiacrPIbCE#^pW+w|@tFYFksl z7X~@PM*#wVCt%hNPz5RJ zA?H-(!6?7@BlbM1@BF=V4t!h5_PH-RMiF{?jejmU}zrxmjna#o+`OQa;C*vB53yd=gwReYf?q7Uvvug*reM}bFkb( za|-fHY-b6N0|Ppk->`WoUl?!vdt~ zqgdYs599$PLD#8Olg?GEr!dEMjS~w#rtB0S#rRHUarVWBfEi5E`?5=aSq~~LGZ(Zr z*cO9{Muq7lJ=5Ri7VVlev_{M+5I&K^z{Lbqb4UrcEtV~n2w~2E1dz~HS*%)vB9W3Zh90MJU%G!E zJG2uB2+F7b#d?J=bQqvartZi!;ullgx8(+e&fd8X^Osa} z=3XC)dpX7@s_3!8h8=l1e}8}X0uRm|rRD_W3wQ0Vaz9D6o=hI_O;oM?__^|9Q}H8R z$<@LqfvPGEKK^L*@Y6pW7$uz=MpV=A{JB}ysTq0Wc4K1|oo2-p1v*S#4Wi#XuWSQ_ zwa|hSE~#v|&QL&LC0g%hyX~lflnwyl7i_7^>rULdVh9&-DQ<=Fn5(8#CiaTkkni!U5U<2D>S-?35`jA0nm6H6oL;$qxhBS2( zs0l_vw7}Z-AVRg&jq}uIP=-)%QG_Ye+Mg#1lq62~!!jvA5lL=m)494N?-B#4gMn$! zyef{$#?3aQ0#QpY%!{CLuU7$f1rJe_F(W3;C(ks46X;@IZPpE~9pO6AZ}M3*p#~Ax z(9h5Bs_o^HH(t9rpdkwV(X5n5A5K|WgwHk2%`V+aIj@Actayi=eK9_)O|E3V^sH}# z^#ySV8Orjv^8oF9c+F5oXs}&dkd>)$LO|iH_L*z8pqE44e(L0TwmD5NG)h6U<*e6; zwyVe1?r(ycE>qqesDY-dMFvxjT(3!ovAv9;%9RxT@zlVzR&<4t$V-~ zRfc4ERTm>k0r>SQTKF(lq_1P)OqDM>xW$gveMYQIMwbM1KcA}+Y6E10Gu4KgG#par8HXP1i)BXYeW-UYE%kbm;h?iX4#Pv=90<}6oOX=sN) z6jcNm?#0SDh7b0uJ$$SJwnmS@**{YOo< zo1*7i^|n?HhmM`Vk#NjdcM{(t)0%c^{(<4yt^7{$xk{?V9(iBO8De8n zOhJQgN#{aklnaKjime**517RYcDjtRFJbs{JV^*817OOp^XBk2ltFdK1f2OZGO!0sqV~?@LeQGWp zA~PV@)`7?OwH-fX7fqNzRn#Jwh_EvFGV~q_PI7xJN2h@@o=l2X#9ad6)XM%4Y?>8R zLl)nfO~r-f(n)MCV{_p^n)b!FG!XYk%5bwayQ$h?2mFa;|+1& zZGRwdfOb1E7NoJm*U%~r4d+22*Ic5#c4dh7K6bbR$(^#~82Xtl5r9&s3k}w?3CYPd zH|Z0vfx6p$pS(SJ*6PnR@YiZ4=!^#lVr8rV!4$&|F<#KV{F&qlB)ng=jD%(sf8Lm< zE~Avd!C-IMP&->IW_|Z0>13$OV?6(z#sHuOCDkm6aPgg zw-M4nlpE0i0vGZL6S5`s^cXi{L~L3gmQ*!#=(hF$dPX6_7hMgmk@Gr`KjYCCTwort zn^JNKdq&W10l$0bf1>f16H)iApBF^>SV7$m_1?P2PX*Cf7c&mLcCU2%UJd>!8xPyj znO@Fmd0viiB1VG#jRdp_N1jy6@Y;}-|5ln-UY#}m%f0Q>kWVbANm?mrH zk(~1dioqxsF%oK$NrOqULuRs&mgn^PlIlF!U{B3pW_4%Z4Yp=wA8gZ7(6xk7qtX7UCc$!(bvoqHc{$| zyMkAjIN@zG$1!E?H(mha0@()_{;z@zSShDcnk1{z0nGKxZeY#J(2n(6ZFp4A4{6ap zL=pED?-i-lYWo*i@OY z3~)rg9fxC;L1+Gib~n>Rn7*FVGa$*=mH0=eG(DkVwsnXu>w4B_R5dp zqu6z=J>I`-a^ky53_T|IZP#hJo{V-P&lA@j>C&Yu6WR*P6jj{&%WN5sYDsb)q!phs5g)rCd!y@?j&KHg63sTt zq+l_s2CW69E!<)=YnKYbxIWR|5Yn*r0_z?Db&RD zq+(ZgnpGw_?nWxJc2LiAPw)VYt5l0Be;uIN7+IGKAyddVrD)_6;ODqoJI+}Zs&{(% z-7Z&zA&p+Tx#vdmP2OLL@OeE?2-Uz}zJ@G@(*eE93#r+k9+TR3(C-wl6|yI=gd z$aW|c6}CocNK0+7ZaxCk#PCU)n(|0PM-9ikm~nX`vS?hlPS*2*qPm@ltxuu3k=m-8 zGPbHzzdoH(vZm>A>2GV~oPB9!-cl`$6bp}1iv@11RYWu1oa0ZSVa$wH&BUdzaKX8S z*6X5OL_m3qVsexJX#ofy!04p^+{fb(KdDZ1HZ1TqDo6Z=Yi%~rRefXeu^OwHW1ZQD znC$Qfhlc>7L{P)BcBe*=8i*#v`kxoUOwL0{Y?fwF* zJsLD(;m=>Nh@%j`F@H|EHQ!4oEM_#M66>=|yahGVAzizOIn}OGC6!=;R_%!XcSTz! zR5rn+nso2wltnF$t#Jo$gggy^GxwK18SHph&!nWi4*0QN*(QEOtPuUU+IcB5heKsl z-eT>nGpazw@>iIk{}RJAqhHFh0(FHsBiL?G zvktDc%Rnk(+7Wg=f7}-JinYOa_`8&n($-g#EX0mP8}V_wzn1m0 zik>7lenps($)bn-Nrk5pC)>r!QxjF_lxfSfMlz(uSJ>rVk|bah6YGLa3(>$vpO8Jo zPa++y`1F78K5Ya!mQPv>Q!e#i8iY$SxvCj(@uWof=RkJQJuXDSCV_vFY4n#^$-@Bm zs8cMN!bS^IN%<;`k^@$eVBYSlmJetUd@oOF)OP(&TbasuETb)$BgEsj6uVc}p2{+H z1@H2M!9AkN*on_u;Z<#eugehQ(F;=@g0?G&8(FrJ$F|YzKmm5!FtY;vCfDw?@$dtL zlnokCuOlvlmNdc?4a3tAw+q3BbB%rIisi;2Xh8(sI8UNf#?&tE(V(mgq&oZ-Pr6hf z3p6e|T3K`@Zxt2UuNFaiPB*Ai>ovQ0|%#UTySiiO;4IvVz=?{6cryiS8qbD2ulUxEf-W3jxoWSc?N}}k3ncz0< zboBkW*GqJ(`t>&*mS-&+Oqi2EgxxAKxj(0hWOXU;*!tj5sG3?w>CRNJPv+8w$$`{# z@Y!7LT)A^lQq@lXUV3V5(@ox#bg=EBPhsL3G&F)I5b z62vp*$AC_~Hs#C9hzZ~un-REKtsm02*J?Q3`Mf^&Bju7 z+7qIhTLwco2x6Vx z+cT@4cG-4d4QvCS>n)@SE~V!%po}A@uRo5z>gYqH4|R*qFnBa&Gk32U(6G_vk6mLv zJ|?(`URY3CCL$n$tl*PPFV19uRWBrUF?Cb3{&liMpM-$#>XK(ZY(kG^Wfoz#ZkTU2{&JlZB8Cx+}4#S24-QmnM*E z<5^wfd9BX4bYf&Vc6;gz4P`P1*EhSH{PJnoS~L5xv8GV4mHBXz1dSNtDUP3Imr83| zM*4aUM8)fLObb`CHB=GmTOeQ7pki?M9B(vgpJ+QhsERi3-8`QoOEb=nM&TO(l_qFIUA znLI>u@fBF0>O_&;A@%F&e=Ts#<%#btHl93oCR}t}PRd3Tn4a*vK(!cTD} zOLZq4POA22N6|n#baWSvQC6N}S9lseQMS26)F%Nth$tgg>< zcEcS0qvQR$#S4j;CD>uL4x)|a5Ghv5BOZP-wjcaaQom?4KPtRI>ta(q-3g}fWcgRA zSqJgPqB|R;dzXy`VVB13F>B3kxmM^NNF$i8a*rJok)P{NCYy^(l`{F|DG+|VWzfho z8g4{T&9B>85dzX~S3+7F`ago+pR!!?(d+RG60ltLjp!(rXSgT$_NkK}uHh zU#*mGP;Ht!d@Oz!3if14i53|6dErJJ54cAO@9B^~7f)OE=NG!Og^AaFm+@00LG0H- zvFHIznp7~C9ljB+por%$3(M#uZl#LQgf-j!+=EZiFi6IqoDy-d1>^Z0#g5W8epxA5 zGe~#G1cb|sBU`y_^^|r|TI7CH7X3mH$t)`=yPnQ|8}8XgT42HDn&K&9TJ+6=G(;cW z2ci8eMHo`P+OUU8c8GdQSjxA$+ur(5y0E?c+GWGja^zlhJo&@2g|e?39NFx zqWPT_dEQh%X0_1kJF~U#X4sN>Dff6%FF0-EeV-sd!f)li;viJDe4NiLZg&MlLKU*2 zbh}7R7NeXN#A4&q@0>!4)a=;#z^BP&8UY$bGY1kPN9jD=n^gjuZEdBHI7zic@ z^$S^z-~KF922%6TH6S~E8#FXxr7pR!uO>R1niEo<={Y8O?TX6ZQ+*y@X&D|#kJLTC zYRXJJZxR423rhzYj|X5$=9-%d3N^1jlb~h^&tXl>FlMEJKXSE?j8ZWS-`Xn<)TWLE#sj^53 zFE1XTc9O?0x4z0nAYIi+@ZsTCT;*H;RRL}9QR3;MJIOBOPv&c+B5Srk)s)%uVdhon z_7%BoGa<{hU1ELKhQopCaQOk9NW|T;-iHoadW-hFQ(gbQr)DXj#AEZIRkN>o{1Zo0 z*7f9TU6i$06rHi1ZYN<9tHav|4ay03>~(LyAr^fqDu@jz-} zy^VB&+SLKbrZ`|h>9xkRvP8UvD{|)pM&;iti+=1ypQv>Mq6bEXXHIz{2&%IbR_uJ6ybC2@f*jO?~gO_rdT0{sE%8e!x|xDf8uwZ zo=Nf{&}C4gZD9*hOi^Twz0Kz&t^>EK&&kCb(*B4~nIsdeKdZb9&{XH^h(xR1{#9T) z&Mu#NJhy>8lWuBIzxCOk14Fm7;EuIxtz$B^xa(4Q{J2SAc zipr8Ko-ol>UFFOqERcnw!o#c?5+IV>=e0A`{w{Jn$6DqAGv16LzBnXCMl=q~?lugC z*JUQE&U6$PEWNSGS%e~L;d=plT;w|@@YXH-&+Q3Jicf*SbRBhqwQx`iW*M;^c zKkH-etLPHR1}4RhZImjCC_VrCRAL{d1|nP@QGtgegz??Kds!=Q7_y$_*?5zr;pzGf*(+Y7$3TNGU zYTem2Q#A_6D9r;qxc?iRe1RBbyJO9Mpc|Odr9xn-<90{RVwDRVAnUbqkg&`9oUI%@>I}C^MH<_q`vLfX@ zFeyAOOqo6Vmm#qp(Np?7HVWCHliad~8mJ%CiqvIDHadr#k>SIlJ`*9SAk1!~y^8&= za;Fez6t*`1?{A}AZ^5p)f0o*4-`5IMv@^-fL zigS3k+}yni3cg;3{ro}3%`pl5Uhe2TuwLl|-4@c_E&TEF`E;7gWV%~aHx&mMkfCH+ z@mh{+x*ocpg#1B%^K3u9^ViAD#dBBYWz_XJnMBigjD>jB+G6XSNAQ#Q`{~20_+jji zMQfZG@CeWAAnN_LTX?m(Of>w!`a2XR$-742jHsPnU`HHBH@*wE`_^ z8+D0?Jn;GcjCa7BJQ8W+XSql3;N%w&3CnFt0dMs(J}btt+wY+QYrML@=+}1t=2(Z) z@(PljDj{8CcrbUk?p?S%YOgL_1`bgjejHuu`DGcOz`NgQQusC37iDV7sK{-Nu!i-( zYSpRRNfvcZ+7LAPe0St-`L<)Zyn<3~Mf!wnN}Vw=_<#(*Xs1ObdtF&FQZuN-GLpeM zjKt*u7v?SvKxm)5qywuNt_F0UREL}p6!rhK01g|8s!>2v68)4)DEl<%^)herKEJDD zpNTOSF<@(l=i zmk^4N@Q}tNl{iuyxc|tLD1P$^^-3LFtU6ll9c`RQ1)k5h{UyR9;yKue5duz^T~B^^ z5$~6dS;r6K(!}9Bye-?EAG?yY0FRlsgPuP>2ua>fN$^IGl>Y|z_`BGhU824-d1fgU zaKCK-Q2P4@w}rf4u=5oEjMLruib~=#5rJK>R3I&nx_uRRm{`;kcr~m1E^nSIg7R%j z_cD>CnI>L-=lDr*PVuz#q8(@(srt2OS2kM00TN(v_fP!6kXdexae~13e8xUT2Ak)f zk3Q+$Pb8$&vjwt=@v!c4!jW=8?@Pu#pwurruVetIjkhZj+LDJ_uDlnWo_9-9REIh2 zcnu>DV~}vkQWcM}wF|Lg#A?-`DmB|>Xg$RIeEt+ute1XPt`XVS_bJ|{;!hWasDq_E z?8|w;@5y?2=syLIbEo&i#NPQtr+Tx`F3&#nZSw0ENR`elvWp~w>M166H;>^Xfn^eI z7n9b0RBj9<8($^s8p);FoVNC)`C-z*#r^PZuC?&kZjz>~{EMkk=<36RZVKq%stQW< z{2%mVR?R6u7y50M>+xLg;X4@}@9oQrjU4$ z!E<-4@^S60oVk;{+FT%h0C8QmB7+~?b1gsWG~P!<%TsKRTXl!k36pc<%L{e(j&|@t zbl#OuDx2Wq>ElH>96f5F=?2T|d7g6cxIt-}fh7XW4j8MRn#yX|(@dm)5dUE5(?6vX z@;g5-%oUJfdLCgy5WT9z{sWNH9%LWH+0tpP%M!cPuR5Q#cCuo`F`wbRefNVVeV&{h zg^r^yZ3(6VBN4$(^DJhrvx37kHbmNYFVr3U^JSr51M3%iLJB3Fdy#uZgw~vfF$A=o z!m*xx1~>YOo}7G_S{i~C18o0BNQ132@F>XUCG9?;$j_wmceruJ9R<3|zWhR;_R(=6 z1drtz<=0keIt7?Wc67I*uh>f^_l>H^Jm?YY$+>DQKJm#cbSY!KMWwym@Q>ZF$neON z>pk#cuMH4ZR7BMk#I$)yde5BY%LFqQT;dSsAhy}#_#f%*(u7=oa)C7+Eok8Rmuj;3 zzh}W1GsNfqyO*Kf-DA_o?A}|=w?Ljn;k#4optEClA~=^xN0l33@x`K{j%X1rd{e^^CDno!0m6Ej)w*!H)U zGvaz1j$j~FE1g8Je$b37i2mt8kS4Ke#!2yL<0ih+)`%}+ETFhTUmL#mV1@I`I+E;I zhER_(zhgh}@zwe!lq&LG2ZG&30!Q|~ahikhMlM?s15@x)IS8=_R}~dtU46B8VQv)c zC4mQ|WFO1cT3`KeGk;0(xN~iBc1bVHGD}mM0V@1;avYdF65#*cw_nA=NS!Ki8lU-`SJk!xh!gbayyl6@P$vppbvc}**3@?! z&fu|bxfiG-Ma`)WdC8M=nX^Goz-a&VapEuz$*Sq!Gf~hGx{a6`VzHgfR$5G zy-{y(jDr$nYB7|#VEildGfYE7dvtqVnq|T;PB)=o6Ai`(7do)yw7r&N(iwk$z~QEN zoHv91|^Ht+u_WAis&QUg{5DClHh!1%ddcA*4RJD_^==+8ap+rd;h{C_XkYh z;@?N(w})*|*Pc|JMk4Em&#jH~a10(Dziyyin*RZ%6;_ni|GtBd@uY_hsYFJp*)n0> zshfaPxU-!KUYYpBdp(IUPuhjRo-X-oD$i};$US>9eQ|N#Vo#U%@8>=>!eLY=`nPG0 zSX3stWOx0~(~|I3Wnr>`Op*SMe;hZi9{@+fLgEchBsxuMk<>hm6?Q2yj24^A+ipA% zN;G6N5viE2m3MW}?q9VDnH(qYjVBaR2OX&>Y8mAU^qClNo)JmXk$Pt7zup45Wcny~ zJU9HP2BV98Z0ZVdNv29k))W0lo(TU%5}LeK1T>d#$XE= z-6&eUUT+nQCMpTO*f?7lciBm(+* zZMZr<0L^CY%Mf+Qn9UMuYUt7&4Tygq|M-;I#RIUp9V{}zVMuqw*CizQKEH!beJ6~A zRwsEQ3|Cg2U|}z7^_+!!a>71*YU;JEyf2|Yn(j%)&sX)@Ur;!5K<^#FNI0pHK?iWq zdq!Q;rp&HRb7btlSl8%1l_6M*lhr>KBES60E|UvEklpwe5x?I~T~bLA@i{TN1~dG} zN`IMGz)OO^a!u>i@*V+feZ$nr3~|ouiucFH36JyHM0O<%37^Ij(6PwdfsU}6smn6? ztywXUYJ-<|=e>7tJ=HqwYq|Xk;cPYy5I>8x5l+gZ#Q0Q}9<%^P+A9Ag1)jvTPCaH% zRtpdLl_F+MfmtkBn;^L0oWjlK)M%ZJY=@}^OMkmHKSi2h-yrR69n~|d_PeWo?t3+Z zm0PA3dHv$NUi;{hfK(O_;4nMmO5^qMa__w53OcYKX?BMDZ2@Wunfd87xyfwIbDj250nQKXfE_XqO@%6C2Ymz%|ZPJ>@9 z%=t{i1`EG5n5RrvK~2x>G?9Hj*k7m;39{OgP<%I`r#IIbU&UD}4GMZKwz1ETZ0v+dy*{e`_m)zWHuOlotJ-V|q5 zH#u~P^tMLyR0ShXhw(9E#EeQ3c%Hmk{h8qu_1C3d{ovp}FVhk?3R_>O+IOb?7mafB zP9v2-THX7>>1h-;v=7$eK~B0&m#6+reEkiY%@L4ZN1+C>xiSRTsPd!#VwwK+i~OS@ zj|n?dz!_?*E=29;YVZyG{VIyP!vFGP`gQ9?6L-QCH5GH8Z!JN zje6*}AA=U^%r{4>93wTb{5eyG+zjK(-#3?wRkhZoL~-sL=qUm_LHn>1KvCu7Oopxz zt@ENIANIrXW<4|E)Xn9tr`n*Xr(6sy2VpQ(}gKi$GqVOl%%T-y>VCel|AHf2tGlRF|#$Op~Q~AjI@&j?s5BB5JvE9Vr?p43YRkHQ@mGY!{?U_dVTCX4A0$ zYY+Zr&bDze>Q>2r*Jb{4)fV_5q$-IAh_iC8`&;FV8}ve;{63e{ z0wivtuPXR^&+~11jBE|gxZ(1p+i->-P8b4{>Z!&-Jr4_WZd-O@}z-gWm6Es@*L_%grJ)>bwJ9;`?L{XtKmyHJECLlVy0z{~|&Zsafieiuwo5W2;vPK>vQ=Tf-ACpvEmHZm?~rH~Me zDQOPRDJrxBxZ}T_cMObf^LsL{N&dv~#Qk0YPAX^F5!*}XBLzwu$mS;=w>yr;H&HA66nWiYkW-j~7OLt=2X3C~3-0@)3>YI1IU|j)Jtb>>L zp`$qzQ~7NoioJ{dr?JSM3KsW=TK(w#Lsn+DyU4pIKho?Bdpgq_9bL3M)mC|Ghl*qm zy8m2%AIkv-wklit@x?^DY2f?qK z5dz67V&#wHeC|f(Jwrqg^ebwT5wKcb>u-G;SA&=xq$GhpV{z`75!wA>`1Y{b$Lsz4 z%r4O48K09cYJwd*1owf!=-T;wRleybP6POP%*JDF++)8{^Jd?%DSroP!4$+N@3+Jj zNzMAdCNl-XatP40ZPL(g^TocILd7>G@ec19YUS2}HXSjm_8gbMZxV_)8XDqlCC1~T za!83*;kU`@u;7}GS5G}wKp8W8ysM!|SJg_OADxCKn*r-H$I+bM?;@DC&=ks=A=8P` zJJ6G=oMKVG(xHz=7MWKwuUCWmHeq9`VtEGpsSmt^0a@B9z85!w9{KJ0>(|xuR1=hr zr_EU>NgGSQp2LF+gBgFTsUK5ic*bupOv@|9`o1fj)|HFs*Rk?_f79c#e;|(lkYWik ziJb=<$nNOPKB9S0K7#rl75FyZyTP!{x7;Y2`^dgQFFJqBOU`C^kj-$}>1++zze3#T zS#WA#4YgC%ldsl7weh~ay?sFRcx=DC4;n9t&|g$#znVX!jP$%@33+cW3VJ9s1_E6< zz$1V;vg`@BjpCokU4J0lZECMyg`EhxcnpnK>!VpYki=)eG85~su_A{4mrt$h7H>kA z%Zg8lrb9Y}l8JqA+jq;8_f=C7lHL=MuRz5-aIeDIQO-;BSyoH59Ffvo@CehQr%t{n zs5y9H`I0xCyym}Lcl56&2WbJlwE{+jFq}!z?}fMVt`F;dlPgDEYhJ&rGURwrtcj~% zM03AlayKc;>xa>=G$RSCaYmp?>ziiOA!8GHA{&>&nko&iuiK+qOhs$q@_(phG6KJ} zu!~=z$vF!k;BdwrH5L)uNDA;MzOfz&_o7B5iRaV_uS-(& z{~6=3O`6AIq1FmR!F}*+5$x&m(KHzZHQs(uD1Y}?+Up83@kpBbp$F{F$6p*0Z6s&W z0(zoQN&ZmNv^ei*(PGhZ)eE!`JMlzC!XaevaE#NZjE^Ok;9ws)Zfv)Ef+KnUA7SqS z)l|?l3@eB<0TmIHrXV6UNbeC5QE5t-s)9i1y@v=QN*9q{0@6W2dQU)lFQG^cz4xAw z@?X^FdH?tO&v*WuoRfQQ?(E&&nVp%Poq{~yx*-y+rJS8pxm;3TUr()~!mW{NRB3NK zn>vwA$1bH+5LNH4_Z^Mq>^v_d;z5E+`F-EJ{7N(C-Nc2 zfR0 zPK>tLmSmyoO*RGF>o>mN?U2@LDZG8BfNVFuH~8_DFr(xTAIN|lwQntzO!6_09rKM@ z`7J6U7X)aVu4j15QEqO1#eLCalXA{9DGHB_^gkCAj$oH1G}Dio!ZusOlg9l{(?7CF zyRNjiw||1%jD2hO`=|W%H_py`36`lhm{!Qo*Hu+fL<)5EnhU4J9&dQbQv}S;&a%q5 zuh^!R*2H~Z%@WM|rf}y0ocx9Ab5hPClD{Tpzgu&;nBD!u70J@;!2_c4a}X!~qv{~v z&iy#D`2dXzbBGeT=S=Q2SVZ5)eFy;VB$sk{^$-^HnW?czxzR3Jz@ z$Ih%zNEiN$Oq9dXulXuDhbpDZwb?0=!g9P353aj3U3smgK*fR-!ePWhPd7m2k4+4@N)aTU#Aor}q9pGE_o^HSaw z2hy=rYd#$^H#m9r;fuUe$@l@@KR`^obI~?>Rbh8SnpPk*TBoW2%mdBCE` zu~XvuCGq()wwHTbdxl&}{UV8A7oZ?o{>&iLhZ5dr~ z|24x#a*GAS*8NJ_MYaUHp0eh0r5Kl_C}d_p(ESoa_|(s^UqZno_B9+wb>o3M`G_5D zzre(ZFjAy6gO`r6XQ=QMH}ih~-#lLV0>AG?kbu8U3fs99()UpKH26;pwEdJ)6W(xj zhntip{ie&g8Ei+bSGW$8nyCG}@%2$aNAJ^fBVtP0i77eo#+Qst_k+)co9tgAX=LW6 zaDH*-iN^A!M$b1lInQUHakVu=IY3RZMSwJ+hqUFp+1(F0E7i3{&Lfd>B2ttZ_VtG& z4{swa`&@qLQU`UaC5hA9T{~@yV1*|o73mfzT>f?ab8WQ|tGVBJS-1Jum7Z z&$tKKVL^uY)QE7PoNRjhYpGsyK3SHJl?k{*mzf)!BXuv1SZQ|A~jyA?h{qQvhT#oO_#qimXq4mQU z&d;t#_r+rL5RVVwCfBy5#L&TSe=t1yB3>s>@#aRGT;Y$n7+}eC{&oGuyqGznq7(#0 zDm=*!vJ`#+$5r2qU@^IL9a>zu-o!6tv53S17C1GJw7c6@#KpAJ9VwVCGsl1P6-HWabB^4Y6{1QR~Lsx4qTh7aT zi%vkDsB*FL)an=eYYmA&n{{?oTFIpKMMR(J>er%2fRQ?SfcsvFd9ubc@B z&b6yb3irIbq~7m8e`fj|{E(E%OXsg8WKWU)ej-J4;mbsODZ}DBn9{3X-p9N$8<^4* zRrlU=H6&oBAM;&sgJcUcPG_L9c`{skqGAM{Nsuo&c$L0Y@;tr%JA3&>F@>!4^VS=) z5g~?w2~U-t3$!Je74*m53OoE_PA@9bZfp@Bydp;wf1@O#dLXs5Y@Jq~*EAL(Zz*f0 z!#liu45oWnQ&~wT_|4$QiQnfA^G_xp??$kL<;BHYnbuvU@p#fxpz=_i*M4g_^Q}~y zlYxdCkzaCcf(yhL4DNNBE|4X_;mYU3jBYpNmjBkDbg>{5{&)|~rteJqTr7N7RVyFk zT`OT3&(>*?Oh z(bUK}?~Tfg%Z9ga7hV15w)EYiGo|vaz!fnzDJ`UjD0TiGwF|3)KG)05mYUPS@@gAC z@~`K*vC5ivjG;HIwDXR?2G^)F20C$qzZXc`BuR=2%RK`L6^?n4+nQ5Kziich#9`ZH zW?%j4=%()D3qO8J<$SxfX`8?_%&(b`=14}->%gBE>e}ay*~*`8l+HYSSMs4i5{ebI zU0wC3=b_j`V26vQ9h+!^UTYWVT&`z7{oS^OB>Mdn21uy}8`U49ESeV<^F2`!A9|}D zOn%L-VhyE|gK)j$)AM^v|AwLxs-pX0kfi`(TUCjt0wN?aom9P)IK?b(|LzKds`2F} zq4p^l(MIG3V~{e_zWesHoTTW5_uOF%7+-`o@2}RLBnhBwbDWA$SwvWvd8174GUSV` z%aq%w|3Qy=N(dusY9VWaQAz1oN(R?x$M1{B^UtF^-*gmw@Z+=ppfF6=$=lJ`ILy^P z{I{+#Ux1FAvZ-qh_fiv5`ez+%fYExGUH+67OQLMAEPQ!zw(}gh{?)Obhg)~AsN`2& z%F>HAI7hwtuih#JBlK1E#gZHVop0nq{c5(5*FlS=}g}e~%yPWU++t6gSm7@sG z%$!Q@kmmHf4|4QfDe)@S=4yb9DKtj6(O`FWgGtKOb^25Vdd!_$Ka-(pXdBD9{^R}` z$NotoQ_~w_|Aq8N%|!2L_|Es6`*iRF>8P)3Sz>9=RIKh#N6g=f5V?Cl-UM{%ap5!3 z%&*0?ZcGfDiG?qe2ItboMJ}cn{L*FlKw?B9;94H7T5d41R4`<+M<(#e)lZDssUtW9 zba)(k2YnA~RAwk|P`DtU^VuHCX!|a(j%g+s2-6^W{?z{h>Uo7ilaNsNqR4R7l3ptn zSJw?HvhF(<6=u}}sU^3aOQmMM5kXDamh!_$UarqONVOTz^i1kmV^a1`9yHRu5?u-nf0aIRbDi&iv7}X^hJ*3(zWP1O z{LPM*R@ZV!wfbfH=i}^??|KVwR~4GOKUmI8JO3?zC($1T6!WEADZCD>XQ&Q?_{mqTZV4ZmBLd4w0P z^DS}Q5GUchG}p11An?A$4bSxv#aJ8wk`8PQ>D4u)4-FTWog3g}*ba2BI{xD`kmt^u z?}Zt5f%)`#Us{A;O^4WTT6&7DX@{p}*BO+I<|DBrzfLC)TWtgl3XXoSc?qtpi~QEg z;jPE0DnJg6^gEUbK~mekPlIi;O$Zmx1>9<1IQ`=r&Yn%Jr`)&BTy zAvZoJ#y9`N3(gRMLMU4Q`2L{uRazD?i$J~eIdPB_-rBh0t6E$?5(d9kF+MQ89;5vn zh2J0RSyw)Fxl=;H?xxc?o67F;zG$*t<=)6Jg~l_l0X?13+c`U>droOok4-L@{phBA z@E=aJ$H7hv$R)GeLGh$cBgr+FJ(%=GmBZ1myL%@35~c0=i3>3gkeNc4?QwiwO1 z%-^fL6?h9bvO?G9p(DQ?dgbR%QMNzgy1T%&7dskTA?>r^@*XkVGVs&1Ir!B*SXA7r zv)U@{G3PH?y(cAI)^Q+Yr<=G6bXvE%Xc}F^!ehX~YQnWD%c?Y+q&Ii*Neqaqp+8mO$=RL(z)@yn3|pcV4WIK2(Yj%Q81&)X{zM zrHfzdW1L^gvl7GfXDI^8EuTUtR-gFcJu$^*DiU@ZrSV~Tf+#LBE#oQgUBw^a-J08R zT$y-(RFjIa0X6NT!vJwR9g!BA4gbJ8Ngx|UTo=G0g=dnZVRvU{LjL2YfXl3QG~%N1 zkTQ$XMM}ldEL{ulFwzQ-VQrmXbQk*Sah-Rz22uC?o54Oy+o!K(t}YxIa|0Ze!m%OM zs~=zYYD+JU3E}mFpYVG--#-Uct;NT*gA-h&4+q)w?0LrNvs6tV3yMFHQn~O+SJ0$4 zSaZ2isK)eZHpCz{MqUjR>#xANex!CqW8_-ShY}!j&aKkYQo~AnE(&L|2TrZD3Waz6 z?a>Fxs-8(yX7Rpg8hqt{XHf4VXLWJ{A7IcBydNXs*<)eX2dY&M-M{yx;_Y>jq4f)e z9Ri&+immBzk*vla+3Yf3tBr!9L_a<8ULMTszdlNh9OQb%3!(h}MYnn9CQ~7mcBQ(? z^^WyBFFz)Wo>%|6MHZDj6!)E_3AYl3sTSW3eCjZ}7{OS;*0dsM&bfT(@(ogMDXD0U z$!1nK_+{ofQzO_ubMSsZr}2{3{d7a7Cfoz(!>Nb*@%cdhNMO;AlK!LGl#uS1s=-%O zR+$DxIY1Ol>-w#AX(?PqA9J51gfG5ZzxK*zZ1hmp#y|755d`(A_?u$gz3l6eJliKx z3Lm(w_+q6LDO$cU+{Qkn?1Kn9S27D>uvar?tLmi+`o1M$S-MJif)moS3j_wPJF?`} zQt|ax+f8I?QXa80Guw#X+!2kKw-xs}-K;!5KDHE2AOxnTr>o~=FnDtG#az3(C1<%G zt1;7bKR)blQHP7j@QSVM$C1H>8KVzD`sBW7)X3`3GNmJgW=wzTRMry$(i(gLbl}-$xJ=V zCJLGyqE1iW8zB5z7`F9ab5v{-m-E;p#ciHx^?*Ri9TM zdb3VnQ8GYgV=o-+G|Zf{GHY|1@h~-Im#rfDlRs8|eDUH%i)_p956{!~1+=RgSzK9Z z=?g1b9Sgk0Xy)k|{|6iY0<<_*ERF*fL}_kP|CCm0y_3A~OFx)Nd+XJRm8owUP?k(2}nG8z|uwTT-J}i#0=^N%+m)--DMhRBHQcFJ_pL!>NsZiD!$Q|wn;31_+_5ToKLLBw_5w&wGq4DGj4TR zSzLX`G`&zXU6Z5ll&4@EJKK#zUpltmvBO)g6`PYU1!HFTe`=6xSK0ASq`ml_t3Y$& z*g#Ah4d^y+atT7R;$~{nMso^YYs!au zJJn5weKpH}SEBz^2$7&3cHN+x{({$S3kwUt0qJaHxBrdIbu~}uEB`0Rchy2!)4<)1 z1%~H853Rekc`><}L+9MOtS;#mi9aw*Q-g!)TWfAI4F3{ajn7mPB+Y9_#gstWOoRes zgx=peFpK1E4D6^*cU9tbgpY-E$2@u$be+V=g6AOes__q%XspgxC8tdKD9Ypq7hkhn ze4UW&?UTNrKIY6>N?VxET6rfqF$kzKdnecaao^KQlTC>4t_H`z%zg47)Hh8%zKl~JkYv^Z&tq=_k0e^*XYc&;~_RU)nO+v4L=!K5SlFHx0T=OF#S>Hz{ z=kqDl_kOI7Pprnyys=!De(!zPUGtg&k4h+P>LTT54i@JOS-yf&az(PRWI7-i0q8s< z*&ip+Me?#4$41}Li!OyGDz>^)Yr3HFn5TD3jCN&4zkFYhu}s=^k4ZD|nvAJGNRFwy zL0?vIhpp%{+w-DVcRYMZ;HV*q)s73XMe3sJjO5f+pIjS@w!FR`X$?yCU#e(vjJh=a z`Xj>4k{uZ|Ot!onfE}NcDYCqN~wgMQsN^p6{v8lBg^O zO~|o?m@d2t3kw6hm;uYpx%{7DclYvNzpfVVH{_sj{tz`}9Q&F{5Crl`^>`hy6ME-T z(V?DRWk2=N%c!=3l!&t4tkn|@PPH~{@Q^v^@UMM3z$z>BkIZZZC)6F}8b($t^@MxxOB$N3icOOIJgOY3ZK z3WDdf(g65BJppPTko{R5z@Wz+jpNQ5Y5&XP&fa8ZYa90W*33;Hw=)1zDDI2qKI@S4 z`TxSjCnw+edn=wK{Os{R-+w3RKzqYM^OFDGd`1Mozk1B`^Yj01jh;KB4+`hJ#l87{$DV_amzoL!t;;M2DxC( zc}ellYZ?F8jsDD7a4_Y+TRi>$ZTLTWJaG17ryr~I2l%h0|Lk4Get7SHFg9oCJDajk z-#(r7=>Iik^9QS_eeB*)o1 zoXgX{{=N7gqLcK)N&XwyHLHIe25_x&{!Cl?GpKu6e=Y?7I5Ysw=rJ2s*!~&%e`)tm z1A1io7pVVS6@&w2!~bITEHZVk$6}Rz8iqyVd;*fYy4i6Z{-cQ1?jpinFS7Vk6p@r1 zesYXd|6D{*Z0<+^aKV}k!2d#02vyV4yoNaPsLEp@w-mxD*5g`h zTmB$ZM}GIl_Rb5AN3)1pA0$2nias?4Ee})Y`E5k+!*)k|+TfZ_8(Y6C2$ismopGPn zK8u{}aC`>1e#NlU!3Wh2!WB?gR>G%5jxAy5M_H03-~M3kGpVh`#Y!9yXO5#(!eIxV z^L&vzno)Hm??T?cFExtAMMHcsvmNM@&3$pruF1pd$f$xS5#%0o7f@1iQO3Uhs2Fth zf|uJ)IL(j^L=JO+kYT^2xp}hU)8zo`QtET2B)5JrWW5i=Nc1SP*=&z7_kez{kG?G& z8{RLhJcb@u(gSmDP6M!pg`_|$QFZ(V(iq!D#{+(s^Uuj2)q{=j3ziNAYSDT$1Ha}z zz;BleIL8bg8>26t$2QRUfq>{xUE8Ue7+<_^6Y1gj`zL5Hc8mSu;VB1qO(3aQ|CqP`xlQ^-g_pQdLTXCjF^0@2F$ z(on|(J=hhFYBS=Ta!G(6j zel!hnQp3&k`ZsKF-)EIha9l4}oxc9*{pndybivnDkNWwgV8!=f0_Oz<6SBXfRK?8| zUF253KkAiUYBcU|Kz80pJl9lmKAVVdlTc%+tC#ZGG&6l?MvK2d=mGej6#JiL@StMi z@FU_9T?Oof{T7FlxWgpY14dc%rcD_gxAk+E4t5-b*EsS!txQyWzcllJh&*A#7wXC+ zntFEVjSi00nhr7Vyuxo2?!Lx?PJR~=IO5L{is^fl*^xWHEQl+xd?Duw2LZ%ZIU^#G zjlEYz)40>CuM$yz8bJHs7=Z)qXk(M3#nA~JG1E#^slaWf++mQ<7PhMwZ5UGu+p{ER z_gxoR_mJN@kgvqI=Am({pF0cMR7bJD+{6*sc7T#SyZP1d%fu2auYO*6A9S`q34Qp; zk78PexD2bt4lWcCuh%(YJqYV-*SB|~4u-zzs#G=)uQem_433bQ%|81{nv3NgJ3`e= z(a0nCOt>;~|FrQHckm|ZCDz`D~+wmAYIKUBpt6d__A&p`L?3AW{wwSAlyUTLhz6DbK#E0B9Wu%9Lr}7jI zf#eg@$D{ATM@>gHPO)8!TUB;b4tQyt`mt9BG6sZbq7Ju>vtD>~`2xlw0FZ!tJ@3ZF z-E8A$ilA#Qb)QYgp8Y5u*fQ(&$}6jZl~q0Z5|d?Nx~+n&398clh~`gvImK=i+U+)4 z#s`ui^c@$3FC_`@$aW0-h*loX5qe~Q-bxq2*uky+}!UueMs~>C$;_;`4oVQW7 za!bGOIEgpVT`8|Ax9`4r<0ukvR1HVdW?PCAF)$5ueBt34)9Aq;6UneI(ME!m-oKAZ z``EpSmDzdke=c{h6Qy<(HBXCOc7*B%Ou&emQmcwVt%7^%sp7{|7-`}Yi8UI7&6$IQ zSvWC)dYgJ^d&mLL7~5xjy23cK?=L`(-cdjKlnXI0M2bs#-AuNN?K&bhjHVo)KJ+*i z2FGfts7(7e6&RK&KU(eAApY(en}zRT>e^M7fAnmbwD#dO_iZBGh$5_DDU1!00VLpX z!pVBMOLu*S8Ci}gZ<{4*cq||F?w@k|t&Yx+jvXe@!HLw?(dCJtU0G}6wBP@;Ipsf;dzFq>i>l&TA=`6k+h)uN9=x-Z11)L z*og-TYi;t?Bcd|oSr&wK_9l1}agF=-tVmtRoh+D8ax80#bAND@9n~bg0 zz6~<#+o!rq4_*fZlIB(Hm$Fw+8P;hHRl-iTT`DKbY7`Sq z!0zDHX2+eGAjLkT;~_lH^gc(Rt-k(*Tg&~vFw`zA!_7^MbDJ#11MMP?% z<*)ZB;*s9%Fmduz2U*<4p$}W_>X4shSN0LAF9jD2Q@gy-xdfMg4kwHf1(TDfPuhrN z8))jd-0#j1^0gz8zQ*leP>*QF87`tOq8nMU9BzwlXb%Q-6|OTS6Y(?*zXl2?wwY#C zkfD|vgS9@Qcc=Q$o_dzs1nOhiT{E!ZX}985gxx%GbrdnJS1MrwuiusSbe!?8zO9{Bgp2(t?SUA4$r7yQa)gXo8JL z5fMbBtY{8Zfw-epN)D#!8n)BnxH!l2-A)u{0AHCHXT9|#g$O1B$v=n}U%O6#5!|rl z&8bkQsj?8AH})%iR3;=6OG>?DQGC9?3cx7j=|_;42WZ)>SmHY~KF0Jy7g;Z2md>x% z=d?`&fn!A!_bqdQYxadcUKGcTqAMiq9mO4P;ulT(E3XF5Zm`Je6VeD^^OI#iDibw9 zPy7iCN4Jx_PiQ}mfB~VgMZa}q+Ia72oOZSg#h=hu@q5eKX)mB@RmF2d-qJv+YZTZNS%aR_< zWfnw8WZatopLiIABzJ`(^V3}?e27$a0RSVR2k)WM3~uuR#`(jY5HaC0_qMEKs8Dih zR;<*478uJhDvR3(yX+qf2*CDX$(x3+iGYd#wb4s3xsdfhZ4-HXs6pr87q$d9M)FPZ z_qp-xA5VG>kU8Iar^l`s7B5est^t&em|QI*v7SwpF|}eBGE^sg?Y+%{U1jG(9;y{g zycDlpg;|ryoVLM^w248A4j6GEw~o-Jm$PEW-w6*ctC|3-V!CZ^YrGhH@~x8iMW*gD z2;f@Dkz2BptP>s2;t`2Bo(a1XxRlA@VMEENX>E;*b!ovp+Pl5LPGJtydU4Iu3j@g4 zJ9TfnObKHu@cA#aLlznd-`i)X|A-A@(WVzCkUPQ|P{xhU17^L?4!lBd?IR->9gvIT zZ3rvcBSmx4-JZ1qp-6fB1d-ukt}z_nZjiU{Y+~FpR&lr#ed^)60i8!;_%53n153P# zXDa)ikNxBIgKffj9NS6bwurZPd#GvY`~eK@f!@KH)uVTR?6~fM30t8Hlj?x}!giX< zZY__kDs}7HL1J#4+y?DPeU1xsBfnRktv_TiVnF{5<<-Gi35TXyy7A3?AfB>qw-1zq z{70el1IyTHJnK%?QC=Ub=ak{dNL^uA}LW(3c7#u(jkWB&vqpsy&HPy#3Y>WCKze}C^i2|pPV{mzYP zDI$zueWvW~L=(u2a37B~@Hy!EoojK9Y3j=~h8l7%1A3-=4vSqx8=u+ByN40UXPXm} zKRUDjhAS^Sfl1%Iz|gsJ+V;eV zqEz6r)Q|0v>e*PBtme~$YIrnF{*;sH?k=J3Ccp|6_1tva+`MZEhuZb!tFz-Cb;BSg zAJfxVXJX&{y+lC-M%nTb3%{-b$;fVcq`K@fMqicqHr=`ZWOI+w|Iv-@cb1)$7I>`c za#qsa`)tdcErm|qcw(Gf7&Hq}?x~(I+Imj?>n#ck>8@hYp+(waXARp8%w$|Ak))t1 z!|@;v$z!5nFWjf6XuNe(8rp{+Nss9Cf$tl7g_%ywk2;f_W8tP~IL93T2R)zj<`^l% zC#$p(9F@271PpbPUvKrGEJu*}FghRy(tvY{ofva8<$yh|y#q!>K?6b2E?9PF@oSf#Ia zSn{&6Y*D%Uy#}`+6jKshstPZ5(b&_-vY|fp+l~t*AKk6Vj-&17^LU&HwQWKHrBfvi zGT<7?5>73AD-LKqgpNFO__Ydq_HDDEn1~zM%e6B|L_UAKGH5jY*e_Q$l}c=$k?Nc1 zZ=42Ezm9>Wd{0&j1$%i9wIpuOi)O<$YWxn&Atuwabgl0vgQi@ajH*#Z{y?Ja)us!+ zu$hS#T3ZNn3MdAB-lQxdE8QM{0RB;TtU*uQy`9opi9fZ}#btR0Z8}-!KAn;wKK@?# zCKb6{?oi=#+S;}(Zkq|(bAj<$o|el^3vi!na0=+Ubv~J*jO%OFn)A3K+{aeYD=g}n z)+NJ(`E56{@Kb<~t?^NPMo*b@mhc26D zZJnrW!+fI|iprvRZ3T{|zEojjHcbhWCq}KQ^`bOWR@faHt?w?oLPu1E6;4u_5AR!+0+#&UjD*G#-G|&Rvo`ENdi%jbs$1#oL0K$iZVDO@G*m) zxZE4H!_>sl>(np^jCI4_W{g%H2!?dgUavnDiFJLgJPN3WJ!lEOQP3C zq({F>vDYeOe2~jt_-RY@BCMu-@<&(TF-O^f9(bZ+>ldJ}3VY9bxovwVp};>OyLqlM z&PU$rmo+^Iy)g$!6*vs-134M02&yNSJ{5b`k>KR(Oj|00e`s3G_P z^Mx+L$+}xdsuo*y0ik~TQVL?JjMQ+H?f3Qiw5r#lepi<=vk`GI6@DQw_^RD+Hl}Xb z9U**1`0dTFi~9&d%Uk3r7kJj7w&h1*T6||Gc`s{t{HHjHw|g3P=~*wZ!?7ScVq{;X z9BMI7-%x}IM*fntVBN~5%=LVt^sWU=^slgey49g32S3%sBFN*Wy|sFhrW>;Dc6-3K zgyqQJ##4(2%t+i@fDn8!g=-Ql}OK^)pCY3TX# zrArKOLPg4W$lFfbQKvFxil4!{B_Y9{rDm41wRh^;lv$ind^ItB8b+l0;r{w~8em>- zt3|NhRBm7yT`j5!IPx%O^ZWWsfNLRE1NLTG4=L312R#Ip<4KK*eCxxYQ=1|f=OWIZ znfNguT_y)zTT(7t>|$!5Y*xFMrH%sd)3+)qHuN@_50sTJ`surIBCG{7CdO&u%=Ft=!OF*+71BR$h{=Q`q#<5d)8qBf^m3cK?g#i}dK@~V`{*#?P(=bmIwme>3SHdm@EJKT*-OhN zTjeioG>Q;G)1t6otT zUcGy^=$qtu7^6*=ICbHi&;S8oL>@dq#=-arM_QqCe?H0AF26f}?%b=p+3D#LCKg>D;+A z65cZ?q0y?sF5s8<>;-3^hNtJxGXcL#iJ1N6|7l%l^b<#gBhcxqzmT{tq|m!)#c3hM znog7F%o6r2OiWg`w#kx%$M~sQkAnRCd!4SW?6W(wO=Wr9UBXG#z}Y~e99txHKtn_i zxBM<;-~M$0gXV}E0=yIf(aXGdfw+`|>+Gk7Lgf&@$1hG zo`^&soZ5NwI=s)@e`kgef`yJP! z>yM{>>?SO->=NNb-12g=OYg9rX}$aAIFfjZ)X37*3IqQ-+MFn=nhQ}8tX}9A>BF70 zfz^>NqI+>j+~O}P7#0POh(GR6S9I`3C5`+r^cdFB`(aX#l|f_Fy?pORudc1V5vc@> zyp4?t03%hRp`$Ckf!+BCmfhtkdRZD&|EO-Bb^Bzj&#yI=8{Sh++y8b>D#v4R(d;<@=6Vvp1N|3 zB+5abv-_RQc9OBFD5?SV73`~KgLDdX>zBleq=>kEP|XU*GntJ*W`|dKcIjg2+=F9d z9TqEIm;}!kP^&IbSC0hRxB0{ac{(LZpo5(#dO6NXYxrJ?*d-S#(TL zArnle-qu8=1I~mh)&aT>=$VH@dUbOQa7?%5Zzquy_y!~HBgDPGw@>Fxt7%8#Cy*~@ zGTAdp$!UG}lhC*%B!*cRd;T{PMqHLZuFgsIUQ6}aN*7-z;*ms&mXlzs#68^sQaah4 z2{a*Ad|V#Wp)q(83PPM@Qz8zsKm+Y4bs4+4x`P5tzFvL)j~|;r%!T(xaT{Xi11Q-K zySi9wC9(y005kYNYL*ghXywhiVg)w10>sN#OB++^CMxVQ?9z&hi-S3H_MN0(M;ukl zk=Rkz1Jle#WHR;HEVnI`^fN79_5B>-d9b`&Dk0IGo6e?87V7{zoe&cfi=mc{4N8m| zJc-dW>Db4C{C27H&!PQJH_N<1L#sWD7ms$^*kJ%lYu(m$JN-63?7TVcuc)XXY=6U5-}taU zM||x)ot^@VYPunOj+>->15DVB+^(9Z9l!VuUf_Y)Pg#^pDdCSK^0&-8jlWkhe5e%$ z|CCQ9Cnrb577_FFTjpz4Ew}f&Ksk-rFS{L9NYJonQexuWUKJlv9#SL`zYU7a=}Fx4 z#P(!A)*5vi-!uIA>ih?D0}bn^(H-V)ZesYag2pvvvRs=x*)&z*%o2n}5X@_y8U4hK zQdfF4g6dYS`=+&(RhnDG|FZkoLXUdB6m{Z34mitFjTsha>^_D)TpttFE?mCW_h|&v!40q5@0Ecx zEp7q`m}?1z?-#z5E$@tql*g`g#_)A?%FF$_XeRJ&E9r7rarw`%+Q=WG!S zzuwT$FlGr?+g4v}{G24=kloo7!oXLEBw%-=P#8%yylCXnw_*qqT1IBd=28Z%JM!&; z?7=ZE+h;K#ikPmugdM(+JrCHihpqPtr8@RT#x@z$uVjp0DJrgh<85@WPZ=b_6M9da zWtV{&z6T>L!+NFH`JX*oY>bGYmWXZ)X3u=8m$yevNG?^~Evako;o#~m z0|;xeKhk%B6OP}ohqX*B5{p&1Pn-M`W; zG}CQ{AxfhOwrZk1qnn?qtuWdq8Qv#=!+58eAFwX_+k<6ZN1l9R?NQZB8rgvpG4QU+ z)#2KOFDi)R`t9&OC9z>T-x*RZ*~wtY{#Y?y=ziJ0)p8`M_Pg`y7qDEP??8ZPka@G* z>Z0T@gT7tU{$&=8a7Mh}SBd;57?02ZR5RqUvT`1)FZy)aqq#0TJUlUbAba}Cd~I#5 zOZ8;)eLDG*Tlk~?3@w81)Vhf>a(!|4TAx+uW~eES!>)MXTPG*LpNUECqO>$L17AQ@ zGb9EEUbslV15T_Gi|Ji~K!g1~yYWlk!jzdm0V_TOd$Il*J$s7Zv(@9Ie2&<+1LkGB zk9_V!61h`71JpDYz14TaruS2i`)_Ub=CBTyX}$8r=TzBbYuF7&mHA@pSz!F$ou)+W zDC9$4*aI6$zba1r z$*YOI%ds(jVetLT@?~Fz+>649{Jvm!N;QChxU}jEva&u@Ov_^jA_uwaoToF?v@lq0 zzn0b)_sxCh%W)ek#%Xc(*#FYZ0Nf=uqn;n+SGsb+#+^n?%tQ1>%lK2e8u{3u@nb0V z(iz)YJn#w3fD$6b37_b?i|a~3c)}APj5~>+ zu&>=bEP_EXCm7BVFRD_*&EOT3<}~C99ll?YZlFkLGbfEjy=OHO1&_k9(Ev zw~+#>2sa7-!C-1H2!`o8D0S_XT2A(u_A1jNeuCs4=9oSomyzt*Ei;RZeXIuFWHrxH zyR5sm^=3{~^h?EyySkS;tvpr%K?lVG*+w4o%JgfvdC5c`fd)-fd8G(VV4R{?r(Vog z2dx(oep-1DK{|Igw*mF$U11Q!-kuH25R&*}Tre41$2oonI~a#}6hl8QA?xJpWfPhB zYCPxkjJJe|^ro3ojL)mc#6WVE2HbnDj@O(Cmd;8Z`IzH$w&GMRSx)RG51d*J#2+KM zGRzEGRdpIYfR7KPZeLl6TSXGqk)4&M`-!9dca<=~{RA>^Q!BmuQ`vBd@i7gD>-A9E zyAelDiCBm__L~}UGs$z?RlaiZgKuV_`$v>+%QBdVIXXJx%$6Fb)+8JZie%+@m3?`b zWnAm7k}Q&vSRSw@d&gvZ9%S?guXgQy5h~`8P%E{{g?u)V@Yac}=r)7oLM%BJmop9p zT+8~1*JxUr>AFRkhl8z{Q*OF@OP9rHgx2r2GUueGW@j?4nX#YhOHH8eN;0%{dJNc{ zMiNgVzwSU##I4%x>?!htt1+V(KmZau^$@}-MbrF_tC zTT%gy1%k*1Y9G(Ktkro0zAO??*DFCH;qH^qq2;*Y>>7@&W;Efb(qqbvv0jp#mW2t% z7~x1Vj$4hN`$)MdJC2zLwAh&o>GdaNK8N${L`i(Nmf_=`<4VNgk6j-KdRAt7m)2Sl zQu=DnNSV3s86?{8=u9gbF3>{>HtqSLgVpZfwQ;y*aE`%T=DK2%2Oum=A;?>J=l;|a zcEZj_`bek5PrRSYN@0$UpY2sAr&PiZuL$e`0fjPtr+`|RNy9JBg^kLlA;S*Hy^$>+ zxb_y(lLtZU{Gx_*CyLov`OK{q6lKF5y;mbD7?W>0@k)Mmh-81HU7f1z^Z4LdtV4ev z8~$Sd<7wBeM1q#g_`ck)X0ucqYwJ##?N!TEKX_r?Ugw_YxMq%CQiZbRwRbruk}+z# zqI{-ht4Jul-12h8cO!Kk#zZTbB=HS4&l&$sXzq^p8GC6i4yXbQXZeXn zwXgI&KGy3`m<7wEgp0NMGt?BBk5OK=Z3EnZYI4*ovz;lBsmu;7tCKT8*Z`a-PY)7; zP>mGt5=DB09+nmNTG&6Pal@EB?ywBm%8txR7lh65nCeWsmGyzMR(KFVhIye> zN9er0yrgS|Rw~|W(c%!bduv)%0(5|ump7l&GPwRgiQD@1+WI)Icm3G0Sk+`j1LY*Mu@F@Q1M3}=M1AN$k!zKc}^Gb1rQ4%2`P9t3SQ zqo(gojtmbQd#`3G8?uiBnK*wfzR$MmGhMteR6@j~iE{Xc{=S@hA=;ryo(_wYxn?*nc}SGF7s#;~4vxw$t9u z?dAAArUx}WFf60@$xNOrTm_f&q;5Z&S5{Gf1TH@Cn4>~DN4US5$V}azZ;seI(_8>9 zBJ*nqKEXNiQT#(5$H2q{p#ITsCt}Gktr7?Y!%JVKf0qG5hmZY~jD%lcHT<%bC#1RIL^|`-GDiZ1uJ4dhfl;^`7RaOc+@uaP+-b8B5Q$*h+A^2ld zB)QP|uWaet^;X*7GV6=&?CjP@i;%z`jNNPDN{zy?`m%^@==R0{LKp>`;(dY3kUp|8 z*-r%IO!(2*fZj>XdZC$!Xzj3I#=%~QUR^*Z)b!*RqZN#1n63-iav&bVou)I5Bwo7poDX6KIb&sOgAz?F^Y3ZeW;>v+c(88ngENBW^ry%6w3t{~-zqy??1Fj^ zZ2$7SnCe-~;%$Afo6U$T=@K-{;^5s3&#FwD>_E99ylpGcW6#=tH(aHvKSw?xjR{{CIRoGrlij0?REb%5krr?0AHERK7=d z$F6G9YdOXC*@2d*sA%&uWzm7nJt>FpWn9mapsC9P_PwTry|{U)>WYfkH6P+GJMo46 z`l_Sf&h~qJ@GYj+d91>Y8GkXX zh{6b4ZK45AmUl~c>#l3|U-qvI9_Lp+UDFYN z1QJ(v?Gs@YvCBQ%dJ^A|PyrR)^ryeVOm12~96QO&NyXM8Pi3qv?=}6@v`AB%0QArt z^mCTYl$3)Brwdrm=eyy;j@1Rr8Dj5;DEiki@7Zx_b>=k%Eb(3UR^)Xag7|3$(SZ2* zD%?QEXw;C6yQG1?mMvnIWd?cG1sIYZVWJUr^Evjt?Hjs2XasZ~yeP^EU0a!dR%>ui z`2`DpC`VoiF0H$!l6<5PX1d|{jecy2{k8NN`_FmjPS8&yx#Y<4-0Tr})8}XdgMt$t zA?eS8Iy>7~<#rlKWmN9EOFc=V9=fS6o$8mId*1-*2WSICZ{2aVC!w3$+olL#Dg0X4 zv8+OpG8)tCv6A!l4I?f60RKGWhYYdmy-q&jqA4Lu_K6CDfL&kpw_@Bo+nHFWteT9M zKMg+xOhdhSrx$&Rr$D7gzz)Ec^6;?08Fjb9(a9N`xX8I|08ZdBvCdV-M+6eovp zmiUs;O`XoXr&I5iDswxWK1Rfe6LRabQ##9p%kZK?LJvw=HuKcN{oJxWAD7jiHq!Zh zc27ou8pTG9L=Xh6NikH8_~CxaI1sbzX7Jkk7;@d49E_W#L(QvOwgS7AyLWLssY};D z|9S{u}gev3J*3d?nD^gqaL8YVOpOD zF4mG9=T+NXiSBhSi+ek_j+uL87`@oFrixZ&Uh8z|uUgJZx5!#&dtskxx42uXea~HU zGZc}jY;!q#>>n+?IGXsfXP3CUl;j`?E6TCD2!Yh8QK zQnncTQ1}B#uYRSOqA!2;Qs&{>OFOWk#9(}#Rx}(F`m~{Q#9)ei4Pg}?5*IM0%;`-V zW^GovwI=V;nrBW5D7#VYtV#I=;pKSPTko=UlY%EvScC^8mT}gdDm6!rXcbLRqoi{~Xpjy{u=hhU+5nNSCWwxu0X}(fD+&t@T^K&A&%d6x0o$uV}#2^CV85sS6a$9(wZR`lsvXA1Go+xj6*A}=h%%+FI6NlhA_@jCu>s8RCr)ShVbI!Z? z2naHy8#pkK zb934*f3uc$y=EHS_@1J8*S$PG`^E<4GG`(8F*7 zkUwynUN^!8a3=o#{?QDJL_4k!sP}RC{uVWb#~o>{f?$h_20B}jSBX-ps(45UoTY!L z{>1iJODNyTZ@^;cd+uIe?7*C^0D=09r2Jjmy(HuH08hYidkrN||I{JX8LPay+VQz5 z(7g(|gYZR-6XhS?e|vj-baeDtui)Gkv!uPt&J4)Y z;v#;J{H6wMv;sPAw7>tm^;8|G8pJ~c&Q~*ORg1OCjis0N^AaurHBO$~tK+s5%jhxQ zO+zV05e<*SVBaDc$@v9kRoY=r)3!XK6nK~8GXo+m9(LuVAk&(kPI_7bEs90E0Tlf)-1BA}0n!jo*C?zVeSGk+ zt!BG!gGyCVTqP=NPva1H`pkXQn5$)u=J6W4g;Rq@pp{H##y&~|S&v0=ZJ_>*!!+B# z&&m`>^oS}IQ6UfXZ!-Kg(+yzXhB{bdxXLVemZNml2rx#r-)^fk*eMQuToD4-oY|Eg zJB{(yqM7nE2GdS3ZKd~KfRX_DTEiZ7p5qxH$NUyJ>#mYu4a>k5bju7o2XG~i7H_V1 zZmt(81} zY)l*gR#5&G?IGQ^#Nv?xiLPo$M+dR{>Wh$8V5VU4AX(KrqM;L}f6B)dB-_ zj_E%=fC~6{b^-4Bsy!~^D3&ab_h|$~;ItJ}!Od-+)$jRl*M%@8|Lg{@<8hN2`)>MZ zhOU#VVE-o<=MrRCOD$(#T%>)_b8A%=HjYn#-LSp{3-5g8}`&p5F&!5*+YnOacUbdr@PlNZeP`;W*Lr;Z)N?I1k|72-!6&D=S$q z;Qi>xE$v^tF(^dHj81;s*VngiHN;8;p~mxA=}mS4>5)gOs6RN3@#6fPqR(m4syep* z*95??M%|z+6Cu!h?7kf|iJrWc~w1CS%Afyf6T2hrujR-slWE^kTq!&EFX@G&NmCw{dOD zS1teqGRnPs`~ZW-*Z(^ICCa}K%-Vda&PnN&Hh@l`Aj4%>T-~rlPjWenk|!bc;2_DO z7+$B~OsUUl4iwca5C;y%jg`FUMXzM#%x&oeBQ2upGr&kkU=uGsatE678OI^%7;jjK zuI$Ta2rYXb{AFj!Ui}m4<2fhZe{9zmQW>g9rc1mgd zwRmtQ6of&qRbxBolqvlRwE+8ZJfkjggun(YKQq(6gA6M;_$9Tu4j{JR^|O=B@u7(c z{NT4a4lpU0ZAfL(A+_a1MewLYs~_@^n>j!XN+dds?radd!{N}!&2kk@zlLtv0MkF-F@8jw+Jj<44y(<9n-x0(&sJ?1C$V}7lu&qy)>eF`yQ;AKY7N+B|H937;^=t|m z!8Qt1u@NZy;EW7_N8b$&27u@LNZN8R-;Z)FpEA>Q2ou1xyx0}+sXBO>rnQ@5^Ie}w zX0+j`4#?f5-Ckv1sjK2XJ0E8>FY$Sj$#+toM1(NQnW#;v2Eyvf3k0Nw&&S(S^$sh2 zz-i`q@^yk;P=-V%l~uKmfSDR?O;pyq?05tBH@|m^qpHR1E#18}SEy>PO#4ll=q-#Uu)d*7^K0RuDg1Qici9{ zYVDVPj_jfZ3~2gPySE`JcoCtqgPK0jy^LSlcm^wCo4ArWQ-tt~{N)1nkOx8;ziGLd zm~uL;=&tx&g_b9S2RTi2qEusip?f)xXJKJs;*JLj?HG-(!9z_hh=;#PLO5i9@Hca>2Z+iliMo+gu*uLPHa(vRO+_bs`to96m z?4si0@Ho$fFpju*OZCxQfh)5&j~MDVU&&)r+mn>y2W;^q?rhM;$DVxy0|5b|4+o*$c)hC(2=Ai_X#hKqF=7l{e=hVrd@8{? zW{Dy=y#{Ku&=gQs#WsQ!X;yn*o$uep_7XTQjVK*lqT=6=jJRBr^>JU}nNhEmLhXRp zO91ywd-Q4_WIESHz{KH6Cw^gG-Wdp_F2J|DI6H@jg~`85B(`p#;CwCxGQ)m#n^@6{b+J{~YD{cmLz3h)v$ zhO!YnwU4(E%^cVdGwP1h_C8yJm!qkEDx^4j&I^a)#@fjB#?9M_ibArwd3PEPz}I&l z9vzWKcc!MMYFgI@+;gZU9Py@p!Kl-akbeh`?^Xu@#?lf7->q^t+kz!^|JT$ZjHCDW zg6#3-WV}n`=6Yq2vs^Kt2+fH%zttXBmM5pcrzPVL1`q>g+YxT*#ywZh5f-Y45fK7g z6+={c3Rt5Oe3bFxQLNrPSiy2hDUOLxIQAd5>1DTQ5kCxSEAiU0pe8=xm1SGpC~5Xy z=m^^Z%77ifH^0Os9T{~Ux18l%dec?l%|JP-6e0UscxqL61$t9bqLHEvmz^1}QgSFa zA1f=ZrA%#tA;#HyWC$W64j@ikedW!s`hdR+cWGFtnzZ(~+=D>5HwyPp!Rq=wv-69K z+@S-9v;APDC;an>p9&qR_Mees3S91jipv!U9Ab|??0FoGc1A+$N}{x?Lz;pGlmGJYQxJFE%~9wctqubR8^w)l z&?5|ac^Bt$Aa()T89cZyhO$qHd}%T%=L&!%@SXGZzz-h)axl81P@^&=q#ABf%|KAl zKWh}PeGE{K|H@fwYbyW{Y4>su9>ru(%LA>%&aqe8Jv?AF#=S{~ug(&op2pXgXNgkA zmX@2+Kpb-VZg64QXF<|q#`bDKp|nqG&k2ad=pqCz_heU6$HX`|#ig{4y4nTKh-tO2 ztIyG4QoOM)BIQU3gf`OB(jbBOist0(|KaWyrW>tEj;FfFxsMOxF*kyTv6X zX=Y&4?{~nM**G}jOTvCi5WQ7=oY2*c?cbLD#Dy}=Zik;4HyVGPGTc#AwAY^~T~XBz zI^r?P+y|Th0)nkpI^x4!QsKzh1W2KXt_y~g7`AY#tcS^L51HA|IiK)qi9SFQ);aIv(6AeW4lZ64-M#O>6cqc^>a zfskB}zYDYYFJm+(5xgyG6JIgbp*RJ=a&~3x%Xy-C{-%!G1<7aK4_i^aN#>`Jn z>whi^JQ7@T1xQ1%f@r$Y11Oi=df8yMgrfdHeXzZ?)wrHt0I0*}LV#{gwx=Taj@5XH zo99DlH8j)0!-29!_q$#zkU6ZeOFMTwGXYqABN*g*d0uJH_JV3JaQ@E;C(&<8_-*rY4(A*#rNKH#B&PU z1&Zq9={{;a_3Mgt2@F(pxpumSHFMSj46{s3h=>lF?;uTv^$r>hN|E*O#Bb6%a}vOi znbQsqz}l`IYr9Mx0sY4r$Tvy=Y5EzSTbSG0e&S}5}FLT35mylZLcjn_z5i`~9v z^^lc`p;BQ{qT`b2|A<{oCxFa@w-Vh*zAGEpEIUY8ysJDt)&{cyyPr&5>AfmMa{haT z-{pKQS20Gr+Ik8oO1hu)3wdrDkYo}RZ+I`hB!QEFhrlH|491>;Y=amzVAc82UEuC^ z;L;0tWX^3(N=kyeU{zf&CliyEv9YH(acgrO7C)ZIOW}|{mWk{3Z^+-D`_97owmOg1 zYxex4U!b&@!f`zxdFCpo&i0L4S$f*^@6+_=U+zOamszm&^JD-kbILZEXDqo_lbLBSXp{<2>(Zel5Ozg%8p_H->8pPW z`qyfOn>WXNhWj7)qjg!&`6q{~pafQ&L1l^Wr=UBO%WKbZbtKJlavIHdbG)R@Sns}- zP84HtkX)UF!ed_SwRP*M9Uf!&0!bl)s|GKz?$JZkwuJ>*o-J01{Fo1H(gY;b;)ADK zVq}75&Vxqlb^P9wR7Z_czO}qhF@gYGhbizbyQP}{0^s=y>^umx9VgQcP(D$*xA{eT zW#cV&UH&nuS6VWKdBkb&L+S=X`_gW7bt}2+Kk<2(_4LbH=X-AzoDPylnlOW~{^f5f zSx$RHjGjFTPfP(X!UHr1RX|g9Sy+9S`OGWEubfuV4p}DFB@t=(Houtoh`+~6-`-WyxiOx#5XNSn2yfQgJD3>#tTT0 z+%)fV2Zj)u9>9h)tmP!{pYfu*r&fdQChM4ad8HoL@uJ5jX~WR{^yWV)r5AZkYP#Pn zB;T1@;soD3sWQK=8dAw-{VLIIcP`h2cX;5cME8^Ko_%c|^BIKagYCzVx?5<`BY(>a zv}g%cj@Q+3vpZk{t%F6cnO%bwEo zGXO7{RP97Jb?+v$1&Sy-jo1O}a+m^;x;uW3&l}F7=zvP95^fHut(Vu;&nI5FZA_n< znwplEm-j0p)$;sJX%H3N67_9s9Ot(eS+=JrJMn;Fte7bE8NYQS8{@a|ox}<-dn3JFXuXZ!R zW(oB`bjJSkP^-v*K&1${Wir5JX0!gZ5*>cm_u_v-vA+&Lxq1qJ=|sai}>$9vR&f<3sP%s*OcCfHAXX3&vxf3?tHR^1-1 z{6QO?hW~CWAgh3_yhi>fK!VFq{(Xv!0jhtGrk5Ar?V-azEM%u~`M=wWgao&NuZaJ6 zT+ps)#6M3FDfZ#tgOr}`dpnx9#>E8tdMgV5&mi4J`@atocPrw*21({S!oLQ|lOGD2 z{dbUtU@!>$@P7}|6V!lzKR5`1|6`ES<@CVk{tgnLx{Tn5|8tOJSS=26ewX-c5pvFM z&g|qWfM=$dU9dCT(?7=pb+y=`(K7V`rxYS2RzTc|9yC-8GCpUxk9g14{^>tB7mf0J z;V?&2>RH;&yC%?XJ#$_Xz#>UsE{G_a*SaT&F}jk;I=%7x@aT$E{}}Bq}aDT zHSAsXED6vMrr+)$7@Ip69irU_+M>7LQ{8C}8h7C6mCIZpkG(sb1>WG=_v{3Jxqxy9 zeT}shG(@mK<#YWO$HQFkpB|Y(JaX_uwM?q)d?xhHM~dQMi1Ui zg8nqN3M?{pap6d&zP-copqZfE?UDg79RKkk^2)J)jmnkSG+rCmW9MR#Janz9(Z=Vz z!-n8w3W6|;JUB7Yg^-F4`jiPi6>T>wLK%xMu5YMv)B1!n4kN6GuT~)w!g#XWrE;2+ zr$GYjm;3P#5yA<&%bvE}1%3AQAy`i^tJcnMi*!Z*+fH=Gh%wX0F_UvYkbovPD=a@y z)0@0Rqdnlq=GjYnt+(Ba24LoqYinyi)I$WVmkWfuoAB6*8rRp_>l?bXx_23mj!HIE zwO-Jx+5R;2R90>)@uu%fUU7Cp2VXK~xqNCGvyLOEm?@{->pH!$0ll90@fS>AF3^pH zePO?BB|xp7k%=C;T=6kqNfFqe!z94`4K?02jR1a0rwsJw>t|rrwJ;wv4EofVggx{N z7RnCG*Tvz;#~|8l-sbi({LuT^eY>{u=1jNZOYqC~vxAQ7nHwH`37wHsu@Ajnha||e z?NajC_n02znU(uKO#av?wqkXO}0mUlkW{Q4!A`m$qVgFsV*JUP9V((iBX zR~uJ`QN5olEY+ucd?L_-w&*ocPkw`m(sKE_arW}}&2@(Te0sANCRqKzhuRXVuBl0Y zlz;%nCI;?%2@4LxW{NKcB93T_zxph^G~39!HW47XOy1y9rngbzx;RE}*sD{wREk`k zoRRM>P>d2o?ed#kK4(=DzOQrr#DEuP{o(^_mq~ty19H$ zktr-~LX@NSs+V?nG~9bXIyk~pNu#Ep2%nYM^|?zoJ#^Rsf#OZtOKjhFq^!da(b--< zfcJjstL=K5RqdTmUbFYy_U2noQm!so1kU9zg-9~Yh1%$w=Y{Gxecsq*uA`Tnusma@ z1r|6k(-Yx?EtP4bIq@wDR`?iDss8BA4FOe&rUf#(Aha&s<$!*U;i#dGZxBUPuUC&JP~`Qc*e@PcRy`E42$$ol3Z3 ztI|+irr+=kn`uh$FU8D@jHL2G%H)L!2nD_ProOXV>6b4N@``PYdh7|W*?2|Y%iM8? zNs(kP)9R+14bEK2KxrM8G(evM<@? z=LlzxH+Fihx<->BMI2fJZ?6qHjv~MJ?0u`v=iNFT#-WNMdy`8R zHm8BiSEAIiJ<{LuAMClVVfb8Lmd@X8*gb44J!OTxOOiB($SL_oe_r6c^-eb@RHonN z76SoTvn|vosqwwW-LA>pDT^Nv*vQK@W%{*rZ+buOdD;o2<6d!N9D7j~xnxMP3e?f< z)yodPlm3}slheh8+TF&&d>5Ph=vzO~66sI^=LmT@uSD&fcaG1`YsB6Hm3?l!!?@8Q zY`UtbAyS@z*WxL5$3PJaQMlwfd?iZ|^AWT|X*}d}dem0nt4^fWJD=@Q#gnEIKje(;+!t&e_ zhttjIJdpm#nGLO@qc@*d*66*n8(Od1=!y?dpb&^&^EoQOy15j;D(f~axf$ZQw&MA< zlv{gu!Wgyr8eLFZ+pdX-CrbBvP>O^c%To-$HW>*k#r8p(HcOsNOPv0QoM8r1-;f7pmchiQyh48O>OYvZR6Wi`NjEFf~PE+z?6GVco6rPKcx~N`1 zvQEjk-QW+6UiE1*vL@jjGuJXY<;JH-JB+`b;>(QDNigtER%NG7WzVPv_m?V=myeEB z`XCVf!NKg&BK>S_~FqDQxXEY015zmUn6MN zKFK5j!SKz^wauc>mFiN=^zLqp6KpUCC)o*;FI;HS&~lmc%~!V~%Cs+|!;1W*4p%6Cs4WdHj?@P>2r$OeHv12jZ>WjF-@kyU8XJ$FER4l%}1{nY5-o zkp7e+1gYi0dx!UPWPWe}tW#&~==@CiJ;N|FKhRf$X(Zy|G0HTT8IkbnR@5n{SS5+NCi zCmD(xFtdAasiM+S<#=bN*>z8!T@&6t;mdAj*}AX)u1W=I*7P?-z}^aiR_RhI7C9HAIq*Sr1sPtq6&ary*4@ahkp`6vH4jzENe z%)fva@xNlQV&!=*jMIR1Y;j{3Ib*ET zEY}f(rs&+k&svcwX?g5_ST|50di%<8^t|!qVN?I@s}!Hu4qM{_>+S2I_*W2Y=Hm$CzA(xAp(LF>h0QS z@V*S{Dm>2y%cKD*#02LM{!nmF?%w%t#{cgNz*jtjyB^#P16F7nP9G|w~74!Ufc~P!ELMmOyT=} z@bhVIXEIR9fHl^)dHo-?l%00`-%Jsl^`EZoVLMoXnt(U{Cj5_uE$4s>AiM1=p!rEj zNx5yzAJ4GBiSd8$8Zhbp+sqcNm*QCeqiZ}*nf~21RaXC{aKO#~kBKb$2Oj57lEAa^H45BTxNekNEuKPL}iX-vek!bJrIp||HFgZ$Kxh54t9!Z14G z@tMm|l_4$8&x&UYejN~31Y@^23c|EZR#@c8&<%aPk3drKUoK$x*Fy8nAZ*%Y=c+o6l3ALCi`^U_8MWfg ztiZ;bP&69osSoV}inkdl%(3Gk&l;Y|J7^E^rwF@0Uc=i*UPwsI2Yvije)fYnWuk2| zZLdQ9Hg_={Z3gF>ThyEM&*OCmk<;l&C_FB8#V_x-w`;}?Oga3*wB#eq59cs9|0p7$ zI7}qll1k#5rzP9h71HpHIz0@-&1jNV=Qfb2~!kh9ANGqoW<*zPEPTkcEuo ze{nCcPNk&b^(-xtZSCy24}{Etkmb|wR4-Y_BSK!UUh-b)P^#ZDRcbP`Zjee5$hoKp z3bwFR&OLP6o8h=1Vvl`UH+Q&!NC!WryXilkb|O0;`4R2^lJWrrmt?} zAIHa|d1tq-r_HQXM<8);E8KnKLoi#I2_K_FA~LA{8hwi--iY^>?#-Tnh^V_oe)5Ed ztef*!Iul*!ffm%sO()Bp5n|_YV$-+=(*;uIL%D{gChbS3UC+B5zL0gtnVlTD2weW$ z5sl`%IN2)6OG@j^z9)(zJf2HNzdL`!_b@Z4)FYaQc>KZx^2>N@?%L316#v0uMaHU< z{q&?0*lvR|jy2WiI;48!Ev_83EBDH5OdKI^xxH976VlYwR8dh8XzA>@Efo-bNj`;? zOR*=jL#{n*@*osMnQV{FzOxir`9T-T$y`J*kmR%kG&jMbPJAEFxD>)u4`%qGi- zs0_On=I7)@u8^U2q^>wL=$~z;&lN>%U5)6Szb84xkzGo32!>pMHSk~N=b0y)Zh8{i zp|_(76z1v#F$lYug={6O!o~hm*|Qq9(^5FM8VzQbk4TNjwj8kcc!H zI4{oYlGxQ1+;qfp_VXIv5lts|o3y37)`l+YHyt*n&++F!&}2t8XnmDuZ&~BJQP*Tp z+v8*?9rfXPzACxCQ<)M*OS|iYfUW6dUr=E0G+`Qps|xApXLf~fA(sQ+9YcFAnHaNY zyf!Ah#h6U8u|8Ew>cwv~ zTe^s_q=Q;%=J4HS)>d1Z1$ov!dxYtgPt6sI5@`uBO( zk=5p<(`P|CV6D!dc&^VwFNo{da3kpW4b-%s66ZlDUr-8uJu zq4<=k=o5`Fg_1|8Z?#^;!26Bbss+@BLfUjC>%+aRlO67cOm3Y?mI^c5&DX47IIRYR z@rvBE6{oN;P=wnC=1zgXz2)P9aT&qh79K}A%-C+E%&b0}DEC?sS}AOH7erVlovTx; z$n#m%lf9Xq8`w_DkJI8`;H+A4S3;d`Jn2;Kh7Aa6!H5aD-!ANU@4_nC_F6DSUU4zr z&zf)TARKX3RxZp_dHJ}#tR^n!EK-aM0q@DCuRjm5+kUYr9e&s_D~ygi#=8rRPUn$T z8xc{TSVI)w=H!{BvO$VM?lXoo>P3aK$d4*eJddq?zWj#{86;yU_egdXYp!CE@!+GLg$tCtQ&*hQ|AO;SQSM*#q&V29oA)RNjbo?b zMi16OS@pZr{)`LzE#yK?=I2J z(34Fc+oeG?!erV6_7QIfH=&V`tJT2_E!cwR@_F%+{J64>r8!yvX-vqP&dkYn(@lii zOOnw7gY+E9z6O;^${hk%N3#WuBI;6uoxtMlNK0Lvff}vp6{4xKLcWxGg838S$|SXK z-ei+pNj%>= z%KC6$g`e1HGb2#e0>M#S9PTYdhsR|`whh80kK#*iR^{&tMG0AI4iMNH}#Xv-NEYO4@0BOc^J?*p~qZdv`3GL z?h>o6SJKR?ef_X_J>1&n@1e1Qi;3=da=7hde$b{>>OfQMHRosh&HSoNHO!a?sJNwIn7;=MX|m+&0m`X>z4(_7Y& z-*9tGjCk0dMUCX=h+w%xTf8T$?nW*zgevP6J67t1Gdlm!B8&+!czY9>;&aG$aH(A4 zy*bdlJ=Gk!g7#QDnvLz{p%uR?^jRpQ?x3TyRLL_U@e^WVd#hv^8^xZ89#^py_I{4d z_Jl{j*tB4xJJTe6{&vf+mWB>tQs~hk`teDw`-P|oi`%k?%Je)}s&RqjFh_psyQRAG zlkluMi+TDOU&%cfqmf>!32!kihz<1hdUfphb*hHT zNbHXICFtmVfr?tXgdk;CZ8Ix3(|@N;0;XJD&CWR0aMU_C@P=js6)`jbUzLt;s}m)tibKXC2?sl;Aa>nEs@6x6}sfw;=I=X9U&Uq*hIKMSy$WXBibCqxyG z!paL@%({-0TIs5C_(nR#_PsIJVRtX=BuI?&M}VuUqms0p)=L&+M<>HNlyg+;4kois zEp97};|L?P@#55Jp`gHf_oC-MswrlNqnmI=>h?Drc7+z>wi#e-(2i+0*#uPLt1ARS z+&f+&)$_2+-wzkg5B1W2akq`dQ9GW@5eEYlcLc#wj{AsAJ?iZW^pqj?+s>${zP zFL$(;no6I&HpNeqLO(*^EdPQHjX54w#B|ywCR}&+itqYX`^BTvP1SnLQM8q4mp6`( z`K>%%>dD5LhFTn1Dr)C=jCds2Ns0_DgRpCSS&d?=Cg4zRqTChtqwn*O;Fd#CX-d`a z3gdz^*Tq(t0*Bw;8D&PkZD`_NF&a#ihuR^fNupn5ULgnnsHAYiHbHAjbO{2$=3d}K ze~F)|3pFOiny*XinmMLMCp@=kZvvkTWd>Y5=9}l#;f}@3djKmZnLdtB31YXNs!mVO zDXJ}Q)GF#|?UxHY1UWt#N>+O-mC^aCSxdJ4gC8#4_B z&8fJ~6USp~66s?y{gE;<&89Za8@ZG4(qTDLmE^J$u~*P|)VwC>U0>8+cdqP+W==fi z=hK>`Y+6`Ux7VNk3VW)oU-?szf8nk6HsJ)6Hg0D;v4;fT+*|~MC+Na`q13g4CId!w z;Sy#v)cKM4Rar$=fBr~VxXohE7tzE?2PO5coT9l_M>5imf`E>|eBp!j^K;02@O@|l zgq@Gocw5p~q)mdJFLkUPBuz^^k>{`1{Gg?N^)y_!_M{8c&)dnNUQEb_{rP}klB z6-waY5g5oFt+`DqKD{8%Es^X-qq?GF7>|$d+4okWZBhPSxHsITq(PE?CLROG*&SsY=tt|;^fF(`` z`SW3!YsFUea3aAom(-&7NHSy2{mp0Yx~lu6x%t>cZuzTSQ8ivL#XU8vJf6JQ*sdWp z;S09B3jzAQ@e+mMicRy8y6ZNHbzY2XoTxGx7`3e zD9fO-=d{SSf?*-|*=cp>kZs}hT&kJBkN+a}HbO*@_sKbT$E!>cWzyf%D#;&dkI+l~ z-eDdlroOBxevQe;ZKx1D=1e4y#rcLRz!v7<-|$W?T${*B>}{xQ7)Y8Bq#mpww29vZ zFIuX+6Y7!5Lp_9>)8<^*)X5tbnxVPv_oT4fx2O3!m2@e1M&-b^MS|w(v&j6Ai%!Gs zhH{4S(v>%;jR6%lnmu;B^kfQFRccke9%mJq0Rgs3a!Opp78>>IgOX5hX=^$&+i1dIgdoKGMJT~wVro0~c|n>{0iPTm2_O?)GTinrtwRaLme;|8hy^P9>F zA1Gnqe!C~hD?V)c9?|)2Xo|-=t=e;5n#;s9zZLFW2Hp5+{w$RTYg+C#jAnH*N-$-0 zu*}5&`2D+Qf+CB;@>tn&q#0D^3??fqDwR@0R3TKN25&NCEG=WHix(9{xO;;o(sMIy zPy0qQ zTGs~;$?)R;doJNeKXU?+3*u9RlxO;;i|R2gQT^uc^kjUiV5P?h$mjCi*_@7qnuHMP zxZM$LmB(;LLGgP&d-huCZv1+4D&t2-*}XzNSo)b)(->u(9B*dA6D4&LNsPMi4U{j> ze{IM#yN>@*%#$G)aGcS{%6wqxt130~$cW*-+6$8hsb33TD9a~8#^Vg|$J>asr&7E^ zWXP9H$w+y8m+W&GIStHMqAL~h3ZcIv)8+Yh`69%ldQcjAm<#ltCSIn8_jv^!=Q!kv zQK@K-e6@J&?&mA3&aa0+?&almJ2h!qfEyNFJJn^#qQvbL$TXTUXhgbj-tuu>`!O;g zhK}Q_Ne~Yqb;^^9*f8M}kXw|KqjI(+51#MeeGb7+JrNE#OO-{#`Zi0u-vr^U9`nJW zHJX`c9&OO$sl5uSTHaUh%HDIewB7vv6*bfU)wk2XTtKG5!NjDXlp>o>)RG)$S*`~M zrF~L9URkk?5k9_!`5Ctk{!v0 zGkXq!2HePef*UPdo-dM_FVecG_TS|1Y)!a)uPv3v4p`5xD_2RY&hm=Q5qb7n{Ey@s zo*OMkDIhMN22Qx;(s32|n97>W#7$kKY4}WZn^`(3ds$_q`@D9-abOke^b@g*TQ87W z#Bkg!l4MP=E+J!1HEAdQo~3U!#_W}kLL2fcw!~Ly^C0Brs!?E~)FHIRF%j0&a@kjO z^CDkxHUML56*cIt^pG-hm4l>>Oeb|r9$$KKj>sc3YnqosH)x+Y61%aLzsXSX1+g@3 zsePfOI;{D1tV}PVv{F=DCK`yU?xB|zF=`HNMT(;8 zH{5%>x+i_&IeUIn4YrI#44PpB_RC2FSK~0Dn3-o4xhYF4d(ceze05NyNH%QOqhlXs zd=NCRw2yPDz!z`83sHP=BDdnKKFAk=7fN|BE{Zf!^+6iEv>C%jO3#}sL|nuf6#xBoz68_ z^?bVNYjJi_dS2}d+=##mx!HTZsxoT`V3kBLoUdw0wFgXJpgpzl=x7dkH*O(`v=hmy zx4kZ;uCjn3qh2F9PFQec&9Wrtm*;cSs4u0cWn_kGO(tJO(d+L(@h+MaT-DP9c6}L{ zC_cVgIUuA>Me4CXGqnF{mq(|y`3~mdNxhq({vEBBj&dxjFrY$%aaV?`d;+J&@kO-k zg)ikXNsof7wc581^Y)e{?Py{M2fE~-D>+L7dCZ zc&y2|Yo?z1S)&L0hTxCttfuR0QzVoBj#3J?p1t}qz{^&nk#BW93 zN8E*!xD_cHnj=wN$J;xsg*ve++gVZWdhum}eZMYz85Nmu zk-J*5N$vKMT9j1jkKPMskG#)s3XI&?qw>FMPvM3k#foQ^Bf0d&f8J~a*26Q7yTzaj!$xe93ptHe}y+r=1uf) z#=KAe26i#JB^?14a$Q5ExJ-F#u@Ke1WkD`K=5v}CzMaCFP1R*3-7RD;sBrq;!ALkN zL5xcUJJIa>^ZQiXD1xOB>f$jHoE^9J;&kLlOtsQzqmcg8Uf#*ah%)zGh0)Q&9)2Xv zwTq&&4auRk=QJ`BiWK9vvUn#PK^wPJQ#Cc5+E1!Lm2rll{0aG`4fHoM3-8|H?JeK^wxT!5w)dvj~6&k*u9 zcqJraF1uVPRrS}BB2dJI)I~jA-x26RV|a3w{y4N#P}O35acdMEYI#ZGAMajfvveBiZ9n6NRIgR&Jra90jPt3^4)Ny`{#5B1< zjY1f-?Dqmn+?F^Dp_&SH*nlucXpx@-lF0Y*WX-M!WiNvz&fc#`V5=bO zSlZ~6e%q?}!d!E+8<@?vp&C@MzJVKXM3b(zc*MmoXPBqQ)3ANsu;Kbet?;Bwe?)bb z4pMC;tHkw&MuzZi>W&A-lHoM%aiH=hW_PHvWH`j+?DZ&)GAbrUj;MR|+_Kp0L4|wO zmTin<<#U^-5(xyW(&KI#h_N5MQe7&){cvsmT>U{GrU|e^euiAWs&ZvPF6<;`Q;j{% zVJI#Whw){P{No8`^%q;%p-{g;t)cUMv=URRv^4vk_RvuVbDr$H^k4%7VNguEjg8K6 zU~vUDa?EQY2u7+rw|ceKlhpSH0F!DSgnUK`Gq@f zz?DwLV=>^!hpJxDJ7waWVwdx&Qy(Ys*#J&Qr@n(PF-I0-)vjwHyf2swp!5JZiD|HOQx;u#k-fPd7gTFoGEm?|L4s0(Y z-Quc9xB2d0X7ABWqdrQOJqC%TLt~BZ>He}f7AKmgLZ|ZHE1Z^iQ7SJ{JsT0p6RV-=*7V${!h`5yph&Tq_S2}i|4r=sI>5pS@ zb_>UhaG?@Gf@o!h?!`iLn##!PgP!>>Ac;DeKk>0)xSuMXszq%UpyqzSrpH&IPG|9* zXSFe+r$P0o!jW&!Pbl2rJ@AA*IJ{3%6!NQq;$B()hog_{XsHk_$XxtE~-3UR`YR)?ZdW`-~CRHCN&FKD=@Gu6=!_z`*zrRh@+s8gB%Sn{T`z504r0FLZFXP2AGDEcLbTnRT~{a> zK!k>j=)U=^oc~la>SsazH>yZxT7u#s&A4GDN?aps*(EgpA_^qW7^KXnsTAkR0fPorY2HUk0T?=L>gs*HNRQ4_G*tsq$xw~%dMfU+G z&kCoy?&43&>34x761xrE2?S%l-JAoZmJDr6B1FuO5}~Z>A64`G6g+d<+WeLDFi@Ko z#+6JN7Jti0l|F=4O?_s744%hMvVJ^o6@hnMs zLhf8KT{^e;DERGPvG#ks6qCMX`m5Z-n<<{OhO^}z%kc)Msk%^xn%Q|VR+$G!muR}> z9z)B`*Gt=SrbxNWDWtY^qho3X8*_qv1jG{fflHj8nj2U;kCN8$I7a9R#9bbSZ4o@> zuK{drrE-xrp9gij#48-f_W6Kt&%T4J_ikkh?n=$B%vt(A(DrnFf&TVTwD{tiZnTUA z4c0;`Ke}&cg;o!jtlBqrWS4{JU`yn=uEOv5a>#~`ZAGVDgv_&Q5JZHvLPny*oQzVR zD6}!?a`)CW39l%JD{{>o(Y573vX|nn?JH2j4G5l<6qUO7mL14y*ZKvY=SfFq#qO++ zPY*SBmnlYJA0F?BFt`1qgMsCiX5(>#YV&pD%*CZi;{Y?%q5WfAn6bZaOxCxy zPD@$t0-A}}KJgn|G2~8cbzhCFM0cXAhRO|Qt`0O+pca}<9ybP^hY3^#?bc~X0Sk9w zMNvTle71WD zCVftc#ljd7hqUkdBo0EMI^NTD#Vqv=SZ=!~K$7Po>W&93a;PJdYsfMtzt%KN{g= zrPKgbO}pr>Fr^I-@=WJo^wHo;WZ21pItSY#XWUZNy^ubo;BvI^4ZLn>+#FSiN}8#F z!%={;GCFZIRdBMi%HASdL0@me)p4{z*)Pq&JjsE#g~e*U#=!L;M8g;JxW2g?JzZtx zu%H-mH7hzZ)!^ixa}n~xB5KUe)TZ@2wRes}fMp-Q?RSp&rN!o>zg&Q9Do)6W_0!-i z)D152PfGH6qX+5?DMT!Vz6~QJIOZ0y*|}fJjJL)cp2r})(n0&))almQsPz;!v!`-Q7yj;+o(N!QGugi@SU90KuVn@S*`y++9+vNT8Hb z+9&j!bDiJy-1nV-_BFek-I;mq?#z7U^A0v*(-#$5DI2z9B2}B`jH-g@zCj{^L7|jOup86;d&KfRlz)Z`%W9{nujk4@(+P&7nodzuuvW;*S z>z(LJV@V610KT2{QL!-Vpf8s&LBORnMuJMO-?nI*YgZ;`dS2f|y#p$Zx`mgC~(UxJm*UT(wzL@!q zh6XP*@KQOA{pR5d=?46SRhFuK`!N+z7PucEL#WqtCHD~C_CA?e$=}K7a;rIP(kJcY zdKa9#@0u}Y5?ptv(NDI724+m_7;)En4irx0g&;LY1fLipEaZAqWompzX!bA(^{&r+ znQt}kXR`h-9)=zY^D>@F(WNdl*7{4Lirz5W?}oxB{4XQc{%m%y-6GjL1Vp-!da7qk zU$^eh4T#jeMkzCSS+mPxrtcaq0|Amxl?Yw;>t#j<2M#&UAp7kw>vo9cel}Z0Q{NJ> zti~j`nW^Ib_Jj51=EIQ=s#_ILm2ucl`pS%aEuC38ph=fcHDoJl^j&35zXCm391q%z z{x?I3G4iA%!vFiTglF^GvrR4R#bUY?2BS7$Yj4k!wySUJPK!Uw2`D|n`@NbUES@RW^FS~~L4!u;bI!`(c| z1tzwd)_9`j+SF)0RCAngwBFE`C|GH4|NDD5r*CW-v%}Czo5l8?V?v4CReU^^K<=li zGpsW8fy}AmZNi(lWI|>p)g$bpjfJ(Mx3+FRc`1NAtj`bLfk1FiY^!=!Ysnc)dS?Tc zp^*wP2`&MVg^sh44w2{1;>g^}{v(|MlUNzPV{ukQ(>D>9uXp{H%XNNe?AuR+*@eZDd29QsBCwb|?Ku(me# ze1y}2PcRc3bJ3W;VbL2I(1~)x+eYRAjDi6l-Q)+Qtu&`A2m2?@C_VPE zteV3GbmYOhMfy0?z3B%Ia6CgsJnUl$zOBq}Q}R+T0u+EH@=U4aPm?WRj@N*qG*1X~ zLs3OdnO{w!;H%%q)!j>%b*xr>XB(44e+aR32BhMWTpT?eG}exe$(PJUulFGI6+4kK zVLFR~SW*>_tynHZVo^dhK9&MHM=xUL%6&Xs)sJ3epFL1}+2mnWp9!~~Y8&fJSV8;O zbh%O}F`AZ}orCReFp{ZefbV40jA1_eu?E+Ru% zA}==&!sR5#wAU}_C1fbBjKyaHKm5v9=F!r_N)?=0GUi;8ex7I@6=sbK4(JDdsT z&7NqC9m0NqU9y$c*o^cYa~BUm`Rbgqe|vjnGgQdUaY{=?WKK!UY+NmG!j&H<6F1=m zc__ulAULOxo;JSsS<3igJn36ao?OCI!7Qc*?blXRO+MutF2C>XN=q4RREkawpL?tQ zsf-tz{nppwQa$>!tx61+3l-VLBRN@u&O~5i88QjK&mU~Z$bQ|zn*_9bhMJq`p<@!h z$N~>{5Pwcrvt>Ro`2*I!NrY_%5gPZXPnEqCVE$srCl6f|B*07F*g6clp$R#t=nmWl7xjEGb+3mPTv+X{9 zbSpJ+6+MsBY?QP64ABrEaT;A5`gY@CSOy?O`}3#j-lYEIgY`c>dGmVRzi#Kig%n&e%K=QWshh#y5pOsF(6fYFCh!$NrV__>6qOKnxf#WN6R zT}5j(vprdcLag1Y?*uA~RK7v+MNxEpVj>TgcI@cfrRUi}W|a)4u~6XnB5Ot-^srDf zLkB%6`Kz3C7w!5UnPM`Q*JWnK47b&v;mkA&{!MUrGKpb4%JZ!!a^t4{yA_=L{1Fcs zCzf=0uGQqnF3GxAFG)vtt85I>(}|}%2=3`KLw&NLb4<9agDjCz{^9v5Js9q0n{zG6 z$f;KY5OWtiO;JdP|7=cSwLI?O7f#>(RS#oNcw{F(-v=A!)gY0ROZNV~KS5+YW3PBM z{I&P}S-t$Kyj?eBAnQn0iko3)-wZSfeAu;M&yOS~U`J@3dz3#I%iL~XgpKs{Cy zY&Mt7br2L~&}=AFXp#iNB_?KQU;szIz+jv^6dRNzkYUmeOtt>h3aR{rsLe; z)G&&K$oaaJZ^T*t`j+Z5wbx3`qtH~lBzl^^hy z?%mtU`LP?+U_Qg+4pD!vou40$4PGR~(jSLPrx`2k$|&f&`uRJ$uQYW^-`sTg%Te~n z%qx-@*I6Mq(aYwe@|x(z4m6Q7!h6D`uB6ghM+p_65>w}P5V-eexW|RB0`NDKn&mEU zQA{E<*+Jksqaz5lLF?@f%NZ{v<1yPC#E>Kcg|L*n2`Lllw^)oRJI^EX5jdr3UAZZj zGjAO>27s~0SLbc9^iL@0l}Ek0kf_+ns)k{b(RqgR0BNG;A0dajj$@nS?}g(zBBNjL zIZmI$%wLTfChqAzc774*Fqyp6o*rqdXSH@DoEtxAZYJwkTVdR0xmp93Ha6Qay&9a> zF}z&Z6MZl-3$$gkACWveSAq_Qc|vR`Sigq=VZZTiQRs&h`{MQ4M|~5@?yclXGO}#j z>aUV1`!hyYzpm@csFoUor}eD!|18ZL-YolfQ$yP~P`<1Zxvxg{BF+hi#(U0JS|N&N zK`st-OSp3$^n_ZvwHBn0@@G(TgTq-3bS1GG^Q!9?@K-fPfmU>><*IxtLK`pJ(0Lp8 ztT6sQjuy*vCMUmdYlBhl@R1?>?4uZ{-Vt}3Paw7Iq}^dEe;ob=~aTfaIxye0c8d2F`E(TxFvS@J{+sKugX!Q!Ai_Tj5AZSoX{m8cDsM+v@TB# zX~15?K=}M=F4>DoLNI7oxpMlG*JI;R&(cjxY8}#-aG`kG!_kFuqLef_6}0a5&HUlo zZywo22{FHdb|@H$Ipkh3bHv+!^+9Svi?9irtyyj^N`=4-1&BOeC}U!a)WnUtR*7S; z_;p(A)UBa;(Y^8qxxVUJcDR_$6n5cqu=(!K-nfxCt^Y%X6iad91Qym$?St79ogW^z zTO~e~ITYD$ z+^kMY?tU)p&r}ufBPpHhJhC5e_M(k?*?wl{xS~EpQez%-xw&-9GbroWf1oQvI6cx1 z$CaKc31fPu@*?(x8Mej{QEXhFZ&{JqiYeZ=6VQ9LLdEImib;EdLARY8%I(k00-Bt*OVpvxEHzq0nq5N}N&t zys6eks5Q`q%{De}XE~$kT$zlDG#$X;n_Cb$`O(j2zF^xY98{5A!W8;BD$0ld*q{Kd zcB^b4Mum<-{a4g~{7ap&o>XD)Zwt-t^LvpTjk!k1n9DA8^+Bx}gdHc}h!@AMUU7bO+AH2L=O)RFgpKg0hk>IE4^~-kZq~N&n9XMIOc{ z17!+$#+nrXa&cdr6fK2CI&0jwk(TmDifTe6Iwf8QRYGBG?Pcl zt?f9PJojOAepHH0rx#8Xo5gmbZ}+-|4pvUcQ?zNwU}a!2;=pmpKV#dxyECOt?da!q z_EWkIRyZuB`yzYkU>P;qpkctBR|mz)F5t8wJ|M_FeEHaKC&_^iH|qqPj5I$R?ri_m zlvu=ee51T`EyA8nHvXf_UNqNPTdB|H|!8hNVd^#NY68@ z(0HU`GF=SVmPAzB%J7XzVwT;rvbI9H$`^Xn+*$m-oVY?x4qOO5FqP(yx7wDfgaJdP zWKIR6=4>28pz3P)oDc_qd^V%`X*3N|+1k47$Q62W6IGs#J5b0iAV4FWOnvUvC$7td z67Hx*gEd2Cuf*zC>&Bt#$C%dLU5tT^MK3h2vn|9x)AD?&f{%efO}c?A43#-DsGWb2 z1(eN28P_+BJ7=`N-p1V2qota;OiKXYH5 zjv>ck`6~L08Z0EJXpZZU>M%>ulXn(=8+*P9+lJIs+H#L7%8zE>rT%O`T^sMe{jK|! zRq_&qko=B`wjo&D=}(`E6`VUH@*424S&gPX@m(irdyf*r>I0m6ymVd?7~&nV<{`-K zxuRo#5Z1 zkuGFoeQN0lznO}{ww>7Brcb3=6) zG;vp``S`|oRAA`Q*iW;~6?Hx`C_Y7Y9_pa-7&=_Qu;V$BEMu}+{dzdZSf$<6!^2mP z6*pDg$g#DM-o;TO!-r&i~vI%a~BuX|oiNmu#X_&Yk%i6<+SHokGT3C*CGa5pq1t-;^w!yDknKzL$C zY4J^_D%HO2`PE|qs}0}T+)TwaZ}@z?I6J91AFw!}gVujq*K0RdF!Gef<$Axb^lx3F zJ5dKzL81b(qn);yRUJn3Fe^hW!J?*C!)VqzEHn%0o8a2OIoT<}r}EzCJoZmbm1+_;I`7t8c3g**T3_lW0oj<`N4;t`Cph zn8?m<(heHC_J&hwa|-Xl8aanhzwm?wv<7Q3a)C^ra@f{)lRDkT-q@{`}6k-!gG_NwB`tyK=+Mcn3_?W!NGUC&h248FJ z-&^h3>DlF}WbQ*yU7hu>n>7I(+rF4)lcO>)0iL;ha#gFbPlrFLYTY*N=qXaLbG5`) zbvV8c&_iq3lwik;c=KEX>dIb5qQp9~#$1gTrqU*VzGuj$HF4NnZ*;tI`~EYAwCB@5 zEHB*5m-og!^eS+|QjF`DEx=o~H6vXJ-nHhVx*{^Yj2$ETZS82n<10|aa$mc4+mLQbT{fw;#6K5dcR)8G+ z(pFa6WI2EM}ZhQW6B2=K^K+3E>E?U+4nSz%K$&~8)eTG&Tfb8?WHFg zF9W=-dJn!HA7+5oE@O4s#+C_J=n>u(id9T@y7TApJX<6Id*L4SU4Co6W!(p3X^M1& z;wzme*4@W0*WAo(*M#4Ik{h8=zd(;K1^BI6VgaI00vJYMP;5n+;hdWOQ1f7I3QpUB z7_v&U$!8xw7BEpWFj3I^?LA#geHE`~XPC%Gog&!r_=dDc`M+XFJ=`o*IfoiEaAZXd z{Fk}+c&vGi;u**84mKM_5)o*ICnDBx(DOXq%Yf$P}B%_b|0SFGYkzJQ+R zRcMXJB>Y$s2UdAV!#GYhivl%p(?@Z&ss>^eG+mLTZe*YZ-%vl<&Uv-s{@(m&0R`4q z?ljym8^x|JxW*BV6g9Jj9$>HZz=?@wxj9FXOpGWy&;*xs71t+Wjy{8#kF(0lFrOea zeJ?vM!J}0e@zk~6PT?tQzfl+(%$tiI3eZ-S=jgSB>G#m7tO~%^1zQYDz8~LFLMbHz zg~1?G9KGGK2&34f1;~sOecbGo6m1dC2^i(23~9;APaM$k{rP|%P`VGCJ^PaE<*Gp- zC}e&jKK3$x7-cA*^spC+Dd<9|QKdQ4`0+D1mY?iL`tg&=OlP6NuaTAQV!+hhEwlON zBW}bNn?B>(=}~A_3uS~}{BXczi-)$@p#WqwdaOlY&T0AA=eNOsULI;k%s^yd-af-5 zK9Ypj2T+qE=CQTF2Gd^6&H0lV|D0MS@}e z>&#TElE^x4E7RPWbB+ucA(GZ^7%GABH=$_=d0mQ5qD>)7pS z3`i=G8az{(_tIs8>|rx-VqFlrU~!E-8SVaeKJj}CO|gXehVzj(>q=30v%?_Dp(bqK z_2%*~BWJlxPm-a2#_B|IWO`~7rCQA?1VVba`hh`h<@9vI8d}u?vlZA&dLq`I&xjL> zpX+Y?OvT7ziELmQ4%%3t84_gP(o_;XGT84qSZ|b`{-mzd`BJw?sY3INZD>r3PZd>I z$2e;28CldeEjrc#025^sRfG`GGlV~sO&>7*9B>gFglh!5h~>A>CYyj0JB`>wL4E;m z?Hx7nRjp&ey@d{i%xtI0Ot#U)nksrbeT6IRbFpVt6_J zgh(y)(k=W@m(Y%xiLA!DW1wR-s@~ln_|8k21*?o*dZaP2s`ZUCQNVhW(8Olid*|4*SwD3I zod)jByW3bwN-O>l^TEz3el@(1o7%JcX1BagnciCB6co1&5D2zq zJJl1(QHx&!D>a^lkPs&HJQvc>we8TCX>@b)8?(_XLFGC{#Tz0D|SZrDkSi+VIx@3UhgfxCj6>ZS^FY}@gXnR zd!^?*H{eYM8{wndt&mZ`?@O`TK_qhoR?$}_nv5sH{j|9?;pv=sDhNe`Shtebk(1?L zbe&&3Lt%cnCI)Rh!8FQPbw(Ow6PWkn@~8sEG!p6bA)HuN)QATL5Yi>20fvH-TWfg{ zyHorXS7BrAAc{=doULjkS$TiXRh%~M>>A z6)pOu1`$)70C2JE(h$jGauaBuz#*!APZx3HSk`S{> zh+Tx(>O&4OL!lp2Hnsci^NgQad(OO1QpQYgA!6R$4@}g6s(X0O!|fh`476 z=PKKBw9&Q0aGKAFtG@%x`Pfjs3K)Ykt0|@8Bu?>WI~8hUZo{;_07mLJjA`wZ(l0h2 zS0uC8L#q^%8L;rvd@G*79C|CNFB3d*PWWHCV~lPLRFb<=pbQg!&&?0=XO+tRC^wXt zS*NVzFuo8ZPOJX(vTp1C)MjfU1z*G?H_v0j57-Y72X?5jZL~bGT-r`%1vDUS;XK;C z*1pPV*X0-Qm<*bV{Wp&J?uoO%Pb4m0#w9Y9bH&c_MBitCf_3*PX2+(qvSU?$dl38LGc*Gy#h>9h#h76lwN zIYu`cizs<6{aVPh$Ydy;Z3UlIZ`Q-oSY;kq`F)R99<8ssZlEBd%i3<+lF*KwFyuP$ zGlH1ug|^C{ ztZ_!-2AYMVyYSyy8>Rx$j3sVtrx^3xY`o~$e4j!;X_qe=i*GnNMb&a~- z)R}glSb7!~Hd~qUl}7l+zqqIqOGiEL&@L)a%w<(O@xyKgrGE~Lk=IMrZUGq zN|$XiiOQIf=g2=CLz+W6!m{^&c^G4yWdbo6cd_(+%dhs8l@zVS1 z4%>@1l<;RmXaV&cdm8ZuO+R8U%W{W)MZ6mdAJVj9gCd^^7P&?xCbz(nB#X_uz@t_o ze&3%`TUiB4Zepg@I>vnBj6EzYI5eGLX$8(6EW92Fd^hg_Jlg^`Sho#yeTKc4y3Dc$ z>s2w+{^@&0pQ7OL5Utalb{E!URq6wA>`F9rmUIKZ7 zlAw$-hz8t2D+y)vx>rbOWuH2D2QR&v~#>U;K3a82q z*cM1<_c%#QJ6HQz&plo~9-h#jZP`_fb>+O`jK?cIv1Yc3#|J8cUV)AI_ z7%Ac=oo?1oifw~XaKT>a!|jLYA~{-pItq@3ZwrZSF?tC<_pw*yH%>!n^~MMs!6VTi zjk9zD*{GC~_tE`}9)+gXj$m$l^}75uK@ZVm2ZH3z@2FSQPzl-z_rHSsIZSTx$~7O2t+?u} zZs=x4WwR+Hzvf!ISgqTYF_hi*o#i-E748>-YtA$oC-OW5GmD_e$XC5OZM5SZireY+XO(fx+wftHWQmS9i z1iXp;w#QVC>W7{1bogl3^>W9Nyc}{Lu;|$jzF&-di6a~MhNt#SbHJaaN;FT86JIkR zBw^-B5nZhqf0v7%)a32jw|dH)2syus4R~dCqKYVA2dG_c;<-;e)ij&&rUL4Nl%u=l zS&^)GpixR;_~zo8OiYUb?rEpXR|j+FHKs#N9c zc-?RPR#rV}lq#;i>t9d2S7BXV^;%qcaW}eixH;t4rNHY|O2a{d2sd%s<(Zh}16BJd zIdkZejUJ^KV!vIL-X4JpjOlAC9&UDIbQCRvx+=~<(z?&AO<*Tc5t?n(yxt~6VY-vH zj^$9>*cMKwc%bW|N1ZitDR#{@+7C?^f!F|M;Tqi`G{+-^lEQ z0V$)I__AuF+eaUCt8+C%W^IYU!zIt)Z}N1A!?tkFbU*2q>|(O?M8n`DG2K`Q1IZrj zB8XkMZ3WoG9<$-t3%knX++&@@-qUe)O8F|Wqh%gJ6fiXEb%D7b+FZ1@Fu5;uAKo^& zMt9OI^Qo@*;|nS(+nN}bhLQ^WFt>QE3cG5h)WOG8OQ)>M-qQL&Yn_vmZ*7jLnpOKw zYrlt~vSN%->)O_fn#V!TnBdp-6a8`mL^9i&fYb_8Q#V)dAIDQ^;{&5SZ7S!m?Bw?P= zkIz%GnkpK82`P>gA6v5^7KxP_MTyVraaLf@s!OF5CnW+Xu_I`ldUpUO4GtZqiqSL& zNy-egNUUVKsE}9Nx^avrF0qa@2EKc4ofTG=hi`(p23`uF0*w>J6JCV#O0j%4Z_kG> zkFnO7S7(rX06>PgP?EUA$rMwb#5T|(?0{tOmF|IQu>KL*;j;UNsg9b6^+FdSHka2q z>P>fG8YkIeEJ!cBgcbTayeTy4#n-1q{`+np5;+9<4nn^!rgKK4)95wbzL&32w$7d< z(z!O{`A~HdvZe6;J`;B~59zsQh51)ss^ssOtB{(id)p_)ka2vNtjzlP%uF`!V}CMK zQ=O0^4HaX(rbq*lP$S$A9~1WaU_ah?-STUESE6luva#)S3HmXEpP5lhe38I$8AUOu zJg>HhInUp5)Mtk95Q4Y|G?wrUD=K4G>dV_Z?9eOVYK2&jXvA@c%+naskj-5xv-FSf zylTZ0v?(HIZ(^O$6HMn#xpLHGYPgt#DeqGesqEWrXaT3D)+n zQK9AS24GSHZ`F@aRo%w4fJCcz(tbTC>^tkzoR9*J?BOy`;40W45u~tzDfuESgM)+W z$I9ex>@!jD_;pA*ajnMZh(2wG>fK#gY;tjNwhP9LcLtaVVa42f1L}pWDlQc>M9G2^Z;P`ZFOzIkoDN-zqr(iQph$j;)I+S>l z!=T=j4X+JVIMj$iYt0DF_`H??zk8!RK6iQ1OA@pNp$;lG>FYKOl*( z>7+&zlLVg8qL=zWN|glPF80Q)(26}rA~l8YK%n6Q%;Wfc@aC02T^1E~pQ75I8kiZM zhR}UnSnpR$p@zMQ$04Im1kGl>R zLJm)xJT>$ZEfq%h9=YD9%jEyBQ=*YXotK4GB_^Z8{{%=vb@Zmtu{zGHbRG7E;DWH?-keZ$>dZ_Y{`Sc}i#n%1a8j!zJtF8bC6@I5C zKs3<4$6Ez)WtoI*eSe*9TR&;0P~brt36U?HM`bN8k`ISEF8eOKw7!j(v7cuX-VkY7 z^IaeQsvCP25gslKcT)Y#SCLr+jQ4hAeDW~Ey3J=NZT+|1a{IKOzo75^6e0Ga2(1U0 zM%g{uM0%FsGx&=9x3EbaN4L%PZNhr#yDN!{o!f|xWRyX+ z=oMq|_2K&W7v4W=@PDWRJE>~%9rDqP;HRqX&H8D4S#yBd)}?S87>hDGN-a^tNXef4 z@tB6Rz8hE82!rsRhHK9KF^d0+;g4y*1sa&d(D}sc*pZ3JdNc~NBF`T?bX#X;U?S=% zmd)@vZS>V)Om&AM&u8V419mr5YZT47zk15SE{=MT_OdD6aS&>Z=?P?nH;RV4RE3kA zjbvsuceOv)c!-%va@gx(KdxcInR3)SL!B`z^t>3A{CYqt97II%t}0$uO>d`i>bEFW zisrQdgTSdKKcgIu75V;K^TN7s;WRZ!BCN##nTfBO@T@X%R8@4D037<+Cr5kj(l8p{ zz$Ro2b~Wc7K?QKE!vp-Uw@@JA)X1o~OGlEb?o*wX_0z8wqV&vbf~ks&6V<`j)hvpv z8S`w0$&uQXp|3{b-KvbdGPwS*XTT#r!~@lQ0TY@hnCKYQVZl-YDUITc>^m}XgOeh1iJSUbNQ2R2y+pkCT+MG zpN}REBB8bS4eL7lFdjo>=s1N5fX<$cpvGxjv|-b=u-s0|m_xU#3czlJEA#30>dod$ z?XgQc%zBOV!!&v2FLV>dQ?3>ENSjeockJ}ms@`*>LcsW579$}+SqW2e6%(NIyP-~6 zQzEo2z9O0j5e>8%`s!VsN@nua_qR*CJ)iIw@w)y-6i*E7MCDbG%l2`9znWV>L0FhN z;F;|1T)WnuV3oi5b{?DrEW)?Yxc!CJm+|X96*+kw;hRLMh90eh=MOau8_Juvzu34d z`J6F3Hb@b!k3*&F-h{$SvU9i z#{UEmk$oEcAh21FUq^MCpS zX4I;vvR&i`&tge6G3hWDwwAkg70Y@ES1oG4R_`J7`Pq%Hje*rYRwl;jB87XJP4U83 zfmpul-D2*XOd5^?5Ga}Gll|^FmR!CgCnee8?d`3^N`0`FBap9<$k=_qsSK@jRjAU^ z^obs;x%=DLUNgkSZ^q7`1KJj(pw#~xh3K-Hp78(v-C;O^Fu>qBT#V5mN`{VjlV?AG zhN`x*dacPH**9=@9Yc28!+OM8GHR;310n%h+7UJt2hV&csB`AU&Kzw@JT|QZ!{^@l6I5o=S!mDF0fU0}h8C zFLI!avNO(H8D>b-!gkxS7gg@Jq{`Y0Lo}Wf(J2tpNu0PlQ9Emv3d0Jb!gl)&y!Wv8 zGNse37zbm>=yfIWeI=tlHch?k>_TS8A8YLDCs!vKPGef%1ob?PMG7k<>-HQ%sb0uZ zMp$=^q0HrD7UZa_4w6fvVQf**q?4wxq`b#eYJ2`9V+MpeTQwbj4r0~=%DoegNe;-R zjveFR#7*9mLWDv%sGRv5@a)PLs<=VfUVS0wHmFF(kx&lNh2 zq*Ff{kZD8pO_#m6?_rE#{li&7@X$$Q`{+$MNKbv$NjFqn`^m$-M-+_b5XWmwDBO+s zgg8KOzs+{gSM1NuAmcoT0mM>VyBLdx(HiB%P*(*boqMKVViwhfjLBu?f?q*(U!T(; zu#;cYIl4O!s@x>WaXfJilK(FQjiOL4d_wmB2*e%@mb_RQ;9AN~0=oa~T%XbJ-I&1t5XKpuTu0~i1^ z5X7P859EkQt&0Ca>=Dv77O|)JM!ZbcXI*O%(J?OiJA1h?p^bqN6+R#ergiJ8jwI$R z!!jOh2IMn`cc4bbQP9JjWrI?m$bo*^JPay?ZTr^&K2CdIsf~sLTps{kjak5lD!WqJ zMC_WpmRJsGidzsR%I@JC)!9{DHojVRWTu69pzshm(L&v@9+)J}(kPifo3|vUCI|kk zEsI-^IFm++ANcEQ=B#KBU4C282A;l_LDFT<6}?8xp=L(o8l4?ECUT7&I;yw63)7-w=@)5k(XB6%PLHy`AN*Nu(m9AQkezJVeU`zIaA& znpy23LK!oFPC@Kx{1=|$wT=sRxYzIY&j+*hM64H>DF1K%ue~=C`31;G(ZNbRXLW13 z*7{*9n`=V+XKGRB+lc>*JMM+wXC2bVKju=0WZQ`2^@B3{*UR?7E?_vFh zFNAtnjFCG-IDV5?kK`f}&&Nr|&Mse~!P@#N{2emiKWIav9ml_>Onp<3q7__Wduf=c zZ5dzIUi%uF?I0RUVh-MbD@)j~3G25eZ7*!}mdQ=u1bfeK*T9MSO^8jt^l`To2I+|{ zjgr24Xxz(%jup-wFP#uYI&am>A-pj)CakoumxxUQugUWlejVDITxQ2l7GHeYj!q03NhsQ-fRx7%YV17D8RpS`_!|1ryxowzifiN{?ffPTe+o_z84@m+h z#HLnS1I|KuJN*6D&(T=n{hC)ej4wEh+^qIDtSwE^1BcJrU+_T6*6fEOyu#+CgIDU= z`ZBVc!m5BBT_tx|X%x{-q}6~QheeZ8x@9s(p^u7uLMC~$@9nLXNZFH6O`S490a+46 zr7-G~ywUB(Hu<2)?|H>CV0>+DO&mOWkSRm+e#VvIyPW}b`8d(`ffX0`?E~*l+SO@$ zh!zh~wscZ^8Y@X&$D34np|DV@Q?(M_3Ggk)5XBnu2aRHXY9#yG)mHS>iraiHgqO@%spv7xwZM0({}iKTQ1@& zV4neg>?qE{r!K=3g=>ENX`Y_*Myc^v8Efcz6RSAW4+%*=Z{a(PA(kVV*aqs&(nh~# zc;&|?k^HREj*lW)-0#V}Mc1}(4Fgsj9y4CNRi77w_{ljO5qOvr`W{|7jW#GHF%4;P zxBpl$7i!qqig_@!d;>RVTyFMHKX%PMocL-&zVq1YijlL%nK$3ZtBj=&itu)q81}2K!VLE{$Z7RrIft9wH?KJr!)#%SQ)TLA@aO(*-Ke4V~(eTRU zWzknYE-ommV(*@MHg2-n1N%LbAhYQ#YsRIe2*2;kR&tYlO_c~OsidA!Ti6CGp4>}a z0R3bOI^fceg5Y{fiWxGsMa1IL_#R9=8-gL3N<3~5_~T1{OO9j#?&QN##~`vMvmgT2x*dh^6R{ddc*suYTB) zXVT`5R`)N*_E8!wg$Y~t!9m}30Lzi3+}O-}TRLB1HmC?^WG+)wgEm|4lqKOSpb^eH z?ER!3)<{JmiVF5eooIQ6-OktQMUxOEjxowNVtxpW+-)DRA^YehV{75utWhFm-oy5& z%R^$r-v{azo%Up1hdYBmTgU3~<83GH1{EZk?@hnrr?3-tcMOocLDQ38O4EWZ+#AY) zI{a(~kRg1&Fe(+BB%czfHX(3`G+meht}%oc`gW(h2ae_RhQ4BRD*G%oD6pGwcR+oE zFgl?Z1x_=QbOctRHMn=L|J$&kYJFgFUpprG2i zg1|Ir_-HMXm(nEd>d6L~JeLwWQT^`uQGfb3*8gq2N+PHUqM-mli;a3Jvn2hjv4*_E z*gFGn?4r8JPwf^i&qJA9LJnI6hGM$j1;;EVvx1oo#T+uX?9E5EKqmqI-dfvVEfUBA z0}Br_vs%tq(TP({K?h5Fvz0j$dM5nAR0Ppc+3BW8-Wm)4__UWI%1SAp>Wbc#3mANp zVF4IXLTk>A;PveBWl~Mr2jS36K7vd30gHsTErn54YFaJj41BOXmLJi8;ZI~Xp!hi^ zg-Mm=V=-}Nj?(}HUkV1kIJTrqu7>t(m&ZOUpefq;!x_m(s-iYq1z?e}R`JDApJt%2 zY=%j7)VyHP>f=e92aMxMF%DHtV%XVd)OKn7V_GAl%2+|CTpGrPWdyWl(?dObe7uSkg`A|FCjH5YsjQ*tTlhm_v@5ja zOK^F)7+5g>H_nq#ON92DV0C<9_*R&1B`&F)UwQBeM7O`s2bJ8@l9iT37`7!aU`m^x zE~{VSfU~SoEvc}p>bP1etc6QMM0zh^HBK=mbx~hdxdJ)Gj zB$Zve<-)(;Q^-1VY|zWH8mTQp{W# zGG*uu<6q1?3G<@n@=1$(0zhDAPXqoGW%^g;sLy`i-3w!WPYcn7Mg5W9JXz1u3w zO-2$YqE>YHB$nfshUm1UbV_y1j+y?(Vb)w@)=F-0icpgEJx-oQ2Lb%3JH4B~Qlmn~ ztxu_&D8$;%9*!wSrHK=G=81?LDkpI*r1Rzd#=g2_*;+O{UaX-;j{R7d->PZlQC zdg#v_WQ9>4^^f?w8|5YY&)GG>tzo<6`}OUE`>rAdk4Us zbYSUv5@U}?j~@MZq88O7ekifKj2MkGl#Tt>-Jkm*+LuwHC$loseJgOK1eHdNKnp_F zW;v6%DdW7eTRN5+ePOAJ_SpGJ*6w1C5Ltqq zMt>9Tooe0zI8TebbEiSq(K4ZgaV`1ZuHy?1qA9j!Gua}9BzF|c=&>im%QzJQ?H`kv z?A7vTW8DKcWuN}n+cffR|EJ>_zCydYh-yw~byZXsf=-ep-^FmW-2v9B9F>_tny z{g;G_Mq@ndH$@l!L%i7E-#5D}{%^$PU1cWu?sQTC|HiyRN=w7;iao+T=+n98Ga>(k zqE4@_j-z+~UwE6vP?rDrv(Q?VD)#oQe~bU-ht{+G3t)jZg`gDyA^+xC^!y*Z9yv6O z@EaMMK&p5h)w$9GhcSV;w{0X|dBR+Lu&{6CmkY%$>ixBb6fWE3H973fE21z?GSleYnT^`{{?_NR7=2iMA#%X{e_iL-FZBBQ9_Igf z9g61>=o+iPzjt>WiyTcP`tSeHd%isNc|wfd5(=Q%%ILS|{R4D6PK&30VMwJ{tNLDM zALAIb>>DB1dQlm76}xwD>7h!&eJtgp5#G%lZ@RT$I^rj>aKF?{!RaE6Kr*WTkG;2y z%A;A@g|R?FkR(VTNQ7X)-7UDgySrO(B81@X?(Xgc4Hn!jxVy^@ry z%51!h%y~7wZ$m?z{)v2efvpG;Ds}M- zHn6u$Y#(-Y=G}QY<~eLH-AEu^5|Y^C#O*!4bm!sL`iBY391!(!P14Ji7dR1WB?Gzg zwr)6E=zB~wS^d-Hru=9Vb{j$-VslRsbtRJw_hkSCLP4F=R3m`a((8{gJBXzOeIAsN zTxJBO4in2VGW3me9qhWbZ}2MSr>u`>``76Y3y3@?`T66aa{VHIgbJ$Iw&tkuiiL25awXl(#e`mCtO69`)Dw&}%cXGe61aAjzicW5+ z8OoFLJ8v=2eo{S8XhhFfl!-Shv9bI4`4g|zbalhJF~WAaM4S(2>MhJCefV>7QcM|T zynB+CA}9lB%ZuX5#p|y;2bW?L3Zt)&orW5`g(VXs*zCUr6p~(FvFjF6Q_dxSkpBGU zr|}+yvp+rxA6LeC$wUBlP*8HHDRY#gV7f}06`F#2p~E~eB4emTxiBFC(mFxvB&+O41GS zyr1AoTcqQFo(N&51&DF?JiYS8QRlIl`Mrh?X#aqMMTc^$>lG3Uj}N_BAYgk-K*9`^ zPheM*crv)6yi*#uCl*~fewis-Oqh`ka8F{&Cqg<>|4{8(12BOOU(v7 z-u5N5O5>%b;??n3&#k;qyRDH{+v?7XRsOIf_B0QQ7bE&Me61D4bG2LStBysUiiz%2 z`O{UIueG;`fY+>(64n;%hIPcx>S%YYCF%w3I=;Ag~?iR(M_THGj7%Z zdB4oBguaFj*36Y0wR#TUV(e~F{o&z4k?E{#^lU`JDz?~I!qsT|2P)E~H)JSfi47z| z6Txm~neJU`XiKG?XQ~wz+Jn^}8`EHseK>7C-Pq$_AyD|TB8f(lFkX3#JhfepWzXhxo&nioE7&)?*_`yB^;y!k9h8}r&)-`AJa+*GPf*r6pGR*?1+FAMyo zga?v*?OSUBfmlr_dpIN`i~mBS&u^t&sB;&q$`kbyZ>i!A25H zK+lJJ#7xe60`vrl0QJlSdhS5c@-3GOk93TAl>}8i?KD=L!dYkn`G@Z^m*d*pnjAPd z89h(kk)Mj^%8gt(3)1vVEQ!J_4=-=L7FDEE3v`;Da&U7V2p-VCrHQr7b=f$UObWy2 z(7w}+BXWx9?WGquJ*U2noR@yOM%j8MA2a(QFrG;XNl8g@aX3K8`y2q@AAB`6F_~>d zzS7G{_YRWPXv};ykRO|6_vwo%lkuxo>5Fr+R6}#|3vFxodHqA?I!%{%60g4bcl&b@ z_FGl%jK#1Hxk5@Ypi~*n(LFAluOqfLpkE@1*3eEKESdIW=ED4njq`aHW<)VWY>?F$ z#f}u&Lqo0{4-GZ@3e)f2-T@?hl?0FwMY)poBp_%pyKUNWzH&nJG@C6A{_;2d4U z6X(U_?+B7)Xu8rOxw+xvdhRZd7NtZ@c5_$}zE+gzBv)ZE{_dtbKrZPl9MeI) z25fMi@bMIEI*^P`+YEK_#Z3Y2DqSb^DQ2S85+g)f&RDHPtxNxiGdZr#1(Bu4;!&xM4 zv1pdu_CuBW-mXcdc!>S90)3QnpUGmmokJPvB}3kVzDmuTw8* zQJ@f$I%B5fz=`WdEt)>t;{Wb25i1`4DU-UoyNsc8 z{qcpNNXCbzr-Xzt(l-hVwNe(-Bgus6jb~|nj5bsW1$_!-4#*iE*L={$!WoCTi3mi3 z@gY293^`H~7qBHz$x=sWXH>s=*WIv5=0#)#4BOLnX=}?*5$x{g`DO+dP^P=%AKGSg z3;q##eb2;OzV@{1azaCKKZ?f(=Oh;&oSofKW%O6~mw5#Uz16w@d3W~Rk?@zL{QQ=6Ht zvh3^aHM%uo7L8=1yUn?{EWZ_`tdp-PwS26ptgzSWjXE|q2A-_>Y#$x$d9c4Zn#X89 zMQ=QmE)eiSHd9PkSUBb5)!80Z!LQyJIuqYc@5CMo}8}C)ztWC~#Re?(~9YE#@25r(7VH_GoBfWQv6YRt`Ua z=&nw-vfN)!9gUi%YJpvdL_lDhn}-Jq2|Ou8^!rY}a+$wB?X+%x3|*Fdp2El$$?Jse zB#)aEdaaN*{OD2KU4@UIQ@$l4sx+UjR4y~v=0<$D!OFnM2vnldpf47EICmZiv4(@4 zo#eAf3Fb*;n3mvdgG<$WFGTd)AAPAN7%r#VDeD}sUTN*kHPHLMAra{>op##)#e*ne zqz+VMb07tljnK=X9Ma%?lDZ!k@`daNP^^afU#Gg`2^?CBsq zbMWN+unqO~>633syB!NOo7|_$jomJfQ#5=jGbNM2(`xxoJ-VkQ}vK!0w;41Z@+JdRO3kv*nBJeedF z;DK+C>(MGQzf?If=`dl`aoX$fXnj+}^)&S+_XOHC6Gq8C;?S#YnPX*=)8Nb-qooXK zLPE&IH$?{xc`jH)6*&ky7RG$YjDZy1N1Zg-=g*%{t(6lqs0CgoB-=SKTxsS2IG<_q zNJ?c8*_LJ6!4%QesI~L)MS?Jb0ZE)dtE!n4dq|i-R2SEsDrLJfRWZU-R|13}*KF7u z9kN2wS4CZ?no(X%qW*12=34gr{D5Fb6J%fHN$js z2kiTl;4UKhykK)l(aD;L2_<>azlAMV~ zt(J~g`^E|OWOaK1Yf^$Hmm}lFC}|yoZpdgfknDDKicUN{rB7EbC;7TBY`7j+IKZDE z#G#Pw(uuVX()iIk8J01nW9TT-&S9T4PJ1E}6i53#dscEUob)d6N}3Sb1)#SR!*5hd z|J9wOh|XXX_6k`*Wj+jGCF$U_-yDgi(IrVuq}BJe>o#+9+w6HxcGsCLKOLmV#YK(uT}7py+%s2L z>A0tXfZ&}e9{29&k4pYb#J>Tfz(z>LbAMUW{T9|IrReAE(3oI8xv+$_iU zQeH^a&QSOiQ?vVh84dxPg7|*#=1dKpml8T`R#q05+oc?2wInYYk1#>q7^-*aU@Tvm z*M}iCA@?nSx>tDo2RLaoCrLu1JAI6djOBgd9=a}h@_7QnqQoY(Pq=aTS6*dGLCBxsj=u7NR8xGObB7+$%~dD z+uU(QOoWqmc|*)|WHPXj(Me^#Y(51WAdjc=Kb~^QWehSO5Pc+UjD(Agons;!Clb%@ z6sqG{s9v}F3%@1a?TyM)H(x+s95#md!^-1wlc2BSq;U&h`+BTr3Drqc!b-BGOQ#9E zpd#{Sd#!qvq`>odrc_^avQ&R^G=fAr)ox=50Bn|7!FKC%DgS8TsGh9xp7cV51i@L$ z>&fwlgNZ4K55xuZO&>GNe>CYX9rDViYFBx@12!$WkM10H#k1I=yyPTj`|>QB9@qv# zKy5-$*qx6_)GgjMNJdOdPs@HQwOVL7KmQ4|R#q0fYnpRZZ8cZf>jko-8Xzhz8To2)R>oh*d`8V8&rHBME!7=EqNd zwvTRnV?9w+q?LMmxBWKZtE$ljFN49AK5%&9%Qar84&Am|yxz>)fotVL7L~F0>`0y}Q z%>q!Ick;O-mFB9O8QGr~Nj7w~^vB8k6vU%8Y}bC`v45au`|_zPOERgukx(cyRz90& zYiGRZrTVb!Cy7&vPMJGH%|D1a#Lu`Be6Z9xp06DCRkoq|cw=~!DxT7c6jrQfZ#XL` zwlA%p*=}7*#jB=e6y4+m(( z5>iI5ac&2gQs2GK2einb`s+KzLf7ka>nWtmr$a>{r&gcgktGsXR~8pr^aLFoKjlJ- zHphE}EMVsVH*NijoWV|uV_Fme6x38^+HA?AKYuPb z4CWOKYiM#6Qt$~GNz3>`B0yYWTSv3OnLjDpY_hc6N?=GQ<`cFEYu6lp3?W0DUw5m-cVR}Lf_$=lUce2Ib6?!-FyNahHfa} zc6g*Mg77&m&-RiEr1w9AIMtos0_GxA)}B8S@H4)}gjr`U_W)I7fba<3C$Ndga#IwQ z=G63b8LHKoD>{J16Re+#Q}0+`s)|@e-Z8q{4sZWN2tzOpX0VI zkD&fUfeKbtQ&am}`C(Ug1er@W7PS^s7y%eqpzq1Urr~I4=8#o5sZ@7_4{SJh>ilG6 zCl`{4B%3;EqHZ2YBoVSH_70*+ipuM?EynkODh0*F#O|xaEm7))TL1cOof$!uEYnl! z&fo!`w*5LfIQR)rI9**`BE^P14o_1pDV;%FYk`ie9J&vfm>FY~SqnFxZ=dMvF{4}t zB=i>Z(X`4G4%N7_p3oM^;&L!7BS~ zvdqwKa10m{;D~*2a%uo<1Rx$T;^tH3A&tX_qj`$JkFs%e%(95hcRty)oU6a{ugVPi zfJ-a_s|iN;{zB`>$jDTM>3FvE=L9kunvlbeo0}VcU-XoZ81LkQXOW~uM2;7hB3{l7 zINBv^td)3t7&qOmb%pL62!4sJKUw{ee+k|fr$6YMKbzyA{p9t12RZIPAqN6NyqjN= z@p(o_soCgyye_>N=` z0G#UCI>%wPZBeTJ1hy*Rejy+rs2s*Jm`)G^o&h|q`EU=5xq7g}GQQW0O{l1RYL(mQ?||Zr&QsCeUsZjU!b5akN{*~^VUpa(-{=c z>UW243}>P87XZr_!{OpkVKPb*UZ7mIO4W4TBEg-q2Rwru-d9h=;+YRXAOpaij2h8{ z4gk7z3=A0-B}%S|RT>R`at4zzjAj!9;AhZFt`5NWbz&5V`yTbAQb!nC{G_4Q za;XszP@|)B{{Uw%Ycf?dFLgO=TTBO}K2nPj5L~11Hx?j}AzBi~zdfa|;WJ!TcfpZjI#(k;DcuXu4@r1B0;)(dURkHENVA z!5|oMc7Ct~xPWGj4Zp?f%TtGzHa?o9{!^LycOoJ~Wn~c(+`{U90w?NYOYQ9=+Wxzjr^fDb;fZzzFTE*59!F3H50(Olt%uAn4Z zosM)f>>98Ax5}o88HDY%(pM-^EX4$dWdNO=$XQro?okN|%)F?U8HfWWrCMRa030^o zFKKCMlMBE_yK`;q&o3_SA|WajCd!n)w7p=QO*FVLxvUVQBPMZqNZ^52N}|6n8!>vDU`6rz?V$|Zimw((te^Vj;8a+T>$qZ_Qf;P#B+bVJ#8 zLH%SbK(`_cK$Y*htT{v!4jNtO>7X@Ar9yAN)=;`I@L)5_sR=*g;o+5C(MJK00*DGc z&(m2U|7GaGaJbB4TCeX0p*W5a{pY(4i5VG>PF7fwXJN?Afz>YxLhK1A&2o_bvRf&q_*4cT*&Yz?gs!bjGJopZdqo;QotC%FFdYG5RljE$~5N_J)AqU-Tfk*vHRL_pbQAQ!0Qfao@r{ z1K`%y)z@#otKe@+1s^~EzX$@iHX07j-8;HTxY3Nj2RH^E-4hUS17&6RE&L6TPff+% z>5-?)@0<>wz(50VI{KetA`m>iFD4qeuLdd^?e7hkn*MI#kB|cb?iQQ>lPdE0u0C$k zKfU*h6kMK+4yeX`E&s3=yyaDr;-&e-{;>fB;CwfkOOmQ2`A84^dTB-A`2f71iR>(tn8R+czyx z&;KAQB^8zX7XCce(yw35;KYAK1;T6hs`RHA4IlsKUGe`Qs^VfTQ1Vw69fN}*|1K(F zF|m79`YS4Oa{vE>s4Oggx9~?)VPRay|vD>6O8tD zAnjM5P4zSOb|pLvW^1vXooQHfbaYzodiB>`ju1B!A73ZSgbK|A!T3b{Dp%!}OmTl9 zka^|ltX9}wtUZQCM0 z$jHb9!-2cv2RTFBoWiV5&jzWWxE&7W8#9)O!^H11iAcPluwHScb2)_;Yr}%Ro)qkq z1T}&dno$7^2EPmq#Mic}10&?;xAsSMj)tZvza5Ob$)M}t1NfT9P@eHiS67Cn&H%aZ z`v7!km($<>4Fky7D~UTzc$LK`Ej<}~1LB|e`u^V{Bp@L8a}AWI zn$}Ex&C32$c>LXwgo8OI_dbuD@j@CXDQ;lkI_|pe9$L7%tF3jt1LBbKpV2VUAU zo6Q=`WS0#2IGvvU>vc=xA3jJy|Z6Tw@#)idk^g2R6P@s zOL}pGDw7E7hD+(C&aAoWpL$8T6?fwfii_nAmAJ%6!mm3oERvPTr-^YOUr)DVW*uvv zq}AH*C>E?vP5eL^v8BL1YP#(b?_!``jg6yYNxe{kDvwD?d3`^6fF)`UT10@uQphu4 z(1s!Wi0$S!?Q~@P3ebC9ofaYq5BAGZD%CM<2z+3Sa>vmcsUqbOE9>zZs<+bW)0LaIkz`?%B1 z)uZgqb0G{;m0(d*(^0xz(B>;j9*k#QrK{B^+v!a6`ytJ6=tNNp*SW>*j5<OLnGdZqNMotP_n_AV59kCk&h!3;kx6OJ5VD5 z1REsI$rP#kVX^fadnodlZFjP#tbD}QzR%y?Zod^+^>!9xudW z>*~nJmf$B}JL!xkyYpSniZvQ0f;F1dlo1bEG~+aEk&uis7R%|yD|sNHO}%xNT>V|b zSh(>lmVS|!gzCC$efm&x50Q}UqGsX&&v^A%5)g?W4{{WXzS{3RQ>qzS%aw1bbrfZ> zWv$;U!nT}$0o=Yps`<_}!BkCOB&Wc@k&v5X(lA+9509zJUmXF9iiODjaYXI~#!R{JaX9IS=~T)cIzR=B-+}L; z?{SKfjzI4j+tOfrMbUUwqj}ejA__Nk=NQ{s%9ZO!IQQk)lL-Q znYySO28#jDixTqztFA6$N#DiAY=V`Ri{70SC3VdtXesD_#TjavtDS7KS_OTZT!lSG zw1)~4mUcNVSGx7tJ$~Lk(UPi+Uutwyd;FM4@QbwcHl)z`=T9+-M+5|uDAKO%IKtfx z*}@Q&wKLd{(MgH)yK3jTU8H-wc3pe3!i_tO) z3kC|U#mt2E5>czkDDx`ju^`@Q-Ys3W5)I^FsaW&s%h`6<*%=*)=Ib?@Vx?Zxhsn3% zu?)I4zPfsEcMLQ`K{msvE5&vjZcP4*{%#T4_iq~pnQUPw_j;5>$&jmfS_$d6f+6sD zZEHvWm?8J@l^@c_mfe$OulwQ#U%H?cFq4wj-&z8c5OMi>whN(vuPoCor8?=xxE!y) zh2o{6A`*X zt0muL7DJ^=*grg^hf}IX%Z&nJd%tb;9hJEzaqDU|Sc;_3=j~o6mGxC?Bwsz6jDn&I z&1^!4l|2@vDLw)V{61hRR+u%-pSk!^}Rx8E|mfs9)mgf52>W4m#b{ZyyrI+f8~J>tZUZbjVGi;(;S-V`xY7WyY+{6Ij1z&)%~+ z6eqIwr90V*^t*Qr80dWq3uRD)c~Au`>k%$4*dzTkP`&z9ovH9lgP*B|z+;-1)Se;B zU(n9Bg&XXA5||vm!z5M&2ycxM?M(TkzF8VCqB9a&}13uCv zay^!hBBN-iikTh1FYabNL_juA{jt80d_bxZ3uJ+p zDC@qq$(FUFkiUEZ3G*#99LLzDefb=U z{_}56c9-6={AnalaU*C@1iNu>LsQ#~T-K^w8wcDV6d<_kPwujB_K&*9IGV$uDV0m# z0zBF00GX$E&IZphNDCBMzy}nex#EuYzsf3gLC1Iqch3)i6}C{SN= z{^h012=^uuMo=2KaToxc4nI2uB_hoUJ%S1*03-e=v7wZ~FA+b{1_m?$2!v=dWfBibZ+-EiT3Xd zuyAkHV634oCF?oph+r3>>dQ>EiLHcqfTS#@7J%0!kbsnG(0Pb)Lm8s?9+eaqBKZ9` z!{|@e5wFxz@2)X;dhhHM2$2t5@hs$^hVeRnKE ztT2U>5dBVOI4=C%GhydG{~EQ6x#%{z6g?drIs*JCvUyN|UeeIP9;?*IBu>&jBW6lR z(9rACv?nfshDhgPE*9{C{bFt+UGAfv^jM~Vvu{I}F-%vRh|5yw@Oh{PnJj^u*W5(7 z-AC@|NmHHdqRy}_2xCd<-1%}jl5kN*P6%`mXe2c8wQ_idPYSg7wVUO85$D?U@s_p$ zsg$$nwhnmsOJ|#g%{6f$amh7N=Ky5nlNA>!QrFflU=JuSWD zi9Cn7a{qFq?^SpADAFSoaU6?{jg_~-Fv7$*619~9iG8z?0Wr}@CLWIq|0yZH<`H*x zHMeZ%?wdY7A~nyK5>*?!qP08k!z8rjt1!swy-c!&34Q-#klgugVAcxEI}p z4o*1KC*pKSLp=O=NP|Ifd*$)EOV{@3c-kI+qatewXaCHERHNcf{V`eU{IipxqHpe^ zhYc{VAt-b%Cm)X4!ngWQ#9TSjT91z(rhX;k9kqSXeD7PJnj6^V;hz+gASVpJ3YUUc|I!Esn_P>vf-GKul+y9QK|Ci&0osiypM2M-Sb_>WfdgHT&`2=-v0yzXenN1B>xKxx_=2 zBXkpZo^pd0@cy9AVbHG$>F@22TNI0EU67EDUog^QaeUR)ZH3~VYrS941?Gf!&|k#f zoY{p01`OYw~hV_CrS^qxb1tv>btX*BFf_czkZAHTA zv6zEt7+3cu37juJ;pN?`dVJPy#a53vn4@wXvI}#rFwgSWEhRlT-&pP$Z-;@N&QmP^ zw)15WB#&o$!ZDgsi3#b|iO12~DN*}Dn|}gvN>;ctX6XB;-U;Dap>Z30@9Un^x<1b` zBa@NMTcmQbY#=^Sve?Eaph%d|gnQACyD7x%$_@z#S_-XUXH!L9L&l+FIk`#OgXeIw zP^pR(UV;~c4iRX2d$AeNMnK$K=b*=J`o~cHPzBk-UQC5$vu4L}T|d5Utr8s`^=#k7 zHjg|Ieojf8$gKNIrKMV;Abk3agfIPL2Scv@d3_ob^ZNLAhp-OBrA67jxwY7sNq_9` zWmU4Z@n0a`D`}dKv~`}zTE#OJVuHO3B;z|yGiN-$Kq=*cRtH}HVEFrZs4LP|>#wH2 zTib=>{VYk5%X$li>4P;Jd~>b8JRfs0SKitG3sO1-<+5P!x@W52_M1a>D4t#53@ubyu(voQklWP?rc78$hHFtk;KM3JCpe=E={ zR3Efwa8Xol8zC<5WHgA}=_)Ora=M7%IS0h8J8pCvc`t8O>AN^NICP+8MrWF@&Cm4E zl-k9*EFb0OrJ5Sn5Ot)6%f-Ih*|3$iK^&J8CiEg9r5n!EY@19~C1#u&d80-NtMW(_ z$rHs#Oi0_(7RD3C`|x2h$6+lyqUD?vi-cs5u6ZA+^rtPE@UD}Sxf%-RQ~w*t2OWvYp~fwJL=9v zo@cCu$4ETyAl5tm);=%r!vWS664{7Sjuw_Q_LAto z$%In)(B*;}QG(KZaI#O@RF1R?vM)qG*PZ#zS0trs4zG&0T=mX1y{0K_4-RKL6LrF> zufgihn~6%G{hlHi?h$`5+|z-_mcSP8FrMo@H$W4;dYVqmTs zJ5s=pcO8^;&hs6~6F&GZAP-2osIl>U?GX)2*HgsubW*FS;kDx;<*ijr^-U{+BDvu@ zjoR7hFj-6bU8WAg-BCy#3Wf?q|2a;wqT9sEY>E6-g#I9utqQS>v3-;C+JXsk!HrE=4q)=uGf zGggSc#a4K}e9)bUxP9dZMXh6`s`O$Ans8L1w6}hf zhFLZ$7Ya1BC(3shLFnHg_+#skWYv)R!Fv+D^3RE7Xt%?LN2e5ghOuRRr4;P0FM?EE zmzuI5Ot%VkeES0Eh5)R_@CqEV1b8Mz%3cXtIBSaF-f#ykF8~bc}p8se>}o!8@+uZhOOA>DO_{S1CU^FC+Wi{#A#YES|w7d8U^XZ zJ}M6uXmAP09KNkXCKp$kP6CeS=6&*q+S5`6r#{Y8U1~rk>VsgBU9At(44H!b%hEDL ze<`77gp(8aWW>BQ7%Rml)S9%gHc`1eihA)AtID_zN~2iM-?KbeN_2DOI*q&im@@Pllp~p99Ju7IXf{OygK zOr5Ku3>GZ79*As01aS!nu2?)g;#4mA{o28J0izks-R(8C*Sy0pku*}TLl&oV_bo2p z>>IDXU;7`BmKpDSXmB_Q^(vlu>ZDXLwf1WvAvs~ZBl$_@3Ib{S&`aytidFcXLo)7N z+S;G$9NVm|aXB~&>kz7R_ycP$ss>9X<8NLB`RMAjC2`q`)Y$Y=VD)jmH_QKZ?PP6& z*xwg0p8T4E@5!$s&4#Z;M>2L%Hn*?s;TnYlt+3Z=tR7MwzZf4QpdaDfRnt@AE*)JM zg(te)C5HHpP*@BYx%^rsW={$ZY8>OAil<|GsPCVz!=H%C)I=VYDDhaB*{Utokg|R_ z+VFJ8U0pykEtKL(;f45-a9L! z*X>rlSQ1@SOw~k8rY)TLeyaJ=gR%CwI5?9|vffC~yuD=+lC;Gr)rGk{5_Pq|H@PS_ zN#F@^e0*hg{FX<^U`szL6T>3u*2+yEDZ>t%DEbChBqqXAc5~vul9?DIMVVW*lMty%HcAt|*E{a*#PZ?Su# zHkiyiu&{+YAA*St2fvdOecfb#ug7pv5$wmzx~=}_ELFSS zNV5}JXhq0b>Ugm?b)-HNoq2t&eEzFZV~cT~acNAP@e)GIh5h)lFmC~N<+(4x()vAax_$6Ke$cf5_nQM5A8=i03c zIX%zO?J5b9fLr`46z|Kg>>-&YK&5ZET$SLuisF6%~5kSufFu z@c1-Rpb0%EHlD3$ykxklhSOax-s^VW107TZ1py5X$TJ!LtQyhe!IGnN^#*kWQ&G6ipqQz!Yf(Q~5-y6@&*KCNrzN zeF8iQ&UCb4-$G>@<0OpBNy8FXu=FdS=PhA72c(+Lqlnep&8HF%X!h$K;9$8<`nU02 zcVGrTp)&6<wN19G^6=1qvFdQ8od zDYhB$d^IpLW2*)$I(mllX0olj`RHeqr1@wQQy9T@&_}cU9@Iw|woRjaQaTC_v^;X< zi}lWdC_}r)ibZ|XRR-b09!p`aH>K7IntEwQ-X6D%xe6z?RgK%ag{f=gHgnfWcI5pX zu{+7;X^*PM6o#Zzzwp7^#3{(VYisXp`fw3?GwK?N!vyl}>_z+FJU}js^`Rb-V5!=9 zP!UWrHy=@YaTNDP;2an_;c{80mJdLCrn+))O-*$n|H5*8 z?Ah+xn0ui&Z~WHzVzH;5Uk$u%0L5Z3bv_g6Dz+)Y>9SlSOJZo9$=129C{8-HZT$7= zyuzs)E~N;>V(lCMq)VO5pxbmWTUA!z$Ore%Cg1U*;=Ffz{i`dOHzoA5c`h;G>m#ff zsa^+aww10@(Fktr1eQ{t_f`c5wG*yM&6_j2KHw@w6;Z6~SD-qvl;noOk{W9G@7 z!05%~llL#Gw(gY^_v>eg)O?ViqKNd-CHgR8^GpOc!E7 zM_cJWerk_}g;gCvIa|#085(khqd!Wye&P50tES|sGA0vp4*^v1jcT34@M<3l3d-~T zgeBL8ksflpuV2M>7mhCM;Li?^M`TZzqZ^wbr`^+6U9H|jC8Cj(vlWK@f#%cnEbXx9 z7WLf`D_^bj{MOE>D4%6zb|3#>7v3@zH9nPRjX^>_xw`HK2rruoCpq~!=h)@=lGakJ ze7^%ZBko;+Dv7J=8(qREf% zA4mC@AM%qa9db1UB{eL|ika(bs2m8g`O^1_7215kexHP1S7uWn{JEBW zx;K07M_w)u_L;w9;|N}rli;PFBA~t4_*4fYPVk4^Jn+qSySVgv-%3iXj|}?Me9;e3 zA6DC6o&HMUt+JR?<6jtfWq8yP5YO&{rIJXAn+&xwh%AAAEFdTd)>666eno!d<0DHX zKIA$_?uXM&fUe*qhu8|+7{)%MUh%&f5N zsH)u9cgnRo_d3_)Q*dv3d1G1F`GV;Nx5h=G`}AiONKs{pU_+TMr5{|Xi#H7N*Pz^) zG@XNSCfAqg3hy)|(Lcl`D4}l^?JY;+Kc{;5c$`Z4J!F$49~p;*rwYBH0n5c%rCeLcq;D7qRwazVJV`?*&V{i*PU#-(h0d#NK+*c1br zUaApk-A35w+M9PG!Wm8Lgn78D{d(SPQ>#eb@W^O8~A_WQ+DG?FtIr5&;893CJ9I0fMwbezcSt#OKue#o*4L}!z zrA#lLyNMLbMV1!~E80T`?#l-+GC-z6#nPxJXkYW{)mzKB3JUuy4uXE=> zo~$*;iC|zo7zC40Scv57FxDo%`-l40Vn|i44+2G>N-M4E2D1>V2Sk#~+n^S2^F}w# zHOAFENvfKskgZ%u2^ox9?Ryt1=9iW_L?nJ~@ucstLYuD2NO}o^uwt|3Vcw(U67TNhl^@}KBT$uGgsw-{lADJtMB=NU?q6qY_ z+f=F%T8aItcv@dn{DBB@4%nK-6{rRmpjIfRqY~l1+=c~dY zqv6${*Q88)nNCeliHP{clG;)H=S#+|C$GQd&`pvTzTqGiyuy~vpvb_G?jASj-IIPC zDeZU|v6XZ75_`PcHLBG8sUg_Tf?$nYq~T18wZu5=D^gIL>&6S%n%riXU+L-TU=i^k zsqE>o*qScu_>k2Lkg!|nv^5q=C@Lb^fbKUnF;NV?4_OH#{%T3A)-7*Iiv3rem&59+y%3@{Ft)-d}xXWtKmg3?8k4+G*#xG&({P&}-Whc!7J!5c-g6J6&&8AHi0Q{FoS>YJ6X1(%>?ua+WW#>Eqky!BO)z zbEVqbU?Yg`nJ?eV`j|IP$VJp|WH#QBoR@EpQfMg8$p>2ZZB{NdrgtZdk^9X%M%y%{ zR#VBNUK08$Bkx*{<;EyqF-qT3>K!$-)ti&$%_G<%A(O%fPB$cd(w27pWEX?0OVGo~ zk?+1mU>)hEU)y{q z52TMGU6mW*sZ3yyF_fTiDV<`J4)*5p1!Ck`$2&SYz`K)c>*`EPacfW2Yh9hd;sTW2 zX+u3dK8)!h)zKO?3oD@?&EG%E%F0v%!=my{D<#+U`d8`$vv5CAY;DR>5zLt z7>JiKp8DYS$I}qaRq+&D7njpO&A~0EdXrIpcXwkC34>>iUo;j+Mvj|q1yjg7yL>{v zG=9PvKler21|P&kIAd? zdbVykim>;Tqd5}RJ>yl_OWbE=4zftCe2V6K#Lp`5e~~NIktNUR6>0DzCHA8cc|XQ4 zJlLFFS~*~r2I*3}J7~_x^(DvhUi+f;15`n|jK)g+=TV!vV>)!&=n$GoJ}0e9Q4fg1 z|03+IqpFO$eo;gLMM5PMDMgV6=?+1t zY%V_pR;WSyMm)-RrMo$bFDyAYj;S{9C-SGrp!(J0x4R-ZrXJRfgZ0j)rl!Z6V}|MV z`mYXO@Ott#QhDEi?%_kAxur?Bctv1Vl!R#5l$_O`yB{%BE_;Q2vJu|}=gC@{k2 zkEOI4c`8kO8SBcP-mQ70YXvJf?q#sJTy@@^J3PNiVl_*UOmcK}bJIvjc6WC#RR5k- z-gj_(i1Y9PupL{v6VTUIW%MvrUB5*qzH+c@AD%LqhYVzgf6wd1^4pT@+G~y&|uA4TP%Wj;N zE&S{|{f$nqjhhFtrR_thwi171MwRr=b10r8R59x<4#DdiH~se%mjs^AbHZpQn1Nby&aX2hYL*P1=;>%j6Q_oFj;rSHlbxKayzGL( zSa*N>+vT}ook-2Tzv7ck7KItaQ?5u(w^UYseie^9VIBdrnj+`3vOYd`ZB#Q7ZIUr^ z@N)iZb52#F{8F3ZKKdZ-o78&eMAE+|zxDXj>-t_i)z9YU?w7wp=K`?3cQ-Ew`x1HG zP6vKQXJ!7-EVDr5ViFFd@il&);W}aB61EGA@g%BCr(x+_)z_H@-A!w#mG~E!3jdn96rZKcvcH znS-kbbKHDv`qLK2^$u^su5RhiVvSLQ+YbN;=^3{&$-nIsi=J_J!K0xL%c)E#(qKSejSsYl{&LDJ z?o7ER%=??tSh&X2yrNvEcv?Li@DOLJ9EYdU*O7eD`ud;KOabg z%-_3rZ&0`46H zmOz!E7Bdy%7vq(ZMyc%J@Pyb^^N0uw%PSYbV2693+a{WUV~0^UTkjb#i_n<1e54o- zPv=utS055r@s#gBprv(A|BCBAI24^Xmqv5Ag#hh$M~B}BAC%&l`sE>$6ihq8%TNEpKs? zPI_TI^_jyS-!GfU*f_iSc79@_9JY2lHh0!s32xu)Wtz}xtMT2LI+mh?hnVw0nW%t)AQW*k#dqr_jM#ej~IKm6**AgRX|0kdZ`4qLDYh*;;yX z*m`$mnd;lJ1n=x-n@vJb>h!ZWAwIHGiHAZ;dsn`#rh<&+p_@sWYPL)Fos*WD6_Bnib+8`p}}E z%P{{160uN=O<^3}pl;0%_dybD>~LakXSg5J02kPMgR(OhPL4n1BGE$@(kGS$t8^U}S#V z;2wVTPMZw}Fyi?wE`5}*;CTHZB|+fxdG*tBhU^qwzrHn%?ccT)%-Rvbsh;gTl;eMGjATUS@%Q8gC6admkdi8Q$GA$Q%TBoW#sHg z_rg0^l61!{I<38Qq9n$#jA7nQgG_hsOjCHi7w3k`cD>B!QSt4~4zZ(YsZIdafCr^& z&#@*z)Du}O+gX_;YEQqIp-nsrF?U(kp0XxZin#Z~cobUiyrWg_umldtDy z?Zu4x6Fxjg1jifc+_T|Gp^APt#9DEoJ`!(OZZO}9uwVK80QrNFCKa$4)aA%XN(yEA zrpw<|Ui0-iCnhRlkV(N+Fw^KfcQ!MQnq&k3tjiRJAeblP}1RC#m=c!_PyQ z+ITdlECvlfx18TRbtXznV~N7KRYO&4RvRL#XMWm! zRV@IJd&dO!H`mLX4!Zoj?%beOCy?%eO@48T=1qKuuX%+t%#vzeC2I1wOV!4a2fKQ@ zQsMF|KRF`HLbPw3RyBrUOIJAzc(fuzoN!tdH!w?SQ>oTmbNr%B5i8{M46f4_@c2%L zAp`#_hHy@?hq5vuQU%;Oa7ah^@|a8|5&$zImrkPFhga8St&o$;yx&K-a|GJjN`1&y zJm^&|&AmES)ze#;yuB#|?NYh^ePrbPT!hp?of+%1XE-2IXlrN1DC2^p)kBD?U?e7n z)b#*gU|v9VHfD)Rr6PYtSyDZ28BF!3O-&$I2~tO~E`ZC0B;5{twGTBuuK1(GfhWE} zOZ1$S^v|v=!6)FjhHPd9QB(I8n3@{$@ZhFr_#i*tvllshm!F>{wu7y&HFKmY*Q| z=-#PN;VJDK?bb{4bjWoUep*Z+*t zy)Al17l#sUKwxJm2q{6BaSu#1R1lc?<%t3W1a(DB9UKACN(3Fy&rIH5W|S$6Yw1nAPyee>lpy?%NTj<*Wrr{|{Md=i_o11cT1X6R;L&&soP(B*uv6I8QXOI~A= z4wB5v#Q4!vmZndz*?BpqysIo?^=eA8jBz-CI^u!PhAkZPg8NvN2i}AnoL*Kr7ptB$?F|+I=|CJVj zNApy``9B($J258E)%^XFf%6}Qz(0kiK)@doivMu6fY@_DL;m#d>wZ7_XX69^azOsS zsaF9FxcJ~74S1(D+W9Af1z*Q??{CaB_#4o+{(mZyQ1FqO%c*;Cze(7Bz(86;jnVu2 zD*$=vBS5S;Jlv@I4~73%$MjdD3$&$tPl2^srxIR;&E74lYfM~?O<66N@Y2w{W6!y4z}9UbyIB(# z>04TLyH|k&9u@J|$5#J?>1JliVzUg_YEXFbymX!xp!xw+ixvS#t1n)>=OmYq2)eM= zZ-*=EH3_t-n>2ZVVPsED?Yx|353s^ zfMf481Uo%p3uZFYu;w4jsmbsq?w>&yDS`qdnerVIq|9#)F2!U9Xa>$CWAIMHSXJGA z24EAr9ry|+r1T)b?@aplcYYUtcXXZ#xG%}O;);k~R~qf-|+Lh+fgcYzNDkveMdpZDKYkYCXawn zZ9DS$GUG-wCKY!2``Wiauc49gP7!~^?VcC@e>}Po$=~FM_|hCftgyO_soFrB*B0pt zUGj#yref(Urj2WcP(Q}9AjJdPKHjuxIIOxi_Sj4&`WX4@YX)^v+zb=--QdO7|F1j z!+&SEFm{|0?hCakknmw$y32@sk{cL%yod7v^#wQ-UkU&Hknm}`a1j1ey`$VgpgzrI zzBa$&b(ytb?&Y~zE#`hKvQA4RICij+oEWapV z`}+qXp|(@jmqEjDSUq@TkN-*};wS(6Ay~OeHF+}huEkGat(U&IhEm83X837VSaui~ zH~xyHNf?2CXemB$M&8_qdtU2d6H#4Wg&B5M*`kFRIX5ElKmVsSM|w5>R;Q_?+dyQw zx93FRo4EHQ;{h6MMOL*MsJy@7H1id*5?$O^op|L$%)Dr;SypOQ|Lz;`xzPWWEV0!7 z(cVJc8hEpPGh4ETQj^-Mnx6PRzzm2{(# z)c*TT?p|mUza>rQ#D@0Bvy$`xQDh&h4@gCL?H*q6&?y4a`zZ25Zfs*!LTJDDDVGt! z?T=Mol&RsSe`5B?$OI0TKb?QlgzgS~KKejl#4VV}Hn_PcJu~SgX`kdLvY)Ta&^{kn zGHKL}yZ!UD^Y@Rl5^38@tYlVe3x$5>Bkx1kTJ=$ttr4#pxmh8u^O+dGPaEWf@(>+F)>2#`7lK=cv$riMqfPQ!y z841zS#%yYOv|VaCJUugwiv6;E2~u-*_Vee@XXFxU8fqpSy(8{}otMP^`N zxhKxhD?(1p*zL1})X-?KG~oyBO--A_xVGFr-)dlB;>Se2B|%iy37^kf&ZW&c2<+@T=JG>y+4AD5`eK?wk`?cLGlqs5oz&0cg<6{b^7ji;M^ z&U8y#auJ$_IDaT06+9~!fvl{o$H&R+5~7$dxhif?BTrg{0!*UG-oU)R(GCR4aU`&t zw=WR{SJ5R}l*GeZQOSet`=tn2IYP>e4OvTHsocFll0JrChT(88LXL=XmSi@IjM)gF zho9sovwNKS0}YGBLSLWxPxTyBso;Q<(&RFX*a14*>}(yl(7~!ZP(sYzCncRo8h645 zi;Z{9z5vk|H#hNSXzNnC9*0RkID`8(MvaiX)JSIRT@FU5;>m=;5Xt`e%7vcYebfwO ztE^2mHwOlG?_~;soKp-;OzY_e_41F8-sRa9S|Bg6($R(|aXa5!4e56}?M`3?NsY-&ndFFBHYKq604Q#a{kDq@N{5-{GxiPA&@W*U|nj3pac$gXy}BU1TC>2~|*G#%qh)dlX0v#X9^zr)pA zPDkpF5^yx4!X~}{{G7QwUDs%k%#(3*>j`Ho94`X&JK=b#Go5-A@quK2618zy)N)5Gac!qHeUmzxcB+ss%&p)<2m3WUMnl#BlH2e7uyM<$ae*uh}sQ z=ITdEB5)gxdAhY*O!Y6ZZR)!Buo;axG$PM;4tS;*T`iZJm2IV>C|v#iG14h}om7Pb zH9;=+0u?D9*&JEgm``7S5g>^)mUylJ-vSRyQ%&u6rN!KwSH08rOKy+NDobB~tYfc3 z|ACgvlil6f!uSetJZ-bV1XlB7?^{kT4i|T@0-R}Sxlq+ESXx%r8^FcdPsFn4`shG- zip)=kNILvr#IjThi|I~-YfMzuatINxMxB#73j*}mkQt~Eq81p7pT42&6izpsy*g($ z9*onC;DGf9(th^vI7{gm^K>sac6-^1jRjguW+eWQjVgQI8HcSi+d8dWb3H)GE>g%! z1Tg59>D{#YU4>v!JGXh=rqb!!JwR>&xNHFu(8_Uga^s5iu7DGKakTBe+=B;hxE>X9 zatdZ@2}2i`vo9ZfccyEF;xADzE;?mXJ|W%RdZHo8XKaE$lIwZumNk18xl=!75gRNDe>wM~SVWN*6 zQrH5!huna8uVpc>sZe1x*0D@gMR@tfqeuC6#QMdpy-nCS=xnHdV7wP@#_0^#t#Ppp zkV!?wdht8c(;b1|MHXq&IaZ7-8%D}q^&zp9}zS%*nDSz*QNy`z)q^S z$?cGVzP`WstIS@WZ}s=hH4)Zo_?)-(c-bOgL*r;Q-qypvcZt=Zt6FHUZ)`|VI7-Y< zA`tQn+T`hcuJG1ro;Po@)qCT{3!XLF>K~JeuG1>@Hd$Vt0Oou!jWsy8K&t>g$83Z_ z$`&GMwH}fv-*ReuZ*(@c$>~>)nW5>mmOyd|e(DtWU<$Z`38eUq?twzr>s@zvj+4EH6FQB~c)6e*s{GD^xAiUw?Z!uIzTw-cv6>{9l6 z7In~2=e#2QI@+jNjnf%+yn{IG8p_5+P3Lu%;R=!ob?BBPMny#x*46^(K*7}bV0f#f zsXdj%dd&Ww3%RQrRxiv<`GjeFWTYY~KHgj4%k<0jqf!USiC>8hhJ7b)u5JpHy(Num zLs_=_`%)?~0}HFGqR&YK#l^w7&f{l$v%R?ZhWkxGue?@LpfMg|jH-1B*H!`@6l*dZ zg^8&YyT^tBYh*PhLsnI|+dpr7%nn*k(9%)jvRPm)rX+eA522O5q(u_RL2G?w-0^3T3Xkr^m{98!C2WOU$b_}7nXs0Ae4dy0I6Lb&HT4D3w!I+y zmt9Mi@E!lbZcFA!%4hd2vLZ0U8xym+vNejXRsrkeL`i4unbzomy%VJzD?xUhQc`j< zDX)i1*PoUEEK(9Sy>__a%f?`2fx>+1a9SLFeZ-E7xNxyQB#>NATa{c=S5|hXAkKp? zJ#zY6is6U5#ttXVPq_O&_mOrA5MZl84Z5$VYM3BukHMLRQJ$RwyZOrR{$zIDGCPRC zE4ie1dYqibaZ7{g{E`74S4ZL}mg%48=iye+pGH&6y;**@3b2)9LiYSHt&528y}iBU zYAaTY->=5g54~j4!%eP(L82$0%{raXi zEM__LPp?4~3Y^lEEJ&R}Zv|{PNwtAPUs-!`MyLX5RR}J+nwwgWloP^Kqqj$B{ z9G}<11MM7WpqIG(^LTK|hqdOT1md{>@1ntCO`rM)v=5q9R-s{GI<;<<&CShQ%B8r5 z?o3Qf`DRzY`jaa*z(ER6=ZGBGZwtUOw9^D(@McP-O_rTuu+;(bckh~9FHa8e&d0-& zSuML@)tE1Nsg{RuI>_Jhdl2#L$nuK1Gy6FUBH`9B8xP1qMnM!E&>!|rSe3WngU9Zr+VDtiuXZr`Sth8&>n{dl}>-F``aifvAO;$KiVq^7TkT zGOsX{K^pkGt9PeC{9u9DTa9|JMwS=vfE3Wj$ETv=Tl>dau^OSv6Be7EkphcAo#xMN zi7;a{%$M!+Hs!P?92A1{`buRDorm1H%}U00?M3pu;iBW1ck5F=ZaUW6cmHsxGB!wL z%a4W~BbziM_af!x=1NTQ4H49tM!y@*lj*lBK{;FrC1TDM-W&_bF}fJ%^PH@-q#>Tl zb=<5!-6_7<<=?Ox$sc-R$Y7Mgd_AjOk58x0WYzkBEBnxer{~e`6ijqf$i(}11E+oO zP5;S%v4EAn=G!Yb3q-9aH_A^5Nkcb{Nl=+?Xk4+L z(Af-ZAqEC&f4g7^gkI5xk8nF3nLu|ExxM)guc;KIO<(dm(c;DVM6Eo-+!(hWEr&SF z6LULoc&onw^LS8RrZIC34xC-?8q%m}#q)&Ew72INpYGhhJT-nxSMop3hPoRY z8)SeubjJSG)|}th@06IUS-SPZx49EXoBc}_fmt8QvaHw#{20{nD&2Uq7mk}<%XEnW0Ai1gC^;tDC)Do@>!S;3wqweEskd-bWEeGI_qD=K@nE z9e4W-z#j(?EBZUj@$rTJ!E==A+~dvPr1vwX&}C82I(p+*jEq2Hp&pWeAF`?4BP5B; z|Jp+3U6_6z;N{T5&)BPGv2^Bed#>%aUo@VCE#0{_ERdFRaG{*QA3V731u=)l+g z|6;>`rYS(WsMYkq*$c|=L1VD8Dq^lL^EL`;jbaTpeoupi_aCvfp}nk&yUX7Yc>Jdw z6C~n3L0T<8I&Dfv4H5G`4BK8tsA(Q=wZbZ-IGm{MM%|n;DBsK&B9KvE&1G8sMcvFE zrPTO*01j4iEs@82=N=&3-g$S{(7-?pO$Uq)#o^%UV=>*IqJRbSoOn!oy zr<>!SKY#ASzSJMd2Nm3$r9e)MLjE6A(c4g?Np)g>{zcW{8H7;=c58gCX}$61#Y>wS zu;}nWSV}5n@U#c3@pIaIwM^t_McH&-duQiygPuF^0lju9a%M%E zusakz@t}Dk^^&&UNvzH*`5xt~TCecowKDyJBF3oJO_jO|Aov?3;muz%GJlQpPP)$S zcq2hR8vr_Qi6=^g?lSH{Td#86U>1f7ayaZ)2E8wis2mAjyf^|(UF+Gt8UFJ2b}U{Fv{XsBW5&SY6z-$=}Mllv{-b-f;fi3_IC3DAQz>(hbMpx&#! zd7-(RYiTJde{5oj@dcLa&}4S7My+KjxS~1{Grx~;G@g*;v`55tEd> zwEXka&al^N@`sO`kf4ws@;ya?3IqMV{=PLAvAGx^#^hcCUJ0-W&x;ps_Wk-7s23jR zJ+Z=)ao^h)yqa%%zBp0-v<}dA1e=7wA`a(mMBB36s4Ax^c(d;zIY@s%{V5sGfQ^kk zSL<01_ZTYHtj@=;1$8kqGZQ4|=DyafvV@gafDHuG<&Ng4>CH~pZbJ9(BVwMaHyUB4 z56;ziHJW!vZAIvsjTvz3EiMeC@m}^!CDV&+juubVDpK^Q5ADskpN!<|@KRBk&iULo z?2RE{a(RzA?fnNycm_Axd3{8@DrjU?{teT)paP4KtKzh@c_4xFaBF?oVs`x>1oIH< zQGrge#->VfQE_oBeU4Qs7ZAUkIS&v~H%L&()umMP@j=5-!FB_sd~V0Bd=^~qy}j2E zp>>JWp!bH|YZ9qL2~gRbBeAURUwbvvQ_eebZ>>#D#UICzV8a}{;7d62yo-&Or&RP= z!ev4->6}8HWq>BN*ac1IwuL3oJNBP=p=0papU@unjJ__PIeU$o}ivJIw$0Q(sPLkgbyv{*$VJrNEkh!o6`}8enfiHC>kSV&X&hi2QW%sV) zIt#Q(S9vP?oFeM(1@F2>UJFC6M@wi`;(E<$KB=T^E{^`8R2%rzoOfp=WyB+~@|Y8$ zn}j|BHmf_@T-D;)y6PaXXS%_$5HwtVejTkH!SQsu^x8uU5XsIkQc@hk-dI}K^B}y# z=k!a)203|o*q7JNAaq+seE#Aerm(mI_~TOVtM*6dj=#UnRkPy!>I@iEx0tD>aDUc+ z^{3_a!jS`N#{2TB@{Qqoc0&%`CO2U)eOeN-IOLxuvxA7#f53~Xfk6(Ofa(#aRo{y` z7sz)>+af5~y8ZHZY)M(!er8*M?^oYt5%~mmi}vr}m;Rmk=^vV6#FD#$Lq#Iaf_P!~ z591mBC0DHbUx-KRP$ITs-uridtb`&+~I4{-tm}L9X$p}w5%^wDG)T~ zUXM`4gF0NlF1R>=W z>nPnr8j*z@#F)dNRPA$B1-JPr74Ety@L=<`JaF#ieNKhtEO4;pzb7_4Vbk z`Bdh8Nan9_!aNRDHxUtl-T~K>`P~*R4e>OAwk*M7GtN|QCnZOgj4$>JXZsZuSgBl? zMDH^|zix3a@9H&*BbeRNdCl>URZ5iBcL|vNu?bfcavnzGv1+!;ymEg#WT3C+z%g0o zNaN?U*coOy3mqNZ94BPA>ND}^f?wf)mPzH>bEyl=bpXxMc;(mBpUj#J`c&=@;Z`$P zBwP+4rA&i?xPL&mLF^v0WdgkM16tdg&M^6BY496$EB`IjIqyAzeSxIqCTR&7KF@<3 zzgo^zj-*Np*Xxyj+S90$-ueT|)9oKD=LorONbCQ;D87(eSk;F935wQ!eHz zOhb&CWm$(Quf1ZeWUKfhX+dY;2a;(WM14?xT4*R=*n~yr$yiR*L~iqWuY|y0%+a1( zOu~Yh@G=L)5?K2sARzG3zyQowS{@A!BMhwO5~ZTPzP_eC7a$kB5v0U}ef7rm!1f^< zEsyDz7e;J84kfqLqU)Hab{+eE2b1W0whK~wmx(FY^-!2hM4`g-`YNANT$50tUHJ8W z;dp8606Bi3N!*>p#fsNmAlybF>u~lQIY}cjrCQ4W~ z>azL)zi%3MIo3NoENHjMv<=Y{4wg9ePio9bj`8BAmG)x0gVg_i24#YRLIB4YaI&6i zKuDGofU`9!b$7Pvco7#L%WW1=k$$tHj6Ikf8&i>$W%xOlz72UW5S%Bweh`0t55OZ^ zhSdv{b-7z3kURPa=;hu;X=U^>F*8RyDW>^E@^mV2eM~|EX?*-{XL}JXzSzWkJm6M= z^u~45iOzM)zaXYlxppD6b*p<%tucoPyhr&^sXBFhbjl%8;gKg@y!RU{063HffJ+qE)8tO8mYYAe0;CxL0_;vRT-UJWIld3 zBnO5Db9>JtD}SVJG_Cy(I|L%zwcW|(-p4Eb`h;8ga~KFr6}MOYV@;zr45rNul;IN1 z#BuNbUQ}_beE6}tT;b_FUMVs=swFzg&147yaAR%!kEg1_mqL0^KoUR}2?ITtge)~K z=Le+Cw>xWVT?Wxdlk)h&#SXP1tJ+mQ>09|=Jq%jFH;dVtGLhqr5pMGLdy9Fp67gHK ziIE%02(6D678VUs5jgBo)@3~kx~tkPOPQQ5#)VG-f_1eOKM{N?m=Ooj z=TDHtKYmbRasmad?j@%YhPElM$If_SVWS*ynERl;ViF<6d2LdBkz6M9?$MuxP+dnPO8FWQNL;&U@$F&h#eF{ty zCXXsuPFmhi@0McqC$TLdrcguEVh+{<7ows``LIY%^U|^#6I(a&kq$&b1dw~OBE6pV zRrc2^5XTq>Hm>n3rsAM%z?4-f5K2I{X+sW1ALK5q4LbZD*;7Y zUSvJ|!)Tl?YjVkB#dwRFP!Wsqk{JMMt-CArVHake8&UE`tXRyMHN{sb>cog*7F;xe zyFoqeaw+5mUkX%p!dTAqpiPc76g=|v6N62h?h;}Ot50~JTpxV#P>Cr0kma^8!|g*aR3w}T&=Ngi z8t<)1Mr|r1rne;Yy|;(+w80uj`iK%eZpSs7t0nREC#=2ljx1u*(!c|sb6;}!opi2j zYR}0)G63!xTyHN|Ni&yR@12~SfKS|zB^oB1W2CP%bQKZnEBi5W8;~Yk`QNRn_Uo;0 zZ@}IF!_(BhmsbAJ`=(eYmQ^Ruy5uiBsji*A`udKhUoOez-*sIYOu}h1bxxy80htaj zmFG&K=@BdGVoswRwqPU8%e!zW#otj;QCIhoK|>9urlCE&Fu>!J@_Ry+%Cexe5*AuS z%YG8IbxD$G$*p1}ugf;5%;JcFR)zQnf3}`exb}w1Me|3B43a9(;c3&(`9;AP)J!jMulU)oPN3$4 zBuHj-hD1~($AjW7Tmz7a-(~DF_&R?dcpn&anm}`>4nEPWIgc-YGe@#`$SzR2;yh@W z{z_Z4Y!I_zv29J-R%l)5t@c&IAhkkIUFdW?bC-VT27wFQiDL`-=(|n_6 zCuCr-l#wYkUZmN%M!n_JivFLpq3Mr4!(bIyzHcYk1g|~WHq)pHs0ZajCfBVy*L6~( z1%u=|0m0GJB3in{bfWY@?~|)qKt-qNoFJ!@BJKmy1`|xz%*^%nhwtudpn`8ptY`iC zD}@Kre}q+{%eDewRC7PUMfU?}_X{o$7dwe2qcgg`{&n33g%8{y zLkxg0ND-I7b82Gx`2+DPgVve(WCcKRb-BFL>{?mADFowUd!u83HC$$+S$@90_c3|w zj!ZrpEP?g5iq2po*3e=nRoKSmX6eZ0=BE34Ppm)YOC?HOucobQ^v-h?^zBMpj=r`u_+)#TQ}at|jb=k|0Z4LP~t&2(+~W2H)Q7S--& zL5%bGrPga=@SBT>{;j?Dvm^2q_H>Yt`Sxp(4m`v2_iy9jnvrd&7VN=euZgV^5 zLUOSHpEz^tlg>XJuTUoFhkCpT;Ex}q_bM>|>fy$Dkp2@lHojb@4Cu)c-MqbZz@CHt zaIV3ycZ1cOQh*v{vo2Ho$8j07Jlp8){pU}M2qu8~G*1pg_B4Pe&Kqr3q3GQh7b zCu7)n1<07sn{bEj`MGRx?eF zmWM_!n{4(MJTFfbyCfoC3&%qF!jj0XXX|27fs!pqo=U**{-?>UXGa8cjleL4ELLj> zoqU@Vj69y7PpPV^8e~+e)mUfJ@->c5BcGJqapP!xEuT^Z&XEEoxifHjU5;+ugJ^aXe%D&ctO{M)((geTx{wvq32Db{l8CQjzf}(V;CQ@&_ zFrJ=xvN`>0etXVawy|Owan4!qy)QS7o~tscla&RFaXIrxzM|ojlIpoq1Wu;7*9xe| zYneh74|;g1*-BJk_;7&m+Zzw`fkj4+=3{cSVE@tZxAu0RJ_5L%;?2oXAPz-1@g~p> z!LhTvx;Nyn<_e7mS7p;I=E{Ywzy?`8Q9pnG9Yk&PnB&3(BRbHXO;e>x_EU}lGhv}p zfgmw%jMYpL=B8PKua+xLsWludA*S+ma*#9#xl>0}k-YIm$gy759IML%fA zItbZ1Kgy$#>tR6s29gQ=h8Tra8R!oetRNGE%lCEm-|q6+CSCJy&M{f*F8xE8(F+>* z_(?e3j&6L>I)d@CzhxHY&>ht~>zZi-@)4|%krcBM0B3b1^Wk=1t^L3=P&fPo0_K|R z1G2Pwu+5u9Sj{unxL8;!=1QAOu6Ox+IyE%a%Z53)xZurzLP6+A1QOLXs}*)02Un&1OKVyAKdu6w4-Y$d9rBNIP4f;C_bt8kyaw_ifn>ApTj! z0_@bq#bs-vHd+tn6(!0WT~}$&5IK$7$M?G?DgODjJK(%GKxbFTTbxuWmzH<~DYC28 ztS-^2B`c22Jxlr8<_=cB>y+nw@I`e$+3wwmBIqt2D4lBnT%Q-vnz0V@6imL2lcP*w z_x6e(NM+Ee`^Y%~tXHN?5<#A=hv3fWjip&#SP&#t96c#S+&8O=i0TI0#(CYgUZBjw zMI(oP9j#A|{~A--w=$-*0fPE*sJeYyu5>pD3HaRPearWzKr0gUCs+bpn0>OpdHx4j z)s(slo`sdXuF>LokKyH3>mELAeSIN+p4x0P-$%gAMajL~RYya$NE1h=FZ=p@efs>+ zL1XgzxaCE?)7DQ#f)9j1zbEzo1dm6b0%-!Cty3DS{R-H0%Ai|YZqofMvah3JWl6%V zDyOl(4<(Tu%D~REwdl<9GAX4TOyWP*j23OqWoNkYfyoBn8tc{vJ!TEs91>)4au$Kxts4mCXVsV zA@-=;uua`q>i+4RerNbxqw{V{Tfl7^-}Uw7DMEuOk;itS`Eccq4Zoor$az0IILF^B ztqg9Jo^O|E4=`fe<6`tu-&>`;%g*6)+!9Ny0_ru;0aX1rx3oTtddxh?eoDfV4+`yZ`DS_%?EKo6my9`!2=>MtpeHv(u4%}SFG{OapJfx>JG0Xm(Tq-_WuxYFX> zB)u#fUK7iVIzC<4Dp^j9cC@1$M_GR5bp?bFeG$l2%m6a91Lq55$S4+o__ml4;XIjb14#vd9+(*M! zaD##-TSs?JI?E`AwiX$3)KH|Bzl^VEp(mIu?X6wUN3?1CUo603eGEoH_u(ayxl2a= z-B}e^brblc^yHi9-j+q;F2#4XawfZD)XmwMpb~AF@h%zf+ioNii_KhVvtJ4Wd(Fy) z;HJwZQzP8)1cG;r$IDiUeC&fvKF) z`o_c5F&H|p0Ez?=pWXv)*Itq4ZyO1wZeV@=2??j2!PLn%!1e54q}%|%s&EMWv%Kth zHze-?N1t3zaC&59S{mQh=^VrvR}Mk=-sE>GxAPiTn}F^uXoNAo#C31Fr{r6iEaZsW zul8rdLBs&B-O(C=)rR&!n@pbPQ9WBcRRx65BbWVzbx-E1y}eI$8uKS5>z+VkAQ$5a z6KW+(ZZZB+2^_X)%Gy9qI6YPEeG4vsg;CnnpH4fItXJXu6MAQ0p(mJ!;IUl9IQaBB z4HoBiA_{cm&ZCl&^-kAy?~*f*U`R`Gz|f(zFEMTm%03o4Rvcj^z)b+ZBnDnE&*RPT z#5&`?q{@rtTOwkjHD^APu88ERf?fz8a5{y!-lQ=h7p_XCX@)F^$3g3If*`r_UcguqdsszYL0{$;rbV!ZEHe z&<|L}a8u#2G|Te9cA#5orOnj=cGxCET}(%!^JLA%UfQ0YpUW>LCd5=Yd9Fx4oIne^ zJUe?UPQq8hk-|Hq;1qAyj4Q~X@k5|Yn?;*(IPe^dG!AASS4)o!tssLm@mU-x1KGeV z3X(MW>S2umTM6QV^)xUr(DNdzcrTC6TMyinF zYgqj)dBDdjqTr(e`0$!Dmkv`8z;+Oc?>@D$v!h;|-`_YkUw@$Fu|yvO!LG7(vdi+` z^s)?8SCN0@83f(Fff$rHY_at-=(9x>I9J=PP=2pGO1kdr#pA2 zAEX#jTE)z6W&4ARaSJDpa^?fxaJlu660<}k^pMs4?x2-lU0)Z9r5&}2QP-kk6Ll@E z3B0D!M0)B=Q!caY?QRh+yMcdCOh_&{|csX)MgY&;Z zT;fo5A=Rk#CnKOfc@4r)v}?`qI#Sa4JoRX75vR7|zEV9c3XXRBdL0vJ zMKoB(?t`iP)`o^)CL?@_|4WCocYU&QbIbcS^e+?e6$XPX5Gzu=wM={7rSw-Riu~to z_emFDhiDR4?%R{0wt!Poo*JubHz-P8AcaiAPo%XMhdsMU3k&M$mCiQ$kv-MUEwo09h4pu}Fq_^xAQeuIStVk%TLR%6s|;!a zEjbIas;_W+P9z3%+JW*F8qGrR_l@0Fo_i7H`4Ha`6Z9AO^{qTfy}?yRsmbUi`13JD6vU>UQTPA8CUq&2$BCh>r*=j|ZbRLhz2Wss6Z zAK4r4e!NBH>?z>0545OURn~Jmo4%G{_HA~YVuMN=!DN-P`^Ll-<2ZD371U*AOaD)u z=yDdqk3-<*leG=?o|_d#_chxc9f5Uzwys!PZkR}Fb9;0BCnBPs5P0l#Qr+?%pu(9T z`jFF&)ng+h6Z+krH_9(qt!F(tdSa1%zK|*OM2L~PgGxn$heytBtL9Quk$g}HX6d95 zg`5qK;vrN?lCR{=KeyuLOvP2b1>_9m>Tur}MU{XlF87KppuI4W!H~tF)6gmtLcS`B z)P;sJZSiG5sv0;eK(#$`gx~dAuPrR38kKA%hb^Yc76IcObL@F|vb{{BI)Y&=PtLfk zAJ3ru5|k-qLv~tuF{zeq0KijuD0}EnBr+SXWqtnh(`QSFYTf$JmwP}74$J}>I6Rhw z5Lev>4?uNudd~~4Yn3)MQvF|Ky=7FE`?fa>A_gG_-3DEPgwi41odQaCNH;1VAR*n| zA>C=v-6h@KUGHSCz4tlieHdeXSp&z-eO>>UbN)(PLUG1s@h7*Ozkk>xOgmF#8M}!) zIJQ>Va#c)scvD<4wn}RTg~r> z)2#}H2t5=Is6STwI%SO$s2tM)HZZK1x>eq;DJtz zlXQJad;8<6{pA6Y#q29KvvEJg+)>&8@-z2y6IyGlxEWZHct2LD6U)oXg9Tf&oqT}V zf8Yb4VMRzqB9Zxy!2q)2>?}r13BZ``shWzlhU=^v*;FBcJLvtoVREVoktH1Q@Lx_A-{|DSSy?s>PG)%v&zn@(Wdeto)UVF>OLsR{!T>bqZ1iql846j)h9@?S( zKZE$^p^^%&S5qSuDn%bQkgRoGQP9$=*Z#w&Ou{}#sh9ilV=Y$6_-nB`-26!<=1pq( zFc<_^P<@C+N0en?U?Njosd~vy=rxgzfG}fl zFaWOR{?wVmfy6)&h(%rQ#+%0)N_u4(1f#iL?>!M&bC_2yySTnD@J>ZQApyYDMi`OJ zlm6j#XWZ%BVn=XrFffXro+01Ny%BmJRYxJZtMXi9(f|*$t{LdBYoCmCIuV@r= z6v~AV5fCnFZA$Mm|LgYwW_f3N3q7giU!Qj)JSTQkCT{v*Wg{Ws!hb8WMMtX_xr&UA zPVxn&8qCJWMlFj^_held9G8XbBQO4)&p~<&!k?BuO>`QSJJ3*BOxFWWuS9)~1W{%fj_u#f<*eaj45&)VDBV1S%Tln@e=W4(>E0qH!gZVQK=8yJnTO9{sVn$zQO;xJm35P8AB6o10^|U3>9PgrENx*y@aK zf&1d&O5gl%9}Eurt+Xj_S8(+{XdM}etTu`OMThs7FE7W1Z~m~-l>31B9=KhyL*#Cs zBCxFz|9@jYAemwyc`5$`*#4lANLP{M>+NFt^jv_rt!6Ju_`f_+!rxUGrNZEoA|UYl z!o5Ta_^I4L2834v@7e5cW#8~{MB5|3f@V06P7j`tO9TfDGrwhgzuX<4t@G#WBg`ho zsxNjNn=Xnv=mFotTo|03q-$uImM8ueJhQCgDC$c|*5D!zC4jhbXlZaCKIA>^Nfi#l zrc(>Mr7bMnvi=woW4hAnGyB=`w)FK>wXJ`=|E(D&z4pR^!c?#@Z3#3UD_$%&n;_{IZF-j{Cwh9JVRT1A?1B+UDTNL0kZ z#JnpOvvW<>AJK6+E2XFF`=>xw(Wg6Mw{cP)U!p%`F&f-P_L}K}HZ46{e{-Cu#wOXC z;^Dohzw?`$m%9TLP3BZ_=Ll|ui)iq4&*z%_Zwy1m-Wmy^B#uK<;Ny_3_Mcfm3B#4s zR#M!17}Jbx;j# z*w|vxD5Vi*%&AVawTZIh<^O7G@)~|Nc}Hm=Lz3!%?p-x=jgZ=-8qvJ7!}S4LiL0df zw1g?-lH@Y^$=^|bDB|;}8=^N^YKiuLv)gSrfHZI*Q<{Xs&a}}35qJsAz0=cL^axT? zQW5ALc%pKi@!mva=pNZWlGQ8BVYYU?-@`*?+v%nS+(}pn`lK8v#rK)hw}Hqf?PYn= zn@mhhtiWhFztk0Sdi1eJyy0+N*vA)ytle>psRA{$e!Y_*H=V}nh*)$VYK7Y@h?t{X zz5nZ{jqxG@)M-WZD$0@VH=V_piJZ3W=_21>Eq6=e@+9QW;a33dB`^9__S6}mUH%cY zk9?ah-7dqaUKb-jmF~DVgo#GL_@On4Po7+oTC>)H|HCs5PHx8U^lz_l89!~NkAJAb zGa1UOdOtwU&JZKUx>Ub_%TLkjsWrX615`ZN$}g*K3wv{h;2a~Aq*Kw;Zyjw;)EsRj z^9u_GwK2Rt{@EigzSRc&;|$)f{CqhX$@p^QnZtRi0%Zz=jIifW_*Px`80Em(3Y%7? zH(fmP4my6GMpekO2^hlGIqqjbUljHxEii%0nboNO3%Uo@11Kt%LF7bbak|o%3SeJJ z9k_Whk63`?^>)KGI|ql4msj70>BKv1L09G@_yu>cRPw6S>xj5K-)?}z@3e!Vp_iW$ zQdfIzgks>T`(rP_ClMWKQ^hbkJ~n`UeJb z-_V$XOTpI|T!}X*6YaO@HLDMzw4|`syi_ zupFSu1#P=wT|9?vO1{(jyZ{Hq=N_#Zx4LA{pEG=)SE9sAz$WWOix%Pv{$cuwy!OmK z4g+>~;`Q=iHYP4xL^f-Lp6Lg<5+U@n_3?D^iUh9gyduQH{%09W2BLgAVq)!J!iA28 z25Hf2i>p-cymG3-h?&!npB8kqhUj>AImlhPQkKyv;Vh2KXkIs7Z=))ydgVzpHrv z8+vtu!2;CibO|OS65FD?&$pH00Mai!Ekf}*0h(tPTAfE;42(W5fj5g)tYuM;+B59kiM?2 z%xGJ;l#yyS zb6SmBhq1lIZwny`TQS}db};!SbVp9Qv_2-LI82ZF{&z-rBv4`cEmmENbb>B3uNT{M zuJ}!*i=VmIs@?z9!uR%A_Xa;@&~nW#Q)G$E`RrXvx?qHtTtd2N#8GN-4Oe}pbfR2= z4W<`m*zF_{IlH91_HgRHkZfzu@1@TJzJA4Jv3_9-q+E|H*B8DtD>fZjl;_|4KKtgF zMO+RVldIQ%K&A_Qzzk3@64Y*M3NGTdzl<xm|!54!zGiOi5n7P!wA*K88E{ZSrfc7K!?rG`1`$F;zx0s-V#BM}M>9j87a4 zLtUR7d_ya)%My-u~$~JpFjWt_>2wJ3g4ORvyq`~fX zV65&&&rVe`SjnhpE6>ax zHzzpCEqI)VX@#sOPmjOh{q{ls_+7zTzUdVBJ>r-QKiaCp%vsZGe?5P;!X9O|6}4!f ztf3P@;+eA#6MsJUjRPB(D##F65DjIw-w?62wiyj6FTMC#;DJb#nt}N$L<`@G-AuhA zV_&s~)$A&sBXZ3qJ)as=_7rBBxMT+2=tR^+l;@v&_6$U==94eaS1-<5wi_zeN5B90 z97(H|rvHN$1K&|i=;GpXbs80if!p=y8#(I5MU_Di@xY4;#7qO--gMSWSvIo?s0kKx za6zk*1rq@$T_Se@H@$R&W=kEtLbXfRrb=L}Dv*f1 zGvQ5WhU5N`*>=I^=tnzC?>JFO(d3*b)lL~2l!8vzp&A16)pD!8o!!HBO*x7Rf@Kb~ z{9~x{EIhG43IL~488Mr`if}EoD-~2q0kF+FR^^rcQZ)KGN^SP)(6!l3t(pP=S^^L-_GyGPQEkHq0;L zah_cv<&#Bw$+#+=dLOEc?A6w*kh=<1E-q$&3B)k?P@^7gPhVf0ek>ZdAkMzjZC5l2qiF-}=bNiFQ}5|2B`uki%lxuwV)@ z57|3DE|^t&7!oseO!3;CDb<@wYUw zZgucG9VyUA?#g)k7XWBbStx^~4$1`CUw%ipdNLyxqrAQ~K<<|BrQvXfD{GaShl}g- z3S<*&!|7z8w~KwO#JtuvkjYZdny4gygoQzlA7PRn+P8?AFFyXP6u8a(LRLJ*iKrE| zmCG+*Fx#x`%$gpTcg5DdAnWMqkzV!v=2j6Fos6JDPZv5V@9hMor*ty!7UEWKGE!48 z=rF54ET1MmHKb7FaEDIzTF?QbKj zV!U^1$ga#N9!7!+$A3f~h?Uy0XPZscR!Jvv`}+D`U+lXdZQY{xJGe$V>FrOUBpoHa zQ*Lc%zdYvIrW$uxGw|x+qXW~rmqlC(rpRc#f|#-g3cLyr`4ACTx2{Lxb*|R2Q6KxC zJ2tq?9&~nZ>~FXvZvSD=2>DB2x)$oV;(4SlB4+)f8yx#Js|O`jmOM2rN|T4ScSuX^lZ%zo0$InX_N)C(@Gw`L&GL^j%yCP&0z z-_O&#`FiB74SUBs!=F1+cva?G2C>$pI2sypJqef2)7-{u8T%WH9TE2#IJehBZH;@+ zaw^nVJe!Im&9btx3hM?}1oM|*ZD37>eDM8iib!_0A?NlbY;e#wlzb5fQ$~bTZ;W#C zDT3qkWX#ZxT9X8}>njenKZ_TR-w|J)j}ouFH2bSUD%g1~Npob<7Cyj`%FMjd!n>y- zr-c8^)fumE=3Oki(;%fCt)4j*LPk>jE$yvrB?Qa1(wq`o&A2Sv_#7M?X*gT22L?aV42*v4+ zM-BRl`^r4dCzFBz!T5PU1_W#e!A)+>P(q5z6*Jut$EfzDXqL>1x!Jqb7N>W)a}yfl zRtJuUz6S43{N_oypO=$Uil71%!eSlaGslc(Vgb#4x|ZJ7uUC6)PSOt z8*B@02_y#2U^iIoNX5PWzE=uD(80&eQoLi2t&RtMf1AffXRrQ!^D$~qd98;Yu`FFs zNRWu#GD*kh!Qgqr*Lzp?%3o{MlQ>zCbP=6D%d3`s6sK$gw-b;$5WR7EJ;Hk0J2JA` z`l!A6-fe5NX&vVm@B&YLw?8q8jfdR5OYxssz{>hM4o76Gn1FWOqJj|qz9#J>5|W;y z;@Rr*UR5{j?LfoXl529w7#ZA;r)!E}!*G{7Hac2%!Da8jXifh(bD>zP9LBxl==0g?z%MV+4nuW{@YA4 z$cjtO9+9+~5}D@yrlu>mV~Vj4dImcDKPWuWnIFzq>tkSZzDBbB)7<=EWm;>mU-Qmw z88_eV>MX^m$MVc?zmKqso0*2a0OtoIKE9t?=SNmQ3&XO;qTD!w2sxJ4mV^Qp`3f{A zk9LCfn{}tcWy$Keb8HgdF_lMi!o=U0z;daJ-QfsR9v5Z?DWzoaQf$IcjvbMP(sM z?##Sx68B3%gVE9j0V%1$wdpGP%%Jbz2jv>MofbOgjWI~fC(83%kAKS!Eo^R1LYKL< z+sDj-4)YqJ4`U1;ZKj0QZP}d;rk8ubl51mQvr4vq!+`Q5)NTVK9~*|Z<&J{ zns<6`o#agyCsv!=izkEAXAM$l3M}EL_%Fn66LC9Og0)(QU&4>%>}}f3Et>=QZ_y1>&rP`%^sT34@|ezFmAscj^hoh%s` zco5WGHIk=UXVOD#he>w#$Ge89&|@?Vcb*38Nwi>Oy{U4#ADCKTXabe&MUZ)a-|*IS z!E_{0U^Uv@^R0bFuGAjjah?D{%K7T#b2V7Buow)}wte)?Wj+Zv!AoYjsx=)GnR-IB zj*AEIo}hpLSVYeQaE1B%RqY?65&Cz-UmdY2S!jC0-m%*+dCRb|Fsfk3D~nQ|>q)`t zvYV_1U36z*aZ01kS{T(|MHhH8rwTu+$k|bNARMYeGM>p{3Xx-GzUA4?F ze*L5`b$YMtrv-_^J1j?xowyJUpsvpHZ^Mn)hoxm}*I$eU9#S@flN{rEx8 z!tU(gP#DSNYEb{DG5eJ>lQ4;4osxpg-}q$a2cbG*8Evv~hx8=d~+;4db)cw^Zt#P*4^Vb#b#VV#gP z`!vYCvbu`bU84&rT?S*tdI0D1I2};#6UmB%doq}OkbAtj4z#XfhK{-0fJ|1Aq8l*i zg$V&umgVn_|9g#ZAlBo@a=CV9lPS*qVozyk*3Crj#rH<8)KAONG#NyC6i=1A29F=+m9^5zM5$rc&8&-~rjUs8Sm`8nf zFjuB9m{z2{BT68!gP$kixQB|O6OzxbDLd@r?Zs` zwe6h<9}jYrm+5Ec4P^KD#SN67k#x{nTC1WQG?|?qrjCMWKUzseVRU>~Q;A+eH%mq; z7BT$C#g^4$WxtNkl?7zZRH>D}=*{V^{&}`!QiAn_B8fhy`j6Y)qMa9(M^d1#?TV2- z25TPcj~`EaUinS-SZ96Oexv*6I#_nSkbe5SlX}nOIYNW0j4E|8rx@NPQ?0NHBbji+ zXUxmuZK|}e=g4Xjs^`mz?v#G1l`Amp!6Zc|d>#CYQ|z&vd8lgyR@3iN#9KXgv#T*t z@tn^`Gl=A(r8*;h_}$-3%godT23(3iEnKM)i==;7tM@4l#GS8l0O|%wHwj4`Yi*R?Tx;pJp?1fN|3~DtrwFpYi=Vjb72LxDH zL%7%D^Zf>UYUXhW?A|m%#%v4lWWf6K@f-vd|I(@Ved684g zH^m%>-Xo9dTJZQE=Llrcu7jZM`gqzzsh~W8ZM)wK_3qK;69;?7dnbV%&w0b;zc0$p znDIU?l+Mu+GXymv$fs)Tw==#F+wKQB?JbDDfB%$4UbEW9m)(#F6eL>-Up+iL4i0RP zkdUBY!Y3dia-I8g-;*t!QILWBVP)tXEW^x~zA4ji4E5Erv$L0(jAR7D^DlZL6A{Iq zH#j&59$heE&V=4`V+VTB0bNkshw)}SK&i%^s@ZaNae>68`T2S1V2$+kn-w1WxshBH zRc*z$prCl6czI<{Jb&VfRGx7`1#U~7MN}@*Y2}!kY4ro1*wf_kuq;x=~uq+$YtN1}@ zHT@Y%1(vxwm3!3w$;nTTdo46J(GWZ4{}LaVpdqt$roJgMvo&n4 zuC7$==@&1(A_2>qnL_H^nfiPQ2L?*0AuV!l7;nAPVNT-)d~bJ90ELoEZcR5_&j<0K z{8bds);_vy#1xmmOXid94EBPh*nqM4Wl<%if1_MXr{ZhJoUCUC5&$&9fZKgd+3E&) zA%6Tv<2M7A)uamg7Kb-+%DoU@!tq1W1ZNIt#8Cy|KQ zFSd?tThuwzv4Dbh7{D(>pMhl9rs!oFy;ciC0mNMF@bX{23?63yqpi_A+K#_}A*47m ztT4TljwKKNw$De)kmq-jXdyj~h%ere<~2b5w!Tia5r$YR1r-%+6CLyciu41mffq}3NfCS3sQ?MHPABwrYVgi$P4?-pr_U@5#z%d|q zoAUAxOhES!4on-5m5|#;*AvHlWMvUL(PxEcA0kI%3d_oU4=H+AV@JfKdyg%GU#Y#l zU&YUqN_TA_6N8}Ds<^n=@Dq*lkKS*k&rrOnI8!AU&e0yAc$k@)Q8~s&L&^-0&mnGMrvw zDG?Fem)agX`Z5X<9Cm=+VTug!59h11<*u;cT>#Yiw#EOK4*Tt}V4x@2TUyQ}YVXc9 z0U17Bap3s>;ug;tG4L>q`qX&5hlv6+*O$mE45QbST zgB@ADx(#qJ<+)fi`<2nvOdUh8Edb7E6Or48gplLit_2bhWU7HIKoebQ7D(Ornl{c3a%c{%JwriKke z!p6o1G~KFdYD`!i%N{zP&r1nV9jzD`&J-ynEHv%QKZsaF*8P0C+XUBBOAs0ZVh4J1 z*!eqd=C_K9;VEJ$_}Q~bFqp*Dm1~auAkMC9iu6;<{jzE20U}WgoX-^|BZ1G1jUOb@ zUIJpJl&eGstE2w%bU6_mZGKMu=?Dr$)f+d$N72x#a}u1si{IK!|8fzomyrT3=~=5F zVlJ3ONpon-)G5KXOAd~$ufzOueJ~&$_B)YDPYi6d;1S@nn!XM`PElpg7*r83qXdVg zZ)jjUPbz%FF4zE?L@*JSDlwJ3atdlJ)yx}*og`*?KOX?!k{wKdvr>n zBOs{+NBM7OSvs~a*VuYTjDvIZJZ_-*2naxL;soGr!>c}wA2T5j&eH>c`6Aqt8beS~ zuACn|ie1l$>h%wTLrPB``PYf{;ZD-$rue&}m18(;9f2iYh94T7!@L zOxinSmtYa!je+xe%n^V_c% zeqEJMRaI3t-X%RFnfaqngq)D|=cxFNoSW(J?#1ao3P1HmI$zL(H>I`fsXJO*6*98Q z`}(2y0kwf1v?o%%~{M@na?vX_p`4p&?`N>sc2JcTFb|n`^s7V+)e>r|t!;C*s=WKuU*s%S$ zSo$a>zy&rYoF@<)WCq;w_rGqpqsbR`wX)uBM6kYnOn9sH0Yn6h$^Kkqq^A$Gw(6G< z?ehxjd6Ggqoh6$JgpI*;aUA-tQ8+ule*OCBxzJ97OVpn8tx2%7_#2$)cILaTKj0*t zz&We+2$?5rV&QQR?a|yaFl&nIFk`Je$DrZ?s|hO9t~%_|{{E0XAIvyZ4P9}N-GzpR z0@qlz&dJuCRM1>Jg7!W2m+4u_{H;k(uEv)C%mS_-AIohiE1v41hCcY2AWu)&)!wBi zw(|4y-R|!0!9O$e^S`-w{RNzZJ_xd_V7@3B$?b_{3-S-m&&ykJ;DQbS?iE_vJh)}y zXx9;z^^Vimb@2JdMZZy!alfm3(!Yc2_BtFT8-KzUGQ;JrB4Vh;&J4k67q|n52L}-6 zS@dyP%J0i`opX!+_83+l@0s)Ip571j=BEgEZVt388IaIoI(gv%cu-*NmqYTPGcTakH zdbp<(SWJc!-LFI$k6OP!zhQ>Zd!E0=Yyn_>|E9ocq@tq>;AgP4wQYYQclP}gvl{nr zR1-nBU|8QEi8((z>klivfG^zlfo6%SSNegO;k;{N*JX3e2uTDag&fq|C+bA^$8b3x zd7E?l;asU4Pu&Z=CMB{`cF40uOZCQ`C*;z=pt1+8kT}x-CJx`+% zo9fpZ*SQfrMm)HST#b1k_X=?n8zniLY!SwyP{2JvLHUpv+q4ZD(y;OLC0|$q=3~WP zzl?w#b9sLJiVTyGP$D09@Q81pn9E6FX0adWjR#gM&ml*L5FqI9jt-*FJqUlI`ydqG zgksn!h&f(tR!mbG0`m}sOq}XEn+aG-`5G9|L-iu{BpUs**Cli|IXO9DBD(XXa2lbcjiGvX zgkR4dnh~F1zeIU+xORd4r2hC|x|0p0iAmnRu!m?hDueCR;8P7rk?RidR-ah0&B?{Z z0p~NB)|uxe*=F|7XQZSa)gXP75`S&I&)n&fesYJ{uX`CC7mj2p8kGb32=JrnzVUK8qh5qQ{;}K>cZUw|K+i--}%wv=QQplFdIte6vUq zcvqogM5!gJxOK2GCeOz=3#Htz)KO)`fh-^=$S}zOwMIbTbNNn_Kh6artDpv*T4|Ek zV7_`J(~mF`DG7Nvo&Eg+T;-SGdEcD&R@@Vx#m!~PRz4Ppu|u9DQv&vzYJj0xrFRa_Q7X!3E( z4;vF2zG`?Y!LkImk(&pLd81Wk zeO?ma;|~{TCE5ip=&0o><*T`#?C?1}4SUAQ#+FGp%Tsyrf-ut02LYEiu#oNb)9u@& zs4~PIV(-n($0yIO)L-|4W$PaNv_*@SE<$f*avDQt1s&jTFM2iuUP2% ztm|t%ezs<*4rHM5V#zMLDK?~s=`}bKa1XF^tTg=nE{9&X_N19|buB}q79T>sI0{KA zCLCJy?ds{{BR@ZLYsR zs(jJfV0LO!k|mU=M;UtGUywxlDMuq(0t0mr?-esM^HNXzM4IRm7M3!oQdnl{Xlrc# z{+(n1(m}BT2FZDZBjSR*lG3mZ4UO11;R092GirAB#N%JpV#?*V9lkm(rOYhpiD2zq zwlP68GBG~P`ckFUIq^#Z?a=v79reD}5Xx_@cCmwxadU3|)(z<0iGy1c;@S#>*TXUg zxg2(H$K%h@c$@kMhHlO(h$L+0Z91F2z7pop`a8P4UHMj6IC9HZNe}k2UtOEVt+tl* zIYoVh+T$Lcj~_o`Y)p(4@*&x^VnjszRdIK}29k%Ij-AiZ=3NYYu)J$|z~i`vNp=QJ z@+1U1{Mi6+A)xGt{f4zmVrSjn)^%wz&CQ}XG*+TdMov~$U0siMFKNIgM*kp7R!r== z3=zDgVUB(8{(Yl~j4nvb`&?KJrHoSElZl08b1e1lgm}|%V`CDS;G5dtoI7v9TM)pGwaOx$39Pyxsb7@c zyP*_^Cc}havp7LO{K#r@DBS6^XOC=zPR!5m*wtm_g}SnGp&P@p|}jyjlb&SsA3Y~vxnbd2EMQLvV|VyJ9y|Kv$1NlQQ~ zLv3y>0nwP#;hJP3d$_A>R#>Pg{rOzIxCYge6Dnm{#qf)OcBjL|c7sjLNo2dG%rb&` z48ru4im7BCp0Vp6L;0_eNM*+&gvGwD8k+!h%LPmu&=kU+P)My{*NG{=II5IE;M8eG zyF)Ejbn}YGojm{vZ~=zY0PU82Oya=z=Os(s==V@kNV?tQ;$dU8P8M#tEOqW-(XhUG zE%Tf$eH@2gb7OI_X{Q^t>Lg-udD*_T%~$F!Xi&;cC#zFe>N*X2;$tCS-N(lVS^<_< zndzCRJv8aSQI9UsKRr3=-LA{=YbTpRO+s9_-J}gU!pj;O+$dZ!P|r*$qu0AtBL6|0&^{p(z;93@_E-@mWvuZ}B)3 zI&W*{V6VhEgP(?`AOZQ0=A`^RYNxD>$}?en=54SEG>f2@6p>I^P<;J(n9`bVj+*fP zx#TbE+pOMd*h`RYh4MWkjmy-;KzTzL`-iwc7rTsG{i3ohFoRmMj6}5(Z>hCEWhgIt zvpy#WgMSbsbZQkQ1>4U@{O>pQhQ7YG3aNI*y#W>HSwGiwkoC9axcF=Y`jgen z_s@m<$M(yo-5KmK{r99W?fa-$!p+%d?ZA>z3mAypU6Q29=I>?AEIZqL^;L~^2Hbl| zdpPW~ZoU6Ai2JL=KhGU^Ri=LM^uWlRK~yERwM-<-^3NvQ{oI*pT(K5e4Myt|%Nlfo ztP1cD0EhQP9*YF4c=kC~A>DUs8-0jwdg{ati^}28MpD6@zA7x zZ^2-r1fw?Cn(4kD9rrDsMIhJHEfEM#92_E5$A|lCEH**OB zwhX%oVm`jt^owaWE$Pn`)et&av2Ygr9Xf_5f*+n4E&L$M*v@hcC1*fFs=5ze>bbu= z(&W`rfB1@qWKmQ-Q4`_So`H%P{5HUJVzdpc{ssmHR@3q&i1(&a96z$VrqQ;8R+z(n z?T>pAo(Cr`kGTfSl%;^j3Z4ky%`&jcVqcVU8~jz@qb6l!=%3qd@=w==>SOv#l~Hll zY(e73AL)xrDk`z`AopAMZBhMGgpY2=P(K7%GHg)6uCf(hAS&!INJK$!r{a;w|9uxx zpx^lN<;!4cX@f%>%28P`s1{8TXsvbL4yQK}6H)R^@8!00S+##X9$fh$s7yXEtMAZ7 zW2#HDsQWmq^h88)s==)=E98f{PQg09nVOaKZzne0yzZ4*q4Hcj4?n?aNimncvFmXb zla+}dX=w^D`@GZsplnMvJu^2qx2FbKzzH60&R~mRmS{<>f*OKGjS?NZnG?;LV9!|X zF~>gJZhr+c8JXAmP=EhibyHK3joghz>BXm8>^OP9IeeZ}?0m?kq*>NA*vEL!(2{a1 zH9z0=XHye&JPpU2sTXbFyAsKu-i*+iv*)l)*(4ICpiyc$3pz0(Hj9kGV9V^z^RqM! zK|!ze46URW^%dX6ahvcs?D8g?0|3_se{6p^IG)=c+6JYW|ulPDVmBqg=kYtL~;aG&FRYsm#ERgL&dD z{sxc7vslY-?)fP}dJ^S_r}$>-`^QU}2AF#Z;&(~;951+wr=`wv21Qn75wqSi-Q}2wPp{AP^irrdzWpojEw} zI-d)oVq0$W>v9-+K3>Ao2LDT9;)E_7qz1=xC3SIs*H2%Ii}!#KU@=|Emt6>afPOJN zgi`^7X6WBCztRL9lNt&N3T~BiQFB1Ux|Db#FM&29X+#ObXd@vj(1vCu|8VpFThI03 z#L{!X@V>48?K$Ibd-ByRez}%!x7b#de+DwWVtJ=+)^(Y>5c`Ghk#eLMHypt2tIB0* zz`mf`y(SdD63WKCUBor>pIHF@LQ4yd9}vsm+u2<$J7A^e>~e#zc@{!AHbN+wKhE;< zGDC4uGKpzJOVDa!Cb)uV#^4fEm=F1NZ+>vdv>ALvK){jYe*FPQrN++e2%m=?)qp|& z9x7^TXEOlk7S0ZZ12Xt&Fvs+XkISNq&Ts(`0&^QJ#9h-ivD zjZQFiy!*dEeu_V|Fhr;R48k3#72&)|uS&yfN`7()Ck@eS8_G9t96=iX>&e$#^%pMK ztYu^xI$?=&d9wdmTRFHKb}N<(qm0UI6@YFeDHr%n5?k3C6$#&c4Tog3^@$=Ka+{tO z{w*O$RKPQASa5ME=~G=6_BqyYqQifvzfjP2>ngC=re z;WOd3V3u6v?eP+y_|Cp5xA^=`hFqnhx|Sf~^jB}L94|o)*Y%4oqMKkC$iO-yKR9X) z6pRfGC2)DB{EjaUHuCZUVp+`=xRkz>hceL#)q2|@I0i>Yi!MfPDk&;%PGt622sRmK z2L#l8{*1LfX~R`*Pr__Tdi@QOwB3OBp1^aJv;|H$U9--+QD0;)$fcrof=WJ~A8n4s zVjzoTspB%b6_#Qu>x6~==Rt-WVug`q2;3Mzx=gX;0@ArQQc0}29FTmtY9VI)( zyeL;2j)}p)6It&CHVd>KV?D%;`u?5ox1i=7Dmf5Io$u^KU}J}Qrz|bIC-P(ty#7w{ zzKx0siaAqb^X@t;Pj}7P)oi?2Rwf39ASueR5glvbpJu7nxz#x>+6dzDs!|0x#{ujB z7e{PVv@9C!OX?Rd(v&vGtJ&EvkbDAg`J#UZ5U}=+;&b+Yd%Oes7ZM7|;&%;hrGE@) zeRI{{hQNaI>Ccy~{Pn$XTC5s{J;p+SAD`8*(Y+u;_m^#UnDE{9RLF0X#a?O-^%yf1`X zdFakzX|?@N)L>qGa0lE=Wn%EWsDJnFALZgZ!kKR^bKcQX zHOTs{t+np{V&jJ~I0ThKpfZlNMjC}lmlXSb#H=nFB-}IozY8*^WTi#Di5@m{~DF5`|LIVR4Bo2(4QafHgsv^pGd z9(v!ES5XO$lhdgWSNnYjNPj=K;qUn;*cXf9ylY}7dU%YlU`#U|-)V^An{5A(WR(Mp zc@MXpHlI}aZeSOHExfAox(lBpBS&&)wD0iN%TCz6VX=TS^6u?BZf6I+r#HcNZ#EWQ zaB2wo?R*mS@2;wRIXyEGDU+wzaM`>mpx|08anzwx)!LJ}!p6h>Q+Hcwe;GrK+|BT6 zi%hVAxw+RoVCq10FgYnBCn@U>fSSN~4nn({uEHS5l{joS+4aUtJ)y@Y;*RUCjqXoz{5{oxLrni%@MN{bfaLk}rT{L` zSFhV`mYYp$u94kK5(~i=xi&nOie;P!Cu1+LXz#{)_;81tGj3C8h{6JCIghwF?eD1WoEuJc7XuY$HlANi@N-8`7n6LSVnyN~t_V7=Bh-!e7@>0d@h z#!Lu%`JLNVD5$8h>^fkY)_hU*F_zgVB_qQQv;-g#ex;W$hB*s*Yy6SykC59m)}QX@ zr#Dcm($Z@9Ie!z{6?12Yi+VG4zW1}GRPt$wM2d;Dxz%vd>(-rFFP7L9Y~A|JlRt^; zK0_(kaQNWzwC&11-#i}A1LX^NXfOEC-f4uvI`HMv^*0`DPGAr-Lrotc zR!Eby<-T@YQ-E{upVqy#r-y`H_a0p+5f%*Wz@}xY)=|gQ^e^zdG`XCa5Uee>6Wy1V zmWW3y3P5?Z5lli$S5@@5z4(hPA@#P+8Mk4h2kff*n6tueZo~-*qN1V-kME)rwhF~I zVat6VLVjK}^JMvz0rAP1oGyp{Af+CJC+j=B{nOBsXkle@p*KW5zA;tjgjI9f$Qa8O z9laxvXmxs&QKwlliZ?L^)gyh(=hnGo5{hk&l|X}j*VE5;Ka$K==h7UutF_*i3y~ov zb2)|EFE}FNs3-cBWLMX6XF}IkDy=zhR0h6191aF@CD8`*)Po_c?xG31md(imHX}kk zZz>AY$|D>Y-6y%U{^e?v5)SN);b0@BY;A0uAu(9qeL~R;g=A`X0tXvBE`S$xVX4TNJ=UyD$u{H??h1G({m1z*VIht`Fz*Lt|Q)TKUAjo#kaXHb?!XV z8{E?f*ja8Lwdu zbT!ZIh-6QsJH0&RHAzX0=U12EG)muy-}Da*ykcau@+>Pm$knDu3jJlG`~$u(jJyvB zUhhD-7w~sK?sj%|4&^G9K}m;*kRZ*-sE`!HW#?MDnjwXkgnYRSRI~^SzTb>p} zp>BJxTrlhZ(@PRJS^u*_CuoXiAY~=d&MreDn`>Lc9kh}q%Uw^Zbk*?VS1^b;qhhAK z(ea9{1~Q-x0)dN&3cs&0R?HrRh8BGKyxbMvAtD=e|B0&C)oXJ?!KMUF%~EwrCi{Qd z;6ao|UaS|%oJ@}!EXR~16K zr%qC}_y^!ruLq(PD?L55l2mW126MH`OeP|vK4pJaYhRCvDnx~Zmp7NC@~FrE=_tQb z@M6i8AHObY>-==#GAsKSMXg9L_;Cmvpp2|nuKW7497bR)LRl^$DSmD;9XXON!*+@O z;6XWvAx8PBldB)9?f~`BDB`BN9k5yH<%3S?(PDiNMp@-ewhNb=hJbX?Q74P?$f|s% zn98THGBHC#Lpae#w|-*ssH=*WV0iiF@dH#q8BztkYI5HbclY+mzUG%QvebG1dU6Mo zIy%ZiE~jGRl2~uz&^=BgWj1is`DFPV_L;}am$tj4dnh|wwGpTvZXwT z)4IC&4BapUytm4N1)MEdU7aE$gMEDN?{mDX2*twE6JqYRcq(HP6D> z>B@t}e$c*~JUyoaVB`M5pxK+DZ)k%omualvwy4D-B6iIKTA zD2So6L;m4MVb_1RK+gqk)(2s$5`w9r?pt>rmyfgJPi2e z$8Iyj+wy=Y>)8F#qrV+IQ7KE7tIAKK|7r975AVBAr8<~^*A9H>SetAy85|v)ZmI>k zWI|EBs!FEOOnVCs^@;nT!bWz2 zeS-@jv@*QN{NTOerm!ba$n=Wof|zINN*3wHEN|tQiJaVfmdpA%ge8Gx^PptF@Qrul z#==`8zqEw~z`%O9i>j;He>?9Yv8aK&%W1jK-HHVO;!2bqWjom1UzmO{r8UQTTnp1| zmk0S?!>!y;g&t-4BA}J%?#@Aogdi)c&3ISD2Wf_ajSbWL$oZp8B5e|4&o=+oU%pep zb(abkR78ybL-NM1bEqqzSPtmiMaT{RY$Kmfo;P%M`gQQ7wz9GcR4@M;w*kevqobpe zlG4U}%xdCLXEaw;wv}aF9>=mA+H)``}#gE_bfX> zvtKm!^ZjfH8InW6qKtw<9FyZ-VY0wj(f`nZH`51u0T}>EP%I(QYGQr;Rm@QCO`1|5 z(VGu{AmrEi=&HYQV|%%!LGFI;LkbQWlXYRgJs~S#px7{GG0@E_c=-Akt}LkSZvP}>MMP=Y5vbF z;HFjE4E(26vncXX;J1DHAYA~C{f5zI{j<*K!MetAcKGDkwjUaG;~BOlSHjzCh9<|` zBR!Lo@!X#($y{{u<@}r^DpB+bywm?|^K^FuPXecYhOk}HE4<~g>#1M_!~NgLH#@I? zn02gXb3O$t`BHG&Qfk&}vcZme@0}953?f9jd0fbdNQ!;XmFCsf21B(}Z}innHEjiJ zvG$fAlGvEo5(ai^N{9_T{dh)(&21|#BH{o$6xhQHA5C85@yG3az1LnbSfJd~*yw?n z^{IXPE;l0;)w5@xP{LTZW#tHAEn(^fYXM{gLq!yh(`}wG4G}U0oW~1GOAv4gg-A8K zmU}6a>Myoo>hw{cTZ)v9V0RG|NkNII8t8&~V`Vtoff-D{;Qc zv;B-kkzjCOZAx%WwnO= zqbQ1qpnyRMA{H$m-Qhw)N>Un>Zlt?ZKmk#@yFt2J32EtWB&54*Uk|ukuK&B^L zd^zX&z;Gy{@XUG7>-r^JG+(Sm3va)MOcxw&*zUpQ9TykJ%)xr+H0H$?)+6BVNmReA z{Jm_YLdFv^4km)hkKsJufTao2)~NtS6Bk6n$!^r0vsiQ_B(rmn`+WNPbQ$EYQF4p%{PC9&qQ0+O;=eQlr~eY{XQ!__c)y$X8c-5@ zpbo6zHe{K6UR+e%-=8Fvuh4Ei*jX7WFlugyM%aki?7D}Bl=!5(YWqX>E<$3P*YRd! zL&Lk&S5=v+M7M9#L1AZ7SY#l0!VW8s(Km1D zpId9C=44b4FQ3Ha>wf;k?fY4%H<706@`}ZJ2OP3dQ19Yd^_3js zcIxUged1T$HJzSM)0QjVI@8Y__qTwb%_4aMcd31NL+! zAaC8KQtMx98Rh#5`>jcV_ngc3P(2T4P^+9AH+nNbjfYQ2DBTz*Ie8Ji8-KG7#9IS^ znu2Tr4A^~e!dex7(Y$56n?62XBQDNXQsN9?T~b*&Z_UM3|a*7dI(B{>SOoMwa~z6^l4YN7Lb8yDKxP>M?&Gm%g4JlVQKaek7?+boAI=GBU7c z4IWb~6`A$D_T+dCVTJvW^d}}dQ4eSb?2-5>uOS%ZNh=LFYr$tRl1L?2JaO-1S%d4n zsy&doG3d0eudUHBF(sNTCN>AxVQ5xn(&4LKE!OCx0SF83epwrUInh`vdp_T-If$0W zYCWN{lDmgNTBk+cP{X{pE>W>SAIRg7su$<%Pu{&92+oqvY5e*aTuFECynyr|L(?0h zi2KZCC0w-pA_W7(2CPp3ULh>jnP14!Nnv>4o9$I9GL)2%7$@eh2-uF`vZm2eM{IEA z{fiN|*q7p+yGKf8(=iGQA$NE@+C_@a8Dz41xBlctWg0u9owdngHneBEk{9~Y$;|R7 zeE+g-j>e@q+?=}+*=j#l^-M`5ytJ_+2fH~rv7=hQ&Nv8I@XQ#C4of;79dh-kK#5NzoX0 zIk)+dNGJn2pYM65{N0I5os9Jn5kI{hQa^~DJbuHuGCZe}e^Wxd>5$9A;wl9?5xdQ! zI>{P@xbW3>YBe&yaSt4(DH>m&@n8_L ztwYHwgxs_Uz1(boH^t z6v^idIzG@DL~VTbZn`!;kUNh(ew)i7ggs?2lv(3qL2*un%vfHt;E!)u%PX}O2;cJvALTp ztgInCNVu!iLpfW|3j#Q6;5x3Yp+B-n?5Ef>!0O|7H}>M$0(+vJ}W^0W;-&Y0K>%fg>-*9Bn< zs9IYl_HVtf;+c-tt2p1~P0W%h5=;Z}AQ1gi9b4m(%H&z585Z5pd6(CWgf}`evZbN@ z)3Ft`-LA6AjT`RPO9JOV77xIDl3ru4cn*gpjDHH&J|rZE9nHzR^4%|?*u)x(u*z^0 z@@GLJ3y;6~o^-MYqyo zZOwA?=Dhc`czH!Gd#PI!cx{*SHodFv`(@%Tm-L|34SscDkL4LFr~A6ZjL}fAZ6Bw} zOhHsOf-pmppEAW`lNe@EQ&Kv3?d7#G0Bw##g73u?XV$fvpI~B-Qes$I9xqRsT-r|2 z9WojY0mRekhr6$@Z^O_Jis}T5#n;bU8W0e92dA(s94Xc@67L?(Xly6!51*8p_SC``nSS1nFH_8=OBL7=+(2ZNcws zF?A`C9Zmr>WPYcOz`(#{@hDEK&7V+~bDPK3Y_j$}w!Y^r@<;cXJWWTg5%bIkucA~9 zAM`hjyCN4E4OtsZH_bI z=01CeoR{NrK-}xs4X)LMFsU$5`sJgCg_MeP?@A%a-|Je!LsFVT)CSn2#H<$YIvZ-d zCLJ)1umU*>?*M1}j5wmVPN3?r`Q?iDRT`r6{*vw`34useQr&l}qk~=1-|qOFN$2xGBpO!&krUx!{Y3QSNZqC zy|XBZZqYQ=SmTbVCHzj@>jVr|Z`&J9p9Zh|+I~k$4-XyYGazWHs?zc1d*PxZ2tcWH z{2>5cE=%{=6^azfLon15hxM+k+?9ugUZ+e?RgIXq$qBsipt($N4tN!R6S1m`-`TtL zSC1tWW-wZw}bj@Yu;o<|_Hx!5Q1?W>V15(lT7BfjT7S>kLD*6V<-% zVY98xNo8^8-Rx2+ne&IjbY-ivT8L}1QVkkeSiUw@P6Y%&-!d~33vGu82Lv}BQjmUY z>6TeX={)D^3X!`X2$&zvCHhGzN1z(~jRjD4tmozCj=H~6=Bl$T zRMPbp2OInF;E*lS+^d|V%tG)gRfFk{*3 z*_oV`CJI(3i8b=TQlOV&Vqyr5jn99KJrCcd3ni*t*|~;m<+IsOdItu%o!9O`>Q>$x zzQi^L9!wvmVU&m0cH5V z_Hs{AEx<1>!97Su=5fx&3^&;C>*$OOMR|F-Dhet?u2GLk6_J&hdRcnyMZO-{lId$m zyRoqJe+1vJhr9bA2RrED14?1iB@+wDHk^~1S1nX`^GKeBjCbv}usShB^(ZU=GzB>m z?h#e5zJ4Ed8VsPI3Zk98NK=?oGP@*31S&%9q$JQ;MsVu+y?*`rOWJ_!s|v=PtdCeH zi}_q|g&2Z;JU>-BoW+3IX|fhJmrD;5;DRl)UVMQx6%s(=Q!x5HGtsRs+J1)~C+^A6 zH?&KaB%U8(BMhy*kzCrfZ9Z-yW`twu9oQjg9qPvVQAvfN7BD!$RIE zRR^ZaeOTx&S)LJinHM*ClAMdMM7oh>HAS!W{)0D+nV69zJ_S_^&*0 zvQ}YX@j&J}=xU4sb8}i6^!BD*dc9y|WI%}j@NkZ7zBgSp@?45k(~rF%sUTJ}sMMks z6H7Y(w94q7?BT^X%3n9Me^Jya`AEB9Rnybcix=?8U+kB(F@yksW5;8M_=+P}$Ac%| zZ{NQ5_=e#r@lda_*FT%vk*vHKY&KmXJH(6eu*Rtb}T2D(&eXq>K!C`5!(o22! z?$@~n--IbmFI?*49FVW$vE6rZxGpy-9>v}Rjh~b=ClPF2-NOzL+B`Zs3Woy}o3hy* z7W>9dd^v~QPa>h=pMKgqYGGlatfHa@aTmx6u!jnMBuGq1s1?6~kNxDa;qQfd#_ET= zQ)?JJI<)Jh++O`!6KPuuul>g|T}}L9XxwDr^ltk^6ljH&4bR@v(tS3(U`VK_)&KzB zSv7ac7Xq0iJR^>vz1yOC5DE;y(VLOQ=-r4QuwUL~IL76_tzQWfG%1 ztZTunKv@-c*17P1Uhkz7+_P#gjHo#yv?ttI^!rzX zWz#QiuCzr`A-f=78uO7gbR)U`WROQ4zpy|fu^Q3gcgEPES#AO zY!KA0_RsSebrYRF66cM8r(ns8#^ZZSL(BvKLtyNKVndkv7OItKkpk|bvzA#d*-iE5 zKn$XOo4O6g%S{$ACfep{vw%Q(Y2qvCCkn!0KuZBUE7;shy?zOxeN3#t*56XV&}zLo zIU{w$VZcJ*(XqYM<-z=hU0p-N2$weKkw~b?Dda5UDSX)luD+s`{;yWj0U|naRT+vT zW=)Xp=S@KO+P-@O9$G{B#;yESPks-6RiBj`g_a=p_;hZZYZ>aR_gM1r^qFyI(d(== z?ILYVz3W2xBx%`{fZ5{biPKSmPFs|r-8QO-2m?bNBJ<{%nwoR#d=JC}zf88sFH+Mn zIDqaf)5D*V+XQp(Z;-+PCz>I5T@|0EQybO8O(f{bIF|*lq@*d#y!mu~Iusj5NMC;6 z1mp?N=eH`rRtvExVl6E)d&X-hNP998600j4vq1V>zbQ(ZoZxV{o0D3?wqrI9@6HLU zo*%$C@giHBsV-l>KrA_;#jBip`k_|k>7^;*3y8%<7th+!@lD5kbA(v*A7W!K-@zE} z`!Q+T3n}ww_%;s;0a6V1pJN)I7JpQ3_SqM^hY*+bY*4bYGBNeQfC@65)Ca%+@Q=ak zx-N`m_7VTfSO$N3`uhKHEW6}#lJ}w`4&*c+h*^Bj?K(Bia*5;7s@VNpP!ba}`q>`K zBdu}awi;2I1-+N}|xp@Gx?Q%Dtu zb~fmEfbYopdxW08F}KdPA;C|FnJbaE2>VhQK+kmCVh&&mi^)h_H==SKs#bN8@sX~o zcf_F#Jw_=3V~?SNHd?TnfDB#2U7!|Eu!)xDm&I=m!efzvp5DyTyliPg5@ZE)(#gFk zl5c!7h4v2)#!Bp2=qc0q4z}Te1)3NQ8=N{siSdtB-}~TKBYPHBD{w%ktVTcIm>?tfZS>!aMx@&mxP6k44&+x&vvG`qnT^H;J&BRuPyfw-%s&Lj@PFL&?sQN!rNY_iKoX8sZ@P~pgfId-$(UVa zWw>7h&v*zv65f@l)Pf_2@evQt31kc3_rNL|%67F=DljauI@;gcn1NBn1K2irvJJvI z9#zCbVhdqhQ4xM|>G3}feoC&WR_IQiN|CG(C-&J8^Lh#63c4A$W2sYxU3X+ul+)k< zLW8|szR`F0&BfLzmXDF%*E>Q(L(}Cl^r0vg8HwaU<{=0IYaCRrD0Ht|1oZjwlh_S< z-vsvFFe@~4AakS)oZrfZzAa5n`}QZtpk(9tLm@RC6nuQR0m3(Rb&Y5)`@%1SVH9Y- zRDp*bh?9YLThTm@iZZH zJQYOj77~(@FUyn|O~m~r{q(yVd?E9@nn7d2Uh3Qq>wBsy!+-|0D+)4`{h0Up`1Xfj zJSr^8e2;bn_cvvsP$dRh>|~2doFPbkK&aIGg?EPVopS2b$BPnD#j{uczJ)6bA30GncCZ*O3r$Hc^vtlG5J zc{OY#SEC*RBPBJyecoRxiZ>$`{~HTPZi|xKmwTZCxTdl-feFqbR$WK?Zq{U1Z*S%J zB)!h|qB#xC#^;Qp=FSbnbDGh`>&@Hiczn2l3t4vQvKk!N*x3C(>Ry^w&v9$y-oA&U z5jtw5Z{cW7AC_|--z_OA*^~pRJI6S9(3=4!T0T@v3osdy z9;-d61=EJFfu^}w0J(Oa06_eW4kha7$$IwRPSY912h$*F{$368mVzKZuIN|SlYtQ_oaLM^zRy~TpSwXEb|Ii1nGm;o6nd3k&i zeHzuumR1sPaZQR&D-cutma)8whoHma2%cvmF^N4h6_;gl$Zwz^)%i&{i6r;m(>tAI zs5~X%(#Ib)PlHhgb#p~+(NFLSF|?=bL%}29?@7+kq)@dy&u-BBP?+0GSugbLC!g|y z-uIlgP0m7_NDu_{`G~XEe;`^o1-0?$GCs3NxIhJ`UXo}Or{T|b^oC8+L|v%ctzl+#}sPv!4vk^bPBLcbO>O`^v(+bEdw(<1iM(3MbMDx3joT;^Ga9 z2hFXmP+VmMesatF0u%u^!6y>Tsc=F;Db*FE0A-4%tP7pkjsMI&2YC0H(ojJOxW2xg zvL`y8SULGzv5@$5cA@kZMg4*#QTT7*-33ghVd)2S#)e|8zh>`UNokuanIG zmjI^!5Ppzn9B;`bNs&Bw0R4o(fob#c?0osJ`K!hH!NZ4!^WHZJ2nZl?-KaAGtv~|G z=dvCj?TfOFXH8$A%tuerKumcFa(d@hLG1($5dt4>=?&z>uga6~*Bx+kTii=bPv@{{ zzaxC-RXp?u0=Fa*`T?}yU_&FMBGz zfTkFz9$InwA>ib6eC9T95`Qi)Z!^EChcJ3!+pdm(1ug+AV`E^TYVPUT(&9y8@|V1Mi%TEd z-uXgcJFHw16>Go6>0-!{Z4ofi8Ysg+BpJWU&{nPW!8yF-A-RzQgRP(&(u)AlVA6+RV+J90DZgSYs!Vpj)zrPEqm8!V;bG*1 zZ6?EZ7oznyi6kt~|KeBl+%hYOc;)s@?Oc#?Mcr~u+U4KVe{6%yb@o6>IXRwFo?psl z@dy>mYGounKAw;48O%&O>+9+s97JsN2Ft@PF?W!W-<(;*@$vBLec~AMwg{OQkA7gi z87x3Pe_p#alyA1H(|f(t++#ttQoW886}2g}T@y4oGreWzeVG|UMRMuS#rS1=zION) zw(fM?7hoTzBsYv=GYA4DM`~&+xWqxSaC5YT$a;f;S2oz+zb5g(Cz_M3Z7^*8lgy{o z?*74njxX)jD^`ocjpE}@8>E3h-*{l^_9^6k(y4_w{nxdzvXElB1d#bR)BUccEYE zb5Xa)b;QV)08Vb{%`%5MDfS6MI{g69Zr*pt%2La^%~A;XT!{aTNHj>Ao#WB{G#kkQ zop4E48pjTHux@hp!>S#o{mbrM{uP0U&Bi6Pvgzocptzy%95EVB39)00Y#*%D`Ah}} zML8`s;Sd=av431S^MUJD1h6ONw>4b554@&c82AB6#X_qCZjsc(@$}2)Z9M+d_deWv zu)g8RD={EVf94!4WH^<}CJhsj@K78pOR*spf_#tRB!5*ru2MBXa=Es|K+tieha zkA_IFf|8OwIOCemsg^l$v61l033?C&+U?Bq-@v-{$mKZaa&p=)d4G1rnE*b|lHbm5 zUr%Qibie}})!ly&)S{XSR6)f?NpF+Cq$yyZ5KZ&1Y*HkFshf`M4^y{D-p%XWpBv_d zs*`7SC`jEYTV~>-9!ePU?^7=XO2h^lS0r)-$fEq_du3+$vH=|JgW@4THlm?Zy?vs_ z;`x(VfkkrmzSy6^6I{2NYx`NDBD{1Akh%BQtdGKDV`G2$wNVO32x7 zaxxa15Su@+eBT2Tjwl~?5D7wltW;O$@nF%%39iM+fmy_j(nh@S3tANFq=K6a{H zO;M-nG*QU9kf=nPCI%NUxl*7N8l%_uhZG|d5K?Qi{p^iex}RVKW%R zTLHT@DLK)!;*d-;jDW!6JY_4n)4e_sTeN*8@NpXl`1oK-n+*;QLN5GFOO)gHI<2UJ zt!>KPa)p%nNh$jNp@=34NXCrjakQK6B=I!l;^Z1|ohz5B2`mG+T7t4bb)*!S9wLy7 z98SFlDPCdFa|pqmPs}I7h#jDY-M=^U*Zhx|`2}QNs2q|6P=|mMdiZLl8M%tWjiT1- zbnOnEy|khf&+#-Lbr!yTEUL5HSidigKTo2Cf-|k(b5p68>hWCffumgbv?S;oEza;C z)GrU&KQ2OyaOCBgrw&&c6TN>TQVNUj0^kU6V(}>0Pn20ma5wixIVoPsH}N$f@f{AnVKg}r^VrhUQ+g87tkZD2P`>T7*c{W@(eI$!gSy?GV10w2Mi%WRa@?U5KA26@% zXa3ap0oYr!ax=9!m(=yG5e-vg_}wFqX`$opTb?qhOs<3XfpUBB=D&v;Jo=lwEHI~$(|ItK8`-*)Bc z%wB)aG%A4BnWfa7xN^XliS}%C8y}4@}Hr;>Yd_ zE<*TCveZN$*2`KO?T#Iq!g8^E(xj8c!KmPK8haiT7Dli+-(!S@WtB@4$u7BQF;<@} zxU<|n6tBdBuE$wX&b|?a(wZb&Q(c{spj_?{8ZLtG<|XqevMmZ6q9{0`_0&qml9Nqg zn%4_UEIdc9%<()FtWL(w{w>pH|hRVvo;9nL3_N@YwXl{U1Wfzry#frOFr$3tZIUD*Vj2A)aNX+R_407F+G6YM$ zt4i?zE)Q5N4f`^b@--W;P*Jg?g|lm+@62PqJlx^C-lX_y1nw$AXfSQCN4jFfnds=zV+u_qhDR^Hf*iqdedanA$+6zu_<<4 zBW$RPL{;4*a4vZ=m#v>42lF1q9BAKskLMN^vLJL1c$#~1f+*%S`&*z-PHKzTo8GhP z?WHps%#N=OEKq+xG}B38#gK54eG4sG(FH=CJg{yj=vygtNEa|NF(K6YX7XnI`yUo? zQrdR~1Jx@MxdY&mLb^wh;8{Xgs1BW2Zg1V0=@_UwG!oCBM}{$&fXT4InPda1?qTFB zGp%t47z1HU_Paf8rYEhJn4cOH$(ik5VBGw#yg+RTSM!%Q+8w=nT6V8Rf2)19yE)8~cy3XUP zl@U>>aK15IG7hWRcQw@wB8nu1gXU?LvdC~1e1jV8NaS=Ab4HLgzPx#?K6M_5v#c8nr@V6 zw%JcNCiszjizn!Z+Ww+ESw?L)vu=l2sSdh37B6Xc{Vh1iL0ur zx(f&(v{Eq-0Eaz`GSk!5ZE$$gW6;ZJ+^xI)S>b$*sq%&KD8643LilH72TVrY+w#9- z+O=*|_Oz#Szx0N{kfyqHQ~T{4sdN56DT3RmOXS|0tc(_(a zO*rsM5~coMlmQLz`-TPz^0Rl%S5z-1+_;HTpfM{xSOf8k-3IE0yA4|SJH!clqjtDMo6ur?PaMMsbaJn%N@9!ID z7f^5f43@2Lc!zroDzKs3x2sHso=eEH8Z}}2N=LC;i2|T|Ztks{n^+_r7*I8ihfCmu zl>`kD#2&rb-wMrj|8Wngg!FGMCRnadbrd?l%@iITbDXUDYJ4kqK5>E{x(F_{pOYTA z7=RV>H=6{9Yo+amz>60EJzD`uB;@gZ3&^51U{(xGAmP<@&FyVwdippcjz2U8a3WY+niH~Xz5~Zadip}Miwms7#wuk# zx0!^W&QtJ&bYf~| z6Uhc)$D4zlE}kZe0=+KxCDqNYXHwtAlP#X-=?L-*wncC|&TcO?2hlj<;WBIVK4fRp zrhL+yPAkW4urp8d=&)<>!y2lO)TYu(do+`_c*jllPv^#OoC$884a-fUha!ZZ72b9PAL&ri!64OawbhsXz9@~|QT3Pwc63_}JVTHZ)wtH+vUq*%m*b+erD=q$>kVH&e zV<(C$V1?ar@<~SA#<-K?0n|09w~bZ|6&Y*QPUQ-h7F@rsZcCRVyw4Px_2zBAQQ42} z<-Tyn?^9Wk-mhOz465O~nDs&mIWWx9qVj#U36|;45w${Q`#Z-+0rxG3^WT$(z!S9n z+Wnu+<(sq7UMd7k)NIk*DpjgnXkCzn5LIQfCi`l&yu{oq(iDL8;4Ia|^`1EoV)84M zAR-!gL0P^TEOHqS8yhr;Rc3XbFqQx;DZy^H5JWvZQirfZNYe4oF>+CV1*JFTA_2iz zTcBCAy86#gOeUksHUV$>6c#0uh=dA$f)q2=Z!FuX;)@?F$8#JE|I-L9`w`L*ka%s= zrmj4SwCfy5fJnL_k&;W>=j#^ZhB2=Nrw^1E1pf%4E@2BmZHn6IdZz5>vFASgnvo4d zF%rBIU=&HK3r30CVD?l2$-J@qE8#S3B`S)$0_M&~o6(0;Q}_oNcG6_o9kdvYAG|52 zhCU!&S-G7|U)4I7yte`BHn3Vgol~24B)ksE`+Rk-L?Wp&8>C{Y7cUCurNGoe@}vq@ zvW%gEh3R=(cg4kU;%Pw4~Icu3d+^gDNf(1!P zSUkxU_+x0f#75fSQEEoSHRmm4W_BOdj`4sURHfSbO@twCQu?&HG)|ZlI-! zlO}Jfk#GT{P4C}xto#*rF_XmB!3!J8kAL?uOlQ zfJ|!9b7fVL$C9-}YX3OEzl=Ow4K%ZBi;eTUZteT}HyyI=Xv4ZQFDHD_Y^O`gpbzSr zZ>Hv8eN`8JM-X*FOoLCu1CQmAQY)yW zl(!T31_Je)qv3CFj+Qy6Y^t1jqB%&k-ay(WLO4!e(cQj1)#wktY`kg{8ix5rLR zX}Y4%AHaU4u3w_0sloR$8_tQ-F03%J2e*V91w$ufqW~8;6PXw8EzBM=l&gqkU|C3{ z%pr<|;Q6^sj+kNts6uV9RzKb46OZCPs*iS-+O0p?#}IJH{Pr%G7lPx(`oSPZxYD!7_=a*riK(QwPIpk4t{v^i@oL5z;`gFK|53cQ9<{&Z=+wodhQslbW|L~xZc!iL@EV^~cI6-UyGaGv+kE7!e)33y<&OZ{b0!lTre3NQ_8;iqsI6$INH}M7) zrmY;qI&`Z`ZdpacBNXewugFQfCqW>1l4~~oO)Q+ekrM#(V@b^I?M*THJYypJo-0g5 z+Y3X%z6=daXK6#AJ3sdd@Ft4rS72-lWzfE)tlBWGAI4%}1w2vH_3WpTo`euyGwHDX zFw##-*lJ;WY51YC@mEM!wJ$Oz=5|V8^kGbXt}Gr8`)mM{x;X)}7vAM(PoEABn9m-= zn++|ZdY36aTCBF;Wk-o<+mTmv(yA;_bhM`g;ehFy=YBnwu7x4(Bj%Bnr&DcJUw z*X^EN=e50RH&vfFoO=DU-~_n8R_vgJbeXJat}VM zuPl#D3ZS)-KYDw@b{={bwibC#5Q=RS6+>PQ?M+>)0AJq@FmL)xOL03L_ID3Q*pGAC z+csE-9&2@&vY9T*t4m2ed2)e>UU)ROhUAtoT0FumYWb0nBj`A1iu-&dt%#X~14TUS+SshB1QG_V+^kbma2q42{A3i5W^uZ%&{kxD11evi?x zPA>;P0gyQq{A)gCO)`Epx3ycTAcf9Sy&!08GfkD8=eIb1 z{8Udxyqgvqb7#KK5(Z>_`NF=r4%u`K4xINZ4^E0r&F3QzCcpI_TW)^bB>fu;2>qJX zjQ@%2_tyb8xeNWL=;#wlR{1JzG1#%J8nV*m!Xd{ZiYfhp*Go{eU-{r2#$?pgkn#HU zyMfD{#GLdT_T_fa*w(UE+y9Vd-v2GyCSD7jS+-Ww0Oao6-rs*NEltR7@e>jf5D!6@ z#jo(quZrD^j|0}iwrz+5MDuoH-XDq#M-4mT_)jUt_XZ(bR#w#1508h-f_>$3IJT2U zHx1`jGG2~837cb3t@6Ef)gpgBE(j(p3aywQgqIs(Gm+wNlhL3#pUTmo-Lfd za(j)9rb9afCW^Fo_c7FR6eUH{Gne!WS=N$Jk9rKplHPB0xZFlIkJm_%D{)u7Oxu^8 zSe0NiszK(JGxT}q2fl!)ywZQ0!bALQ{uXnMox7OuMug@UxPrLC5{v%5f?YZ($O=F! zU-|K4W;yd0eYj-y_f|RZ<2QX+{EtO@6tV0)o zTQm$flcPgPquKp;=svIaJ2!G^iMN5bj4Y9~jj0wX0f28u> zDM!RaL`PGNHwY|u8+_+WO9ObdYj2TK;5CR3fa?KNO*@1vfS!0@-t5dUkTZTWy>zOg z(?Y>Z1K)`L5KYa@(ywJIZahxy+?h!@3&3`_g8w_(&Wzjq+roFE!UNb0{FBAER#zV} zGM2wuQ&+TO$KX5_j~O&^cBvEHA~IT9)P3V>!! zboO~@z#|DPl%x+xDJd!F)VEK7&+B5K-^IIUMn4BXkrIbGPcckPV4oqz0Kp|z@{G0O z#Tz!?M{>A~fY&5R7`}jn34}~r3w?b(9WRk${2V;rH#RltL%VJ<8ag_<4;z~#QeOAB zq?4G(QP#_w%Om01d;e&#x>`b*jefqn7O^XEDI)zj{heK zcCb3Zr>#9RFPpAdq+chag)%qiNieT$;@Ma6v*JMX4$@|1Oj9FC06|9Xo>DRfwZm;yEIQ z?-Uav>jNRx^1_cAE8xKXFw{g(g9;J?SRk3i+14BGDHuPr{7I#_C?TeA`*tz_0Q*Xx zqG^rKd$L2GH71yLPE&(vY4c!R`)lorH3=ojT1z;i?M;00M;vG|p&G68b8n9MXmE19-@{~bggCe}O7*!6_7h&f+d)n5%s z3XW96AkNa3sy}R@b6>e8{j}(~3SG9l)6i}$`ZLR2y|$=uwL`M(oll>OVh=CNrNxpN zSDfyLN7j~`g0Z; z-lsK$$xDP3ksATYX()HG+dab(a*~Ca>cGX%5BHldetQUYy8!{%uC{Ju_vgyJRAgmj z`c=~~$eW=FMa9Ty=`sz?cb&H53KL?j^U2R5OC1yf9X2w;_%}p7jMUb@l#{up;&&T2 zmSyx+#k%>q+oh9@dODN^JQzD(Nqd1J8;Dz!*}h3zw%PjOz|d*Cxb8@)JCcato7m^k zroV>mO49oCO*ID7594>S;);)Gvl$!xpH}fwRPlJ7IdFHzxcKj3l_{rU*+=sNqyIY`<7+xNDVC{oG`fNeo5q=wjE z9tBG5&(2K;s%%~&@%?3fjTI7Y309Iy{S_y5-oGbRI{7R&c-UkZkOw$Tp8}+evDhD5 z^KU`j+B6C8uh3vdNSv@UQpJgtukPz_y2Ow1L6IuxiSclCi3!4TZ8Ct!F^M^g9qWCxsGeu@osmBxPB#~S>G<(ELrMXKPd*jB zNlY}}T3YHG7=#N7XUHDp|DNW+S1u9V>iw(~+*Y;|qF4(Ry5W(5{FZeBqtXSsuBU1` zPIFlqgB;6VFBg`0GNzK{xW06cw-kFONI{>!EzU80PNLI#JatUF1@Eoj#)t#m@2)dq z^wg(MMM+{Av;kmLgqF4KLcI~Y#yI|+@(R46{=@yM6DH$fRxawL+398ocVl*(?*<|P zY*f^W*}UWEES}Lj#H`~^M|M42V<;()rgxB|Ljtg`UF(3%UZYWIuY_x7p}l!R#udW9 zyI4soFKC|zG9ehK)iF}xf(u%K5Idps;>8ykJroqls?Q&IY((><1($BC6bu$gUMuh# zrB(2~iLbm^t)G=ow`)Wqo%Ce+MC#e|I10A0uXxC0!@qp$aC07Va~@Wgm>(hsXDL&> zLQ@70Y8K$DaLgy#?>t6E9mK03@!P6WbFQ#F*p5fVlBp|ayMYu#DGa0j+M?UyILjt2 z4@tq34azy)bOlB^5R!fCe&3^5_yVpABp1QLQDo7l2~h3fbBo)dKl|n4Cy1eeC`^f@ z2GE;95+_$h`Slw&wl6_AH9sa&BD<-6aFS7ABqVoj6pVwOb_Q+QDkL(kY$5L0&;C(B4)K+#J}wfF;$3HU7FvyM+*SG0{QCcL~$|b_-o$T zpWKN~dxazl$o?LWBjkjEuxl*^-(_+Fke4~DZ~tE@EC0`k;y=E0FzC^w%X{6TauOKw*pCql{ zYaGHp{Qsk$c>KLCQ8SyUz=F|p=_tZavSFd8uS4SMvRLcGhlljMYDy}PAK&FBiFaWs zOe!pmlb~f;bJmb%xcp!&r@2D-A+QZm?!V$ChIFYJ2)btm&b zAHJqF=>LUx?P9^YSU%bn^vI^Ck|%3x>#Tj# zmy^y&q8vWhs#Rc9V6#2p*k65g+6~eq0{8iwX{<#PKmW!8oKtZ3JJVx$ z3qBRArv2R9tCu25jKAA1f-|C1`Tnvk(`>M+YAZ#%QYU*!2<83)yMh@GwFDWSG{3V7 z;^XDs#_Q=nvlgb*)8M0KqijBJeBtqT{@l|NF)!$p@2FPwYTjs(SGK_qf=82o) zPa@axmt}4OrDC>tP$uFx_~D;Id`4-%B3`8&;vx9!F#58C`L7tg|Np$_e<{^VT>hUP zU@;Bw+-vdL+oZV9RngxF8Q(k*L=YHA!by3&0cKv!xnwf7fq`fZjZic5rKZ5XuU|z| z+ec#@{i37WWE95M*P5HQsN`P1dHuGGMC7S>kanAzzn$wCs_g-Us>os^v=g~r)tt1? z+CZYtZaJTjoG58hhDoGYXiUwi1wA|`KkBiFIb-xd2-FhJOvI}BuC$c>0|0gwZ04lv zKLqEEyNlO;=4i;u$dZV*txhftv6wg=uDafv0@@4nHoMFV%V1iV;AC#m>0@tTkZ&_H zGHMFHyJy?C(08B5A;y@5B#{P2+og^-sjr1M*HV37`@}=^qO_vPSUH>X_TrRY*L+V_ zTNOsZl`HT~n1jbjcA+=2)WVnZCUtgU2#V7|z3=1e+_aGXfQg7sq^G=lccOD|V~N88 zpWT6#;{nK=m*#u2tycuRZ&N>_L&*n@_cp7|BR3XomEl*GmJqDcvb)CU2}Nmg#0KWMp{{SrG)!ltFcJ0cD@(^=@bJs4GreX?l6uhc~FGsLX8@g{PS5nU4C#q9^#h zO;oF*w6zi&z2w>D6{EPF%1^$yP9~AH9UhfgfC6tyPj(DS&zSW!B?5XJwm0>lnXu#) z6+QjBrG$jTUw^%E$51NJPec$}50BXrT;MoW4S-|#*&nKut_o+ zgx>1%0~V5{lFwCr8T)vb$71fUR*dQ)K0eiQo7l8Cv%Y4p*YaLL)C}|t#0UFMo<5n9 zd8A^}RgaMc?loEXcC1)T~yzjZ2^}pNwf8LZ0t*u+LL(-=8NjKwbGS*7yL*Q`?2Oa{0jP%pt&(c#B;hl1cMF}Jw3Y3+UvM6Ai!vqb8B;@ z$p~0AcVDqD1##LR&bIZ~_62|Y_6-*ox0l9qC*?j5505*ZzGnnCE$xb%;% z2U)M$gS19jKS0+xL6FCEnHsVRXWE(ach5Zv1SE|BTmYX{6&)S6SDdn-qN2M6bQ;xY z?9NF+Jz~dRkVvGlr8_<$!tXB0oil>m6MmZtm3%kR?2c#ihBfRWK837%yjzfIONs7q zkdQq1eIg>_+jM@GjA(a9hfer(^nA&Uu>v>-D6kgZ2yUK6ZG?MFH0g}*I@#7PF}^2R z*J6xF(xYK>^f4O3wdl=FWW>gi<(EmJI2IjC>6e_H-}aw2sfXg2f&vC)W6+-(NTKq3 zTRLKAGqtRn@ttxx zh5(1bUXIuLPS9HcThkU!dwpi&fsqewJ%BZgnJh)o(oy#fQM5Mpyjg;r)l^1i(PA>- zRiM$ZBGPNb%ID4(jiKyrqb!qiD{S{}bV`3QG7c0%Kd!2!=@egQ{AW@^?uD-ILEPlz zn`&Xw< z^QPNA>Eebw?W*sXZx1bZt=<1EtOQSI?A|$y=~onoElvvY?AbFnx$oO!Vi*jD{BHqh z8_Z0%sf7VH$bHzP zrv@H(q7)Hgot8@P{dlALm*-TMJX8PTk{m?vYS+ZX_O}^88M9!|<^ohJmt{yfd%1C9 z(*-Fj=Mkz2#OwI(LTwd|XXqGn2xPM%I#@$QBr1t;^())! zVGDDsgoL;}JwxPOBW=w!6BzXHP+IvhkAw!zjC5KdpXv3yZsS(AP`(aY(pnbA0*IP|7xVc{Gy*9{b6Y9!yDYMP%vhM0BYJS~_{u>6kQs5Kl*++PP{ z68suB*O{SmhoL5-Dr@U`D^1tgbJK3N)@Wi^U>}i1sfdMy8-O0dRc=T0mV|`m6lyH^*>gqyS$6ne*Hv#SClAAl0r1f<~2vA(ubSHMcm2&C{JzF64 z3FUrqZ}gBro&u422V=e6mA`2!6nJ}-Cts6d8QGskI9fS00@;igQrFDNqyMCnIBIj# z$S07T4vh060h;Ib*iNcJ;MS8fmg91X063pxXExWqn0bHq=PtXqIf!>Vs$KT%!lOUna+#h1+t zS7ZO!EJT*}AKSZs+PQi*yZ>%*Vh|aCYv(gs>aZ|co5Da}Mddz7GQzMzxh74JSYk4! zoq+kP1ik)W7u^HsaPv;Nz_2n`9(CDF{RE7Dm2EEj2zxY#` z>N(P1D(Q6kkeGw4?52#gv~7B=D6bxXa8bY)AdS^qUFS#Pp7{HVh+GyY5F{j^@8WaR z4BsxoYKDlnJ8hA^j*_*3SJAxyCRxLFOUCiTqTb_`WC@lR+gJL>kMI?$ZRZcJ{wvux zz(*3xy5=h`KH=e6F+V6Atya@%aV)T7*z2wgPbZdF{=ysG9cd2s2{=GP|^w7 z&+@}zf%-O_7RA;+0miOJ*h#y(mB^9A<+>+?&7mqbM3%*5rTpit|xU$$0U0K_TRO96XNpN}A-xg)`^jS<@2 zX<1@dQ@_4wUeV~ZTqOz=*peuP6u)>tGFiH(diO5v*2MaXbKbF$_y*zypfkAM}KRqd7=PTdZ0E?>iF7Fe2A;-EVacz z>kvsa&nDZ)-moK#nSX z1P%a)A+29w$#ExpQ3JjGg@ZP=C4yR}dwTlTIKW=db)0CO@oXDlxmM)FFN|+*hMcP$g$V$I<3-!QdxbVQ;*~8x6>t6jM zH|*qiTfWIG7h<*nR(I5@_gKlzmdQ7F%A#wYY26*M|1Hwd5S2{Ccu9B+<_hYDZ4{se z%j|ROhMbEND=Jz<@D|Z?nrdn*C#{>k9VEeg?uir$58$q$hOoZ6D8jELf*kxihP% zg@ygTLp|{8(1GrZI4aSEK=cb{{PPA^VALk3Pj zHI}Odr0uIv`O6haj|-k?V6HvQ{NrNhm86aLS4J4dTiosHpb9akq%Ok#5-b**5(-UB zF)8KuL*cNe)j1%7%WUM;E_JeZN5*zwi;vSr@B z6G*3Ou7@fF0%06>cJ}CS_}#LKM183#Ah2uL+{ExokJ(mQdupoKqes9*ETo@GwV?)1 zmNmnc=0~IzVVs!@#zAK0*BIJzx083S9Xz!(G0|YSxOhkQ+Geyf0j&JI*-wSa@^w7- zV@zQJKK=EYTvs^Em{IUXQ`-cI%+?FJzse|7qC04agLk=a_aJA%CgH)KijtC|B87A@ zTm4~F(PUcIC>WRylNKli1@GP5Vj^}47^EHD@!+eR1_p1zb#} g1$^w;Ib=bBcuf_xTeC43up(fNykt^p') + card_end = body.find("", card_start) + assert card_start != -1 and card_end != -1 + visible_card = body[card_start:card_end] + assert token not in visible_card + + +@pytest.mark.requires_postgres +def test_vote_post_records_and_decides(client, db, scenario): + """First voter approves -> still pending (Bob hasn't voted). + + Then Bob approves -> approved. + """ + item = scenario["item"] + voter_a = scenario["voter_a"] + voter_b = scenario["voter_b"] + + token_a = approval_service.issue_token(item.id, voter_a.id) + r1 = client.post( + f"/api/meals/vote/{item.id}", + params={"token": token_a}, + json={"vote": "approve"}, + ) + assert r1.status_code == 200, r1.text + body1 = r1.json() + assert body1["status"] == "recorded" + assert body1["item_status"] in ("pending", "approved") + # With 2 voters, after 1 approve we should still be pending. + assert body1["item_status"] == "pending" + + token_b = approval_service.issue_token(item.id, voter_b.id) + r2 = client.post( + f"/api/meals/vote/{item.id}", + params={"token": token_b}, + json={"vote": "approve"}, + ) + assert r2.status_code == 200, r2.text + body2 = r2.json() + assert body2["item_status"] == "approved" diff --git a/backend/tests/test_auth.py b/backend/tests/test_auth.py new file mode 100644 index 0000000..00d4cb6 --- /dev/null +++ b/backend/tests/test_auth.py @@ -0,0 +1,114 @@ +""" +Auth gate tests for R1-B+D. + +Covers: +- /api/admin/* requires bearer token (401 without, not 401 with valid). +- Mutating routes on family routers require a session cookie. +- /api/auth/login + /api/auth/logout round-trip with the shared password. +""" + +from __future__ import annotations + +import os + +import pytest + + +# Configure auth secrets BEFORE app import. conftest.py runs first and sets +# DATABASE_URL; we layer auth env on top here. +os.environ.setdefault("ADMIN_TOKEN", "test-admin-token") +os.environ.setdefault("SESSION_PASSWORD", "test-family-password") +os.environ.setdefault("SECRET_KEY", "test-secret-key-do-not-use-in-prod") + + +@pytest.fixture(autouse=True) +def _reload_settings(monkeypatch): + """Force ``settings`` to re-read env (test isolation).""" + monkeypatch.setenv("ADMIN_TOKEN", "test-admin-token") + monkeypatch.setenv("SESSION_PASSWORD", "test-family-password") + monkeypatch.setenv("SECRET_KEY", "test-secret-key-do-not-use-in-prod") + # Re-instantiate the singleton so dependents pick up env. + from app import config as app_config + + app_config.settings = app_config.Settings() + yield + + +# --------------------------------------------------------------------------- +# Admin bearer token +# --------------------------------------------------------------------------- +@pytest.mark.requires_postgres +def test_admin_requires_token(client): + """No bearer → 401. Valid bearer → not 401 (handler runs).""" + r = client.post("/api/admin/scrape") + assert r.status_code == 401, r.text + + r = client.post( + "/api/admin/scrape", + headers={"Authorization": "Bearer test-admin-token"}, + ) + # Handler may 200/202/500 (Playwright not installed in CI), but NOT 401. + assert r.status_code != 401, r.text + + +@pytest.mark.requires_postgres +def test_admin_logs_requires_token(client): + r = client.get("/api/admin/logs") + assert r.status_code == 401 + + r = client.get( + "/api/admin/logs", headers={"Authorization": "Bearer test-admin-token"} + ) + assert r.status_code == 200 + + +# --------------------------------------------------------------------------- +# Session-gated mutations +# --------------------------------------------------------------------------- +@pytest.mark.requires_postgres +def test_session_required_for_mutation(client): + """POST /api/profile/members without cookie → 401.""" + r = client.post( + "/api/profile/members", + json={"name": "x", "email": "x@y.z", "role": "voter"}, + ) + assert r.status_code == 401, r.text + + +@pytest.mark.requires_postgres +def test_session_open_for_reads(client): + """GET /api/profile is NOT auth-gated (reads stay open).""" + r = client.get("/api/profile") + # Either 200 (profile exists) or 404 (no profile yet) — never 401. + assert r.status_code in (200, 404), r.text + + +# --------------------------------------------------------------------------- +# Login / logout +# --------------------------------------------------------------------------- +@pytest.mark.requires_postgres +def test_session_login_logout(client): + # Wrong password + r = client.post("/api/auth/login", json={"password": "nope"}) + assert r.status_code == 401 + + # Right password sets the cookie + r = client.post( + "/api/auth/login", json={"password": "test-family-password"} + ) + assert r.status_code == 204 + assert "mp_session" in r.cookies, r.headers + + # With cookie, mutation succeeds (or fails for non-auth reasons) + cookie_value = r.cookies.get("mp_session") + client.cookies.set("mp_session", cookie_value) + r2 = client.post( + "/api/profile/members", + json={"name": "x", "email": "test@example.com", "role": "voter"}, + ) + # 401 means the cookie was rejected — that's the bug we're guarding. + assert r2.status_code != 401, r2.text + + # Logout clears the cookie + r3 = client.post("/api/auth/logout") + assert r3.status_code == 204 diff --git a/backend/tests/test_config.py b/backend/tests/test_config.py new file mode 100644 index 0000000..ee1460c --- /dev/null +++ b/backend/tests/test_config.py @@ -0,0 +1,19 @@ +""" +Config fail-fast: importing app.config with DATABASE_URL unset must raise. +""" + +from __future__ import annotations + +import importlib + +import pytest + + +def test_database_url_required(monkeypatch): + """Settings() with empty DATABASE_URL → RuntimeError at instantiation.""" + from app import config as app_config + + monkeypatch.setenv("DATABASE_URL", "") + # Pass _env_file=None so a stray .env on disk can't satisfy the field. + with pytest.raises(RuntimeError, match="DATABASE_URL is required"): + app_config.Settings(_env_file=None, DATABASE_URL="") diff --git a/backend/tests/test_scrape_endpoint.py b/backend/tests/test_scrape_endpoint.py new file mode 100644 index 0000000..c1765f6 --- /dev/null +++ b/backend/tests/test_scrape_endpoint.py @@ -0,0 +1,68 @@ +"""Async scrape endpoint contract. + +Verifies that ``POST /api/admin/scrape``: + - returns 202 + ``scrape_log_id`` synchronously, + - persists a ``ScrapeLog`` row in status STARTED before the background task + runs (the task is monkey-patched out so it never reaches Playwright and + never opens a session outside the test transaction). +""" +from __future__ import annotations + +import os +import uuid + +import pytest + +os.environ.setdefault("ADMIN_TOKEN", "test-admin-token") + + +@pytest.fixture(autouse=True) +def _admin_token(monkeypatch): + monkeypatch.setenv("ADMIN_TOKEN", "test-admin-token") + yield + + +@pytest.mark.requires_postgres +def test_scrape_returns_202_and_log_id(client, db, monkeypatch): + """Endpoint enqueues the scrape and returns 202 + scrape_log_id. + + We replace the background runner with a no-op so the test does NOT spin up + Playwright and does NOT open a session outside the rolled-back test + transaction. + """ + calls: list[tuple] = [] + + def _fake_run(log_id, source, scrape_type): + calls.append((log_id, source, scrape_type)) + + # Patch in BOTH the service module (definition site) and the api module + # (import site) so whichever symbol the route resolved to is replaced. + monkeypatch.setattr( + "app.services.scraper_service._run_scrape_in_background", _fake_run + ) + + r = client.post( + "/api/admin/scrape", + headers={"Authorization": "Bearer test-admin-token"}, + ) + assert r.status_code == 202, r.text + body = r.json() + assert body["status"] == "queued" + assert "scrape_log_id" in body + + log_id = uuid.UUID(body["scrape_log_id"]) + + # Row was committed inside enqueue_scrape — visible on the test session. + from app.models import ScrapeLog, ScrapeStatus + + log = db.query(ScrapeLog).filter(ScrapeLog.id == log_id).first() + assert log is not None, "ScrapeLog row should exist after enqueue" + assert log.status == ScrapeStatus.STARTED + assert log.source == "lucky_california" + assert log.scrape_type == "weekly_ad" + assert log.completed_at is None + + # TestClient runs background tasks before returning from the context + # manager exit — by the time we get here, the fake runner ran exactly once. + assert len(calls) == 1 + assert calls[0][0] == log_id diff --git a/backend/tests/test_smoke.py b/backend/tests/test_smoke.py new file mode 100644 index 0000000..c3c1e56 --- /dev/null +++ b/backend/tests/test_smoke.py @@ -0,0 +1,63 @@ +""" +Smoke tests: app boots, routers wire up, no import-time crashes. + +The router-list test asserts each endpoint returns 200 or 401 (auth gate not +yet implemented in R1-A's scope) but explicitly NOT 5xx — the goal is to catch +import errors and crashing handlers, not to validate business logic. +""" + +from __future__ import annotations + +import os +import pytest + + +def test_app_imports(): + from app.main import app + assert app.title == "MealPlanner" + + +@pytest.mark.requires_postgres +def test_health(client): + r = client.get("/health") + assert r.status_code == 200 + assert r.json() == {"status": "ok"} + + +@pytest.mark.requires_postgres +def test_health_db(client): + r = client.get("/health/db") + assert r.status_code == 200 + body = r.json() + assert body.get("database") == "connected" + + +ROUTER_GET_PATHS = [ + "/api/profile", + "/api/profile/members", + "/api/recipes", + "/api/recipes/ingredients", + "/api/meals", + "/api/pantry", + "/api/shopping-list", + "/api/admin/logs", +] + + +@pytest.mark.requires_postgres +@pytest.mark.parametrize("path", ROUTER_GET_PATHS) +def test_router_list_endpoints(client, path): + """ + Each canonical GET must respond. 200 (handled), 401 (admin-gated), + 404 (handler ran but no row found) — all OK. 5xx means import/runtime + crash; 307 (trailing-slash redirect) means a handler is still mounted + on the wrong path. + """ + r = client.get(path, follow_redirects=False) + assert r.status_code < 500, ( + f"{path} returned {r.status_code}: {r.text[:300]}" + ) + # 307 is a regression — canonical paths must be the route definitions. + assert r.status_code in (200, 401, 404, 422), ( + f"{path} returned unexpected {r.status_code}" + ) diff --git a/backend/tests/test_swiftly_api.py b/backend/tests/test_swiftly_api.py new file mode 100644 index 0000000..67c3d4d --- /dev/null +++ b/backend/tests/test_swiftly_api.py @@ -0,0 +1,223 @@ +"""Offline tests for the Swiftly product-API client (R3-0). + +All tests run against saved fixtures and mocked HTTP — no live network, +no Playwright/Chromium. Captured 2026-05-05 from a single live spike; +see ``.agent/context.md`` "Swiftly API" for the field-mapping rationale. +""" +from __future__ import annotations + +import json +import sys +import uuid +from decimal import Decimal +from pathlib import Path +from unittest.mock import MagicMock, patch + +import pytest +import requests + +# Make `app.*` importable when pytest is invoked from the repo root. +BACKEND_DIR = Path(__file__).resolve().parent.parent +if str(BACKEND_DIR) not in sys.path: + sys.path.insert(0, str(BACKEND_DIR)) + +from app.scraper.lucky_ca_scraper import ( # noqa: E402 + LuckyCaliforniaScraper, + SwiftlyAuthError, +) + +FIXTURE_DIR = Path(__file__).resolve().parent / "fixtures" / "lucky_ca" +CATEGORIES_HTML = FIXTURE_DIR / "categories.html" +CATEGORY_JSON = FIXTURE_DIR / "category_meat_seafood.json" + + +pytestmark = pytest.mark.scraper_offline + + +# --------------------------------------------------------------------------- +# Pure-parser tests against captured fixtures +# --------------------------------------------------------------------------- +def test_parse_categories_fixture() -> None: + """Parser returns >=10 distinct API slugs from the captured page.""" + if not CATEGORIES_HTML.exists(): + pytest.skip(f"fixture missing: {CATEGORIES_HTML}") + html = CATEGORIES_HTML.read_text(encoding="utf-8") + + slugs = LuckyCaliforniaScraper.parse_categories_html(html) + + assert len(slugs) >= 10, f"expected >=10 categories, got {len(slugs)}" + assert len(set(slugs)) == len(slugs), "slugs must be deduplicated" + # Every slug should look like `Product/` per the API contract. + for s in slugs: + assert s.startswith("Product/"), f"unexpected slug shape: {s!r}" + # Spot-check the one we know is in the captured snapshot. + assert "Product/meat_seafood" in slugs + + +def test_parse_category_response_fixture() -> None: + """Parser returns >=10 product dicts each with the mapped fields populated.""" + if not CATEGORY_JSON.exists(): + pytest.skip(f"fixture missing: {CATEGORY_JSON}") + payload = json.loads(CATEGORY_JSON.read_text(encoding="utf-8")) + + raw_items = LuckyCaliforniaScraper.parse_category_response(payload) + assert len(raw_items) >= 10, f"expected >=10 raw items, got {len(raw_items)}" + + mapped: list[dict] = [] + for raw in raw_items: + m = LuckyCaliforniaScraper.map_product( + raw, aisle="meat_seafood", source_slug="Product/meat_seafood" + ) + if m is not None: + mapped.append(m) + + assert len(mapped) >= 10, ( + f"expected >=10 mapped products, got {len(mapped)} " + f"(from {len(raw_items)} raw)" + ) + + sample = mapped[0] + # Required fields per the field-mapping contract. + for key in ( + "external_id", + "source", + "name", + "current_price", + "regular_price", + "is_on_sale", + "image_url", + "aisle", + ): + assert key in sample, f"missing key {key!r} in mapped product: {sample!r}" + + assert sample["source"] == "lucky_california" + assert sample["aisle"] == "meat_seafood" + assert isinstance(sample["external_id"], str) and sample["external_id"] + assert isinstance(sample["name"], str) and sample["name"].strip() + assert isinstance(sample["regular_price"], Decimal) + assert sample["regular_price"] > 0 + assert isinstance(sample["is_on_sale"], bool) + + # Across the whole category at least SOME items should be on sale and + # at least some should have a regular-only price (sanity for the parser). + assert any(m["is_on_sale"] for m in mapped), "expected at least one sale item" + assert any(not m["is_on_sale"] for m in mapped), "expected at least one reg-only item" + + +def test_map_product_returns_none_for_unparseable() -> None: + """Products with no name AND no parseable price are dropped.""" + assert LuckyCaliforniaScraper.map_product({"name": ""}) is None + assert ( + LuckyCaliforniaScraper.map_product( + {"id": "x", "name": "Foo", "price": {"ok": {}}} + ) + is None + ) + + +# --------------------------------------------------------------------------- +# 401 → SwiftlyAuthError → FAILED ScrapeLog +# --------------------------------------------------------------------------- +def _mock_response(status_code: int, payload=None) -> MagicMock: + resp = MagicMock(spec=requests.Response) + resp.status_code = status_code + if payload is not None: + resp.json.return_value = payload + if status_code >= 400: + resp.raise_for_status.side_effect = requests.HTTPError( + f"{status_code} error", response=resp + ) + else: + resp.raise_for_status.return_value = None + return resp + + +def test_swiftly_auth_error_on_401_from_api() -> None: + """A 401 from the API host raises SwiftlyAuthError before raise_for_status.""" + scraper = LuckyCaliforniaScraper(bearer_token="stale-token") + + with patch.object(scraper.api_session, "get", return_value=_mock_response(401)): + with pytest.raises(SwiftlyAuthError) as excinfo: + scraper.fetch_category("Product/meat_seafood") + + assert "SWIFTLY_BEARER_TOKEN expired" in str(excinfo.value) + + +def test_swiftly_auth_error_when_token_missing() -> None: + """An empty token short-circuits to SwiftlyAuthError without any HTTP call. + + Force the token empty AFTER construction so the test is independent of + whatever ``SWIFTLY_BEARER_TOKEN`` happens to be set in the environment + (it WILL be set when pytest runs inside ``docker compose``). + """ + scraper = LuckyCaliforniaScraper() + scraper.bearer_token = "" + with patch.object(scraper.api_session, "get") as mock_get: + with pytest.raises(SwiftlyAuthError): + scraper.fetch_category("Product/meat_seafood") + mock_get.assert_not_called() + + +@pytest.mark.requires_postgres +def test_background_runner_writes_failed_with_token_message(monkeypatch): + """A 401 during the background scrape lands in ScrapeLog as FAILED + message. + + Uses a real (non-fixture) session so the bg runner's rollback+re-query + path mirrors production. The bg runner commits the FAILED row; we clean + up explicitly at the end. + """ + from app.models import ScrapeLog, ScrapeStatus + from app.services import scraper_service + from app.scraper.lucky_ca_scraper import SwiftlyAuthError, LuckyCaliforniaScraper + from app.database import SessionLocal + from datetime import datetime, timezone + + log_id = uuid.uuid4() + setup_session = SessionLocal() + try: + setup_session.add( + ScrapeLog( + id=log_id, + source="lucky_california", + scrape_type="weekly_ad", + status=ScrapeStatus.STARTED, + started_at=datetime.now(timezone.utc), + ) + ) + setup_session.commit() + finally: + setup_session.close() + + def _explode(self): + raise SwiftlyAuthError( + "SWIFTLY_BEARER_TOKEN expired — request a fresh token from the user " + "(capture from luckysupermarkets.com network tab on a /search/api/v1 request)" + ) + + monkeypatch.setattr(LuckyCaliforniaScraper, "fetch_all", _explode) + + try: + scraper_service._run_scrape_in_background( + log_id, "lucky_california", "weekly_ad" + ) + + verify_session = SessionLocal() + try: + refreshed = ( + verify_session.query(ScrapeLog) + .filter(ScrapeLog.id == log_id) + .first() + ) + assert refreshed is not None + assert refreshed.status == ScrapeStatus.FAILED + assert "SWIFTLY_BEARER_TOKEN expired" in (refreshed.error_message or "") + assert refreshed.completed_at is not None + finally: + verify_session.close() + finally: + cleanup_session = SessionLocal() + try: + cleanup_session.query(ScrapeLog).filter(ScrapeLog.id == log_id).delete() + cleanup_session.commit() + finally: + cleanup_session.close() diff --git a/docker-compose.yml b/docker-compose.yml index a51b0bb..9cb2cb8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,9 +11,16 @@ services: - DATABASE_URL=postgresql://mealplanner:${POSTGRES_PASSWORD}@db:5432/mealplanner - SENDGRID_API_KEY=${SENDGRID_API_KEY} - LUCKY_CA_URL=${LUCKY_CA_URL:-https://luckysupermarkets.com} + - LUCKY_STORE_ID=${LUCKY_STORE_ID:-757} + - SWIFTLY_API_BASE=${SWIFTLY_API_BASE:-https://prod.swiftlyapi.net} + - SWIFTLY_CATEGORIES_URL=${SWIFTLY_CATEGORIES_URL:-https://luckysupermarkets.com/categories} + - SWIFTLY_BEARER_TOKEN=${SWIFTLY_BEARER_TOKEN} - AI_IMAGE_ENABLED=${AI_IMAGE_ENABLED:-false} - LOG_LEVEL=${LOG_LEVEL:-INFO} - SECRET_KEY=${SECRET_KEY} + - ADMIN_TOKEN=${ADMIN_TOKEN} + - SESSION_PASSWORD=${SESSION_PASSWORD} + - EMAIL_BACKEND=${EMAIL_BACKEND:-console} depends_on: db: condition: service_healthy diff --git a/frontend/src/api/index.ts b/frontend/src/api/index.ts index 4cecfd9..2735924 100644 --- a/frontend/src/api/index.ts +++ b/frontend/src/api/index.ts @@ -7,9 +7,15 @@ const api = axios.create({ headers: { 'Content-Type': 'application/json', }, + withCredentials: true, }) export const mealPlannerApi = { + auth: { + login: (password: string) => api.post('/auth/login', { password }), + logout: () => api.post('/auth/logout'), + }, + profile: { get: () => api.get('/profile'), update: (data: any) => api.put('/profile', data), @@ -23,12 +29,12 @@ export const mealPlannerApi = { get: (id: string) => api.get(`/recipes/${id}`), create: (data: any) => api.post('/recipes', data), delete: (id: string) => api.delete(`/recipes/${id}`), - listIngredients: () => api.get('/recipes/ingredients/list'), + listIngredients: () => api.get('/recipes/ingredients'), createIngredient: (data: any) => api.post('/recipes/ingredients', data), }, meals: { - getPlanned: () => api.get('/meals/planned'), + getPlanned: () => api.get('/meals'), get: (id: string) => api.get(`/meals/${id}`), getItem: (id: string) => api.get(`/meals/items/${id}`), create: (data: any) => api.post('/meals', data), diff --git a/scripts/send_test_approval.py b/scripts/send_test_approval.py new file mode 100644 index 0000000..fd3c7ff --- /dev/null +++ b/scripts/send_test_approval.py @@ -0,0 +1,191 @@ +#!/usr/bin/env python +""" +R2-B end-to-end approval round-trip spike. + +Usage: + # Print URL only (you can click it in a browser running the server): + python scripts/send_test_approval.py + + # Bypass the email and exercise the full POST against a TestClient: + python scripts/send_test_approval.py --simulate-click approve + python scripts/send_test_approval.py --simulate-click deny + +This is the actual proof that the email + per-voter approval click +round-trip works against the real schema (`family_member`, +`meal_plan_item`, `meal_plan_vote`). If the script exits 0 with +`item_status=approved` (or `denied`) the spike is green. +""" + +from __future__ import annotations + +import argparse +import os +import sys +import uuid +from datetime import date, timedelta +from pathlib import Path + +# Make backend/ importable when invoked from repo root. +_REPO_ROOT = Path(__file__).resolve().parent.parent +_BACKEND_ROOT = _REPO_ROOT / "backend" +if str(_BACKEND_ROOT) not in sys.path: + sys.path.insert(0, str(_BACKEND_ROOT)) + +# DATABASE_URL must be set before importing app.config. +os.environ.setdefault( + "DATABASE_URL", + os.environ.get( + "TEST_DATABASE_URL", + "postgresql://mealplanner:password@localhost:5432/mealplanner_test", + ), +) + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument( + "--simulate-click", + choices=["approve", "deny"], + help="Bypass email; POST the vote via TestClient and assert success.", + ) + parser.add_argument( + "--base-url", + default="http://localhost:8000", + help="Base URL for the printed link (informational only).", + ) + args = parser.parse_args() + + from sqlalchemy import create_engine + from sqlalchemy.orm import sessionmaker + + from app.config import settings + from app.models import ( + FamilyMember, + FamilyMemberRole, + FamilyProfile, + MealPlan, + MealPlanItem, + MealPlanStatus, + MealType, + Recipe, + ) + from app.services import approval as approval_service + from app.services.email import get_email_backend + + engine = create_engine( + settings.DATABASE_URL.replace("postgresql://", "postgresql+psycopg2://") + ) + Session = sessionmaker(bind=engine, autoflush=False, autocommit=False) + db = Session() + + # ------------------------------------------------------------------ + # Bootstrap a minimal scenario. Suffix everything with a UUID4 so the + # script is idempotent and can run repeatedly without unique-constraint + # collisions. + # ------------------------------------------------------------------ + suffix = uuid.uuid4().hex[:8] + + profile = FamilyProfile( + name=f"Spike Family {suffix}", + household_size=1, + adult_count=1, + child_count=0, + ) + db.add(profile) + db.flush() + + voter = FamilyMember( + family_profile_id=profile.id, + name="Spike Voter", + email=f"spike+{suffix}@example.com", + role=FamilyMemberRole.ADULT, + ) + db.add(voter) + db.flush() + + recipe = Recipe( + family_profile_id=profile.id, + name=f"Spike Pasta {suffix}", + servings=2, + ingredients=[{"name": "pasta", "qty": "200g"}], + instructions=["Boil water", "Cook pasta"], + is_manually_added=True, + ) + db.add(recipe) + db.flush() + + plan = MealPlan( + family_profile_id=profile.id, + week_start_date=date.today() + timedelta(days=(7 - date.today().weekday())), + status=MealPlanStatus.DRAFT, + ) + db.add(plan) + db.flush() + + item = MealPlanItem( + meal_plan_id=plan.id, + recipe_id=recipe.id, + day_of_week=1, + meal_type=MealType.DINNER, + ) + db.add(item) + db.commit() + + token = approval_service.issue_token(item.id, voter.id) + url = f"{args.base_url}/api/meals/vote/{item.id}?token={token}" + + # Send via configured email backend (Console writes to stdout + outbox). + backend = get_email_backend() + subject = "Action required: please vote on this week's meal" + html = ( + f"

    Hi {voter.name}, please review this meal:

    " + f"

    {recipe.name}

    " + f'
    ' + ) + text = f"Hi {voter.name}, please review {recipe.name}: {url}" + backend.send(to=voter.email, subject=subject, html=html, text=text) + + print(f"item_id={item.id}") + print(f"voter_id={voter.id}") + print(f"approval_url={url}") + + if args.simulate_click is None: + return 0 + + # ------------------------------------------------------------------ + # End-to-end proof: drive the POST through a TestClient. + # ------------------------------------------------------------------ + from fastapi.testclient import TestClient + + from app.main import app + + with TestClient(app) as client: + # Render the GET page first to mirror a real click. + r_get = client.get(f"/api/meals/vote/{item.id}", params={"token": token}) + assert r_get.status_code == 200, (r_get.status_code, r_get.text) + assert "text/html" in r_get.headers.get("content-type", "") + + r_post = client.post( + f"/api/meals/vote/{item.id}", + params={"token": token}, + json={"vote": args.simulate_click}, + ) + assert r_post.status_code == 200, (r_post.status_code, r_post.text) + body = r_post.json() + print(f"item_status={body['item_status']}") + assert body["status"] == "recorded" + + # Single-use: a second POST must 409. + r_post2 = client.post( + f"/api/meals/vote/{item.id}", + params={"token": token}, + json={"vote": args.simulate_click}, + ) + assert r_post2.status_code == 409, (r_post2.status_code, r_post2.text) + print("single_use=enforced") + + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/spike_lucky_scrape.py b/scripts/spike_lucky_scrape.py new file mode 100644 index 0000000..d3648fc --- /dev/null +++ b/scripts/spike_lucky_scrape.py @@ -0,0 +1,169 @@ +""" +R2-A live-scrape spike for Lucky California weekly ad. + +Performs ONE live fetch of https://luckysupermarkets.com weekly-ad page, +saves the rendered HTML, a full-page screenshot, and a META.md describing +the fetch result. This is the deferred-risk spike demanded by review §2.4. + +Run once. Do not loop. Polite citizen: identifying user-agent, single +request, no auth bypass attempts. + +Usage: + python scripts/spike_lucky_scrape.py +""" + +from __future__ import annotations + +import sys +from datetime import datetime, timezone +from pathlib import Path + +from playwright.sync_api import sync_playwright + +# Path to backend/app on import path so we can reuse the parser. +REPO_ROOT = Path(__file__).resolve().parent.parent +sys.path.insert(0, str(REPO_ROOT / "backend")) + +from app.scraper.lucky_ca_scraper import LuckyCaliforniaScraper # noqa: E402 +from bs4 import BeautifulSoup # noqa: E402 + +FIXTURE_DIR = REPO_ROOT / "backend" / "tests" / "fixtures" / "lucky_ca" +TARGET_URL = "https://luckysupermarkets.com/coupons/Coupon%2Flu-featured-in-ad" +USER_AGENT = ( + "Mozilla/5.0 (compatible; MealPlannerSpike/0.1; " + "+https://github.com/MealPlanner; spike=R2-A)" +) + + +def main() -> int: + FIXTURE_DIR.mkdir(parents=True, exist_ok=True) + html_path = FIXTURE_DIR / "weekly_ad.html" + png_path = FIXTURE_DIR / "weekly_ad.png" + meta_path = FIXTURE_DIR / "META.md" + + started = datetime.now(timezone.utc) + print(f"[spike] Fetching {TARGET_URL}") + + status_code: int | None = None + final_url: str = TARGET_URL + error: str | None = None + captcha_or_block = False + captcha_signal = "" + + with sync_playwright() as p: + browser = p.chromium.launch(headless=True) + try: + ctx = browser.new_context(user_agent=USER_AGENT) + page = ctx.new_page() + + response = None + + def _capture(resp): + nonlocal response + # Capture only the main document response. + if response is None and resp.url.rstrip("/") == TARGET_URL.rstrip("/"): + response = resp + + page.on("response", _capture) + + try: + nav_resp = page.goto( + TARGET_URL, + wait_until="networkidle", + timeout=45_000, + ) + if nav_resp is not None: + status_code = nav_resp.status + final_url = nav_resp.url + elif response is not None: + status_code = response.status + final_url = response.url + except Exception as exc: # noqa: BLE001 -- spike, capture and report + error = f"{type(exc).__name__}: {exc}" + + try: + html = page.content() + except Exception as exc: # noqa: BLE001 + html = "" + error = (error or "") + f" content_err={exc}" + + html_path.write_text(html, encoding="utf-8") + + try: + page.screenshot(path=str(png_path), full_page=True) + except Exception as exc: # noqa: BLE001 + error = (error or "") + f" screenshot_err={exc}" + + # Heuristic captcha / block detection. + lower = html.lower() + for needle in ( + "captcha", + "are you a robot", + "access denied", + "akamai", + "cloudflare", + "px-captcha", + "perimeterx", + "incapsula", + ): + if needle in lower: + captcha_or_block = True + captcha_signal = needle + break + + finally: + browser.close() + + # Run parser portion against the captured HTML (no network). + scraper = LuckyCaliforniaScraper() + items: list[dict] = scraper.parse_featured_coupons_html(html) + _ = BeautifulSoup # keep import for type-stability if reused later + + completed = datetime.now(timezone.utc) + + meta = f"""# Lucky California weekly-ad spike (R2-A) + +| Field | Value | +| --- | --- | +| URL | {TARGET_URL} | +| Final URL | {final_url} | +| Started (UTC) | {started.isoformat()} | +| Completed (UTC) | {completed.isoformat()} | +| HTTP status | {status_code} | +| HTML bytes | {len(html)} | +| Items parsed | {len(items)} | +| Captcha/block signal | {"YES (" + captcha_signal + ")" if captcha_or_block else "no"} | +| Error | {error or "none"} | +| User-Agent | `{USER_AGENT}` | + +## First parsed item (sample) + +```json +{__import__("json").dumps(items[0], indent=2) if items else "null"} +``` + +## Notes + +- Single live fetch performed. Do not rerun without reason. +- HTML and PNG saved alongside this file. +- Parser used: `LuckyCaliforniaScraper._parse_coupon_item` against + elements matching `h2/h3/a` with `$N.NN` text. +""" + meta_path.write_text(meta, encoding="utf-8") + + print(f"[spike] status={status_code} html_bytes={len(html)} items={len(items)} " + f"block={captcha_or_block}") + print(f"[spike] wrote: {html_path}") + print(f"[spike] wrote: {png_path}") + print(f"[spike] wrote: {meta_path}") + + if captcha_or_block: + print("[spike] WARNING: captcha/anti-bot signal detected; review META.md") + if not items: + print("[spike] WARNING: zero items parsed; selectors may be stale") + + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/spike_swiftly_ingest.py b/scripts/spike_swiftly_ingest.py new file mode 100644 index 0000000..85424de --- /dev/null +++ b/scripts/spike_swiftly_ingest.py @@ -0,0 +1,101 @@ +"""Live spike for the Swiftly product API (R3-0, ad-hoc admin tool). + +Usage: + python scripts/spike_swiftly_ingest.py --confirm-live + +Fetches the categories page + ONE category (default ``Product/meat_seafood``) +against the live Swiftly API, prints the item count, and pretty-prints +two sample mapped products. Does NOT persist anything to Postgres — the +purpose is to verify the token + parser round-trip on demand without +running the full scrape. +""" +from __future__ import annotations + +import argparse +import json +import os +import sys +from pathlib import Path + +# Make `app.*` importable when invoked from the repo root. +REPO_ROOT = Path(__file__).resolve().parent.parent +BACKEND_DIR = REPO_ROOT / "backend" +if str(BACKEND_DIR) not in sys.path: + sys.path.insert(0, str(BACKEND_DIR)) + +# Allow running outside docker without a real Postgres URL just to exercise +# the scraper. Settings still requires DATABASE_URL to be non-empty. +os.environ.setdefault("DATABASE_URL", "postgresql://placeholder@localhost:5432/placeholder") + +from app.scraper.lucky_ca_scraper import LuckyCaliforniaScraper, SwiftlyAuthError # noqa: E402 + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument( + "--confirm-live", + action="store_true", + help="Required: hit the live Swiftly API. Without this flag the script no-ops.", + ) + parser.add_argument( + "--category", + default="Product/meat_seafood", + help="API slug to fetch (default: Product/meat_seafood).", + ) + parser.add_argument( + "--limit", + type=int, + default=2, + help="How many sample mapped products to print (default 2).", + ) + args = parser.parse_args() + + if not args.confirm_live: + print( + "Refusing to make live HTTP calls without --confirm-live.\n" + "Pass --confirm-live to opt in.", + file=sys.stderr, + ) + return 2 + + scraper = LuckyCaliforniaScraper() + try: + slugs = scraper.discover_categories() + print(f"discovered {len(slugs)} categories") + for s in slugs[:5]: + print(f" - {s}") + if len(slugs) > 5: + print(f" ... ({len(slugs) - 5} more)") + + try: + raw_items = scraper.fetch_category(args.category) + except SwiftlyAuthError as exc: + print(f"\nAUTH FAILURE: {exc}", file=sys.stderr) + return 1 + + print(f"\ncategory={args.category!r}: {len(raw_items)} raw items") + + aisle = LuckyCaliforniaScraper._aisle_from_slug(args.category) + mapped = [] + for raw in raw_items: + m = LuckyCaliforniaScraper.map_product( + raw, aisle=aisle, source_slug=args.category + ) + if m is not None: + mapped.append(m) + print(f"{len(mapped)} mapped products (after dropping unparseable rows)") + + print("\n=== sample mapped products ===") + for m in mapped[: args.limit]: + # Decimal isn't JSON-serializable; coerce for display. + display = {k: (str(v) if k in {"current_price", "regular_price", "sale_price"} else v) for k, v in m.items()} + print(json.dumps(display, indent=2, default=str)) + print() + + return 0 + finally: + scraper.cleanup() + + +if __name__ == "__main__": + sys.exit(main())

    Open the approval page