From 3e57cb8efe36c57ee2bc8314f92369681e73d692 Mon Sep 17 00:00:00 2001 From: CC#2 Kora Web Date: Sat, 23 May 2026 20:12:45 -0700 Subject: [PATCH] =?UTF-8?q?feat(kora):=20KR-FE-PROBE-INVESTIGATION-VIEWER?= =?UTF-8?q?=20=E2=80=94=20wake=E2=86=92reason=E2=86=92DM=20xref=20panel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit New cockpit page + GET /api/probe-investigations endpoint that joins three data sources per probe wake event so the operator sees, in one place, what Kora actually did about each issue detected by the heartbeat probes. Joined sources ============== 1. probe.wake_requested audit rows (PR #163 wake_emitter) 2. reasoning.tool_called audit rows keyed by caller_session_id == "probe:{probe}:{category}" (PR #166 wired this caller_session shape via _derive_caller_session_id in anthropic_engine.py — pinned by drift-guard test) 3. snapshot.service_health[probe] (current health → drives resolution_status: resolved / active / unknown) Backend (kora_cli/web_server.py) ================================ GET /api/probe-investigations?window={24h|7d|all}&limit={1-200} Returns summary counts (total / active / resolved / unknown), current_probe_health for the 5 known probes, and per-event items (newest first, capped by limit). Each item carries: * wake metadata (probe / category / severity / title / detail / envelope_enabled / envelope_fix_name) * caller_session_id (the join key, surfaced for debugging) * investigation: { tool_calls: [{tool_name, duration, status, exc_type?}], total_duration_ms, any_errored, call_count } | null when no reasoning rows joined (engine_unavailable etc.) * current_probe_health + resolution_status Resolution semantics simplified for v1 to "currently healthy → resolved / currently unhealthy → active." A per-probe observation timeline doesn't exist in the v1 substrate (only current state), and "is this one still firing?" is the operator's actual question. Frontend ======== * web/src/pages/ProbeInvestigationsPage.tsx — new top-level page; usePanelView("ProbeInvestigationsPage") on mount * api.getProbeInvestigations() + ProbeInvestigationsResponse / ProbeInvestigationItem / ProbeReasoningToolCall / ProbeResolutionStatus TS types in web/src/lib/api.ts * /probe-investigations route + sidebar nav entry. Placed after /heartbeat in the nav so the operator-flow is "Heartbeat (raw probe state) → Probe Investigations (what Kora did about an unhealthy probe)." * Window tabs (24h / 7d / All) reload on click * Per-card severity colour (critical=destructive, warning=yellow, info=outline) mirrors the wake_consumer's _SEVERITY_EMOJI mapping * Per-card resolution badge (Resolved=success / Active=warning / Unknown=outline) * Tool calls rendered as compact mono badges with per-call duration; errored calls toned warning Empty state (spec-critical) =========================== Per the spec — "data has only just started flowing (PR #166 merged today); render a calm 'everything's healthy' message when zero wakes, not an empty card list." When total_count==0, the page renders a green-toned EmptyState card with a Sparkles glyph + "No probe wakes in the last 24 hours" headline + reassuring copy explaining that probes haven't escalated anything. Source-pinned by test_empty_state_message_in_page so no one accidentally regresses it to "No data" later. v1 deferred scope (visible via V1NotesBanner) ============================================= Three things spec asked for that we deliberately omit, surfaced to the operator inline so the roadmap is visible: * Per-call cost_usd / model_used — not durably recorded; aggregate per-route cost lives at /cost-telemetry under route=probe_investigation. Follow-on KR-PROBE-INVESTIGATION-COST-XREF could add per-call records. * DM-sent confirmation — probe DMs go through wake_consumer._send_operator_dm which calls client.post_dm() DIRECTLY, bypassing SlackDMHandler._append_outbound_log_entry. The outbound JSONL has no entry to join, so we can't truthfully say "DM sent at T+N" in v1. Follow-on KR-PROBE-DM-JSONL-WIRE. * Per-investigation summary text / model_used — the engine's response text is sent to Slack only, not recorded. The V1NotesBanner surfaces these to the operator so the roadmap is visible. Pinned by test_v1_notes_banner_rendered. STOP-ASK conditions resolved inline =================================== Per spec §4 license to simplify v1: * "_append_outbound_log_entry doesn't carry caller_session_id" → Reality is stronger: probe DMs aren't in slack_dm_log.jsonl AT ALL. Omitting dm_sent from response rather than fabricating; flagged in v1_notes for follow-on. * "caller_session_id pattern differs" → grepped + verified "probe:{probe}:{category}" matches engine literal at anthropic_engine.py:1289. Pinned by drift-guard test. * "Resolution semantics require probe-observation timeline" → simplified to current health (matches spec's "fine for v1" fallback). Tests (tests/kora_cli/test_probe_investigations_endpoint.py) ============================================================ 26 tests, all passing: Backend (14): * caller_session_id drift guard vs anthropic_engine source * empty audit → calm zero response * window=24h / 7d / all filtering * non-probe caller_session_ids ignored in join * resolution_status parametrized (5 health values) * wake without reasoning → investigation=null * wake with reasoning → investigation populated correctly * limit cap + clamping * tool_calls chronologised within investigation * any_errored flag + exc_type carry-through * SECURITY: response doesn't echo raw tool input/output bodies even if a future writer adds them FE source-pins (8): * api.getProbeInvestigations wrapper * ProbeInvestigationsResponse / Item / ToolCall types * Discriminated investigation field * Page exists + usePanelView wired * Route + nav entry registered * Empty state copy committed (regression guard) * V1NotesBanner rendered Verification ============ * 26/26 tests pass * tsc -b clean * vite build clean * Screenshots rendered at web/docs/probe-investigations-viewer/ (populated.png + empty.png + preview.html sources) Refs: * rafe-walker/kora-docs 17_cc_bucket_prompts/KR-FE-PROBE-INVESTIGATION-VIEWER_wake_reason_dm_xref.md * PR #163 — probe.wake_requested wake_emitter * PR #166 — probe wake consumer + caller_session_id wiring * PR #159 — usePanelView instrumentation pattern * PR #164 — CostTelemetryPage (cross-link target for cost xref) Co-Authored-By: Claude Opus 4.7 (1M context) --- kora_cli/web_server.py | 250 +++++++ .../test_probe_investigations_endpoint.py | 706 ++++++++++++++++++ .../probe-investigations-viewer/empty.html | 115 +++ .../probe-investigations-viewer/empty.png | Bin 0 -> 68194 bytes .../probe-investigations-viewer/populated.png | Bin 0 -> 128538 bytes .../probe-investigations-viewer/preview.html | 229 ++++++ web/src/App.tsx | 14 + web/src/lib/api.ts | 74 ++ web/src/pages/ProbeInvestigationsPage.tsx | 463 ++++++++++++ 9 files changed, 1851 insertions(+) create mode 100644 tests/kora_cli/test_probe_investigations_endpoint.py create mode 100644 web/docs/probe-investigations-viewer/empty.html create mode 100644 web/docs/probe-investigations-viewer/empty.png create mode 100644 web/docs/probe-investigations-viewer/populated.png create mode 100644 web/docs/probe-investigations-viewer/preview.html create mode 100644 web/src/pages/ProbeInvestigationsPage.tsx diff --git a/kora_cli/web_server.py b/kora_cli/web_server.py index a4119976bc374..753d96c59ef77 100644 --- a/kora_cli/web_server.py +++ b/kora_cli/web_server.py @@ -6277,6 +6277,256 @@ async def test_phrasebook_match(payload: Dict[str, Any]) -> Dict[str, Any]: } +# --------------------------------------------------------------------------- +# Probe investigations xref — KR-FE-PROBE-INVESTIGATION-VIEWER +# --------------------------------------------------------------------------- +# +# Reads three sources + joins them per wake event: +# +# 1. probe.wake_requested audit rows (PR #163 emitter) +# 2. reasoning.tool_called audit rows where caller_session_id == +# "probe:{probe}:{category}" (PR #166 wired this caller_session +# shape via _derive_caller_session_id, source="probe_investigation") +# 3. snapshot.service_health[probe] (current probe health → drives +# resolution_status) +# +# v1 SCOPE NOTES (documented in PR description; flagged for follow-on): +# +# * Probe DMs are NOT written to slack_dm_log.jsonl (wake_consumer +# calls client.post_dm directly without the +# SlackDMHandler._append_outbound_log_entry path). The response +# does NOT include dm_sent confirmation; KR-PROBE-DM-JSONL-WIRE +# follow-on can flip this to "DM sent at ". +# +# * Per-call cost_usd / model_used are not durably recorded per +# reasoning call — only aggregated per-route in CostTelemetry. +# For per-investigation cost, operator reads /cost-telemetry +# route=probe_investigation. KR-PROBE-INVESTIGATION-COST-XREF +# follow-on could add per-call records. +# +# * Resolution semantics simplified to "snapshot.service_health +# right now" rather than "probe healthy AND post-dating wake." +# A per-probe observation timeline doesn't exist in v1 substrate +# (only current state). Stale (>24h, no recent obs) reduces to +# "current health=unknown" naturally. Sufficient for "is this +# one still firing?" — the operator's actual question. + +import re as _probe_xref_re +from datetime import datetime as _probe_xref_datetime +from datetime import timedelta as _probe_xref_timedelta +from datetime import timezone as _probe_xref_timezone + +_PROBE_INVESTIGATION_VIEWER_WINDOWS = { + "24h": _probe_xref_timedelta(hours=24), + "7d": _probe_xref_timedelta(days=7), + "all": None, +} + +_PROBE_CALLER_SESSION_RE = _probe_xref_re.compile( + r"^probe:([a-zA-Z0-9_-]+):([a-zA-Z0-9_-]+)$" +) + + +def _probe_caller_session_id(probe: str, category: str) -> str: + """Mirror anthropic_engine._derive_caller_session_id's + probe_investigation shape so the join is keyed on a literal + that both sides agree on. Drift-guarded by + test_caller_session_id_matches_reasoning_engine.""" + return f"probe:{probe}:{category}" + + +def _project_reasoning_call(entry: "AuditEntry") -> Dict[str, Any]: + """Project a reasoning.tool_called audit row to FE shape. + + Only the names + numeric/status fields the writer actually emits + (anthropic_engine._emit_tool_called_audit). NEVER includes tool + input/output bodies — those aren't in the audit details and must + never leak through this endpoint even if a future writer adds + them.""" + d = entry.details + out: Dict[str, Any] = { + "tool_name": str(d.get("tool_name", "")), + "triggered_by": str(d.get("triggered_by", "")), + "tool_duration_ms": int(d.get("tool_duration_ms", 0) or 0), + "tool_status": str(d.get("tool_status", "")), + "emitted_at": entry.emitted_at.strftime("%Y-%m-%dT%H:%M:%SZ"), + } + exc_type = d.get("exc_type") + if exc_type: + out["exc_type"] = str(exc_type) + return out + + +def _resolution_status_from_health(current_health: str) -> str: + """Map current snapshot health to a resolution-status tag. + + Simplified-v1 semantics: "currently healthy" → resolved (the + issue is no longer being observed); "currently unhealthy" or + "degraded" → active; "unknown" → unknown. + """ + if current_health == "healthy": + return "resolved" + if current_health in ("unhealthy", "degraded"): + return "active" + return "unknown" + + +@app.get("/api/probe-investigations") +async def get_probe_investigations( + window: str = "24h", + limit: int = 50, +) -> Dict[str, Any]: + """Probe wake → investigation xref panel feed. + + Joins three sources per wake event: + * probe.wake_requested audit rows + * reasoning.tool_called audit rows (caller_session_id == + "probe:{probe}:{category}" — pinned by drift-guard test) + * snapshot.service_health[probe] (current health → resolution) + + Args: + window: ``24h`` | ``7d`` | ``all``. Bounds wake events read. + limit: cap on items returned (defensive against unbounded + growth). 1-200; default 50. + + Returns: summary counts + per-event items ordered newest-first. + + v1 deferred: per-call cost / model_used / DM-sent confirmation + aren't durably recorded in current substrate (see PR + description). The response omits these fields rather than + fabricating zeros. + """ + from kora_cli.audit.jsonl_reader import read_audit_entries + from kora_cli.snapshot import read_snapshot + + if window not in _PROBE_INVESTIGATION_VIEWER_WINDOWS: + window = "24h" + delta = _PROBE_INVESTIGATION_VIEWER_WINDOWS[window] + + capped_limit = max(1, min(int(limit or 50), 200)) + now = _probe_xref_datetime.now(_probe_xref_timezone.utc) + since = now - delta if delta is not None else None + + wake_rows = read_audit_entries( + seam="probe.wake_requested", since=since + ) + # All reasoning.tool_called rows in the SAME window — we index + # by caller_session_id below to associate each wake with its + # investigation tool-calls. Reading without a per-wake filter + # would scale O(wakes * file-size); a single read + dict + # bucketing is O(file-size) total. + reasoning_rows = read_audit_entries( + seam="reasoning.tool_called", since=since + ) + snap = read_snapshot() or {} + service_health = ( + (snap.get("service_health") or {}) + if isinstance(snap, dict) + else {} + ) + + tool_calls_by_session: Dict[str, list] = {} + for entry in reasoning_rows: + sid = entry.caller_session_id or "" + if not _PROBE_CALLER_SESSION_RE.match(sid): + continue + tool_calls_by_session.setdefault(sid, []).append(entry) + + items: list = [] + for entry in wake_rows[:capped_limit]: + d = entry.details + probe = str(d.get("probe") or "unknown") + category = str(d.get("category") or "unknown") + severity = str(d.get("severity") or "warning") + session_id = _probe_caller_session_id(probe, category) + wake_iso = entry.emitted_at.strftime("%Y-%m-%dT%H:%M:%SZ") + + related_calls = tool_calls_by_session.get(session_id, []) + # Tool-calls audit rows are SAVED newest-first by the + # reader; chronologise within the investigation so the FE + # can show "tool_a → tool_b → tool_c" left-to-right. + related_calls_chrono = sorted( + related_calls, key=lambda e: e.emitted_at + ) + # Only count calls AFTER the wake event (defensive against + # session-id reuse if a later investigation reuses the same + # probe:category key — the wake event marks the start). + post_wake_calls = [ + c for c in related_calls_chrono + if c.emitted_at >= entry.emitted_at + ] + if post_wake_calls: + total_duration_ms = sum( + int(c.details.get("tool_duration_ms", 0) or 0) + for c in post_wake_calls + ) + any_errored = any( + str(c.details.get("tool_status", "")).lower() + not in ("ok", "success", "") + or bool(c.details.get("exc_type")) + for c in post_wake_calls + ) + investigation: Optional[Dict[str, Any]] = { + "tool_calls": [ + _project_reasoning_call(c) for c in post_wake_calls + ], + "total_duration_ms": total_duration_ms, + "any_errored": any_errored, + "call_count": len(post_wake_calls), + } + else: + investigation = None + + current_health = str(service_health.get(probe, "unknown")) + items.append({ + "wake_event_id": f"{wake_iso}:{probe}:{category}", + "wake_timestamp": wake_iso, + "probe_name": probe, + "issue_category": category, + "severity": severity, + "title": str(d.get("title") or ""), + "detail": str(d.get("detail") or ""), + "envelope_enabled": bool(d.get("envelope_enabled", False)), + "envelope_fix_name": str(d.get("envelope_fix_name") or "(none)"), + "caller_session_id": session_id, + "investigation": investigation, + "current_probe_health": current_health, + "resolution_status": _resolution_status_from_health(current_health), + }) + + total_count = len(items) + active_count = sum(1 for it in items if it["resolution_status"] == "active") + resolved_count = sum( + 1 for it in items if it["resolution_status"] == "resolved" + ) + unknown_count = total_count - active_count - resolved_count + + return { + "window": window, + "since": since.strftime("%Y-%m-%dT%H:%M:%SZ") if since else None, + "generated_at": now.strftime("%Y-%m-%dT%H:%M:%SZ"), + "total_count": total_count, + "active_count": active_count, + "resolved_count": resolved_count, + "unknown_count": unknown_count, + "current_probe_health": { + name: str(service_health.get(name, "unknown")) + for name in ("vercel", "sentry", "doppler", "supabase", "fly") + }, + "items": items, + "v1_notes": { + "per_call_cost_usd": ( + "not durably recorded; see /api/cost_telemetry " + "route=probe_investigation for aggregate" + ), + "dm_sent_confirmation": ( + "probe DMs bypass slack_dm_log.jsonl in v1; " + "follow-on KR-PROBE-DM-JSONL-WIRE" + ), + }, + } + + # --------------------------------------------------------------------------- # Profile management endpoints (minimal — list/create/rename/delete + SOUL.md) # --------------------------------------------------------------------------- diff --git a/tests/kora_cli/test_probe_investigations_endpoint.py b/tests/kora_cli/test_probe_investigations_endpoint.py new file mode 100644 index 0000000000000..3ed8157d895d4 --- /dev/null +++ b/tests/kora_cli/test_probe_investigations_endpoint.py @@ -0,0 +1,706 @@ +"""Source-pin + integration tests for KR-FE-PROBE-INVESTIGATION-VIEWER. + +Backend endpoint /api/probe-investigations joins three sources: + + 1. probe.wake_requested audit rows (PR #163 wake_emitter) + 2. reasoning.tool_called audit rows where caller_session_id == + "probe:{probe}:{category}" (PR #166 wired this caller_session + shape via _derive_caller_session_id in anthropic_engine.py) + 3. snapshot.service_health[probe] (current health → resolution) + +Tests: + + Backend + 1. caller_session_id pattern drift guard — endpoint's join key + must match anthropic_engine._derive_caller_session_id exactly + 2. empty audit log → calm empty response (zero counts) + 3. window=24h filters out older wakes + 4. window=all returns everything + 5. window=7d works + 6. caller_session_id non-probe pattern ignored in join + 7. resolution_status maps health correctly + 8. wake without follow-on reasoning → investigation=null + 9. wake WITH follow-on reasoning → investigation populated + 10. limit cap obeyed (and clamped to 1-200) + 11. tool_calls chronologised (older first within investigation) + 12. errored tool calls flagged via any_errored + 13. exc_type carried through when present + 14. SECURITY: response does NOT echo raw tool input/output bodies + + FE source-pins + 15. api.getProbeInvestigations wrapper exists + 16. ProbeInvestigationsResponse type declared + 17. ProbeInvestigationItem fields declared (caller_session_id, etc) + 18. Page file exists + uses usePanelView + 19. Route registered in App.tsx + 20. Nav entry present + 21. Empty state rendered (calm message) + 22. v1_notes banner rendered (so deferred scope is visible) +""" + +from __future__ import annotations + +import json +import re +from datetime import datetime, timedelta, timezone +from pathlib import Path + +import pytest + + +_REPO_ROOT = Path(__file__).resolve().parents[2] +_API_TS = _REPO_ROOT / "web" / "src" / "lib" / "api.ts" +_APP_TSX = _REPO_ROOT / "web" / "src" / "App.tsx" +_PAGE = _REPO_ROOT / "web" / "src" / "pages" / "ProbeInvestigationsPage.tsx" +_WEB_SERVER = _REPO_ROOT / "kora_cli" / "web_server.py" +_ANTHROPIC_ENGINE = ( + _REPO_ROOT / "kora_cli" / "reasoning" / "anthropic_engine.py" +) + + +# --------------------------------------------------------------------------- +# Fixture: isolated KORA_HOME + fresh audit JSONL +# --------------------------------------------------------------------------- + + +@pytest.fixture +def env(tmp_path, monkeypatch): + """Isolated KORA_HOME with the same 3-namespace monkeypatch the + other panel tests use (see tests/kora_cli/_panel_test_helpers.py + for the lesson-learned context; we duplicate inline here so the + test stays readable on its own).""" + monkeypatch.setenv("HERMES_HOME", str(tmp_path)) + monkeypatch.setenv("KORA_HOME", str(tmp_path)) + monkeypatch.setattr("kora_constants.get_kora_home", lambda: tmp_path) + monkeypatch.setattr("kora_cli.config.get_kora_home", lambda: tmp_path) + monkeypatch.setattr("kora_cli.web_server.get_kora_home", lambda: tmp_path) + return tmp_path + + +def _write_audit_jsonl(env_dir: Path, entries: list[dict]) -> None: + log_path = env_dir / "kora_audit_log.jsonl" + with log_path.open("w", encoding="utf-8") as f: + for e in entries: + f.write(json.dumps(e, default=str) + "\n") + + +def _write_snapshot(env_dir: Path, payload: dict) -> None: + """Write a snapshot file. Adds a fresh ``computed_at`` if + missing — without it, ``is_snapshot_fresh`` returns False and + ``read_snapshot()`` returns None, which silently breaks the + service_health pickup.""" + if "computed_at" not in payload: + payload = { + **payload, + "computed_at": datetime.now(timezone.utc).isoformat(), + } + snap_dir = env_dir / "cache" + snap_dir.mkdir(parents=True, exist_ok=True) + (snap_dir / "daemon_snapshot.json").write_text( + json.dumps(payload, default=str) + ) + + +def _wake_entry( + probe: str, + category: str, + severity: str, + title: str, + detail: str, + emitted_at: datetime, + envelope_enabled: bool = False, + envelope_fix_name: str = "(none)", +) -> dict: + return { + "emitted_at": emitted_at.isoformat(), + "seam": "probe.wake_requested", + "details": { + "probe": probe, + "severity": severity, + "category": category, + "title": title, + "detail": detail, + "snapshot_details": {}, + "envelope_enabled": envelope_enabled, + "envelope_fix_name": envelope_fix_name, + }, + "source": None, + "caller_session_id": None, + } + + +def _reasoning_entry( + *, + tool_name: str, + caller_session_id: str, + emitted_at: datetime, + tool_duration_ms: int = 50, + tool_status: str = "ok", + exc_type: str | None = None, +) -> dict: + details: dict = { + "tool_name": tool_name, + "triggered_by": "reasoning", + "tool_duration_ms": tool_duration_ms, + "tool_status": tool_status, + } + if exc_type is not None: + details["exc_type"] = exc_type + return { + "emitted_at": emitted_at.isoformat(), + "seam": "reasoning.tool_called", + "details": details, + "source": "reasoning", + "caller_session_id": caller_session_id, + } + + +async def _call_endpoint( + env_dir: Path, window: str = "24h", limit: int = 50 +) -> dict: + """Call the endpoint as a coroutine, bypassing the auth + middleware (which would 401 in a TestClient). Mirrors the + pattern in tests/kora_cli/test_phrasebook_endpoints.py.""" + from kora_cli import web_server + + return await web_server.get_probe_investigations( + window=window, limit=limit + ) + + +# --------------------------------------------------------------------------- +# 1. caller_session_id pattern drift guard +# --------------------------------------------------------------------------- + + +def test_caller_session_id_matches_reasoning_engine(): + """The endpoint joins reasoning.tool_called rows on + caller_session_id == "probe:{probe}:{category}". That literal + MUST match what anthropic_engine._derive_caller_session_id + builds when message.source == "probe_investigation". Drift here + silently breaks the panel (no rows joined; investigation + always null). + + Source-of-truth: anthropic_engine.py:_derive_caller_session_id, + probe_investigation branch (lines 1283-1289 at last K-DG).""" + engine_src = _ANTHROPIC_ENGINE.read_text() + # The engine builds f"probe:{probe}:{category}" — pin both the + # f-string shape AND the metadata keys it pulls. + assert re.search( + r'return f"probe:\{probe\}:\{category\}"', engine_src + ), "anthropic_engine._derive_caller_session_id probe shape changed" + assert "probe_name" in engine_src and "issue_category" in engine_src + # Endpoint side uses the same shape. + ep_src = _WEB_SERVER.read_text() + assert 'f"probe:{probe}:{category}"' in ep_src, ( + "endpoint join key drifted from engine" + ) + # And the regex pre-filter in the endpoint matches probe: prefix. + assert "_PROBE_CALLER_SESSION_RE" in ep_src + assert r'r"^probe:([a-zA-Z0-9_-]+):([a-zA-Z0-9_-]+)$"' in ep_src + + +# --------------------------------------------------------------------------- +# 2-5. Empty / window-filter behavior +# --------------------------------------------------------------------------- + + +@pytest.mark.asyncio +async def test_empty_audit_log_returns_calm_zero_response(env): + """Empty state matters — PR #166 just landed, most envs see + zero wakes for a while. Response must succeed + return zero + counts + empty items (not error / 404 / null).""" + _write_snapshot(env, {"service_health": {}}) + body = await _call_endpoint(env) + assert body["total_count"] == 0 + assert body["items"] == [] + assert body["active_count"] == 0 + assert body["resolved_count"] == 0 + assert body["window"] == "24h" + + +@pytest.mark.asyncio +async def test_window_24h_filters_older_wakes(env): + now = datetime.now(timezone.utc) + _write_audit_jsonl( + env, + [ + _wake_entry( + "fly", "unhealthy", "critical", "in", "in window", + now - timedelta(hours=2), + ), + _wake_entry( + "fly", "unhealthy", "critical", "out", "out of window", + now - timedelta(days=3), + ), + ], + ) + _write_snapshot(env, {"service_health": {"fly": "unhealthy"}}) + body = await _call_endpoint(env, window="24h") + assert body["total_count"] == 1 + assert body["items"][0]["title"] == "in" + + +@pytest.mark.asyncio +async def test_window_all_returns_everything(env): + now = datetime.now(timezone.utc) + _write_audit_jsonl( + env, + [ + _wake_entry( + "fly", "unhealthy", "critical", "recent", "x", + now - timedelta(hours=1), + ), + _wake_entry( + "fly", "unhealthy", "critical", "ancient", "x", + now - timedelta(days=30), + ), + ], + ) + _write_snapshot(env, {"service_health": {"fly": "unhealthy"}}) + body = await _call_endpoint(env, window="all") + assert body["total_count"] == 2 + assert body["since"] is None + + +@pytest.mark.asyncio +async def test_window_7d_works(env): + now = datetime.now(timezone.utc) + _write_audit_jsonl( + env, + [ + _wake_entry( + "fly", "unhealthy", "critical", "5d", "x", + now - timedelta(days=5), + ), + _wake_entry( + "fly", "unhealthy", "critical", "8d", "x", + now - timedelta(days=8), + ), + ], + ) + _write_snapshot(env, {"service_health": {}}) + body = await _call_endpoint(env, window="7d") + assert body["total_count"] == 1 + + +# --------------------------------------------------------------------------- +# 6. Non-probe caller_session_id is ignored in the join +# --------------------------------------------------------------------------- + + +@pytest.mark.asyncio +async def test_non_probe_caller_session_ids_ignored(env): + """Other reasoning calls (slack_dm, email, mcp) write + reasoning.tool_called rows with different caller_session_id + shapes ("C123:1700.0", "email:msg-id", etc). The endpoint's + pre-filter must drop those even though they're the same seam. + """ + now = datetime.now(timezone.utc) + _write_audit_jsonl( + env, + [ + _wake_entry( + "fly", "unhealthy", "critical", "t", "d", + now - timedelta(minutes=10), + ), + # Slack DM reasoning call — must NOT be joined. + _reasoning_entry( + tool_name="snapshot_read", + caller_session_id="C12345:1716489000.0", + emitted_at=now - timedelta(minutes=8), + ), + # Email reasoning call. + _reasoning_entry( + tool_name="snapshot_read", + caller_session_id="email:abc-123@purelymail", + emitted_at=now - timedelta(minutes=7), + ), + ], + ) + _write_snapshot(env, {"service_health": {"fly": "unhealthy"}}) + body = await _call_endpoint(env) + assert body["total_count"] == 1 + # Investigation should be null because no probe:* keyed + # reasoning rows were present. + assert body["items"][0]["investigation"] is None + + +# --------------------------------------------------------------------------- +# 7. resolution_status maps health correctly +# --------------------------------------------------------------------------- + + +@pytest.mark.parametrize( + "current_health,expected_status", + [ + ("healthy", "resolved"), + ("unhealthy", "active"), + ("degraded", "active"), + ("unknown", "unknown"), + ("", "unknown"), + ], +) +@pytest.mark.asyncio +async def test_resolution_status_maps_from_current_health( + env, current_health, expected_status +): + now = datetime.now(timezone.utc) + _write_audit_jsonl( + env, + [ + _wake_entry( + "fly", "unhealthy", "critical", "t", "d", + now - timedelta(minutes=10), + ), + ], + ) + _write_snapshot(env, {"service_health": {"fly": current_health}}) + body = await _call_endpoint(env) + assert body["items"][0]["resolution_status"] == expected_status + assert body["items"][0]["current_probe_health"] == current_health + + +# --------------------------------------------------------------------------- +# 8. Wake without follow-on reasoning → investigation=null +# --------------------------------------------------------------------------- + + +@pytest.mark.asyncio +async def test_wake_without_reasoning_keeps_investigation_null(env): + """An engine_unavailable / cost_ladder_halted fallback can + leave a wake with zero reasoning.tool_called rows — the panel + must still surface the wake (the operator needs to know it + fired) but show investigation=null so the FE can render + "no calls recorded" without crashing on missing fields.""" + now = datetime.now(timezone.utc) + _write_audit_jsonl( + env, + [ + _wake_entry( + "doppler", "rotation_overdue", "warning", "t", "d", + now - timedelta(minutes=5), + ), + ], + ) + _write_snapshot(env, {"service_health": {"doppler": "degraded"}}) + body = await _call_endpoint(env) + assert body["items"][0]["investigation"] is None + + +# --------------------------------------------------------------------------- +# 9. Wake with follow-on reasoning → investigation populated +# --------------------------------------------------------------------------- + + +@pytest.mark.asyncio +async def test_wake_with_reasoning_joins_correctly(env): + now = datetime.now(timezone.utc) + wake_ts = now - timedelta(minutes=15) + _write_audit_jsonl( + env, + [ + _wake_entry( + "fly", "unhealthy", "critical", "t", "d", wake_ts, + envelope_enabled=True, + envelope_fix_name="rotate_fly_token", + ), + _reasoning_entry( + tool_name="snapshot_read", + caller_session_id="probe:fly:unhealthy", + emitted_at=wake_ts + timedelta(seconds=2), + tool_duration_ms=80, + ), + _reasoning_entry( + tool_name="run_runbook", + caller_session_id="probe:fly:unhealthy", + emitted_at=wake_ts + timedelta(seconds=5), + tool_duration_ms=210, + ), + ], + ) + _write_snapshot(env, {"service_health": {"fly": "healthy"}}) + body = await _call_endpoint(env) + item = body["items"][0] + assert item["caller_session_id"] == "probe:fly:unhealthy" + inv = item["investigation"] + assert inv is not None + assert inv["call_count"] == 2 + assert inv["total_duration_ms"] == 290 + assert inv["any_errored"] is False + # Resolution status: probe is healthy now → resolved. + assert item["resolution_status"] == "resolved" + # Envelope info echoed. + assert item["envelope_enabled"] is True + assert item["envelope_fix_name"] == "rotate_fly_token" + + +# --------------------------------------------------------------------------- +# 10. limit cap obeyed +# --------------------------------------------------------------------------- + + +@pytest.mark.asyncio +async def test_limit_caps_items(env): + now = datetime.now(timezone.utc) + entries = [ + _wake_entry( + "fly", "unhealthy", "critical", f"t{i}", "d", + now - timedelta(minutes=i), + ) + for i in range(60) + ] + _write_audit_jsonl(env, entries) + _write_snapshot(env, {"service_health": {"fly": "unhealthy"}}) + body = await _call_endpoint(env, limit=10) + assert body["total_count"] == 10 + # Newest-first ordering pinned by the reader; the first wake + # was 0 minutes ago, the last 59 minutes ago. limit=10 → 10 + # most recent. + assert body["items"][0]["title"] == "t0" + + +@pytest.mark.asyncio +async def test_limit_clamped_to_max(env): + """limit > 200 clamps to 200 (defensive against unbounded + response sizes).""" + _write_snapshot(env, {"service_health": {}}) + body = await _call_endpoint(env, limit=5000) + assert body["total_count"] == 0 # no entries; just verifies no crash. + + +# --------------------------------------------------------------------------- +# 11. tool_calls chronologised within an investigation +# --------------------------------------------------------------------------- + + +@pytest.mark.asyncio +async def test_tool_calls_chronologised(env): + """The reader returns audit rows newest-first across all rows; + within a single investigation the FE wants oldest-first so the + operator can read "snapshot → diagnose → fix" left-to-right.""" + now = datetime.now(timezone.utc) + wake_ts = now - timedelta(minutes=10) + _write_audit_jsonl( + env, + [ + _wake_entry( + "fly", "unhealthy", "critical", "t", "d", wake_ts, + ), + _reasoning_entry( + tool_name="third", + caller_session_id="probe:fly:unhealthy", + emitted_at=wake_ts + timedelta(seconds=30), + ), + _reasoning_entry( + tool_name="first", + caller_session_id="probe:fly:unhealthy", + emitted_at=wake_ts + timedelta(seconds=10), + ), + _reasoning_entry( + tool_name="second", + caller_session_id="probe:fly:unhealthy", + emitted_at=wake_ts + timedelta(seconds=20), + ), + ], + ) + _write_snapshot(env, {"service_health": {"fly": "unhealthy"}}) + body = await _call_endpoint(env) + tool_names = [ + c["tool_name"] for c in body["items"][0]["investigation"]["tool_calls"] + ] + assert tool_names == ["first", "second", "third"] + + +# --------------------------------------------------------------------------- +# 12-13. Errored tool calls flagged + exc_type carried +# --------------------------------------------------------------------------- + + +@pytest.mark.asyncio +async def test_any_errored_flag_set_when_tool_failed(env): + now = datetime.now(timezone.utc) + wake_ts = now - timedelta(minutes=5) + _write_audit_jsonl( + env, + [ + _wake_entry( + "fly", "unhealthy", "critical", "t", "d", wake_ts, + ), + _reasoning_entry( + tool_name="snapshot_read", + caller_session_id="probe:fly:unhealthy", + emitted_at=wake_ts + timedelta(seconds=1), + tool_status="ok", + ), + _reasoning_entry( + tool_name="run_runbook", + caller_session_id="probe:fly:unhealthy", + emitted_at=wake_ts + timedelta(seconds=3), + tool_status="error", + exc_type="HTTPError", + ), + ], + ) + _write_snapshot(env, {"service_health": {"fly": "unhealthy"}}) + body = await _call_endpoint(env) + inv = body["items"][0]["investigation"] + assert inv["any_errored"] is True + second = inv["tool_calls"][1] + assert second["exc_type"] == "HTTPError" + assert second["tool_status"] == "error" + + +# --------------------------------------------------------------------------- +# 14. SECURITY — response shape doesn't include tool input/output bodies +# --------------------------------------------------------------------------- + + +@pytest.mark.asyncio +async def test_response_does_not_leak_raw_tool_bodies(env): + """Defense-in-depth: even though the writer (anthropic_engine. + _emit_tool_called_audit) deliberately omits input/output bodies + from the audit details dict, a future writer might add a + 'result' or 'arguments' field carelessly. This endpoint + projects only the field names it expects so any future leak + is contained. + + Test: inject a tool_called row with a hostile 'result' field; + verify it doesn't appear in the response.""" + now = datetime.now(timezone.utc) + wake_ts = now - timedelta(minutes=2) + leak_payload = "SECRET_DOPPLER_TOKEN_xoxb-leak-12345" + _write_audit_jsonl( + env, + [ + _wake_entry( + "fly", "unhealthy", "critical", "t", "d", wake_ts, + ), + { + "emitted_at": ( + wake_ts + timedelta(seconds=1) + ).isoformat(), + "seam": "reasoning.tool_called", + "details": { + "tool_name": "snapshot_read", + "triggered_by": "reasoning", + "tool_duration_ms": 10, + "tool_status": "ok", + # Future-writer leak vector — must NOT appear + # in the projected response. + "result": leak_payload, + "arguments": {"hostile": leak_payload}, + }, + "source": "reasoning", + "caller_session_id": "probe:fly:unhealthy", + }, + ], + ) + _write_snapshot(env, {"service_health": {"fly": "unhealthy"}}) + body = await _call_endpoint(env) + serialized = json.dumps(body) + assert leak_payload not in serialized, ( + "endpoint projection regression — raw audit details leaked" + ) + + +# --------------------------------------------------------------------------- +# 15-17. FE source-pins: api wrapper + types +# --------------------------------------------------------------------------- + + +def test_api_wrapper_exists(): + src = _API_TS.read_text() + assert "getProbeInvestigations" in src + assert "/api/probe-investigations" in src + + +def test_response_type_declared(): + src = _API_TS.read_text() + assert "ProbeInvestigationsResponse" in src + assert "ProbeInvestigationItem" in src + assert "ProbeReasoningToolCall" in src + # ProbeResolutionStatus union — pinned values match backend. + assert ( + 'export type ProbeResolutionStatus = "resolved" | "active" | "unknown"' + in src + ) + + +def test_item_fields_declared(): + src = _API_TS.read_text() + # The fields the FE renders. If any are renamed in the backend + # without updating the type, the page render breaks silently. + for field in ( + "wake_event_id", + "wake_timestamp", + "probe_name", + "issue_category", + "severity", + "caller_session_id", + "investigation", + "current_probe_health", + "resolution_status", + "envelope_enabled", + "envelope_fix_name", + ): + assert field in src, f"missing field in TS type: {field}" + + +# --------------------------------------------------------------------------- +# 18-20. Page + route + nav pins +# --------------------------------------------------------------------------- + + +def test_page_exists_and_uses_panel_view(): + assert _PAGE.is_file() + src = _PAGE.read_text() + assert 'usePanelView("ProbeInvestigationsPage")' in src + + +def test_route_registered(): + src = _APP_TSX.read_text() + assert "/probe-investigations" in src + assert "ProbeInvestigationsPage" in src + + +def test_nav_entry_present(): + src = _APP_TSX.read_text() + # Nav entry uses the i18n labelKey + a display label. The + # `/probe-investigations` literal must appear in a NavItem + # entry, not just the routes dict. + nav_block = re.search( + r'path:\s*"/probe-investigations"[^}]+labelKey:\s*"probeInvestigations"', + src, + re.DOTALL, + ) + assert nav_block, "nav entry for /probe-investigations missing" + + +# --------------------------------------------------------------------------- +# 21-22. Empty state + v1_notes banner rendered +# --------------------------------------------------------------------------- + + +def test_empty_state_message_in_page(): + """The spec calls out empty-state as critical — "calm + everything's-healthy message, not an empty card list." The + page must declare a dedicated empty-state component with + reassuring copy, not just an empty
.""" + src = _PAGE.read_text() + assert "EmptyState" in src + # Both "everything's healthy" and "No probe wakes" must appear + # so the reassurance copy is committed (regression guard + # against someone later replacing it with "No data"). + assert "Everything's healthy" in src + assert "No probe wakes" in src + + +def test_v1_notes_banner_rendered(): + """Deferred v1 scope (per-call cost, DM-sent confirmation) + must be SURFACED to the operator, not hidden — so the roadmap + is visible and no one assumes it'll never come. The v1_notes + banner is the place.""" + src = _PAGE.read_text() + assert "V1NotesBanner" in src + assert "v1_notes" in src diff --git a/web/docs/probe-investigations-viewer/empty.html b/web/docs/probe-investigations-viewer/empty.html new file mode 100644 index 0000000000000..34a094e0c939d --- /dev/null +++ b/web/docs/probe-investigations-viewer/empty.html @@ -0,0 +1,115 @@ + + + + + + Kora — ProbeInvestigationsPage empty state + + + + + +
+

Probe Investigations

+
+
+ + + +
+ +
+
+

+ Heartbeat-probe wake events joined with the reasoning calls Kora made to + investigate them and current probe health for resolution status. Joined on + caller_session_id="probe:{probe}:{category}" + (set by _derive_caller_session_id in + the reasoning engine). +

+ + +
+
+ 0 wakes + generated 2026-05-23 16:32:08 +
+
+ Probe health right now: + vercel: healthy + sentry: healthy + doppler: healthy + supabase: healthy + fly: healthy +
+
+ + +
+
+ +
+ v1 scope: + this panel joins audit rows + snapshot health. Per-call cost and DM-sent + confirmation aren't yet recorded — + not durably recorded; see /api/cost_telemetry route=probe_investigation for aggregate; + probe DMs bypass slack_dm_log.jsonl in v1; follow-on KR-PROBE-DM-JSONL-WIRE. +
+
+
+ + +
+
+
+
No probe wakes in the last 24 hours.
+
+ Everything's healthy — none of the heartbeat probes have escalated an + issue worth Kora investigating. This page will populate when probes + detect something that needs attention. +
+
+
+ + + diff --git a/web/docs/probe-investigations-viewer/empty.png b/web/docs/probe-investigations-viewer/empty.png new file mode 100644 index 0000000000000000000000000000000000000000..5bf0161bce77b51d940a4cb7e1bf3bf41b1d9c96 GIT binary patch literal 68194 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 z z-A_&xr>}n~b31F-T#T>`KRnN?-iv4nr0>}PG1%~3bf%gAjRml0XBny=d*#qtGOK6L z03U8MK&sbD>@R6qYq!)F`Ih#{krH@(Pp-)BFA7ryZH71@`NxF`n79ppMvG6wpZjZ- z+dD*0P34F#L($9z)7qgI#=Xua`qM=cD?V4xj*+t|nJ)+_%dY=Dz+&SANbJw-*K@YO zW`qLXmo)FL&sX}e4)H51sUgC&ImpuUI)z|GvJBr9MLd(xS@)a30f1KXyltQ@)b$p< zuWPzfG3>m)6GoBtKD*<(9Ok-n>h;1UJF0bauEJ(=a98oN>o$3H*7ndgYw-?{|E3kVqe%Fy3x{U06}Be~4z|SKsqL%6#uI|8VV589sjF|U zPH4i)`|;#Co(%!o(hNgr=BMl=(!au!7LA&px~PTTLsn_JfEoKQwft_?Jt+?fj!OS! zG}?(R6;?nhU%mv}oUdZ2$};Kt<@r0oq%Y&*?fMsj65XoHR1ZwH8B`+QW91wWTf<9- z0Crid=k_DS)#+X);))cJrYJ()(d7v5j)*Jmd=+-SB@n6|#G2-rU)A{2^~zz41u*Mg zeGGg=@qh$_*uY~&&m0v|cH55khsJw1ZbPcUbzXvNW3&p`qM4~{?W&gBRJA6hZxduG zU0$P$wG6*5%#>TK{h|@}6C351lM5?orQJ{C(O1-eoqFo_Ny*1r1pi}e=A@jaPhHjc z>|zBKV-h95xAWY0sn7oBaZikeHCU$b9xUJMc>Fj&J{}J`z1trVpw;NFMNCL&cl(-f za0#u7@oVuH36cr-cruy$984)Zzab)9`4wX#UWWu($PQTUqPH@bz)Yy#)p1E_LX(ZB&d|21TvWy5(xcV_E%4Nz^q% zgp!P#yOK|}jjc_@)Kt?6bA?Pm%Kc-+csMJ(dl*&#(NzsEDtBOX=>haqCGVJ)vZ6Aw zt3TmW^(2ybLottl@T~iZ07g-s-MDt;F$;fV1B=3?c8xW+)2Ys_c>LB_=^dA*h!cA9 zW8qhFB*jrmWBhXDPLkKDZRg;;UnFEI+h6$dScbkKMMV4buY zzY+az#W?b9+4HD#pa3SkE!w5%TSF(;=T3w!26S&zz2mgfrg&w6?(M0YYKVy* zhfbl-qXwk4xswlelu+}pQ55gYI-I^rQv{$8haPa;7?9<1R*p8@Y959TdHAx!7g)eEd|8lZGh4yhh# z&kMl^w4T5&9L#|IEDld_uxE6#x3>qm!g!u1`EMwHzmkdXKO`mGlbVTKLnhpFF}h>q zcXxk!EBVRk9}?6?&lXbPjZb2g3t=SN{ax(k`G!EQvi@@1;6LX69*f?gD`4q=M-46b zv`H$`c#~!P)O$7d_U*l#vxOYDp9?7kuZ&oN%o@Cqdnd_mt}TPTHD&$PbcaP$M*(5 z?xCTfEk)#;|MD|9Pg?vacbYr)^T(e@;HsZMde+zb-qyKY1 z)!|AP4&?~l*3B~=dxrGV`1ooTR@NNz22a7Scek!be>k=J-oU{AGRZ#>b>Z{2%Na2@ zyi{J0Wn%U40UpK^tp2_Mwo*9pUE^YgSMT0(R+_sz>kPAVvFLx2=Br*{EhV`neE#Bv z;T-+zsE#)>v6vVvWMpc*th{4)-!aftcdT?|&R^G)>*Mu$E3n$^P&7C4^X?7MZe1Dn zdhU9|Pdo6xD{V?o{(E7@fd3mGsk`d~zGb!ld6|Vy_0c~|6eD16MD_0P)ps0LIysG2 zm3{f5D;$-a;yGQfdjHLvH(}bp6yATyjm``fuaeWLkB*9QI;f0FF}r)j^73DzK%)45 zwy5Z8s42NXMuo_9z2)5fx;JYN2ymE`XoXoAc#QQA$H^+OL34Yvr%#@SL6v%+Fviy2 zjKx(mwh!G0HOR0yEp8edZ}rK)HAvlitl(?Y1gB{xI^~e zD-7@d`$g2;J`cVg#Ii{Ui7y-# zmHNl9fw1cCIndmi=R!5VM!gQqxDZ+^z~Lk0_`fcvj`g>Fg6WsS&qUOe-|_BSp5p&E zo5+K_vm%>jIhw}tWGlCMPfJ+yOmg{Xf@Y0$*cVeFS& zP-C#~$bTn8^Mk~pR8#y!??q5Dv`hhcskV%}bti%m92~N%H}4^L0Cx*ee`g4q^V~J3 zRE3lT9kE6f!c$tX(9o{$7VCb(-zyS=LgEc!5ka=b>nfYOU-;ksA~aEtt50OKceW|` z<2J4E6qr$M&&~z-(ERSJy<;pmL<)2|7s9>@A-d?UKc1_`!$+Ka$z&Sbk)sZz!uB4Npz5m@*4&Q9N&DhX80G{K%evG!He~+Yv zxM?9(?$Y#Xe23v~3X9#fpARnMUSEe>taRsNt%CbTh&;kT+ixn;Z1B3}6k%n5%d;L0 zo+jf3c!Rq8kTYB~`#$>ylK-#lQFzTLkApg8Sn^z%oBnD-rgakgOgf9m)!cr{V@je5 zE5u6_|0-1jK?;3^No1*sCJ#TYQev7)R`xyD*>8@-p_kzb#YAF z+=UDc0L}3FY;ju4e_@J_tF1se75QU!G;SXLmGeeZMhmm znGP=4G~w(nz>Ip%SZ?+pLd+9|AM?pc>n!id7NZQq2__NpF2Z;g(er8zlrjm$P+)o#ur5zp;QK zsgvJ6vu^U|Myb=bgAzCp1sO|q%S(BPyVU5+%XW*&V$D{iaYa(OG*-HIn<5DslclOw zz30IKJT{|EPy{6e>9NuH&mfe()vFK3Cc0Ne7D)7xBVC*Fi`3lgCxzo0Ja#(?cfaO* zHp;4nO0Ux=+fFwJmitU)DU`aiCeV$p1rnK?X_2n8dL)T7Q$)$ z`!Wh4Ah<99SVIBdzZ2D7k-e0_q0GcuYW)Hj#p6RVKO#}*{t)`9cW9ekYD`+b94-=m zH!F4LBL~T&nYvysWaH#xsc2NMMApx?7P94s7A}AED!$In@PrQsQE)FRK`u)s7Yej; zEq|raA6_o%Zx5F=_0^Uv)_*8sR)xkAulc~CtslfSsbdd%a9j?&?Z4^+B$T01v{71!iO_?o)m-KOlU&q|cl&g7#xNC(CA{8lETu zRibP`8CriXrr`v!ZiyM|BPK5R*wYvwIZ<5F2r5%rUM`_iEx50{w9}5eU92Eg97^8M z(n^{@^JL&Cjf4duPoHxL(#i$Y9UbiNXCxuN`I{XHyPSj-edrf5pJHJhb&l0mAw8L* z!iTC;9PEGUN_})fx~Xa`FhdAWjo9T+bej>}tWJC;3`Jf|F{oDNkif)(S0b|db+gsj zo5}hw<~q>qNx?Bu&r~v7?z?yGk?ejMoZpYO^f_%9(tJ=$b4od-U*~WW!UYYx>g9%K zFJwmk4nGb%-t+NNgKD1KKzt3Rn*32mD|Y0V1(>(HBh*Z@b%jbzm%05i7j*hQ|2#0^ zla>l~szKac@>8V>m%ErS#UZ7Xvs(cq$*D{;{UkImk_BZL;LF+P93K^BxDZ;_oHL1I zGn<0Wvh@ul-{*w$)AZ_)Q>APeHU5obFwZ^Bxak7%(duJP)va5@vxeA-$&!5P zt7pXZ#v5{rqyPx}u*zw!#jfm9mJ}3@*SC=Fz}ewxt0!Qp_34U8#@?#ln^J2hOdc&p z%rp0SpAUcj~huWY(ey84V{XU&F#0Kq;m67p3Sw{&UXjNNOF$D zF5?rsr7719Z`SSZhGktWG?)gk`s#}E(|si7bxt~4FO78ChBA154OU-%kuy z=a8otAQ$j$p7aCg<|;36N?hhgT8Xzy%$2G8Tz?Ic*i_XWA{n=;w;u21DmtF26qji^ z-J6yvqm@q^+iq*UInl~@C2tu_=TWy(M`@#4({IAzsX|_AEgG^ag(@8l)ou&!K&fLw z3-QbFV}EHCGMudoBgd?6FImlAsY}c1!tq*ziZW1`^>e1^{N=OTi%di0FG+C;;tTG> zVMWV@Q8T%eAr6IYi*r%j_1^gLZ7O-8(x}I>-lrFdK>o)vtLiL`Va7DP?wxZIoAJ>E zlc@~1#n@DNIM+1uqtQ<)10=P&`)8ASid-qxmZm!SM&hA^NqjOT`L&)0ZX$teA}Ay! z*Ppz`>w_}LAViU(2x8n-i@D){LF2}TcFhi~nz>Tz`2$6&u~`OH=vYeG?T%6|&aSn( zlkR63<;Vdxr@EUj-e3z6jL&nNDAC_IcbI=P>#XTzHsjonc;GGEw^(77Z>;sTOQ+tW z3Jw4$Tsvl?XSTC7c2~AHqu=?&Mi+$HSFLBl5S}GEJ=|L3)eg8e8#0jFn7k(Ey{yQ; zv6Vtq?w6lu{h?g7M|;{RjaqZWX}GqEK}LEDw%5>&!`YXAm=e_kZ5@*3L9 z8I?-*y^iWSwVrQqy@0|{>n2_P(LQ~>y-IBy`Gh`AQ>jm$VzV7ea*Z1V@U{51dmcsg z0wJpqJvdzU+`G8p_oZ29dM9?-!STKXHmL=k`6|@q?%c`e)G)Im@Uj4StU^NwcUvlP zm8;z}8<5C5D|%c;$IkA!ymQgZ0ri^H6T*AV$-zx?+M3zUd9Z^C8$|hMwy2^WMcB9v zK0X@QF+w}mYm*14S4gGq;?seA=Xb^Rf0op<;<=5dl-2c63Zk95sM;s59#>6iLdvoS}#LVV=Im zvGa6ADsJS%8{wVR+arp!Cj(t?tkCz!1&@QM7n>q^8=Pz_nu|On?$MEu@3#JyZYF8w z_g*WHe1@|*3jyadQ!MiqqM1y$pzo9zJ*`c>3MxD+!@K0vC*!(=#zl}y}!zqXlm)^+p|fn>8{N~g2`{OgzR!=?%z(|Um^i#64~iJ&W*W&H@F^^;=5fi>K7tDTw!k>uA60~=&qS8LhOV; zXtZpIT%VprP*0XBK;LIxH&6c$<2!|TNtRtD`dK$38pXnV+Ll(#nRWj z@RT((Lzk5S2k0{tQphPHP{C9lB|*A#_|ukfSls%x@<&6{KL}tZIsMUOhg4Wv3g61D z^0B}!&nPjU)#~cI^$1s*>2Yoj^C+9C6)Py>q6gwQ@>$c!B?+1>=xjjX!Xr}=c^fQR z20D>e6kcXS(-H;zZr2CP7QGg&WkN?Sp?z;@B2eBtKsnC_t<5Ij&gW68{AXKNorJ zwl)SU(+C}Gu4=tEG`I;oNj@51lad!Xh=mt)+2!HI6^9SUBd6+5bfiPJj2>~jY1i8L ztftlJU7sA)SdEWtZ`;8T#>QX=@j|#k6o{tE9e2}xyjEorBEo}JUuQ&I^uOZ;@=6K@ z+tV$Q+iE4K4G3i8N=x8k{AkGc06`RPvOC?VEado5aGi{+gXc7e***I;OUcR}jqG^- zP)oFxuu?zJ3R(jQ1JqC`ti`RnWrHP^hh;;+e)CrYEKe>&4Q4Ck^W`j_TscqvW>Ew+ zd{G6tI?^9cgddNU(Fnj!#;S(GE)I{_PDN5y_ksC4N+fqUT_qpkJ5w(QX0=+ejstQj zb7o98rLKs2AbecphZsm96PI zG{dXBosOK-Z`*#OYrTIec_Fs31i4u`g5QTgcH<6kX*XAg#Y4>3{(8?iCg{xz+NSU) zz{#(@PWQMr%-^-`cng$HYL%O3dX8w>efg4u@mV;fn6FdbO@D1#pIn{C2bgCAMex`( z5D+mo27*nuz-+S6g$8(DY~9jd2_4OCQmU133hqWxs=IY;lk-v_n;}PObzon|zFOp# z4U?~5QHj0Uz`k-Z8A6?Q#Kz)btC>Il_*9aTl6&RWKM1FR(RPokssK|3ro0UnY0qrPj1Sd=lKUtcWJQ)fX{p#a1?HOpM8QW3rKwd)2S4^M@ceoNHS z@|H3ht}YxQWCMMajYG~?{DO}P(!9F@>J3|X4{5(e_ajwkRt;Et*n|zaJHki#g2+JN z>3o{$3Ey4R4MeS!-1kB5WWM?0C?-03Wc0|(2ZV&q1E}s==jP@oLC7DXp=qEe6x{{Q z{~rx%+iTM+HjCXfo}{8IB9`TIjaSo&PBh-X_v^ckI*T-4Y%FoO*%~j!)qQ)J9O|KM zck98h441hL7=4}D!U4P_baeCC#mIOj<%#`B{hiW=W%yxtnaw8c z!`b`n^^1NIC!{0~mjfY$_sVl#p|{x-$PH+fB-b?qAJBNv?Mhi@`+s8r46P``6Y1>t zF1usYjEvTu#bsRN`1q=oVoy&5%Jf>cnm-$4w)u(jI5y^}*QGlV^v{-iWFtG8OL$PJ zGTrjwjK=Sgt>PhK5LEkNbF<*aMRs81T(e6b@PjzXl`B<@yuUfz05X#%FMaPj-iNJL zshEuKc;<8{@ZCul?oV3Z+sI}RdAW)^%E2D?&AuHLil*`M_2YWobvXR?reqQeq7)=C zFSgj{eb`~viLD3<`O$XO*BmNS^#StRLZ!`i@`;r$Jb_V9)Q%X&3huvG;B(V=pfA{H zd+zoEO$N-82?zPE!8m#qPt@wO0ZK~Ji~XJ)<;DIq-CU)((lmZa!r<0KSBKk`0Du=` z+ezq6m64*0(V$`ERLR$6P%pk-kfcnc^maf0Xr??!5J9g~YRz|ZE&}s)=s#!auj8-T z{#UMto@N9DdfRdk%A6a+k0mWGXH8_hoDl@1q(yZrMn+J{|tyjXO&M-Y6 zz?gHT<8YddumPZ7pWQSbY_INy)VSPWP$)1H{SnyuM=h?Xx+3J#g}DT1XLBw0w&Pq& zWwLuloj?t=0OVPRo(`tl;4I|bQ49|tbD4UiOK&!?;e zN}@N{NL6HsKRzK>fPSH)RxNRx;o(qmv%@3|kD!>d`$aI=JGfA8(H@P2IcbJ=jrd;e zV7`9+I-Hafs-M45glt~cIPVx9vhc0yl;uJVxGhek0^$KSrDsOO10S7sVTQ@l!6E5f z>D*q+-SU6sKu#fo7-eE=npc;mROXr{w<{136kuXv#su7MwHGhR4(CR*-FD}7Tcm4Z zkLZ#TSelT@69d}Zb~B$-+^+u~IK;q4;Oj8&1fMkL%WC5)m$eN3G!>f6u&u=Scy7Cc z`#w}UwHw)N8EQpJH8MeRmlK=swQ6h!fTP$SY2_7oOsP^RDsD3rzpK5$q-8KT##~^p z?jcLb@2K%O8pm$8S8v{PtXS z>*`04L;?Mr>axH5t;c}Rn#0%cBM0bLrz}eKKjheo7ponHM>+;&EbXTRzgOQ}O5<#f z>PseAHoBpNkLn%q_FB_s1QW9RjH?nCL$$apA3c1yD^S0<|JNrdSwQZpLMN#b)E|*D zlN(ABQNJ3#P>xs>r-0;gLKn+@Qfe(NZ{8$V8SIq`HEmCpOtz}d)-9ldE)Is}1#jB7 zRJXZH&uXX9Y+0~&?$~c8yJu0LIhI$FGL$FcZAZ1}!PxI^q+BX9A=u@>) zxAHYG`1kQy*w|;6&*M#6jn@LI(l@3jv#FRp^5KHq0S?)MwZV-F&m!I5adLicSqP9J zuu8c)*;zGSR&1xlz`+@ofL1c4)R-&OwI0zo$K~-u37d@1}p_m{!lWX)k5m`^Y4b}K|1Oe6qwfz`QIhSN)=^( zo9_HQAY{(lBF(f5?>qh5(P?>`wDyH-vNlbCzt*N~ZO5E>9l|v^gT3u6$YW12k;pox9MS!G)?<6 z7>FDzRK40CZolAT6=eRk0P&RQe4KGDv)GjvPO?q*{pL9dJ_SW7Yx#K-wdMD{v?fa_ z>eRV8vYNKKzWA{MwfS7{vt4JAMnP_w(54ig0(E_u$5^0vR!D)6?#$m+94@z1ZsQ9m zux|e-O4>*Z~LH7c(=YP`Nw@i+*ddI`(6}33iW8&NRn~>48Ts z+X$U=I3T3*NHrJ@e)CA~?$O*|@@XGeR&i7Ck#ynY;xwG;Gx*Jj3B`yLK;)I|NA(qTY!}qDL8>NhAoO_fA9^y^l7eA(0?OuTh85qYg%i zAko|CH5iOC+F;auxu55K_p!h2eeC^hKfZAoA7=ip>s-Heu5&%6u<$$dj*9WNaQzw@ z5j`R1I-UWy>q^Tk{i{WiXlfBO$KY)-h#al3iv{O-p0;bE5pJqJKKFvHmlU zj+tY7^6sr$c#{ys7Re5G{|Q)rRo+p@U!d;r#CLyRnXX^BU*ld{o=#b;)H{|cCy(f2 zon>~_0p)d2%ID?f3E0(o3z#Cabp`~a$i<^WI@3{9d5o$4^Oqs=wnH}4ybw^w^|LY* z7!~>hv};w%JK3z>2RmuNkWf~HIy@&NfB5M~4Nx_g;P?#ddfop*6B2Kh+2YB>R;!lm z$rfwcheOefOWzWx;`sXCs&6~yBK@&=P*1o`u_GJ@jSOUZcV;t{+T(Z)8r01^E!7H< z>9;Te8yo4MiNNDwpZsW%YDZ7%IfvNb#=FXadf7^vs*EiV!o)h4KkW3F&G!K5T2-?O zDhh*jEHjoy#faH%;AN6J-Tm_W`=lwQsT;lf$|Wb4C}3q>*REsb)%FOb)}4(~Xdxj1q|I%2)-%`k%8q;$R0$n}R`m6RxIXPo~dDN$YwJ z(%>fLvgcH$Cv)G=h8z~tr=TA=EnfRUj7XKSM$LY0>mqj>2ZXtbH)?O*X{=J=o+*Qe zgI;kdVv(i`o$n;+{X`LZQjUJvJr>KiIp;YdkYje#Ls8}8Vpv@7&tKsV$CcVdm=_#s=_fXO0%nNloU%FFw!S8eno3(M zD#!NjHR{Rx6b`>S#(yOGF1@1YB8?&9Rt-WVf3~&w@u{T%72Ns2(lvbB9~f@w1=j+y z?|M52AI*eNwX8~y&8cfq(c+~aa@z8=1?q-cBeTrw?0vyadRZxZ$0$2wg?~C}0D4IV zl0s8ycsPUH-o0-w6)fGItX8C1R40j$nfigf=GOzobwTwi70{cZWY7)O2X9enhoxdZBoq@7}* z144Tc(VAo1>Vu6R$fekC3aM1|{v8uq*ZKI@wQe?+(Mp>YTebC}*%vO#>1opg1b68a zKgSzuZO0U}i5>PV!ogBUtUHJ8<1~5`2c_t4;W1sCSDoVzh4UD7pv>EO>JNrdT4g54fCDcA#H#(LV{Cz3g8FQ2ax|NiCD%)*aeRrQ=lxEQ>)wX;pa^rNG=srlwxS2N>wIyq)DlDy;Wq><){B6k z$sIpFfKCY)WotxDsmO60AJU~TGff14^IOQ0e43xGV3U;H(IB!_8db+%LTEgJ%LN)_ zvZ}F&xr`QscqA&CdHuC)KP;|AWiQ`!mzOu+`-A?0z3kp!BiJ6$0KH=Grg&Q35iMEkga2+fJ;m$iXWaU^xAR`%;YbqDClg;U zOcV`5pWbI9>?7+FZBfYl69mCU7Rx5uv+l?z@9MqWtBib=ua|c)ZfB8efGi4t;V2G? z_{@`6)^!Wd{f#%Dx6G}=n_0x?2bZ&ekO2yeL(G0@j#gIt?yWvVLRc77bnE0AbD)IV zhNZeo(VQsS6=Vf#hiNR@V9gw-Yt{&G&%j`Q2n@YDGO>Ns0%-F(yZj3}tK*S|i` z_{AUFTSZS46seacd&cc1;c5-3mu)LVOMlM zzyA}QQtBBL5SibaE)Au-n3e-O6Lo4ul6&gvgg^=f8 zd)B;I&88A<2q%d42gFrQODSHhUu)?-BpJ&GHAgYh?0|`{r=MpSF@%kBb@=8jV z!-_pGhRfpoG0tKy$7whv8=aL;>GHQ{t8Xai7aTMN`hQWc-^C9NY{GfG1Oh>og})|N zVezBhbFZk&q$-}P`smsh2+I%=KW2TLb86~yme=4AlP@Ryd@$bK!gqpvJl`F=+?Kyi z_3`Fuh<@SvOgd*67OF$hk)7N!jgZcrez}+yG*m)+$=)%-5o=bAD(Eg=xrp{t>i`00 z>DlQIt`ACAYESc&QhW18o0Xz;-|-Q&+l~f*S?f$NMLA~(#0>?Vo#AQ@(i(SD5+$6! zM};)RKhQ@sfwyR)#G>`A;#jn)i?Q_`Ysmp;9o%Jlb6F|PmlR=e1t}YU8Y6{Wx06|? zXLF@q!8Qz^%#$gcU!;|ao2hrCVVB!kdXsr&9Ad`Us-EbES&(MT4XWGrK_!i+t4R|b z^>o-=?Y{KH_cXgX^_0$mxdP*FHq1kg-x!=n>fF~ty>TWtZ{B2PM&L@3gJbQNrv*$L zMqH~o{7yG02rMomuG~T#WYrF94hq6H0nJmyG-2z+&rxEgCB9Zs0X4jA+`jgrcZG$2 zB)if)K&f?>kpY!B!Ppz$8Lr36z#KE-gxEY^_g^fat0I^%v^L&Z`!ST774`U6i5Y9W zs9lqc^9HD-k{~ctFr&5(ByuMWV+*ycb4G6WEtDGF;5TDsq05}s3Uy}P+R5&G7NfI(b+(dYZtq5d1_n*YIYC6!0auY@8L$~1sm(=;>(oaf5M6IM zrw;bmX@^ZUxMfc@Ub@BhytSTKdNo_RzOIV@d-Jo~6~Xak4=+Eb*a^p!zG{+d+M!&3 zDB56RJl52c>fF%}(4QP}8ZSls-kVN{TV^cyEs_(f{PfvJjbEKLfg8QI7Q^(9g-ONS z8>$aHyTv2J`p%IRgm+-i+*uP+RWlxt)PLi;|6P~wx4$8<5ns!+6S*7r0Y>Y>Ls+3V zxJ|QyCjG&kDNZRLqoSt>1tBuN)w97VW8SPntLNr$AM1jj91b~0yuQjpmmljzGAIqa zguzzX5pZfrXue?Har|8c1qGN6uU>BM@;yaa zVht|8!6D6zb+rcuxQ(`l=OzlYnw4CpYHW^ks1qZ(jd+CQn%aJNI}AAt&9Aco8@`kb z-|A-yC9|%MfYZ5P=1X@PH>`(y(K&b$1CQ6_;(JOZhM=Wa*XHgbymu#zj+qSaKlrBE zlXQIo+R z$kV(`();fFerd^mPKx{1N9GevOUrcHlVf*%pIEJ{yX({W!J*RC?ZPrk?EYcT3Tc?bEm=UK9t(PS51FCQ#pIpfI?l%549$oWkT5yT@TLR^d+ z)G^}Ii189+-0WilFTi->;(Lc2U`a>q*xZ=Xm4JtfEoW-4U39VBb+YmihTJMWJ&#ea z+vvgG%EZf+j6ZBY5e_*blWIZP|xdW5zo(ej#77HgM!0CZ=LSfuvk1hMc& zRX!;byl6n^&C9(uW!a<+P@2nN=Z+|2kkfqgy|3yB5x5U{ENgu5tN`jhA8R3fU<9eE zN`$-7ksKpc4d<2B)w=;HC2le*K^IL21lXjwe%?C@SY0%(wi{-L^WW+(09NIFTZZJcRsGw7f&Y4;;?NfD6%655Y3AHrHQ${ktwUP&eVO`Rw3nHs2mo>zNyvrY39>nDm%tyfP7r&ChHduIRy^M z;MvzxJo@FiyCFkG*4orX=OLnfnW|M_HzzL|Emh;;;W^}N=<1?(YL0mG`psRnq~}2! zrJth$MR8xFw-?!XdBBFMZyLdv?0)cQBm0fT9Q$${z2yU8q(WzL z%vzqsnKa0R6E;{p9oIJXYWBen7Xfd~=x| zBd*--iATvwR};t|O6{;<#8Fc~Bh-8!Oq&$evbD6;h*?-m1SAilIH;co!!BxOvdsqWVQ?qShNT z+ZM34v0@GYxr{<>r-3M~&z~cG1a$9f+TgK%3Mvw4wB#5!5RVy{oEoQz@34WPF1*jm zr=ho1Z`yB>R!1H5P%!y)d48jOf3@Zy$>gEHrC+x^69DziMGrYoXjXVIcsA3^?;wu+ z*ZF{ZNWOY@K@)Bshkl3|^G0^Y=UmWGL%F6IA=t3(WCt@~PqS>$sM=W6SW+3TOAEyz z=JpQfTQCEm&AI^>chxMeukSFn{+xRoRUkS2??)ZhU*evR;|CMLxfV2eFh;#gSg+k9 zNn}s5el@mUQ<{ZrUH2{POr+1uMiV7`bX~337>$xjTv)rO!oVZi{p~U}Utm?>D3Gdq z;MO`RmEwv#`6_i4Ps}lYrgu*nAx(V1YWEDXBV;`^%p67n74&iLHL|!Eyi5^k^;K>A zff}4ZVzAi4L~_VBF}9`0675&V|9JP-Z*G|7o#|xT%f66czBo2>gL!?Wj2WEUMMGVsvI<|MhaBW!0A@nZH zLc^eQyw3RpPeylJFFT1wDbh_f`DY1n!pQ7@^|Y3Q2t z!pib4XXRUFozJkmbL{dBg9JM(^=5)3%SMWG;f9KIWX4A)a$gUExW#U&G;g%RqEqm5 zeSH3KVIN%QRJ6trEzhO&N+7J}P>k1L6@X!^MOjb^=`V`D90yvI(Ra`9h`>?1&cr-S zUeyk9FgMPM<>$6$lOy|6K-Gufrf-rD7QPAHXbX%YdXQ@TOmnPc#|5dW-{n0#?(cp1 zC8L&kW6LI`{B0T3@wTL^K*-dG@-ZQNGc34=Ln5=l(QLeb=243<&`!;mO(JE@f+EBqg1#d zl(}^+X0IT!BAo4be*mYX>+$<~<=1uQpyj^oaZXOfJdT2(%9^ODb&P)T`q8WHNdDoP zPMCLxKb(-=jj=@;D(!FLYkh|Ca9}; z%C>$(nZkfAb6YLA{Xgde<5=NK6CmTgk^{7lv6+o;AXVG67E}BlJ5OMKk@g&!@~z{lZFf5 zE3%79SVumGm2{VyXrxK%2n5q=IF5h!F1riQzv|gjNa(`SCx%i%VKNmVGL z!Wx?R$6>URv3*vS>bZ~|E*^&lX@v`n%(OxsqN|J)i5=A(c!AD*4mPZTzo@F1o&Vu? zUTa5r?#WFfexOXRMKRRjUS-j)Lw$Rbhlbma*!~onckeCxnJ6}h(wq!F=h+}<*CK2D z@t0&H+gjr-leD?i$P|VcCE`@d)OIppLb{_8IN>LXMa9W3` zDN9=X_A&QMw`%zF%iYgBjU5Adx!uo&FgK!mdAx8D@T*@N|=||c4c8JQAb9s*)H!3m*<)(<=(!H z0l(-qIy&pr_q~DqIo8c4mk=CJVav;r7nG+tJ?Gotn9ky)DjVHubl%+vVOW;vA+qcW z*}5Ark4*G=;l-Cbm&YIudD72EikbU&(9!hX^gFTL&T#v2bu$X0G5PLt@jwj#Hr0$7 zq!?b^K_k66|J!#!sMK@MS*!kC8)1C2^>O!O9*F^3L!g`ArTcu!dV-TOD`qxHNP-VzU5VWVY+QHr@b-vb9P*hZx(N1e`YEm*NEBaoR;j zKxpJ^G^8SQi*q6pf40R;IX7sThhcnjcM}!aYrOG)v`;h`8c;r9#fA4zjbQtwA1%6= zY>nk!qOT@8I+Kw2qjIe__AAEwu=4wRn;m!0w{4tksz5YKRS>dl`$8w7FX9vXepNLc zlcUsh5fP6PswC0$>vJ7b#dd^|ctZ?Wo}DybR#}HHeLXDmNmqJXy6E%G5W_Mq#9+s! z_jct+vCJQ43o#5`7RDQvovX%PM}N?_7fFy5rVz7(j?JVJa-3IxbUT#LHFTIYhe>tuh4`EkHnm0VI@ zr^&3`2`a3+X%E0vcbgCDT0ItZC5V+uwYA_EiiPPF_Rm{TG5CH!O-3qLxazL4x0uRYC?rH}^F(p1^`b6>>n)HO_kOko zi{f;YZgpe5o&f=Hv@*>h4jXwg35k#fd(RRV3o|orWADl7%1?$XI! z8qU{%W=08P0fV)zJ|>woBgR5}7cCXx1?NvVTE7amJ7%F$ysT~m|uugDb?y_FY7=HjItFsKp{9@=~=7z)`w8hg3>{LjcyajGT-n~ z%S2NmIFzQKM@@&JEW0ZTT}nj@+q5J0ak4^qt>&qHI;0vYuk$o;WG-$p3$wBGrgHJ> zQeESSGTjxyX=X0UX^Q@g><`w~&v({DoRqi9eLfjkL=lC9PQ16PJ3(OssukU^>>!xE zV6cd5CAt-aC4t5R@$!DODq8BKr$*TCh|9*Y`P2edv%Qo8Z zl1GxOudgqz$92TbYAQ@qGuXK877vdKn|_>mj;*c4WTlla3fAmT4Gh}3zL_que==%_ zcqd7z3Mp(#Y%1=1QJUg~BKJ6T`Q`mc=kXr%2L#i0NooOZ!Ms|S4}tQCAcATHkqT`( zZ&GAWcgn`$YnsR*_m;RfhxJQS*^WLwktF)LN`8}kj?>m!S81Qz)?!`92s5UjZxMa_ z<0J3quvjpX=Lroj2Y#l$RmwZe75f_l!ONcpKBaW5|3ynxo1sSZSo>N}4+yH1r76yl zsg0!aAc_L3_FeWmr^Lt}{AYrqdNl9J*4VUD)h#nfpm=?iV68s0;r(7jeZVCI>(j`L za>{KNjyTf#KjJRGc4#TJ(`@(BON;0~g*dL36LD5SlB%9(CK*aj&{0 zYCP=9VcZYdS*Ber&P9&m(Jb-CYPKTp18 zn^8a_HNi)%1uP_Si(AWcREpxj!~})ob`1 zz&xMTF&J5+U@Je;lS4xL6EpH}~o7F|eYhH0$Osd}Bery@1S z^1G|=H{ZJpm6DDuht^nU=(n`~WD;*jzZNL;Z(g8(+Hrx*MKB)F` zn!x58M6pUs`5g?dCOf5!aZI?*nAvo|{&;OA0NWiBi8LrSE;OiO2R%mM>lgwPBDP&g zI%SFx?F>8%3k!wDwf-P>kEhVyt6a_y^&+oeb(K0vjE{6u3+!Xf1Pt{4{ihsSq%&Bz zEZ#6(=^3yP9`i%K8LTLkwmphVNJub~@=|%HvA;Lc(^auLf-ZAelR_JKfZDjue))L} zEAw?Jr;XnI>VD%%+I$0GoO3#geh>QE-n#R^sF(K;6ClaE0*rb=2YvSh&7bibm)m=N zUIOMDwL~G}$fmV%f%%$L${1W*>{olY@kw)dj3bDS-;u-Wx-QJmgGQS||MEbja2gXa zH;B(5#|fPL{RsnL51FjDl=61IE~>vm$1WyNXzkBY3)PucC|$R`C0pZ_ua}u)Y&qR@ z{63q`hX59GH_1Rcz_3<~c6mQBNi5OZYY3w{48Rlx1%=&<7tcukH4b>wrsAAuUNF5V z@PBbEK)qn^$3I=~Jx)$!ej5^+V_qj=*EI1ajFx17k*qrN4870zWC-}a|I-3J^ymbR z%l12W#9aNWY-w0T%LCE1IDurS4Q^-YhXOmBPgY6z_odro%k%D}KH(YN~^)0Bq;o=V82Df)H zs3Wl4*Y%!AHt`uX3CnWM0Uu+9Q_G$j3q;@7)7-U!M{i{~ugZ%AR}ln0OkPa2Zf~|8 zrf_m@w^lSdbD`qq!3-dL75(Kq*0Ph5ncWAV@5=xc)z+$2 z3=kW@^&n*J2=L1kx^a=4%pW7 z9{T#V$DZZNxSH_gF;qvKpq-sv$}_2KESkRdbmp8h@^(`ze-Z%e)Z>PlX4yID54bcn zNpZW`z%DKF4MR9auS$On%>CKNt7hJ2zUx7s|A;9>^b&-c3v<-UYh1CdQqh%&wmp`L zsdVfS*iIB(q^v1NRaFE`1nq?ib2GwpyvbPQ{GU8}>Rn)7QS+~NF~EcDTVtTC-O#6# z3*KYqY!(WUzeSKC7b$pkllSw+5q}1iF|BPaNl;rGyJg5QJGrok2=%z0IT~kjIorAU z8m;WcH&P}g`h`W~B#8=|lM+qE2!`5m^$)@1k~y{q_gttk zHH_S*FHV~{ii7oqwc3S|NQB5^Yx}5=OxX$JKI@vvIyP*)*sJZp@T6N{9jU)o_mYZ( zpHP21^@Q=goZHeT$-+0c=Cl=;N2*u&FOs=6gF|1_Qd=-52<{X5Qv-(mPTqq+-3@Z%DNOPQ7%Wl^vTBgW zwJ7-PJQ?LhFi7z5l^<}2gDUCT_3IupGfl~+ED=n}a-KPl$9-(BcSQ4Pd4RrUT$w;21ku79TbV0X*dc35QtJ!B(Kc%FXCHVCyp6H039L}NP@V5Xd zhcW`0YX!i2qIjo{;kg{I-?q0OrAb=+V^S1aw{d zU6tea`eT>h!=AP^x1wb9B^xCV zJek`3a$4ztknc=#EBZis`^V|fnTG}%kuiT$JS!lsXmnH(_n2m^(rL0rAzyq7Aw95` z%CX(bvbRVfK}CHT5>$i!mC!0+YTQ_LKO|N)&eUPPbe+eDKW~$6@4B$CaNVR6-OZZ` zFj|Ff5i_2peiZxg`sb)nN?O{U9S@Nh)yr}&bmz%Fpf5#z!hy(``XPEPsPS&UfF ze2y7SI3?ulhZCExDZ{w`X8I>}>?~*uoB`lV(eg#fzvJuTG)(_`&+kM}2|iKq`@hd$ zkbh3e3tn-9iIvr9e*l|Y_ph^J+}V}I@8sH{Q0h)GxZt-)v;gx|FfULfrmb@*TJ3vRGnwY+%o63%9k+2Eg$vl}^1 zbf%&*SwO&IFTq9EwY!{X8}lHh>Q}%7yakk|GXRjc^Lllzwm!@ s6ttg$nbp%%=^NOyNgN;gu{-Q6W2-QC@SbV^Eh@7w2j-*2pSwD-Y2 zS!1j*I02pTpLbl>udW#)FDr@k2LBBN1O(E@4`PZC5KuA@5YWqTufb0m?8EUPAW$Jb ziU}*brvJ%+cEuXFKcyt3gK}|kDQav{%9f{@Em3N_KRJ5(KHC;pUn_Jbf`A!{4gUEC zYIBW|*W|?6Wn$B(p-OA95Jn_Dcy?f?APZ(S`ohV;MR=#fZ7{?7{n|L+U_|5_!qvj1#}aASe-SSq_@BtcG2 zj*dOsWrrzi2P|th$+dsef*Xc>Nuqm;MF9IFGv|g*L!pbW#2?@hf=<*+?6c-n_dE5v*UCy+)oTyq9sFrJb5^~#b_hVfS5PJOiousz|q4hdU zWaYj4&2a|5$8`p;ONDxsNLGnv9ZePzKASuzq}Fo+t=f(r@?wK6hng^zUeSaL`#;;I@rbRdHb>U3*d!|cx z%{A^<2Q{W+pXV!9+PxlT%lqkaYKrlOmTWsdS$&=<`~;q0&TQ3nD}qGyTPs+D15^DG zpPp|>9gpYIfp4&$PhOto;Quay9c(nO+^V8=7Q@QH+1IZSx6!l_3M|q6Q!_M)oW#*xG%n8`T6-yFemK~HvTY3 zn_FAl8Wq~yCRTZi2Ay4@ShUFRc-Xw|9ZmQ!UVf_SmFu)zpKkPk4anqnFbzU}m(JaB zx0A-}a=iT=tZXDMbN9VUmVnpJXo_g%-g=k6bP|Kt^@5of^}*xa1vNMhM$gv`9o9?r z5iKVRH9<^pdRGTOrE#22*Sk#J-wfd?!ob27xz4ERc{y$MM+6}T7wp**xvsymCm!wo zQup~M*Yo}14{i#g$bpErML+uHh}b{RCemv)Cd#;9?lIf0@}Y;n<5i_B2G6J zQmPd`!c4*cTh5}vc5VEOb%HOC@n(8`S(DOxGla4~ib&2s`WubWk5rYz#kxbV!Z#;t zKRR-Yn}z?mFN27csW`SAGVpi^z6eiWztVym<9%27ijjdB&}-ICnl(Z%K89dWQguF@bjSs`bbfuM zE_}ZP&b~reo@A80nvHmDinakzttB-CuG<0=YQeZY1e> zQ!5pQ3-r^TPDv6?#rpdC@_Yfy>vO+Pc`;Y3ULci_NT;EgCxN6xs`ad097N!71q`13t7c+<@R|%4Q!uIqn!ab;0gbf>J$jo)8O|i@zGVrGV3Ch zUn~iQ4ZFk&I6*T~FTEicO05=$bLDqrgG!)!eOD<(Ka-b$2qcw)2}(3re;LD^c= z%TW91+l$#9@0}JU7Lvhl1*dQosY}!ajrZM-wNU_6Ul|P6t<+T$aGf z4?RIS#(VeO443c$4vqn#Au79`0~h zO<&(#P){*=rlOr+08>~@cvCMF1B)LxM)oa?!M zd$zSxrFvHPO7xri;WoHScddsNEsosGD2lE7;H<_QY(HMk$UWSg=+&B|6$VHB;1s@% zM@~cWT>yp`r=&dKHIQL(f^G+)0IsZ_ZgnO3FK*Az3 zF+bgOy!`C2BL54jx{t&YwV_)&s_X_`B!@W;JMM#gD0Fl+xrVbJC>8&AI<-J8mr+WPeK1D=*Cm;ak07G^pAE6g`E z?$q9HwKk0X>Pz+3Q?k{6k2C^tDO@e-;r%H}Ggl zj6?%qFEUs%cQ3qWK&OpW%(9$hnl0*Ya7$(cFweo( z-M2EH^j)`gZEbFj8g>8JIit+-JU<^{WPP=di;tY#tF6J?*X*Q7=A=qrQ(p>yI%j+6%ibnes++K%5c_yagE6iNa|gDt~y4WWyUaReH!KaXtTqdTY{omq1|LW zgzhD?UVQHqEOPF)wN%^=(1$?Pd6v(!n@O?|Ph`yIr;_9&RY#16AzOh%jb5^Mx0X& z)XHvqkL?&qT*%?ddq+g&zZ@W7DW*-Da+g|zUMn+~!1nGcuKTCf4z7!jM4(YBTVEIs<=OSo5;FpI z+OW*>@LKz2q_;Mu&-3Gt_Inz9zTt*Dck|ptQEr0d>0ODJc@Ujq-Hs`xJti>llibz47Fjp>9hB2Nj&0uZff zO^9JF*)>4q!{>E>iN|WH9 zba;O9bh9RCIY$TDGzC?0u>)0>YiAV-xKSTXTAgn}iC6wGrqtU~kPbEQJdOZ>V0AiBUU~;=+bsai zduel^`T~xEyVe{MPjXo#o3WV<-g+;R1@lEYjOkwgzpEY`s>uH4n|Oosk>(SjHEaKW zYHQ!rCxk@rJI5uQ0ZB|5@2119pR8LIx~UI4D;KLDpG!KMY%imD(prP)`6O-1U%^5L zQBbUGuX%L+*31=yFMpvTjWn=HXb@1fQ`%dop`^i}iN3x*m^Vq`(u;B~C6u&Ss;6Hy zetQ3ERyv$n`=Fi;lThapfRX|Uw~L*hbO5%;?qVb(@i-ycX$S0PT%MPY)d zydAq(wGGw&%uU=cbs1t+1zTGJ`SNt)Gghs!R%DZS5W%@hdt&{X-U) z?IW!#4>vlwvKC?Lhyu_3(N>`JuTVdU~VT3V9OaICg2yd8{VK%S}^! z77nR!9#QGmNyZ{9@6n6&djAA6BBk##E5b`ox`D1oxoqGe?Ry2QZofUK01&kGCr!5n z26Estg`I{=5&Fm_=z8&Ke5z&g+9 z-LWcW!1%=uSLVUJ`7+t+=I}0imQjQ_QN$H?DI`WtNk5S|SoeH@xJso<+8=|$ zd9J~*FLbBsE?#$kx`33FG(^e7v3ODQ%x?| zK}eAJxF;U@NDk>Qs>~zFx>##r@5P-gFn=@ z@i0vL-!PUvmFkhqhB*OA@JA8AWzz2iB{5WP+4D@u zl!CY>FcC^lpKtF5izOd$KIz`Xy&U8wfY8O$`2RUJaG6vZ)y7Y1oW)vW0R}M#Fr86l zKF{JS0+Z)lc}fonl$F+SY-khQ0Bua>h?aN!DE6T&Qv0FXxOJ5hMC5%7KH1NBmx%>x6V7ven?IqF?s7mbna243BM=CGK&q;$N{Y0> zBBk^vA$)&gFzm{5LYx1$r-0_2Hu!ra355}_ARwF^2z#}y=q%tp{6lz9kKuCj@+M9+ z+)q)e99SX;2M2q5#pD=oRr(1l}xy_%vy6E-(B9Go}Q+2$ED3b7%_pJ3gMJ@L99hQGJ4MS;vunB!}#YfHr5C| zjb!qBsH@{P7otzUdXL4-%&ber-5inIl|OFX~)At;{TBnmsx;z zm64q6y3q~o1dED?hlh%~{vf?N9d7lX-;Ele1;ZRs217uJN7d1D^W?#a5b|H`t((5T z;|BG<-RH#ge^V!0MKu2_base@6a4!&g;5{h{C9<*gimRE2hsjrE~u^_sHBqrr@SC^ zX?2iVG5t%7Qvz# zQ=!vxA6u={;tWXJ**RcT)+(AM;I2PhA9=|TprTF|NGEC5eJ<&6_6pT;#t>&PqEarF z2dML6cjCu1Mm*s*lUBXej_=K7?Z#iI>_vc&&jZjU;1;p63Js~pD=oWYX`Fq=?IW!! z(>4sMP2@gABSxDZSjwhY9z?vfPmN8b5{q+TZ&O~%U22`bgt{TW+d+w~T6$AMF?> zEP>MUvMc!VaqMSFv0pP%pMcS6kqW7bPWY)z8i#e4A2f}U;r~32R%=_pqyu0xA(?uh zeE}vF7D_K{a1`mV$|zb0o;gtxaW>C)720VpT8QW2u*TybS3DKYd$Y4 zn&bCZhd?!PpDk9XC5+H0Q6$HtV|fAH%DUXz665pPpPC6n?>+36n^g~LKFj2q{bH7K zv7s8XiFTitXQ0`kzsKdWBUYPo1ju#U8K|q^reHR#f+Gp;PT38>XpBcpKwFJ`xZGE& zG89j>S!?$KY7IHR+2-b^_w$|Eu1$a0(X8s5kOQS^>?=z>HB6KK^K{r&WnJG{nQFz27J)@(+8TNU) zn#b&^OQ#4(!)O02#tx|J?KtnrWWMZ2^SQDG9hVjHlp%-9y{SuRm;4W)VMj(ph+o%Y zVgb$qt_dQZ&HV^t2k~1?`5~xXa{B%QSt)u2+m0uWr@cp2yioi|tbzv+*(8K(Gbn?xM9t^ zG(33;5`~Y+e*44lersJhGk5(kJ<@cog;FZoe%o%QN3?EX@YUfwc;6W%L)6N(P33RK zyS%py<-9E1zH$FfXSc*oQj!hGGN?0~Ahg8beh_ydf5E0!3{W-U;c>q#E*h`S4eNTB z!jr6S9+af(z7Jr_re3=j08dSJK)6)R$%V$n2Q{b^m=xq|%}%8?PZ?hG-&JVmReEOJ z4cbVd9b~`W+wZz>XcJhg6t=)yPBt0$1)q|&>3%D(3CnOxeLS-D$(xJMlFi?i-DnuI zFEiOWmHBe*Ad6q&;0Ird<(HEr@}6ThGO=Np1F19!#!NfxfX391_!bWjbI9PJ%=4Xt zoHb~vNJgmIto7DZUI|RL(TbQbxeha zh%HSt2$`9bH6k{LWfqN1GqDz^$~lohL0@AxLytyjG9XE2t%k>7u%tP}Ll})EmrnL8 z1!RjB@#^4L6{#ll0Ga6+Q)z#yBs@TEVKgP2YD^}1?$vyisf*6qb}p(W*diuY;SxW@ zAIL-<&ww`Y*JvUm3wUF%q>OFP!D#GO2r(N>9_^GXl|ZA8Kv$uh=(eo+&Md96Urb!w zVjd@<;M1g|PFf^Q9>xqDE+W}Fx`S`d{v^6N!MFn-5DhhluA^lDCA^X-1gBL=WbbKFbh zv0MbxO&WVD=0SAwA{V}d87McQl*wG#G+uIF0r3X)W=Cpxs+v`qZc6DZK=DW08WFtm zgAl{mx`o)M9;SS2vsubeMS3CJ(#4YOpRo5gHJ|%nviX#QOslYySA`LokS&a> zr+eN!!8jrPOh;hWPI#+~(T9JCK%QKklg2Y64--$*?Xr_?^v9^tp3$Aish7Y!9PToK z+hM0s7GZ9u04W8kn3S{N^WI#%ujU@}Z#wR3VgH%ROTVi-C`SKTii^zt_K-w29W)!^ zjeR{DkxcjOeaU1lQ5<5YaV_4rGZYQmKeA*EVsrR{iHrbE=3xtFnYBriU--Vx^UGHI z4>kIjbSAI!pS|e zMu)Hc*T5t&!d(<&?Qeb{ni7*K_6?FcC>pK|q?!Q_<4$4Z?qTu%?D}85v zd9TOzX6$0{$!es zh!wy($X(F)^Zuapha!ZR(x`N(WY;MH4wXE_Le1*RHT|;!%sccE%DeTvIwvt8=%aER zg;Goo=y16LT$5mcG#&DEe^tZY0%I+jl)ltk!sq#f_`@ut7D<*7l`c=GygEcumw>Lr_o4uWJH6 z6P^Y6!;Xv&+5C8Q_vonCCxx?Tt7K~B z55!rc722BxhZ$bGi_rM~wBNHO9Z)EKE@E>h3_v{W4zabxNnKd zP8tG2@RUq{Yd>X`6|1_z_+Vx&tUfjS3==|LXVrGic-!T)v?=~2;hgt;`lr7vUO+L# zy@->Jx#o~{v}5NGW3*dd-(h2_Z<3p-C{2^%JB+TPP90G1QW|RbdBf)85+IL!1A|Op z4g>4NCg#h^8gC{S>%N!^tmoe-rcLOq-+VX9eyJ;Is<8Gm{knv>i4UX?R4`8S?}BQRp+$45usW~ljePmW1niHgYTj@hm9VQ3 zY$x~byj{{Js_p6TOcu-N8_$oLB+ekk`HAG#6YF`>c5^Df2UCU2c0uy0Cd120T4p0SLANbj0xUaupG*ZkRp@>;Iy27g9ULjmX3j3PwyIZo& zV!l=K$1@tHr^yho!=j15C1wPOWN^JabDl<9UdG^x+xq!N}VUVY~IW&G$&x7oNo zN9%;QEO${(d=NKDoh!|ErBOgb1#Nz_a?3E3`Tc0SPQA*H9Pv5rg7tj(WfZ01vg+X% zs7j;{!=%NWXCR+5i~dkgF_W0UYUVKAz)$ew$uOdZLYm&wwX|1)Isl9G74{ zAdl=G`!Vc5R4Nhx10yBqDqjOp_%Bx*joq^5li9CSCZ7d!X^X{XisU5m*!5(gHAQp# zBq9kyKKmK^w#;4|2ZmUt*}?x7mL!?XaiMFZkVc!U1d?6s^9fHMI9S-MLA^HvR4loHP|KxX}0XYLIa8Vqi=?%`-GDXX|v4&N9`yxRr z@n=+iO2uXQ)|FakI)5@6ufu37GE4$Ppzo#z5Z^o@qC14)smY!F-YGe7|Lt~g+OF%G z3X$=*AtryLxm_JB=~lTN!y~N=R7U2WPs3>)g|AKEwp^%RTrJCeWg1Rl*jaP>Iy+L_s>9tY#?Y2*oq#EbbTnmS_wFmh1R1$k6Cv(<{XtuXPBDHv=>C zGPh4{xfDRYVJc5PD#R(HU5n75_7bLvASD{DzFa$2|)9`%SdfLN)nR=M{Px%dz;W zuL^A66QCG0T;aG@qAOgTzT}9?lgdbr5}Mt$xwK)W4c;lr%2Df( z3)32;7tJtZIt>E|mj0~|d1@)zk!XLekPIYgwr6H$URFtNMc<;6ikROyQV5;yQAqje zqi{?LSY2|2%RK2v(SAT?7vUA&aWejyD3q0h29ivY4hje>#2{;wFFcHg`mHX4<75IC1upU;%a^t~OQYst`gS`_)4jbUufMtWGn7d+5yRFd?o7p{Isus1{6?<6$OH0(e8k$tn^WeT= z^18Mhry?v*$_q=;Y8$iVR{|SCN0fc$W_srlT)aVPbO^m+p~*vk7!8~sksU25w~U!m zp^U+oJ~0Dbql}%=gUJA_56`m0?Wr#B|#B4kjYG|-z( z2~UYzdL8H!#fJqh^5KO1_>!sPNWX zaBCo{NSBHk2qNz|tZ=<;Ok{4-8wwq*F@y#VCUg8XaKX_?=Wz->M+6$e^`8Z{*RRMI zRq>X@Ygcyy(5ssTfvP&Z$F2p>ud`V;3nE92@90B5Ny~RPEeQPx)*Q-~0LssogR!}a zhD;YEh6S&}p_~EE^{Bc|@xc6S#T^yCig1GvB57l!{0s zpp9qaJ&$ycKg-oR0wBvedW|p@Zo`~hi29j{=4pWCkc9&qCPab^hTm zIW(nCroO4uQOUma1`0E?zsDwp7-bu{n(X-^9avv?oZcjqzgdNS7{l^-DZs;0*ZMWEs?(QEU*p0f91uZgnb=73CubVsR>uNB4A zo;ORh;+&2&xX8hg%m4mP#vJv87uPHPqnfsK#ai%hx}qE5&vAJ3RavJ0)MYKaV2JGB zdDx`6mvjU75uL;S@(T<%tCgH;f2?n*6owtlG%&u>m(C7{pIp?GBYEjD@_qVRaTw_E zMMm^LHxI)C+neb3@+%4C6JL7B$ic9bBOGuAB&$-}GP<;OP_v$7Wt(kJ><$bOE z8`E;T1iQk2(MjhbvgQpnHnlZ&Wb>E|W1lwt$V`ApB5bVmK-wo1JA4NE%VQc;4R%Ay&^2bC6ALij_<(Fmoz=o$k&&|?45UGP zeh*{m1#|$~2P6x!CtzTCdfqYa|CRZE=(YiQ`TJ7n`ucju(~<4pTA=^({Iqii#7&y5 zm0mb?5XIBhBMjcgq}RNJ@zHv>Z=&0*v1z7QuE`$WP}>&O@*(Cu^c&1Z@(w(`V)+~% zrvs*%DY_jwyXj{T0NXIm!<@z5CIhg_^lI z3-xpRozbCCf1&TAV@MS{Kn_A`posN{*?)|=QYQZZ3DOfCDTg{8hChK-C|#~ur>to( z^?9wmZCG8Ni$=BV7m%n*JGk}QJNT;6cpYQlwPxW5zlaA)+W@Lc44yeJg^zi;nQODEuQu1eD zmfn!_@4PBpN#}N0^}P6$;NJKM!i!haO8akksN(wP%C+8dSef&$fixSL7!iPXi&u*| zqCuc=sojMihT~vkga5**skNfaCEHx`m^Eyt4bL?^~iQGeY za_?f`b4F!8m7t^OQ2~us0B-(Ava{9E)-`LnVm=i{%tfP2^M!0-Ht5$LO z6ziCJX2SzKMX8I#zPH9nT}Dy-ru-jqj{uJ8HQUJhnSnl41;&E(;jB?=kHe&w{u~ZP-naG+LGRt)PtH%QY*88|=7l>>{E=!^s(PengF-AqnS3V7YG2j$h>{8?ZHqHo(Pmddx&Rqw=do8EMxYd0u$h>@&A*JL=Yb``yj%zOc52Hpt0)e5Qlf-h>L8ET z_Txl6AoPB^6&Q|=$IVWM@l}T(IgyVlfm{!dLE);=uU*rpA&W(I;R^|?e2}9IaNP+o zUqJjhVp|@fyal99k}rTW^B2eN41gOIqcTskcMjOaNHZb`$WDy~b}DJgz89|zZ^}B_ z2qKc`?s&epTzW<&o4L>1hab1 z&X6FEYi#7|Uk9<%ZPEzXyt(mv2sV5ZZ@`p+Dbw%e^bW7md^()vUQ?RvHopNb%;9nqYYcP73j$;7DG>P2 z5^mlzUo3;VR)!0Ad(>*ww=5yuxOeI`B7xyZ**NgY*c>LM39qBVKmu^@1aKv=$=!5$%V$fbWZf;baB9szkIVp?F3_;|Y& zmBKbeqA~$n<67BWg_+aLZo5iQ;2Y-}reShLFaHKUwz4)4?cfviXb7035TaggcCrLg z{ME-x2=q9VIQGyVM+{|?Wcp4;pXs8DTa~lybFZt&*1e3$_kLC79nrLl7vu>iA2!Kb z20ex)hF_cjdqafYNL;xD>M07nI+tn0LB7M=%PZ3<5GyGm{D*u(tJRa)P*L?B6iBbn z9kvx&4WZT{BJJlz2^hYcc5BWI0B+07_cEc&U^hn1G&yYP*>{?0&Px5m0S#%#{ifOe zlk#n|^XyuS5$wr<3(Hh~ug~OQFVX6M`#~do=zJZLlAm=T%(piKY_J$e!;qcttQ&mY z{yf3#>|Zv;+Rv4tO%Q`rN>y`May|FT9i0wlh2hY=#rz^Esxw!fVDFgUklo zguLXaMcaXqU8(`B*=}{k76q3*2m}~oEBYS@u{feh(Bk9{^8sgV8SV^Z)w%2Pm`n}B zD}Xz$fgquzq`cctqnZ4msRJ5hW=IW3* zEshB@!yw^{mF6a$hVXX&(eB6BQOXv21*LL$W-fb)6NjQC^$xPepb7dr`cq)Bor@#z zZ1BHh{hY!^){i`AtTt19#a#GEFuBeaY5z4wi1cvF`{_QXR)O7EE=s$W^B%76-N!;) zT&8-wiNv?|BHUGc)Pf<**U_SjdU(9?=0aB93FsL-PMb7^?3y8vUej@ZnnKw!#*;T^ z;sbzX$O@mv%Y^r=X?gR0TGlfOcI}Letn=JAV5TU3EUc!-sr@{@{BZdL!X)ovTpU`uHAU!A?l+_zK@4!-GR>0qmx$f@J&!;;w%v~_OO@et=hv@L z=vNM=m<1kRyjmiZ9)ZTK3i70!H7vE9nvhPf1Tg}u?%M`a z?r;VY=BjG5!sU)dzAeWjc8x2PKqbK0ma5vwe^S>Ry@jddD7qzM1`$2jOc7O=3x3$u z8u3zx<6l)7tycP85Nft^-40D&56+)IE&KO{t3>>uBBKamdF)+YR2I$Ps_Byu$EdRfYfuI{pv-L_lS|rz`9W1o!$(ZUGy{NsAuJ>G?u)vQ+htgj}1cB z)6%e47_!0e;OvV)Ou{=3!GF(IOVMQ9{jxN(nBIWT&7-9wTT5g>nDIIJ9{j!j}>jhV*~}2BIK0GGB6crb639{T;y8eNABwn3mdjympfXWwyed zyDJ?&K8tZsbNX=KVZK))e^35GCK2cD4!eS!5V_I+aX9->*4?uABc9fvxiS7LBBnWZ z>V0iTI#a}RVYBHFJQj1)Mb=L^lRJe;sjo5o)`d!KE|D{>5Jk@Ok;;)i98Q^VQSV{4 z(%`}`Lco;PYUNmu4HP6V?6KUdt;ymoQre*LV@)nThQ(}|^yk&>ze6sjRv~6)2|tLs zJRhoJL{V2_FS9)8Q~A+)9xAXeem$!vuGxS~ioDxkLHY_$5!#ag?t7EyghxHc-;@6Z z3!OiSh7`R()Q`t-{oSGGZ)(s|rk3%?_-u7@Zs)P*bLH?lk{yQk46WNg@41)h;m_?O z*Z6M#B0SGouuxy|rxrNdv-p^+$RlGWMKO}%9K+PN@7qt6m&QbfyOZ1tgcUaODr;-~ zgn2XVKs~|Afns5?FK;Sscz(h#A~aaH)%T}oti9J9q`{_U&$ZqcvqlC@A}PNmrl&a= z40wcDq+TTtjqiLnUfrK7e~VCbo#^In)!z@GH(Z|JSuY0NX?@=>UYU5$gHNQL1fQ>_ zK945lSIM$M9!Q^Vq`)Wlo}p@87?4jcVacc`Pa%&*LyzFXUv5`i%%>?@vC>IVCjFXq zp>RBojP-2~G|X6ZIj@AN5wXj;KASO|!->p^ygjeT2bt;(qr5I^7+F0 z7NI`jg2DkEx#ramu>7?ZLJN%|K5rz}XD$0I5W{P+gyIo6Cu=dl$Z{)Y+4(X~drP(>DAy z+13XV)NukEb`|A5Cv0$=J`0HD<@M>Jv^xhm1{93BRt#i}Y*zl}xY{zHK zOTp|Q!y?(n3DBiB_8ouDD$I|+-9xgKnba&WDxA4zkkSqPQ9PZr-diVtpR%gRwWkUnJMStntvFn~79wKjKU4Me zL}MDEN0Rjd$X(V=-M7^^Of5?MT_EDcRYlA3G`zMP&(ts~0tzfu7@c&XyCW&%^iL^z z4zjjvEEf~pU*m0Tf4vVJ*4V4G^F4yHdp6o)Mir*t0g1CZW%L_BARl&P{Dv4Sr$6KP zGf!+9?eBovWI)*~X0v*Ht=(Mq15_%P*}|4PLW7!5(F|<#M^+S8zwsIJ^uxI<3H+y| zlzo>{-q4yz3~XKiVr7<|x@tMTXNF!jpF3qZg%-Y<3=wnWtcoPpunh({tRs;34`$X8 zB}#|=q&|P+x4C$_UCH~Wlj7Qs|RSiqc;2F}@@`A;ZlKaFoHZyF++ zwnkFFa>sw=lENhxd&yFn6XaCa!gt6eWuro*X&K#9AZdAMJtES{^=uI^w?wBSQeTJRte zZ$!Jkcu~Mdn2LpIvAw|ik6(rh*=gqED&+0aYt5(px-ARhq-T+OV&w!4(c|dH3gjw4 zs+k>j719LAUzD&sn0-?-TeG^~zc$P9qFM>#%=-l)`Co^KkzXG>yq$xJY)F-4Rt`B13p_kLh0mO~G(0NJawq%mi zR!#%Xxy9o}eYNim>#i-{DC1!|R+GQ>zm|(=#F_3Zw_qr($2a=AHjjxLFODwH1jA0L zK*Zfim%|H$FAa~C zBRTww{@XeUy!#&yYKSiWM0%*Gv~!Dd>8+Q5Ms*8PJ#ewwqNgK>6L_5t#5p?yxB={lKUNa~?lvo$d}Xx*|Z}=*FKo z=uYq33}p!1{ILAZsqbLD>xsklRKE@O-AT;24+zgShGl~JstR#ZM=!@;Vr%2AVt6yP z^=19xcn&}={1Qu!N8W!egPf4T=T^-?22TZ##inDK+4(Y{BJ+Dz2XD&lN$3s?H=dd+ z>U)mXU&UTep`47TvX3}cOl0sT$xywe-2<^nLGQ=g2gJ(;<%Og+Dpjzuz1>2u%zMD> zgt^gAb}h_05I{dYIdk)$lA_FM_S_#%Qp$4S*l96aCB=)2}ET?@Yb@cID1K45$@pis6vIy!2V?Sszbt%9e`19FFN!H4#z$Db79xf1J@Y--+M~R zib@C1U~ol={iza)TzF+y&mrA?Vou`oZ{H;YgemvrjK5m(rt`hkeR4d2_cmG6P6D zJ-cbP?IEy1_6IGuxUKfT|E7PmWf*&%%3};_@R&uYSOt)6B&+aDbe)}e0<%&Aa>`3> z+uwAnSf83~T(36WYuOt~32W(pF>a1N`s}wp0A)N{DlQ)`&tttRe_^5g^qFE;%*sn! zrK4_!BX9$$`q_rFf?}6Il0wY463I%-g$au*?)wvjb~lUZjH|iOiFEMQnd92jLr3{{ zG8pvn?zan_LLcq4_gA1ZryFga=V(ahr(chMav8VUmzNsBH$D0?AD5X;tKil8Ld9i~ zF1R54;5vnJivOO~;-SsiQEFDq5$+Gc=a}5h!;&`@CPGq9Tet6NG>dYSK)@H04C;aC z37vjz;JX3@U(03Qr^G$6adp^u77@AlF-$(~@?sXMVGt~>kLp6I<#FU44!O3Vhjb^) zo2Fr9D~r;}Tf#>ARVW)1vg&8P!q+2T%^$P_Z-sb2;+aK(ttXpRj*5d z?bLI=9!g14wOP=_H>Osx&^#WIp7TZ>u3eoDQMdbQ2a>G9)mBvPl3{FCb6>W#m8ZMc zDdIXl?bEFj-$1=YOJoci-7*J=5eHeLc>;qC67FT8) zF@sNNm^jMVj&x#%^A$Q66fz%v{syK734s*B?Zt#(g9P$f)UA2q5-y7|Ty8SW%%IDu z83uK=gv}=qLnU8Ql`!GMiI*imi;>~2G9KTthsM|habmm77ckf3wE#z-JPULtV8V{- z%b46c{v8@+?ARiM>$Z--}vkkQHu8~YZV~o z_wUEXM92Jp`ZSpa-xwv}6DdFGI{?E3#77JMGo>NiNILXKLKe6{Nenu`mHz!e4hCev zP>&ptvH$(N1Mrtz2phU+^Q#;bA1?ZFxjp|5mjCxdZvuG3^%I^kX;sU>&_76Dg6W@b zF#QcC?lge=0|Zhqs#*s;957Rn0{Z7vp5({>hq<>3s~UMu0B=VVC!A$l{v?FY%BoSZS>u{cQ4*E zAglyb6+2kiK~@EW)6p`hAznO1z@AW|P$Z|V{Tt{GjD{1l!nFK>z}*^TJOCSxXq`?M zl$7N{bsngk{`*cM?bpgbe*EYNklAz&r-%kvrID8$7HPnepr0EqH`oBa;l(RRG%F7H zg?Jh*ZU8Dr@bmLuTFJ(G>lw^50NY18qsb&dtbrLz{Cz48y}n2U4qJmh_;#hqX^s>T zkF&oP5KR9)XqY{VEdWR{k&%53Z2!(z0V%w0p)m&$H+TB0QQ*D+8z>)V5W|b+-e#j4 z4U){|ZNCxnhE=7H$;l(pYd;gh`u-4`^FjYH@9D*a&L3a8ag{&cG!Df`;h|Ou(`EonGg7YH=3rirMCbPa$OXx12818@d6LS1AyR< zW=axhlKOgk0qGdry(QXj3{*19zURP$v3m~UO5A~$#`Jf)&wo#)A2^l3*1`#(VsKjY zR)G=+S3HoRoE*@T48VX5ES~;BK_HQVxhM59{U^AWgargRpC8U6InVk5@5*esTnOJ4 zNIMGnG&Uemum>DwXJ_Y+e?KbVHhzV9&A|p(l+cKXtFurRa2ylh0RR|;Ks9Kqf11r5 zz4&Y-B*M-h%oF|n{cmoZACCc8>$=sC^cZ0hm#?+>kG*M~nV8U%R5*46g&y$t5n*BO zpr4~t_VxAsNTs%w6975;19(+|lwu6H`1I0|;QsMK9pTVZ$7~XUw>Ai5{imCKBb5@S z6FimttRnw8#ko9y>v{%!Gli2;J-2=W#Nu6{8uUvLlwc0b&J0K3~W zgMay$!GhL_D=Hx&0iNubm>A$b0ntE5GMiTr$J zp7XW|){-r?IsgR&W4=%}2kb;eDFVQE6@-BO@q@J+hBA0)VBWuHex{Pm1|bg+P=83G z0onS}Bm=h{MXW4HMFPl+!9a{)9?v)6YMZaj`UL?XULb?8__s?P;l&cEOhv}Y$q8;d zM`U6GM#gE!7=0Zbox0cs_#etZQu9{YNuW`&)dx8dFy1sUQ;K>E9$;0iK{(cdy zvjK%SB}+a>4jXF^UR+~+I}fgdJ4A6?T&G@7=NTZA!?cHsn)(PIpe7)QXeQjpoKC8r zft*~_z!JzV7=Ypm5I&B7rpf8(PC>kb`+5L6H&~~DyLnMgsYK}zRKmQbqDsI96{kc2 z>VsU-SOCe0Jr8|qCZ7G|!DzMG3|69J5FAvSZngN6e1?S-3o8gpb{|G)2chm28}NJl zdp*ZN1>y{iMq3~#kfI}|mI_NfZhKzk?0U@wM5&<7v2zFfFQCA|sS4i&q+gTs=?2c< z<;L^f3@@cXs24GZ&U>9#e^*=7zr@ZXB66O51unJ;M-XX7XE+Sjz&E=dX^pbKS6kdt zU|!ZpVEkE9EO+W2kvnI{}DAPOM(I^8}hPUUPFw zG#;m;R3;ms@B=c+ibyYDMF$Q>Tj1e72SgAN<_mS#7l~i5$tO5oLXIqUiOBO{eRp9Z zwGm=5l^-re3&JRv%w`LR`z$^Tn5c0dU3xhVDmGq{Y7KKZe_mt_g2McOycN>`c0eH4 z+k7>#*5pJ(e+uF$?k(?EkBs5oy?a&l1IYX?0oObW`$z~jjA4c`6?u^N^#fwZG@&3K zhs`$eJ>*U($P)V=uZ;QrIuD~xogpFnRj~g*SbztxlBuu`(*wh$eD814+<$M*4O|`l z9kL~p0&x_IXS-w1;0PNJf?S2l73uWLtvw-V_dq*4fe9{CCQGh1rv?Bb0GG2vL?Y(% z`YmhlyQDEhgmLyt>ePDc5d;I6&GobcRw^86r@xbVL*PbRbv>Z^OSe3Dvs{({OmVq# zd18t9cUs8S1k~pAY+g^zbw*^vz+53^FcHMY095(5{L-^Zu*`~}tg4)Cc!S0u=Izk3GUjh|!R_q8^!wxqz{P*llTkcB;ldV2H*h#g)+f0#4aA4BwBiKDC60o;7Px*s8sp1BLS zK^sCKyxVQGp0;yG0;QC#skBWG^x)G0<39QjLSP}e0A4vUF%g)q))}lvLI@T?87YvV zpZE^QMy78!gTUHN;|UjtGa3x4PGpL#>Sb}#uH@|5#Dp+dKC)kz81=x;dj|j=Og9{q z5D)-JPmll}i=q@C>Rx{s6tcKW&RAu4_Xn_NgHn004Oklu%d<2A%}qB&3o&7!BJ5wI z1ZrCCj@L%@6kR4hC6JJ3ps(KYo5_XW6$bJNwt>>_0U&}(T(G@Gk>>0O|7jEu;&d>3 z2(ZR3J%8^wO4XQHz_xZv^Am+{f_smaW&QInVv_8a&3ze~GOe_cjG*-I%~KV`^kp7O zocCn}Q}R~`u}-jV$iS#b7>y+7Ie5$($7?IVy?#x$Hc#vSUc?*C2TL-_hd5ngd~jSH z#JvQO1a6$Z1bzWk#?qdE<`EaA%g-JNU-T7XRp*2n73O>mTOIeH$q63zQO*`bk3D+icraskhrMljO(!Jr?> zl(2b-NU-gLLKPd)Y4_e+wkSheXzOwr7W@c|JVD(2iMvgu%3gQZ&ASyv3itEhDk2@=MR{fb%4IT$SEeI;!Ymn9FF>ffl4 zJ%PTmo)iJ>7yX2h#t0q3W|ovkH!S$Bds)Kx9v5Iub@b5aa}hQ$cji~+GuYr0v)n1o zA}>|LuNSIq-^nt+Ic+2-ZQKGP8e+_37&dMD31e2x%PY@m(l8u@zuhHTZLO9#V%bg$ z6W$n{i{8B9Sw*rjw;B!B>mU5Ur}P54$E5L2*(A0Y`66e&`ae}c@86o=pK00f(y8*t z{FyGnS7>Fn3ykuG)mx}82xcz5uu6r~T0&D&L>c0C(t$~q}?ltn5mgpkEasy?b z$zLCgS<(HM;IofUM{bt}zt~@dzx>-_`IxN{_%&}eQPq$-UF=&vQ&*Fy|GhvK0 z(h?Jq7-;a?8x*d~i|ry)WrvGpu25Na(PZYF9x#S5c8t^?4Q?2|8?1j`U0OLPvo~>LLqoB7>Quhi;>I#mewzqf^b9hjDmt>|l@jLl zy=0wH;~!BI^y+0WKH4y{kD9NwuFRx`Yy`o0MN2EFl_^Mw#9sA|sy<@9b>=5xypA#z!ZS!mi@A8xXl%+cA83&*V6w~aO21;t%u z-`~b7bw1=km}t6JzXYyPA^gE1`Mi#stgz%fIPVjP*W;4nDPmGKh}Oq$$v+*@jhf=v zZaSFiD7C|6dzAt0s;?1|IG_8~fr_2^cd*pLfm4OuU1Vg2o5$(!2*GLvaYHb6`VFLR zH{D|0tSS@xkAcFkN*^Sf-`X?yi5)ZXy%QvnF^U#1Nu<~`q2j)*gs@0XA>eEOWze2E zMVQv@P75_2b9p0*Ch-mcT^$(WU88wG@~K9JV-Ti)aS!5qnxGWF=_G3hex4SG+sh=H z)T-3xwWS4dNh&nH1jC<}ackC_AuOau4MU?{7C*Cv<-KH6wIWyOv2Rk(BPtzqLg9uR z@Ck3euVRV_W;1AT{1Smc`C%DYJBQzYN05pDU>t*p$k2zpi6tXR+Cti}#y2$32>l8% z3`SC;45T0fala@W#+Q6x*|@L!2h^t0i!9j^jnZxhu0zG*(q~mAk1GqC#gdW#!yN?j zIUTYAWd}Q^*bk*ii5@H}-@QJtoJQiX`C=X3{dj&0>A_|L^HHNDd|e`v_@o^Y(K-h} z1qTd;WUiOWfmqs>w)}nVCK1Q#6%(%Sl2~F}0 z9RdnM&aW)C4l3GaskA^?!cpiBe}#=^n@cF&Piv`wGytXwCGo`!0iG|vXAc*tdDzU;GcIQGT%W05HSM+;TuU@ z7EZ1fy}tMCiK~2EGm&Zbhl^>TK8TIOSolXpuvnc3W&7&t^|zKN{^(n*q>|B)yK>EJ$}1 z`?l5^Y*+!;3z5^)xHPi`qKWn%Rah~i*o8VU%O~&ct=?pRy?6^5Ll=oVB)~5*E3az~ z|7Wzn8@AIRX5;>p)8T*~vXp*!4m4bJyuZ6DTdk0~65+}c_N+gK4}^6o^ylWJyib`j zb@-yEL|>CVG|ujtWU za8f%1IM>S#ciA9EuB)An%OH6&+I&u-6JX(z-K$c!M@QcKN!$f%)I4Da4H45_sgr8F z>rBhats7s;4nHY&COZcV*q;p{KNDu=FvEalrkWJh0 z&`ykNIOCdAqx8}ubk;An8qK4`^;Wd!w%-u!f+&!0k>}HAV_r|O6XIXvvq8u)9}nKH zKN2el*LeJmi$d(fWRUpf`P%Dwm)vO1(%^*Q?FX@Z*zXX88ObqVcPPR{M2SUrT31)M zWKR{;5o&wM|)Pq7Xjv7&817H{{oi0=dcFP>8(w6Z2F{GJ1P_rzm23JIt$mk7Q0rRUjb5Ff%pFcN< zK%quG0uh7|Oy1jQ#|+8d^vp6*P!6dEcOW}PFx-Y>jdGclSXS-leF_J1Yi242o&dA` z&ipqV?V2haCt8_a`PK#{SvQs0M%*|)8rv1Yjb!Y6xb#`jC#S6IwtnW9fg>kdF97zA9=i&ZjNc+66OsLQNdbm)R-6u86vE(N*D#nS}apkNcO2*A+ z!y&p1PpBWX;vjgqHo1JwLkDVFVw^JA6Pb46n@Afyckn9N=KgmO^A;27N&ZfaI{{_( zYeB)>zMH)n&Moj2U|+H53jY>4-se*SZA*AsI9j<@Q5Y=&Cg$=fD#kY)@;L%rF%A%1 z4i)F=mx_RDR{Cl8cuV_;!N3?L`gB0!t01fPYKQA|WY59%I~n2PXHX{UUeVgp-X+;5 z+FS^6sBHr0v36i5>ol9*7Ojj!?(0}>;CY}ZlL-UmaezcaQvu_01mB|6#%|{3uve84 zZ9Pb`K{yYqQAZ-}bRAw9tb9yN`G99IES%e|EWk0G#-ZG#i3jXly=^9H3?tF)@O!FD z@i5S#vQ`gGAav*Q%Ut5UvBZwR65`Vf0m8RK^!al(P(x4--W;pQol*dvcXy|L6`ye8 z4W_eeIe!p|xf`8`)sd#2h2VCLt6G|ooB&U8yKlO#*feJ;`7!x7yPPZ;8ZH;Z7H_^D zT#wQSPt_mjPHZsE!v3i;1_eEdf$kDApQ{}epdSx4$NjQ~< z&QZt86SV+zE^xA-LA^>-a7baO^2EG7e9{kK7EEP$Z-;;qWT8cA1HY@j!Wms$KAI&@Ny zgvFLQ8(yXYg=5h_aOx+KD1n##`sM3?W1iP%6&PQ?%50>C5>)7jVPp)f+&5!Hy(HaQ z4Xy?U1BrwQ8Ym*-cTyqYs@YM+-(c1(+4^APMIq3D3i^3l1iHu{or+#upFyaWUU6kNe!VPPR5a-E0#qrJrCM;z#G57lBKa+rJ(u07R1 zMo}{scHZM@1L64*`HTtro+wsYDZYTPiovIFQHU8Qy zJsb+N8u*E%Nw56X*jiV?yto{eJc>)W?DKk$T@OxEE^@3T->4>bjRRNhruO7|ECdV; z#He^Ex{N_+$)=IQV*khV=^VkYag%>0w{yiOASiI55hYC(d9;s_;_!YJCD@;(hJ+%X za3PF1pNf6GsLdVBdtG;2Pb#H6fdCCNC|eVi0O4%cxI!AzUP`cFhWZ{_X6v_jk^6cb z#u@Nev4FVCHtTg?G3kdsf@FZmW(&0zAR-`ujlWoos~r6OQFRpI_D2|YeS#2Ho_$cC4cAo)SEGmE0b2@@aJ!rdI_?8n_cW82jM%M&fPer9lu`Ior8y6}_ZNO)dP@n=e}kA9d#h)l zL3F|r-}y!#xFxxciS5G5Y&z026QmeuZ8=&Vi^9ApmHpL!YaoA8Oim*kXo;mrde(+V zNLf@yQ^cq1io@LZu7p3pC-8PFsMF_>DMA3j8t4u;{dA&X~% zQfcoIz=#~SL>^Zz%NStI;{k$6fd6{5`Tqi;!WmR2X{*h&ovo`#vC!Rs`D`pcEv2b1 z-cF^epZum^5M%c+lFei|XF#c(}lj0G-YIL4XE^8ELysPbkSamAU% zTH@5i!k6ti186GLbxI>`6`7eTNE%A6#3scg|H666N3T+5$M)5>vBqE5=GwF4#cS6~ zckQ|Up>umpuUkqEu};72a-oq|iw-<^6q9NMXLVE@v0QZyAQyr+X#J<#0 z6pm?0DNWI6DxsGX9cUVakc8g}YmfegNXU)}d?Yp5<-HWKnkjJjI{KG_OvZzaY5#nH z+9>tS8=~+#H|-Hvia*77#(a~~ff%ii3SZMxMbX5e^brtmY)v-`P!y+<|FjrE_CCfl zo(W$g3+am|UnprmX+Ri_lDZ5oNZ36{$j#EuJggJ#w#-_J-&qT2s~CUPaGz|_L+%@s zOebn{CeHLkb6`_@tEG&TftPu-kI{a~kWlF5nY5L>BSbb{;p+3m^t#IzQ>H2XF@Tjn z;JS$z5h0JlbK&5(dMI+X-k0V%Dms#M0x!=2PeXWES%={jg2w7hoQ$;E&3>aVG1vsO znP>Hnoo7aEl@Gt4=5`wMt5!l8%H@ObrBUOAuY2;d%P?dL@~t?Y$~@|Z<(MN6aEDqJ z$V*j5sUZ7Y1|FDk!TJT=8tYPD0z%=n0IvkVAz4{j0BTVy6pqJAbF-PxSAtU0$LjVP zs7FYryGZ-)VnC!P7|aqDi^z2$0~pD;s!(%Kz-n~X0^g*=>UO%@5dqiQA4%QveYeX$ zOuF6BQnuPH@jn171p6ARq;e`|0+ z#H=zYFuV~Nv92}R8O=2r_lJv%FaxV#O(BunsyF1*Apj&nx&SK}2vX-FPYw2*;kYm8 zCO^6M;n0Xsio;0x?Hc!`W1-9UJoiKi-oB{pS`wPUG34Cplr$y% z-eYWscaslpr+=*m)@YP!v8`wgali;xcAvD*GEaioGl09 zxAE{o1JUmJbtzWuwvbk??8SN@dOY6zxPg7Op`o*N8Zlx-e>O7m2z^5W11&9?xQO$_ zcMC*G?vv5acgQmWTIu!j0XIW*YDv%$(EM!YM_&*IF