From e6580a87dc6a936b99e4c78061a280554028f899 Mon Sep 17 00:00:00 2001 From: "3a1b2c3@protonmail.com" Date: Fri, 4 Sep 2026 12:17:28 +1000 Subject: [PATCH 1/2] Restore lingbot web UI, presets and setup/run scripts in v2 layout Ports the lingbot demo web assets from the pre-v2 tree (integrations/lingbot/lingbot/webrtc/web/) into the v2 application layout at integrations_v2/lingbot/apps/cam2v/web/, and ships them via package-data so they install with the package. Adds plain venv+pip setup.sh (no uv) and run.sh, which drives the v2 CLI (flashdreams-run-v2) since the v1 runner and RUNNER_CONFIGS were removed in the v2 refactor. run.sh exposes LIGHT/WIDTH/HEIGHT/FPS to reduce the generated frame size and rate; there is no encoder choice to make because v2 serving hands raw frames to aiortc's software encoder. Co-Authored-By: Claude Opus 5 --- .../lingbot/apps/cam2v/web/adapter.css | 450 +++++++ .../lingbot/apps/cam2v/web/adapter.js | 1064 +++++++++++++++++ .../lingbot/apps/cam2v/web/assets/circuit.jpg | Bin 0 -> 100754 bytes .../apps/cam2v/web/assets/jet-ski-cruise.jpg | Bin 0 -> 191481 bytes .../cam2v/web/assets/noir-alley-combat.jpg | Bin 0 -> 136744 bytes .../cam2v/web/assets/sources/f1-race.json | 182 +++ .../cam2v/web/assets/sources/gta-car.json | 104 ++ .../web/assets/sources/jet-ski-cruise.json | 224 ++++ .../web/assets/sources/noir-alley-combat.json | 95 ++ .../cam2v/web/assets/sources/watergun.json | 157 +++ .../apps/cam2v/web/assets/watergun.jpg | Bin 0 -> 53817 bytes .../lingbot/apps/cam2v/web/scene_presets.json | 112 ++ integrations_v2/lingbot/pyproject.toml | 9 + integrations_v2/lingbot/run.sh | 83 ++ integrations_v2/lingbot/setup.sh | 118 ++ 15 files changed, 2598 insertions(+) create mode 100644 integrations_v2/lingbot/apps/cam2v/web/adapter.css create mode 100644 integrations_v2/lingbot/apps/cam2v/web/adapter.js create mode 100644 integrations_v2/lingbot/apps/cam2v/web/assets/circuit.jpg create mode 100644 integrations_v2/lingbot/apps/cam2v/web/assets/jet-ski-cruise.jpg create mode 100644 integrations_v2/lingbot/apps/cam2v/web/assets/noir-alley-combat.jpg create mode 100644 integrations_v2/lingbot/apps/cam2v/web/assets/sources/f1-race.json create mode 100644 integrations_v2/lingbot/apps/cam2v/web/assets/sources/gta-car.json create mode 100644 integrations_v2/lingbot/apps/cam2v/web/assets/sources/jet-ski-cruise.json create mode 100644 integrations_v2/lingbot/apps/cam2v/web/assets/sources/noir-alley-combat.json create mode 100644 integrations_v2/lingbot/apps/cam2v/web/assets/sources/watergun.json create mode 100644 integrations_v2/lingbot/apps/cam2v/web/assets/watergun.jpg create mode 100644 integrations_v2/lingbot/apps/cam2v/web/scene_presets.json create mode 100644 integrations_v2/lingbot/run.sh create mode 100644 integrations_v2/lingbot/setup.sh diff --git a/integrations_v2/lingbot/apps/cam2v/web/adapter.css b/integrations_v2/lingbot/apps/cam2v/web/adapter.css new file mode 100644 index 000000000..0070e2933 --- /dev/null +++ b/integrations_v2/lingbot/apps/cam2v/web/adapter.css @@ -0,0 +1,450 @@ +/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. */ +/* SPDX-License-Identifier: Apache-2.0 */ + +.firstFramePreview { + position: absolute; + inset: 0; + opacity: 0; + transition: opacity 220ms ease; +} + +.stageVideo, +.firstFramePreview { + inset: 50% auto auto 50%; + width: min( + 100vw, + var(--lingbot-video-width, 832px), + var(--lingbot-video-width-from-vh, 179.31vh) + ); + height: auto; + max-height: min(100vh, var(--lingbot-video-height, 464px)); + aspect-ratio: var(--lingbot-video-aspect, 832 / 464); + transform: translate(-50%, -50%); + object-fit: contain; + object-position: center; +} + +body.is-ready-preview .firstFramePreview { + opacity: 1; +} + +.gameOverOverlay { + position: absolute; + inset: 0; + display: flex; + align-items: center; + justify-content: center; + font-size: clamp(32px, 6vw, 72px); + font-weight: 900; + letter-spacing: 0.12em; + color: #ff4d4d; + text-shadow: 0 0 24px rgba(255, 77, 77, 0.85), 0 2px 6px rgba(0, 0, 0, 0.9); + background: rgba(0, 0, 0, 0.35); + pointer-events: none; + z-index: 5; +} + +.gameOverOverlay[hidden] { + display: none; +} + +.healthBar { + display: grid; + gap: 4px; + margin-bottom: 12px; +} + +.healthBarLabel { + display: flex; + justify-content: space-between; + font-size: 12px; + opacity: 0.8; +} + +.healthBarTrack { + height: 10px; + border-radius: 5px; + background: rgba(255, 255, 255, 0.14); + overflow: hidden; +} + +.healthBarFill { + height: 100%; + width: 100%; + background: #4caf50; + transition: width 200ms ease, background-color 200ms ease; +} + +.healthBarFill.is-low { + background: #e53935; +} + +.sceneCard { + position: absolute; + top: clamp(120px, 15vh, 168px); + left: clamp(18px, 3vw, 52px); + display: grid; + gap: 12px; + width: min(560px, calc(100vw - 36px)); + max-height: min(680px, calc(100vh - 224px)); + padding: 16px 18px 18px; + overflow: auto; +} + +.sceneCard[hidden], +.eventControls[hidden], +.eventButtons[hidden], +.promptControlGroup[hidden], +.controlsModeToggle[hidden], +.healthBar[hidden] { + display: none; +} + +.controlsModeToggle { + display: flex; + align-items: center; + gap: 8px; + grid-column: 1 / -1; + margin-bottom: 4px; + background: none; + border: none; + padding: 0; + cursor: pointer; +} + +.controlsModeToggleTrack { + position: relative; + width: 34px; + height: 18px; + border-radius: 9px; + background: rgba(255, 255, 255, 0.2); + transition: background-color 150ms ease; + flex-shrink: 0; +} + +.controlsModeToggleKnob { + position: absolute; + top: 2px; + left: 2px; + width: 14px; + height: 14px; + border-radius: 50%; + background: #fff; + transition: transform 150ms ease; +} + +.controlsModeToggle.is-on .controlsModeToggleTrack { + background: #4caf50; +} + +.controlsModeToggle.is-on .controlsModeToggleKnob { + transform: translateX(16px); +} + +.firstFrameSourceRow { + display: grid; + grid-template-columns: 86px minmax(0, 1fr) 86px; + gap: 8px; + min-height: 68px; +} + +.firstFrameSourceRow[data-mode="upload"] { + grid-template-columns: minmax(0, 1fr) 86px 86px; +} + +.sourcePane { + min-width: 0; + overflow: hidden; + border: 1px solid rgba(255, 255, 255, 0.13); + border-radius: 8px; + background: rgba(255, 255, 255, 0.045); +} + +.firstFrameSourceRow[data-mode="upload"] .sourcePaneUpload, +.firstFrameSourceRow[data-mode="url"] .sourcePaneUrl { + border-color: rgba(142, 240, 28, 0.38); + background: rgba(255, 255, 255, 0.075); +} + +.sourceModeButton, +.uploadControl { + width: 100%; + min-height: 68px; + border: 0; + background: transparent; + color: var(--text); + cursor: pointer; + font-size: 0.78rem; + font-weight: 800; +} + +.uploadControl { + display: none; + align-items: center; + justify-content: center; + padding: 0 14px; +} + +.uploadControl input { + position: absolute; + width: 1px; + height: 1px; + opacity: 0; +} + +.firstFrameSourceRow[data-mode="upload"] .sourcePaneUpload .uploadControl { + display: flex; +} + +.firstFrameSourceRow[data-mode="upload"] .sourcePaneUpload .sourceModeButton, +.firstFrameSourceRow[data-mode="url"] .sourcePaneUrl .sourceModeButton { + display: none; +} + +.promptControl, +.textEventEditor, +.urlControl { + display: grid; + gap: 6px; + color: var(--muted); + font-size: 0.76rem; + font-weight: 700; +} + +.urlControl { + display: none; + padding: 8px; +} + +.firstFrameSourceRow[data-mode="url"] .sourcePaneUrl .urlControl { + display: grid; +} + +.promptControl textarea, +.promptControl input, +.textEventPrompt, +.textEventLabel, +.urlControl input { + width: 100%; + padding: 10px 12px; + border: 1px solid rgba(255, 255, 255, 0.18); + border-radius: 6px; + outline: 0; + background: rgba(4, 6, 7, 0.62); + color: var(--text); + font: 0.84rem/1.3 inherit; +} + +.promptControl textarea { + min-height: 94px; + resize: vertical; +} + +.promptControl textarea:focus, +.promptControl input:focus, +.textEventPrompt:focus, +.textEventLabel:focus, +.urlControl input:focus { + outline: 2px solid rgba(142, 240, 28, 0.38); + outline-offset: 2px; +} + +.urlUpdateButton, +.textEventAddButton, +.textEventRemoveButton { + border: 1px solid rgba(142, 240, 28, 0.42); + border-radius: 7px; + background: rgba(142, 240, 28, 0.14); + color: var(--text); + cursor: pointer; + font-size: 0.76rem; + font-weight: 800; +} + +.urlUpdateButton { + min-height: 68px; +} + +.firstFrameUpdateRow { + min-height: 0; +} + +.fieldStatus { + color: var(--muted); + font-size: 0.76rem; + font-weight: 700; +} + +.fieldStatus[data-state="error"] { + color: var(--danger); +} + +.fieldStatus[data-state="success"] { + color: var(--accent); +} + +.fieldStatus[data-state="pending"] { + color: var(--warning); +} + +.textEventHeader { + display: flex; + align-items: center; + justify-content: space-between; + min-height: 32px; +} + +.textEventAddButton, +.textEventRemoveButton { + min-width: 34px; + min-height: 30px; +} + +.textEventRemoveButton { + border-color: rgba(255, 255, 255, 0.18); + background: rgba(255, 255, 255, 0.06); + color: var(--muted); +} + +.textEventList, +.textEventFields { + display: grid; + gap: 8px; +} + +.textEventRow { + display: grid; + grid-template-columns: minmax(0, 1fr) 34px; + gap: 8px; + align-items: start; +} + +.textEventPrompt { + min-height: 62px; + resize: vertical; +} + +.textEventDirectorToggle { + display: flex; + align-items: center; + gap: 6px; + font-size: 12px; + color: var(--muted); + cursor: pointer; +} + +.eventControls { + display: grid; + grid-template-columns: minmax(0, 1fr) auto; + gap: 8px; + margin-top: 16px; + padding-top: 14px; + border-top: 1px solid rgba(255, 255, 255, 0.14); +} + +.eventButtons { + display: flex; + flex-wrap: wrap; + gap: 8px; +} + +.eventControls .promptControlGroup { + grid-column: 1 / -1; + margin-top: 8px; +} + +.eventButton { + min-height: 34px; + padding: 0 12px; + border: 1px solid rgba(255, 255, 255, 0.20); + border-radius: 6px; + background: rgba(12, 14, 15, 0.62); + color: var(--text); + cursor: pointer; + font-size: 0.78rem; + font-weight: 800; +} + +.eventButton.is-active { + border-color: rgba(99, 216, 255, 0.72); + background: rgba(99, 216, 255, 0.16); + color: #dff7ff; +} + +.eventButtonHealth { + margin-left: 6px; + font-weight: 800; +} + +.eventButtonHealth.is-negative { + color: #ff8a8a; +} + +.eventButtonHealth.is-positive { + color: #8ef01c; +} + +@media (min-width: 901px) { + .sceneCard, + .controlCard { + width: min(560px, calc(100vw - 36px)); + } + + .sceneCard { + max-height: clamp(280px, calc(100vh - 500px), 430px); + } + + .controlRows { + grid-template-columns: repeat(2, minmax(0, 1fr)); + column-gap: 24px; + } + + .controlRow { + grid-template-columns: minmax(96px, 176px) 1fr; + gap: 12px; + } +} + +@media (max-width: 900px) { + .stage { + min-height: max(100svh, 1660px); + } + + .sceneCard { + top: 270px; + right: 18px; + left: 18px; + width: auto; + max-height: 570px; + } + + .controlCard { + top: 860px; + bottom: auto; + } + + .logCard { + top: 1216px; + bottom: auto; + } +} + +@media (max-width: 560px) { + .stage { + min-height: max(100svh, 1900px); + } + + .logCard { + top: 1395px; + } + + .firstFrameSourceRow, + .firstFrameSourceRow[data-mode="upload"] { + grid-template-columns: 74px minmax(0, 1fr); + } + + .urlUpdateButton { + grid-column: 1 / -1; + min-height: 44px; + } +} diff --git a/integrations_v2/lingbot/apps/cam2v/web/adapter.js b/integrations_v2/lingbot/apps/cam2v/web/adapter.js new file mode 100644 index 000000000..0bd71ce82 --- /dev/null +++ b/integrations_v2/lingbot/apps/cam2v/web/adapter.js @@ -0,0 +1,1064 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +const mockMode = new URLSearchParams(window.location.search).has("mock") +// ?director shows the separate Director Controls panel (environment/pacing +// events, e.g. weather and hazards) alongside Player Controls -- hidden by +// default since this is a second operator's role, not the regular player's. +// Also toggleable at runtime via the "Director Mode" button (no URL edit +// needed); mutable for that reason. +let directorMode = new URLSearchParams(window.location.search).has("director") + +// Letter hotkeys for event buttons, in assignment order. Excludes the +// reserved movement keys (w/a/s/d/q/e/i/j/k/l) and "c" (Clear's own +// hotkey) so they never collide with driving input or each other. Letters +// run out before director-heavy presets do -- events past the pool size +// simply render without a hotkey, same as the old 9-key digit cap. +const EVENT_HOTKEY_LETTERS = ["b", "f", "g", "h", "m", "n", "o", "p", "r", "t", "u", "v", "x", "y", "z"] + +// Jump/Crouch are player movement actions, not narrative/pacing triggers -- +// rendered in their own row next to the movement key grid instead of the +// general event button list. +const MOVEMENT_ACTION_EVENT_IDS = new Set(["jump", "crouch"]) + +function presetSlug(name) { + return name.toLowerCase().trim().replace(/\s+/g, "-") +} + +function findPresetIndexBySlug(slug) { + if (!slug) return -1 + const normalized = slug.toLowerCase().trim() + return scenePresets.findIndex((preset) => presetSlug(preset.name) === normalized) +} + +// Loaded from scene_presets.json (a sibling file, fetched relative to this +// module) rather than inlined here, so presets/events can be hand-edited +// without touching JS. Populated by loadScenePresets(), awaited in mount() +// before anything that reads it (dropdown build, default-preset apply). +let scenePresets = [] + +async function loadScenePresets() { + const url = new URL("./scene_presets.json", import.meta.url).href + const response = await fetch(url) + if (!response.ok) { + throw new Error(`scene_presets.json fetch failed (${response.status})`) + } + const data = await response.json() + if (!Array.isArray(data)) { + throw new Error("scene_presets.json must contain a JSON array.") + } + scenePresets = data +} + +const controls = [ + { + label: "Drive / Turn", + keys: [ + { key: "w", label: "Forward" }, + { key: "a", label: "Turn left" }, + { key: "s", label: "Backward" }, + { key: "d", label: "Turn right" }, + ], + }, + { + label: "Strafe", + keys: [ + { key: "q", label: "Strafe left" }, + { key: "e", label: "Strafe right" }, + ], + }, + { + label: "Pitch", + keys: [ + { key: "i", label: "Pitch up" }, + { key: "k", label: "Pitch down" }, + ], + }, + { + label: "Look", + keys: [ + { key: "j", label: "Look left" }, + { key: "l", label: "Look right" }, + ], + }, +] + +let context = null +let initialScene = null +let initialSceneLocked = false +let promptEdited = false +let textEventsEdited = false +let firstFrameUrlEdited = false +let firstFrameInputMode = "url" +let selectedFirstFrameFile = null +let selectedFirstFrameUrl = null +let firstFrameSelectionCommitted = false +let activeEventId = null +let textEventDrafts = [] +let textEventSequence = 0 + +let preview = null +let gameOverOverlay = null +let sceneCard = null +let presetSelect = null +let savePresetButton = null +let firstFrameSourceRow = null +let uploadModeButton = null +let urlModeButton = null +let firstFrameInput = null +let firstFrameUrlInput = null +let firstFrameUrlUpdateButton = null +let firstFrameUrlStatus = null +let firstFrameName = null +let promptInput = null +let textEventList = null +let addTextEventButton = null +let eventControls = null +let eventButtons = null +let actionButtons = null +let clearEventButton = null +let livePromptInput = null +let livePromptSubmitButton = null +let directorButtons = null +let controlsModeToggle = null +let enableDirectorModeButton = null +let playerPromptGroup = null +// The shared movement key grid (w/a/s/d/q/e/i/j/k/l) lives outside our own +// panel in the shared page, addressable by its fixed id -- hidden while +// the Director tab is active since a director doesn't drive movement. +const movementControlRows = document.getElementById("controlRows") +// The shared panel's own heading text, also addressable by a fixed id -- +// swapped between "Player Controls" / "Director Controls" to match +// whichever mode is active. +const controlsPanelTitleText = document.getElementById("controlsPanelTitleText") +let healthBar = null +let healthBarFill = null +let healthBarValue = null +let healthBarLabelText = null +// Purely a client-side cosmetic HUD -- the server/runtime has no concept of +// health, this just tracks event `health` deltas locally (matching the +// original REACTOR case files' HUD) so the presets feel game-like. +let currentHealth = 100 +let maxHealth = 100 +let directorPromptGroup = null +let directorPromptInput = null +let directorPromptSubmitButton = null +// Player Controls is always the default view, even when ?director is set +// (which only reveals the toggle switch) -- Director Controls requires an +// explicit toggle click. +let showingDirectorControls = false +let currentPreset = null + +function makeSceneCard() { + const panel = document.createElement("section") + panel.className = "sceneCard overlayPanel" + panel.setAttribute("aria-label", "Initial Scene") + panel.innerHTML = ` + Initial Scene +
+ +
+ + +
+
+
+
+ + +
+
+ +
+ + +
+
+ +
+
+ +
+
+ + +
+
+
+ Text Events + +
+
+
+ ` + return panel +} + +function makeEventControls() { + const root = document.createElement("div") + root.className = "eventControls" + root.hidden = true + root.innerHTML = ` + +
+
+ Health + 100/100 +
+
+
+ +
+ + + +
+ + +
+ + ` + return root +} + +function bindElements() { + presetSelect = sceneCard.querySelector("#scenePresetsSelect") + savePresetButton = sceneCard.querySelector(".savePresetButton") + firstFrameSourceRow = sceneCard.querySelector(".firstFrameSourceRow") + uploadModeButton = sceneCard.querySelector(".uploadModeButton") + urlModeButton = sceneCard.querySelector(".urlModeButton") + firstFrameInput = sceneCard.querySelector(".firstFrameInput") + firstFrameUrlInput = sceneCard.querySelector(".firstFrameUrlInput") + firstFrameUrlUpdateButton = sceneCard.querySelector(".urlUpdateButton") + firstFrameUrlStatus = sceneCard.querySelector(".fieldStatus") + firstFrameName = sceneCard.querySelector(".firstFrameName") + promptInput = sceneCard.querySelector(".promptControl textarea") + textEventList = sceneCard.querySelector(".textEventList") + addTextEventButton = sceneCard.querySelector(".textEventAddButton") + eventButtons = eventControls.querySelector(".eventButtons:not(.actionButtons):not(.directorButtons)") + actionButtons = eventControls.querySelector(".actionButtons") + // Jump/Crouch render as their own row right after the shared movement + // key grid, so they read as part of "movement" rather than the general + // event/trigger list below. + if (movementControlRows) movementControlRows.after(actionButtons) + clearEventButton = eventControls.querySelector(".eventButtonClear") + directorButtons = eventControls.querySelector(".directorButtons") + controlsModeToggle = eventControls.querySelector(".controlsModeToggle") + // Physically move ahead of the shared movement key grid (a separate, + // earlier DOM sibling this panel doesn't otherwise control) so it's + // genuinely the first control in the panel, not just first within our + // own content. + if (movementControlRows) movementControlRows.before(controlsModeToggle) + enableDirectorModeButton = eventControls.querySelector(".enableDirectorModeButton") + playerPromptGroup = eventControls.querySelector(".playerPromptGroup") + healthBar = eventControls.querySelector(".healthBar") + // Query healthBar's own descendants BEFORE relocating it below -- once + // moved out of eventControls, eventControls.querySelector(...) can no + // longer find them (they're no longer inside its subtree), which left + // these all null and silently broke every health bar update. + healthBarFill = healthBar.querySelector(".healthBarFill") + healthBarValue = healthBar.querySelector(".healthBarValue") + healthBarLabelText = healthBar.querySelector(".healthBarLabelText") + // Also moved ahead of the movement grid, right after the toggle (so + // order is: toggle, health bar, movement grid, then the rest of this + // panel's own content). + if (movementControlRows) movementControlRows.before(healthBar) + livePromptInput = eventControls.querySelector(".playerPromptGroup .promptControl input") + livePromptSubmitButton = eventControls.querySelector(".playerPromptGroup .promptSubmitButton") + directorPromptGroup = eventControls.querySelector(".directorPromptGroup") + directorPromptInput = eventControls.querySelector(".directorPromptGroup .promptControl input") + directorPromptSubmitButton = eventControls.querySelector(".directorPromptGroup .promptSubmitButton") +} + +function makeTextEventId(label = "") { + const slug = String(label) + .toLowerCase() + .replace(/[^a-z0-9]+/g, "-") + .replace(/^-+|-+$/g, "") + .slice(0, 48) + textEventSequence += 1 + return `${slug || "event"}-${textEventSequence}` +} + +function makeTextEventDraft(item = {}) { + const label = String(item.label || "").trim() + return { + event_id: String(item.event_id || item.id || "").trim() || makeTextEventId(label), + label, + prompt: String(item.prompt || "").trim(), + // Player by default -- only true for a preset's own directorEvents + // (tagged explicitly in applyPreset) or a custom event flipped via the + // Director checkbox in the Text Events editor. + isDirector: Boolean(item.isDirector), + } +} + +function setFirstFrameInputMode(mode) { + if (mode !== "upload" && mode !== "url") { + return + } + firstFrameInputMode = mode + firstFrameSourceRow.dataset.mode = mode + uploadModeButton.setAttribute("aria-pressed", mode === "upload" ? "true" : "false") + urlModeButton.setAttribute("aria-pressed", mode === "url" ? "true" : "false") +} + +function setFirstFrameStatus(message = "", state = "idle") { + firstFrameUrlStatus.textContent = message + firstFrameUrlStatus.hidden = !message + firstFrameUrlStatus.dataset.state = state +} + +function defaultFirstFrameName() { + return initialScene?.has_first_frame ? "Example Image" : "Choose Image" +} + +function clearSelectedFile() { + selectedFirstFrameFile = null + firstFrameSelectionCommitted = false + firstFrameInput.value = "" + if (selectedFirstFrameUrl) { + URL.revokeObjectURL(selectedFirstFrameUrl) + selectedFirstFrameUrl = null + } +} + +function updatePreview() { + const selected = selectedFirstFrameUrl && firstFrameSelectionCommitted + // A picked preset (or manually typed URL) that hasn't been pushed to the + // server yet via "Update" -- must take priority over the server's own + // default first-frame endpoint below, otherwise applyInitialScene()'s + // unconditional updatePreview() call stomps the just-applied preset + // image back to the server default on every load/re-fetch. + const pendingUrl = firstFrameUrlEdited && firstFrameUrlInput.value.trim() + const initial = initialScene?.has_first_frame && initialScene?.first_frame_url + if (selected) { + preview.src = selectedFirstFrameUrl + } else if (pendingUrl) { + preview.src = pendingUrl + } else if (initial) { + const separator = initialScene.first_frame_url.includes("?") ? "&" : "?" + preview.src = `${initialScene.first_frame_url}${separator}t=${Date.now()}` + } + document.body.classList.toggle( + "is-ready-preview", + !context.isVideoVisible() && Boolean(selected || pendingUrl || initial), + ) +} + +function setSessionLocked(locked) { + initialSceneLocked = locked + sceneCard.hidden = locked + for (const input of sceneCard.querySelectorAll("input, textarea, button")) { + input.disabled = locked + } +} + +function renderTextEventEditor() { + textEventList.replaceChildren() + for (const [index, draft] of textEventDrafts.entries()) { + const row = document.createElement("div") + row.className = "textEventRow" + const fields = document.createElement("div") + fields.className = "textEventFields" + const label = document.createElement("input") + label.className = "textEventLabel" + label.maxLength = 64 + label.placeholder = "Label" + label.value = draft.label + const prompt = document.createElement("textarea") + prompt.className = "textEventPrompt" + prompt.rows = 2 + prompt.maxLength = 1000 + prompt.placeholder = "Event prompt" + prompt.value = draft.prompt + const directorToggle = document.createElement("label") + directorToggle.className = "textEventDirectorToggle" + const directorCheckbox = document.createElement("input") + directorCheckbox.type = "checkbox" + directorCheckbox.checked = Boolean(draft.isDirector) + const directorToggleText = document.createElement("span") + directorToggleText.textContent = "Director" + directorToggle.append(directorCheckbox, directorToggleText) + const remove = document.createElement("button") + remove.className = "textEventRemoveButton" + remove.type = "button" + remove.textContent = "X" + remove.setAttribute("aria-label", `Remove text event ${index + 1}`) + for (const input of [label, prompt, directorCheckbox]) { + input.disabled = initialSceneLocked + input.addEventListener("focus", context.releaseControls) + } + label.addEventListener("input", () => { + draft.label = label.value + textEventsEdited = true + }) + prompt.addEventListener("input", () => { + draft.prompt = prompt.value + textEventsEdited = true + }) + directorCheckbox.addEventListener("change", () => { + draft.isDirector = directorCheckbox.checked + textEventsEdited = true + // Live Player/Director Controls buttons need to reflect which panel + // this event now belongs to immediately, same as label/prompt edits + // becoming visible on the next render. + renderEventControls() + }) + remove.disabled = initialSceneLocked + remove.addEventListener("click", () => { + textEventDrafts.splice(index, 1) + textEventsEdited = true + renderTextEventEditor() + renderEventControls() + }) + fields.append(label, prompt, directorToggle) + row.append(fields, remove) + textEventList.append(row) + } +} + +function collectTextEvents() { + const events = [] + const usedIds = new Set() + for (const draft of textEventDrafts) { + const label = draft.label.trim() + const prompt = draft.prompt.trim() + if (!label && !prompt) { + continue + } + if (!prompt) { + throw new Error("Each text event needs a prompt.") + } + let eventId = String(draft.event_id || "").trim() || makeTextEventId(label) + while (usedIds.has(eventId)) { + eventId = makeTextEventId(label) + } + draft.event_id = eventId + usedIds.add(eventId) + events.push({ event_id: eventId, label: label || eventId, prompt, category: "custom" }) + } + return events +} + +let eventHotkeyMap = new Map() + +function getEventHealthDelta(eventId) { + // Looked up from currentPreset's own definitions (not the transient + // render catalog) so it still works once connected, after the server's + // echoed event_catalog -- which has no health field -- takes over as the + // render source. + const fromPlayer = currentPreset?.events?.find((item) => item.event_id === eventId) + const fromDirector = currentPreset?.directorEvents?.find((item) => item.event_id === eventId) + const health = (fromPlayer ?? fromDirector)?.health + return Number.isFinite(health) ? health : 0 +} + +function resetHealth(preset) { + maxHealth = Number(preset?.hud?.maxHealth) || 100 + currentHealth = maxHealth + if (healthBarLabelText) healthBarLabelText.textContent = preset?.hud?.healthLabel || "Health" + renderHealthBar() +} + +function renderHealthBar() { + if (gameOverOverlay) gameOverOverlay.hidden = currentHealth > 0 + if (!healthBarFill) return + const pct = maxHealth > 0 ? Math.max(0, Math.min(100, (currentHealth / maxHealth) * 100)) : 0 + healthBarFill.style.width = `${pct}%` + healthBarFill.classList.toggle("is-low", pct <= 25) + healthBarValue.textContent = `${Math.round(currentHealth)}/${Math.round(maxHealth)}` +} + +function applyHealthDelta(delta, label = "") { + if (!Number.isFinite(delta) || delta === 0) return + currentHealth = Math.max(0, Math.min(maxHealth, currentHealth + delta)) + renderHealthBar() + const sign = delta > 0 ? "+" : "" + const healthLabel = healthBarLabelText?.textContent || "health" + context?.logEvent( + `${label ? `${label}: ` : ""}${healthLabel.toLowerCase()} ${sign}${delta} (now ${Math.round(currentHealth)}/${Math.round(maxHealth)})`, + { source: "client" }, + ) +} + +function isDirectorEventId(eventId) { + return Boolean(currentPreset?.directorEvents?.some((item) => item.event_id === eventId)) +} + +// textEventDrafts items carry their own isDirector flag (set in +// applyPreset()/the Text Events editor's Director checkbox); anything else +// (e.g. the server-echoed event_catalog, before any draft carries the +// field) falls back to the preset-membership check above. +function eventIsDirector(item) { + return typeof item.isDirector === "boolean" ? item.isDirector : isDirectorEventId(item.event_id) +} + +function makeEventButton(item, hotkeyLetter, healthDelta = 0) { + const eventId = String(item.event_id || "").trim() + if (!eventId) return null + const label = String(item.label || eventId) + const button = document.createElement("button") + button.className = "eventButton" + button.type = "button" + const hotkeyText = + hotkeyLetter === "space" ? "Space" : hotkeyLetter === "control" ? "Ctrl" : hotkeyLetter ? hotkeyLetter.toUpperCase() : null + button.append(document.createTextNode(hotkeyText ? `${label} (${hotkeyText})` : label)) + if (Number.isFinite(healthDelta) && healthDelta !== 0) { + const healthTag = document.createElement("span") + healthTag.className = `eventButtonHealth ${healthDelta > 0 ? "is-positive" : "is-negative"}` + healthTag.textContent = healthDelta > 0 ? `+${healthDelta}` : String(healthDelta) + button.append(healthTag) + } + button.classList.toggle("is-active", activeEventId === eventId) + button.addEventListener("click", () => sendTextEvent(eventId, "trigger")) + return button +} + +function renderEventControls() { + // A picked preset's events (textEventDrafts, not yet pushed to the + // server via connect/Send) must take priority over the server's last- + // known event_catalog -- otherwise applyInitialScene()'s unconditional + // call here stomps the just-applied preset's events back to whatever + // the server currently has (its default catalog on first load). + const catalog = textEventsEdited + ? textEventDrafts + : Array.isArray(initialScene?.event_catalog) ? initialScene.event_catalog : [] + const playerItems = catalog.filter((item) => !eventIsDirector(item)) + const directorItems = catalog.filter((item) => eventIsDirector(item)) + + // Player events get digit hotkeys (1-9), director events get letter + // hotkeys from EVENT_HOTKEY_LETTERS -- the two keyspaces never collide, + // so both live in the same eventHotkeyMap. Jump always gets Space and + // Crouch always gets Ctrl instead of a digit, matching common game + // convention. Events past either pool's size still render, just without + // a hotkey. + eventHotkeyMap = new Map() + let digitIndex = 0 + const nextDigit = () => (digitIndex < 9 ? String(++digitIndex) : null) + let letterIndex = 0 + const nextLetter = () => EVENT_HOTKEY_LETTERS[letterIndex++] ?? null + + eventButtons.replaceChildren() + actionButtons.replaceChildren() + for (const item of playerItems) { + const eventId = String(item.event_id || "").trim() + const hotkey = eventId === "jump" ? "space" : eventId === "crouch" ? "control" : nextDigit() + const button = makeEventButton(item, hotkey, getEventHealthDelta(eventId)) + if (!button) continue + if (hotkey) eventHotkeyMap.set(hotkey, eventId) + const container = MOVEMENT_ACTION_EVENT_IDS.has(eventId) ? actionButtons : eventButtons + container.append(button) + } + clearEventButton.classList.toggle("is-active", activeEventId === null) + + directorButtons.replaceChildren() + for (const item of directorItems) { + const letter = nextLetter() + const eventId = String(item.event_id || "").trim() + const button = makeEventButton(item, letter, getEventHealthDelta(eventId)) + if (!button) continue + if (letter) eventHotkeyMap.set(letter, eventId) + directorButtons.append(button) + } + + // In director mode, Player and Director share one panel with a single + // toggle switch on top swapping which button grid (and which + // custom-prompt box) is visible -- otherwise (the common case) it's just + // Player Controls with no toggle at all. When director mode isn't on yet + // but this preset actually has director events, offer "Enable Director + // Mode" instead of requiring a URL edit. + const hasDirectorContent = directorMode && directorItems.length > 0 + enableDirectorModeButton.hidden = directorMode || directorItems.length === 0 + controlsModeToggle.hidden = !hasDirectorContent + if (!hasDirectorContent) showingDirectorControls = false + const showDirector = hasDirectorContent && showingDirectorControls + controlsModeToggle.classList.toggle("is-on", showDirector) + controlsModeToggle.setAttribute("aria-checked", String(showDirector)) + controlsPanelTitleText.textContent = showDirector ? "Director Controls" : "Player Controls" + eventButtons.hidden = showDirector + actionButtons.hidden = showDirector || actionButtons.children.length === 0 + directorButtons.hidden = !showDirector + directorPromptGroup.hidden = !showDirector + playerPromptGroup.hidden = showDirector + if (movementControlRows) movementControlRows.hidden = showDirector + eventControls.hidden = playerItems.length === 0 && directorItems.length === 0 +} + +function enableDirectorMode() { + directorMode = true + const url = new URL(window.location.href) + url.searchParams.set("director", "") + window.history.replaceState(null, "", url) + renderEventControls() +} + +function setDirectorView(showDirector) { + showingDirectorControls = showDirector + renderEventControls() +} + +function saveCurrentPreset() { + const name = prompt("Preset name:", "My Scene").trim() + if (!name) return + const preset = { + name, + prompt: promptInput.value.trim(), + events: textEventDrafts.map(d => ({ event_id: d.event_id, label: d.label, prompt: d.prompt })) + } + scenePresets.push(preset) + localStorage.setItem("lingbot-presets", JSON.stringify(scenePresets)) + updatePresetDropdown() + alert(`Preset "${name}" saved!`) +} + +function updatePresetDropdown() { + presetSelect.innerHTML = ` + + ${scenePresets.map((p, i) => ``).join("")} + ` +} + +function loadSavedPresets() { + try { + const saved = localStorage.getItem("lingbot-presets") + if (saved) { + const customPresets = JSON.parse(saved) + scenePresets.push(...customPresets) + } + } catch (err) { + console.error("Failed to load saved presets:", err) + } +} + +function applyPreset(presetIndex) { + const preset = scenePresets[Number(presetIndex)] + if (!preset) return + currentPreset = preset + resetHealth(preset) + context.logEvent(`preset selected: ${preset.name}`, { source: "client" }) + // Server hard cap (session.py: _MAX_TEXT_EVENTS). Catch an over-budget + // preset here, at selection time, instead of only discovering it via a + // failed connect attempt later. + const totalEventCount = preset.events.length + (preset.directorEvents?.length ?? 0) + if (totalEventCount > 20) { + context.logEvent( + `preset "${preset.name}" has ${totalEventCount} events (player + director combined), ` + + "over the server's 20-event limit -- connecting will fail until it's trimmed.", + { source: "client", level: "error" }, + ) + } + const url = new URL(window.location.href) + url.searchParams.set("preset", presetSlug(preset.name)) + window.history.replaceState(null, "", url) + promptInput.value = preset.prompt + promptEdited = true + // The full catalog (player + director) always uploads to the server -- + // "director" is a client-side UI distinction only (which panel a button + // renders in, and whether that panel is visible at all), the shared + // WebRTC protocol has no such concept, so both must be known server-side + // for either panel's buttons to actually do anything once clicked. + textEventDrafts = [ + ...preset.events.map((item) => makeTextEventDraft({ ...item, isDirector: false })), + ...(preset.directorEvents ?? []).map((item) => makeTextEventDraft({ ...item, isDirector: true })), + ] + textEventsEdited = true + renderTextEventEditor() + // Also refresh the live Player Controls buttons immediately, not just + // the editable Text Events list -- otherwise switching games mid-session + // only updates on the next connect/upload, not on selection itself. + renderEventControls() + if (preset.image) { + clearSelectedFile() + setFirstFrameInputMode("url") + firstFrameUrlInput.value = preset.image + firstFrameUrlEdited = true + firstFrameName.textContent = "Upload Image" + setFirstFrameStatus("URL not updated", "pending") + // Show the preset's image immediately, ahead of the "Update" commit + // step -- picking a preset should visibly change the panel, not just + // silently populate the URL field. + preview.src = preset.image + document.body.classList.toggle("is-ready-preview", !context.isVideoVisible()) + } + context.releaseControls() +} + +function applyInitialScene(scene) { + initialScene = scene + if (!promptEdited && typeof scene.prompt === "string") { + promptInput.value = scene.prompt + } + const imageUrl = typeof scene.image_url === "string" + ? scene.image_url + : (typeof scene.default_image_url === "string" ? scene.default_image_url : "") + if (!selectedFirstFrameFile && !firstFrameUrlEdited && imageUrl) { + firstFrameUrlInput.value = imageUrl + setFirstFrameInputMode("url") + } + firstFrameName.textContent = firstFrameUrlInput.value.trim() ? "Upload Image" : defaultFirstFrameName() + activeEventId = scene.active_event_id || null + if (!textEventsEdited) { + textEventDrafts = Array.isArray(scene.event_catalog) + ? scene.event_catalog.map((item) => makeTextEventDraft(item)) + : [] + renderTextEventEditor() + } + renderEventControls() + context.setModelName(scene.model || "Lingbot") + applyVideoSizing(scene.resolution) + context.setResolution(scene.resolution?.width, scene.resolution?.height) + updatePreview() +} + +function applyVideoSizing(resolution) { + const width = Number(resolution?.width) + const height = Number(resolution?.height) + if ( + !Number.isFinite(width) || + !Number.isFinite(height) || + width <= 0 || + height <= 0 + ) { + return + } + const style = document.documentElement.style + style.setProperty("--lingbot-video-width", `${width}px`) + style.setProperty("--lingbot-video-height", `${height}px`) + style.setProperty("--lingbot-video-width-from-vh", `${(width / height) * 100}vh`) + style.setProperty("--lingbot-video-aspect", `${width} / ${height}`) +} + +function mockInitialScene() { + return { + prompt: "Drive through a cinematic city street at sunset.", + has_first_frame: false, + model: "Lingbot", + resolution: { width: 832, height: 464 }, + event_catalog: [ + { event_id: "portal", label: "Portal", prompt: "A luminous portal opens." }, + { event_id: "storm", label: "Storm", prompt: "A dramatic storm rolls in." }, + ], + } +} + +async function loadInitialScene() { + if (mockMode) { + applyInitialScene(mockInitialScene()) + return + } + const response = await fetch("/api/session/initial_scene") + if (!response.ok) { + throw new Error(`initial scene failed (${response.status})`) + } + applyInitialScene(await response.json()) +} + +function validateImageUrl(value) { + const imageUrl = value.trim() + let parsed = null + try { + parsed = new URL(imageUrl) + } catch { + throw new Error("Enter a valid http(s) image URL.") + } + if (!["http:", "https:"].includes(parsed.protocol)) { + throw new Error("Enter a valid http(s) image URL.") + } + return imageUrl +} + +async function uploadSessionInput({ includeFirstFrame = false } = {}) { + const prompt = promptInput.value.trim() + const hasPrompt = promptEdited && Boolean(prompt) + const hasFile = includeFirstFrame && firstFrameInputMode === "upload" && selectedFirstFrameFile + let imageUrl = firstFrameUrlInput.value.trim() + const hasUrl = includeFirstFrame && firstFrameInputMode === "url" && Boolean(imageUrl) + const textEvents = textEventsEdited ? collectTextEvents() : null + if (!hasPrompt && !hasFile && !hasUrl && textEvents === null) { + return + } + if (hasUrl) { + imageUrl = validateImageUrl(imageUrl) + } + if (mockMode) { + applyInitialScene({ + ...mockInitialScene(), + prompt: hasPrompt ? prompt : initialScene.prompt, + event_catalog: textEvents ?? initialScene.event_catalog, + active_event_id: activeEventId, + }) + } else { + const form = new FormData() + if (hasPrompt) form.append("prompt", prompt) + if (hasFile) form.append("image", selectedFirstFrameFile, selectedFirstFrameFile.name) + if (hasUrl) form.append("image_url", imageUrl) + if (textEvents !== null) form.append("text_events", JSON.stringify(textEvents)) + const response = await fetch("/api/session/input", { method: "POST", body: form }) + if (!response.ok) { + const text = (await response.text()).trim().replace(/^\d+:\s*/, "") + throw new Error(text || `input upload failed (${response.status})`) + } + applyInitialScene(await response.json()) + } + promptEdited = false + textEventsEdited = false + firstFrameUrlEdited = false +} + +async function updateFirstFrame() { + if (initialSceneLocked) return + try { + if (firstFrameInputMode === "upload" && !selectedFirstFrameFile) { + throw new Error("Choose an image file.") + } + if (firstFrameInputMode === "url") { + firstFrameUrlInput.value = validateImageUrl(firstFrameUrlInput.value) + clearSelectedFile() + } + setFirstFrameStatus("Updating...", "pending") + firstFrameUrlUpdateButton.disabled = true + await uploadSessionInput({ includeFirstFrame: true }) + firstFrameSelectionCommitted = true + setFirstFrameStatus("Updated", "success") + updatePreview() + } catch (error) { + setFirstFrameStatus(error.message, "error") + context.logEvent(`first frame update failed: ${error.message}`, { source: "client", level: "error" }) + } finally { + firstFrameUrlUpdateButton.disabled = initialSceneLocked + } +} + +function sendTextEvent(eventId, state, promptValue = null) { + const label = state === "clear" ? "clear event" : `event:${eventId}` + const payload = { type: "event", event_id: eventId, state } + if (promptValue !== null) { + payload.prompt = promptValue + } + if (!context.sendCommand(payload, label)) { + return + } + if (state === "trigger") { + const eventLabel = + currentPreset?.events?.find((item) => item.event_id === eventId)?.label + ?? currentPreset?.directorEvents?.find((item) => item.event_id === eventId)?.label + ?? eventId + applyHealthDelta(getEventHealthDelta(eventId), eventLabel) + } + setSessionLocked(true) +} + +function attachListeners() { + presetSelect.addEventListener("change", (e) => { + if (e.target.value) applyPreset(e.target.value) + }) + // Digit keys (1-9) trigger player events, letter keys trigger director + // events (see the "(X)" hotkey suffix rendered in renderEventControls() + // / eventHotkeyMap), "c" triggers Clear (present on every game, not tied + // to any preset's catalog) -- this only fires once controls are + // actually live. + window.addEventListener("keydown", (event) => { + // Control itself is a valid hotkey (Crouch) -- only block it as a + // held modifier for some other key (e.g. Ctrl+C), same as Meta/Alt. + if (event.metaKey || event.altKey || event.repeat) return + if (event.ctrlKey && event.key !== "Control") return + if (eventControls.hidden) return + const activeTag = document.activeElement?.tagName + if (activeTag === "INPUT" || activeTag === "TEXTAREA") return + const key = event.key === " " ? "space" : event.key === "Control" ? "control" : event.key.toLowerCase() + if (key === "c") { + sendTextEvent(activeEventId || "clear", "clear") + return + } + const eventId = eventHotkeyMap.get(key) + if (eventId) { + if (key === "space") event.preventDefault() + sendTextEvent(eventId, "trigger") + } + }) + controlsModeToggle.addEventListener("click", () => setDirectorView(!showingDirectorControls)) + enableDirectorModeButton.addEventListener("click", enableDirectorMode) + savePresetButton.addEventListener("click", saveCurrentPreset) + uploadModeButton.addEventListener("click", () => { + setFirstFrameInputMode("upload") + context.releaseControls() + }) + urlModeButton.addEventListener("click", () => { + setFirstFrameInputMode("url") + context.releaseControls() + }) + firstFrameInput.addEventListener("change", () => { + setFirstFrameInputMode("upload") + const [file] = firstFrameInput.files + selectedFirstFrameFile = file || null + firstFrameSelectionCommitted = false + if (selectedFirstFrameUrl) URL.revokeObjectURL(selectedFirstFrameUrl) + selectedFirstFrameUrl = selectedFirstFrameFile ? URL.createObjectURL(selectedFirstFrameFile) : null + firstFrameName.textContent = selectedFirstFrameFile?.name || defaultFirstFrameName() + firstFrameUrlInput.value = "" + firstFrameUrlEdited = false + setFirstFrameStatus(selectedFirstFrameFile ? "Image not updated" : "", "pending") + }) + firstFrameUrlInput.addEventListener("input", () => { + setFirstFrameInputMode("url") + if (selectedFirstFrameFile) clearSelectedFile() + firstFrameUrlEdited = true + firstFrameName.textContent = firstFrameUrlInput.value.trim() ? "Upload Image" : defaultFirstFrameName() + setFirstFrameStatus(firstFrameUrlInput.value.trim() ? "URL not updated" : "", "pending") + }) + firstFrameUrlUpdateButton.addEventListener("click", () => void updateFirstFrame()) + promptInput.addEventListener("input", () => { promptEdited = true }) + const promptSubmitButton = sceneCard.querySelector(".promptSubmitButton") + promptSubmitButton.addEventListener("click", () => { + const promptText = promptInput.value.trim() + if (promptText) { + sendTextEvent("user_prompt", "trigger", promptText) + } + }) + addTextEventButton.addEventListener("click", () => { + textEventDrafts.push(makeTextEventDraft()) + textEventsEdited = true + renderTextEventEditor() + context.releaseControls() + }) + clearEventButton.addEventListener("click", () => sendTextEvent(activeEventId || "clear", "clear")) + const submitLivePrompt = () => { + const promptText = livePromptInput.value.trim() + if (promptText) { + sendTextEvent("user_prompt", "trigger", promptText) + } + } + livePromptSubmitButton.addEventListener("click", submitLivePrompt) + livePromptInput.addEventListener("keydown", (event) => { + if (event.key === "Enter") { + event.preventDefault() + submitLivePrompt() + } + }) + const submitDirectorPrompt = () => { + const promptText = directorPromptInput.value.trim() + if (promptText) { + sendTextEvent("user_prompt", "trigger", promptText) + } + } + directorPromptSubmitButton.addEventListener("click", submitDirectorPrompt) + directorPromptInput.addEventListener("keydown", (event) => { + if (event.key === "Enter") { + event.preventDefault() + submitDirectorPrompt() + } + }) + for (const input of [firstFrameUrlInput, promptInput, addTextEventButton, livePromptInput, directorPromptInput]) { + input.addEventListener("focus", context.releaseControls) + } +} + +export default { + modelName: "Lingbot", + stylesheet: new URL("./adapter.css?v=lingbot-video-size-v6", import.meta.url).href, + controls, + + async mount(sharedContext) { + context = sharedContext + try { + await loadScenePresets() + } catch (error) { + context.logEvent(`scene_presets.json unavailable: ${error.message}`, { source: "client", level: "error" }) + } + loadSavedPresets() + preview = document.createElement("img") + preview.className = "firstFramePreview" + preview.alt = "" + preview.setAttribute("aria-hidden", "true") + gameOverOverlay = document.createElement("div") + gameOverOverlay.className = "gameOverOverlay" + gameOverOverlay.textContent = "GAME OVER" + gameOverOverlay.hidden = true + sceneCard = makeSceneCard() + eventControls = makeEventControls() + context.slots.stage.append(preview, gameOverOverlay) + context.slots.panel.append(sceneCard) + context.slots.controls.append(eventControls) + bindElements() + updatePresetDropdown() + setFirstFrameInputMode("url") + attachListeners() + // ?preset= (e.g. "water-blaster") shares a direct link to a + // specific game; falls back to index 0 ("Dragon") otherwise. + const requestedPreset = new URLSearchParams(window.location.search).get("preset") + const presetIndex = findPresetIndexBySlug(requestedPreset) + const defaultPresetIndex = presetIndex >= 0 ? presetIndex : 0 + presetSelect.value = String(defaultPresetIndex) + applyPreset(defaultPresetIndex) + try { + await loadInitialScene() + } catch (error) { + context.logEvent(`initial scene unavailable: ${error.message}`, { source: "client", level: "error" }) + } + }, + + async beforeConnect() { + // resetHealth() otherwise only runs on preset selection -- reconnecting + // without re-picking a preset left currentHealth carried over from + // whatever it was at disconnect (e.g. 0, from a prior playthrough), + // instead of a fresh session actually starting at full health/fuel. + resetHealth(currentPreset) + await uploadSessionInput({ includeFirstFrame: true }) + }, + + onActionSent() { + setSessionLocked(true) + updatePreview() + }, + + onControlMessage(payload) { + if (payload.type === "chunk_done" && Object.prototype.hasOwnProperty.call(payload, "active_event_id")) { + activeEventId = payload.active_event_id || null + renderEventControls() + // Previously the Initial Scene panel only hid once onActionSent() + // fired (the first movement key or event trigger) -- generation + // already starts right after connect, so it sat visible/editable + // over a live session until the player happened to press something. + setSessionLocked(true) + return false + } + if (payload.type === "event_ack") { + activeEventId = payload.active_event_id || null + renderEventControls() + context.logEvent(`event ${payload.event_id} ${payload.state}`) + return true + } + return false + }, + + onVideoVisibilityChanged() { + updatePreview() + }, + + onDisconnect() { + setSessionLocked(false) + updatePreview() + }, +} diff --git a/integrations_v2/lingbot/apps/cam2v/web/assets/circuit.jpg b/integrations_v2/lingbot/apps/cam2v/web/assets/circuit.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d71b88f3effde70bcdbccb20f6926232f71dc11b GIT binary patch literal 100754 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 R07}qb= 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�r87xNj>BUXw7EZCGbur0ddYFzk| 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

N$C*HqlWVRiu7ySQe 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 N_7nYt{{V46|JgVJw!i=Y literal 0 HcmV?d00001 diff --git a/integrations_v2/lingbot/apps/cam2v/web/assets/jet-ski-cruise.jpg b/integrations_v2/lingbot/apps/cam2v/web/assets/jet-ski-cruise.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8fe363c8b52fb042f3fc8ee40448b34825313272 GIT binary patch literal 191481 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

    ek#VI+xB;x0I(u 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 D3q3ElxCcVrE@=Q-*t+oD;DgbY|?r&_V@ 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 oAD(;UCKQwKcMfMMGHQ8{o+OFR);F>)|4mQgX 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

    cc;X^_FS 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

      m2zUQ4ro+5&kv@ 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 z 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 Wo4ZZN$7szJq5-#{uCAm)?El%`&z)cZ literal 0 HcmV?d00001 diff --git a/integrations_v2/lingbot/apps/cam2v/web/assets/noir-alley-combat.jpg b/integrations_v2/lingbot/apps/cam2v/web/assets/noir-alley-combat.jpg new file mode 100644 index 0000000000000000000000000000000000000000..77b2b6046278e87a95db6ad2562f6368fe2b72ae GIT binary patch literal 136744 zcmb4qWl$VE7w+N|_ae)p#i6(^?#|*?pt!q3i@UoNcU#=0#meIDR@`07TjcWnxHI?f zJ(*-ObCQ!YnPldi=Skj{-?jia3NrFC05~`R0Pej2-qrw;03-xNL_`Fn_XY_G2^j?g z73E#9(a}F(;9}$9;bPZLTcVFP);o%Sw0PppGe!;=xQgI;Qi6c^TLh!%3NFWi=sB;A+HN33?Fy05i<09Y! zL;=rsMwNAHa@A--8cHmv)mnm@)!wt{I$?7AMg%AcrQSN7^V6VW`#L|cEU%s*pVn(p zNJW95I>8zjBL?a)<(ajW(N<}?SMr*L_)c8Uo@nM3_aa}sb!bwn>}QUBx#g=I(kb%u zqvUptV_h8YCMAYU)}U<}X%GQg{{nwj4`VRByT@Nm^KKK%7}{)7Z#ZCOmeIYs+|xOv z#X4AukrKuJhKC=ebHJAw5)&%(cW3zA|T7lL?k2gwx(S8kofOnqr{2#9A!vul{vhJ4FMb_`Tg}R1=NOZ zWu-VqdM8Mv_qqBzU?8mZ>+phuECy~+!xpfIAvv&isHh6rFeGF$Xc6V&4X{Hn$^SP3 z-C@g`+(w}nw_^{&P{V!pzydy@Td%yWY)0&N87CdRyQ<%&)sXl9Gw60;H*+4nVy116 zo2+cKGvB`p2m?3G<_%>5abvYxqlG-Gil|IJP(p|rU^iiCYj>qh)4^OJ!}n19e5Nd# z0W5=sVlv=dXeyc6XyC#So@ld8b|ArRfk$dT?8N4b(9Cy6CrwU&MrL3!y|0Ev>8pPj z&dnEv60iRH_Vh`?^d~0{l>#H@5~N=!yl= z3eBPFR;N0eL7m)i+MCRUf*H^7N0=r`tK&=5ziEDd5E(AJS$obNYa)4U>S0`vVS}v@ z;6#a&a*Nu}IZ$z(?L|>UGuI3)~miqHei}A`PO^se9u;c|(lXn9Bbg z=MEG)Bpf+P_7v=CA`f}Q9_pfQ=N8Yf_qO}(2~{{(`#74#wS80Pyx1+I)9&>fF6m2k zpC_~-JNegxHHJcdn2!!&8}l9blFT?4Pp@r^tIg!kfZ^?5Rchz@3oV|42?0bJ+|pr8T50^bGq5*4 zmw8=C`&onsNF4}^7@iMTqm5x}(jTHFG~2l*~L_i6&#kLl@u7+S>P zD|{r{uvQ3p5y{Bx6MWAT)|-`Q^HW#I-vIH=5MtX0eUG$`?*rYQkU=l*qFLg-u&fMP zxsWaS3Bq&Cnf9ON>IyR6vUU2Suz$_v{c>*rE(MC=#rhU3SyTTu?k0_Jen)tz68Mfo z)!`j0ntVaUn%FOO*|Wicjsa*KCb26Ip&&}G$F8zcyiA3PQmfp%2N&O?kVXsbScDM1s52xb)77|likUj=Q z;F35zX*X1b1oD!pALY~p2HV7b&7Kma;C!|c0-DGC5?hd>y$OO?W zrV?iVThKnRlYXpC6Sx{hwF)x{=dyBHsEtW`0H!Q5h4k^6lftsj;7Z_orA zZFShw(^c{GujV*c>F;0EqWbOX+`;~CPxF=Wd1vEC;|9l0dPP^ZaK0`J&2NB9{%Z{l z_Mx(0Hr7uR@cKMEyW2qBLouU}wVb~g5HEZ66JW}~w&r}%1xrX_Uny2o1NqQ>o#Y3l zCO6SAV-@lhVQKY?ubosQCpOOsfsJ{LB%PMk>b7N-Of8yP%MO|a!s^TmmkJ+5(oU`_ z50$_^I@NQE#h) z)T99ys|U=PQ`nwje5&)_OVP7hpL98sQTL>|8oTrwfF&OULE^tAllod2H{7CmJ|@sCv?8HtY`mY8PXC@*NPat;wq(V8g z;KgupktTkY+G`Ze^NMz_$WQ$PQwO_%sRfkqbKKm>_gijk58Fe=du5Z#} z=xoVN{gE4z5OMg1WSxbvU`?p-`NJ>`jiZMn^2nE}R(u|9LmVdG;z`HIwwbbJWR@@e$zsV%@)*33^o zRT>n0P)Lf4EL>yD^LFw^N=}5-r16o5WjXZZyJJqJ3}WF+Jg&;n?!Eg5t_dgY$c!+s zi4sW>F?+)j7wj@8aP1hdc0>BHJ<3j`6T~e*hKW7FvRi}254iATJ6o>k! zl;4ND-vGf2_J2f8NBXF5C5Zi*yMhL%Wtna~klRf=h;M4^R`irsB^U)b@FKPqm}xL{ z8V+?3e3O|H%dv;LWtg@|AGodx7?4z$dNr@I;WO(@dz_CEW%P8ZvCQZDkGW0dGCA|4 z)CgfrIa;Gzt`)!Glyn+&w*OUeJWdn-7T0eF5uSP96mSjQ^Z#AAHrf_RMMAAgbav*_ z-yJO`DG=~`F}=@I{OZ`?rjB)xl0_fNiR_4c0Jl6B=iyQ_cJ*9A(l7)EoRGE=BsqI6 zTD*}(m9|Lh6*yMC{~|*M0#>HbqoAa@)>%7)X!-|yYnnRRaO5&g_G3H*${BUf`!K2o zOa^$)e9&6z5YrpD?TMW+VWl?xzHpl9v_5WCSNG89t(%JN)j$}TCXSmyDt)O=c;FZb zk2-1}^si^d7B{k(6?ejFOen900l+&WG-WQAbMbRrU?j`e_S_Qt+=UlQG3V{vz*B057RJ7N|r}D1CQ#>_lxd0b{b}<$xg@iu8y!%pFHu**$l$ zenMJc3967^yx^(ht8%6{KvRuXJIbNL1LUQ6{27U%B?ga?hIaRsn;xyRN_kIxh@G9fM< zMRzZSsc!)8fO`n)eZ+?y@()wFREuzYUpooQAIXPAXdUEv@^^nfs2(biv$>4TX6j#- ztL`-;+<;OY>K@S(8bt+*C_o?{6#ibijFX5@Djb_M1pc5S`d&4`iWL+i8imG5hP2zaJ;`;bzb0mx0Zet{_ALE~nFugp#=u7NV@2ka znGQqT12C<&T~ohbqh@NW>!KF&LHd_v0+p#P8o#2}7D}d+dXkzVT0_vU%nza}8a{ZoB^!O;3~vm9vU;h-f&!pT~PSL_MxP!1)6%;9lKv99tZ zH=oLIiwPhA?(kXIo#i~=jcvkgc(ENL!TkBk!?7K8aSuv0XaCy1MnYzGU$vs5C+?_) zE&}t{Uc!@haLh4_8r|1`jX!DCmMdzG0cLX-z~HI7k{h8hDz8tO7xI;7bKD8sVe5O@ zVZ`h6VZRMF)?eoP%N-`P;(aiybkl_v0%2KK1xz0Y{h504{NDgfX^1%?Cw5wD$n!{q zF4{v2_L_GEse3l(?$6*Z(blsWS)mx39lk*@)z+OyTqIAFhxB4H&XxXKMw14!%UFpP(2&%G`uUiFQ z3fz;%)90}JuYY2nNH<31Ee6jBIB!LG(ra|02yh2K3||$jWCd5!h7lw5M-8`Sq^+1S zl*4uGX4MQ=yH}#OstgQOvRtPG_4t9v@kgJo%vaYLe)$QgH zcY3tpdj|3}k!)QwqOZ#2Dq&%Mgcq723n%x!A-=V>;(b**6_|a)6*Ya-%@U}8E(&O4 z(W3MG=E;vxD=MpH$;PN*q}N@ePYAu-fq!)927L^0G4LEwZLQ{+S_j2O%&03{d;^!GpIt^ai6 zvZm0ZKrvcfgvBcOxha~q(1J;ZlS9%^P}F5xRC*H%ZcQx=Em1^`O z>VC9dE#*r-)nTxxpzfwthEg;CZF$JJ3-D=vL*LUXPDbtSsz^B7h!uP{kZpYxo)8ID z(X-9tav4)ZkiAVhMEKSbZDr zS2gaZm%o0B>=mJoR{TC5GJ&;_p5(SF2%|%A7vbJ8+ZJMA@`;{e>i%l6(1@D`c*i{0 zsM9A8_i^Gn<3qi5bZF@qkyoOAp^ctQ(2_3@gO6Y%r!u;ZAD0y}a9v;*_bA!<2oiQ< zx6BEoF_Cn0Y+csjYGx9k?bUdq$Xt+VeP&;j zWl@-%?C@d;ldzt^n#fS%vm4|OCxQzKKhQRK_cgU(?r{~9Q|SEznZrCOGBQI!prCA& zH86disGx;?4D0AHb^y6ZVgasvf1XEAPHt=g2PHzo)jPJaRch!kzen2ba`VUK;%RYP zsyNnuAhWv01S3y&pp=Z2-JHA`vK?5M+Pyu1~|)?Nw1FnD<9Vp ztqu4_45RvjRs6?k(~P{@TLNTbZaO^39P;&&i!o~@gLa`tl$FlF<%1p&!0QVZo=>X_JHvtb|BJY-jo!jqi0T747`}F+IDNR*c$%Lahd!~g$4U9xVV6@M zZi|V2DuQ}7wOa~pG0@e-n)F7=Q`!s6jy)~PZmYTj4~MF~+-Di0IB5`GZDCE0Qwb;$ z{8MqPm{r2JYI&zG`HM9ulk*HKuT!T=d9AMu6C^ooK2G9mv7;zVB4XW4Jt&_AV>1YU z2nSMn6smz6Lm}zh{T8eaVPtt?+N<9h`#0cgRj{zVlUm&Ul z3ecZwCD;`FSqG&-3#PDFYnHu`>@0@ARr$DUw8>iMs9B9>>uwha%dopCo<$J08)@1% zdJ^Gr`_+G`CJM`bU3G*J6OK``p#J&#MWqV;_%io_xRli67b;%oE{%z-s9?8ak^Q~_ zvm-8y@{X|Od{m!}9ppCR6Lu>)Tddwi)FIW^F8VC&|6IwqTg4XGhX14)n3 zA0?OQQIK{VTY%;cbD z>Z}b_n-TFN##AP$-ot#R*sANeqK$b9T&bSU;kf#L)x%NfxJPX>;S4Jg9{*s!}!VT@trrPS;U|2+SJ`e9_^EEEyl2UKGo>S z?e-UoEJW-WMcx=1R&MBoVzV~d4J`+AEhSyQ0R$~Kffq`;|DDvL#D~E%jG`%cHUUx6(+r|LlC0g zs)yUuJ~Y&kwd==-rP+;r$$0wu-D5==m|KxxM&$OY6<%&eCLLUG&~p7GtaljEz*7J} z%&j^UnunjzJNqIpYbmyDl@VrmecXmo9tB;$0E1s_c|iE2Tfxv^Vh_TlxIb**(i{{9 z1ty?XspUu>j;sQclm)66f0c7^FL}6UH3P{mRrhbdh}c~y@$n!>{8i0%Ote}Jrj@?9 zpm}+$46IwgC)#!-vAA$wa#g=*@`K7184pi9M?ZqMy^Z~gL=8PzvWtAJzD}nlzXxLI zR2X>vN0<;T4BrhVE)KJGxtL$Ss|>PxNX8;kLrME$Y9bn5PB5+42G)wJ-c3{Od=W$M zYCjL_WMZ-X-3wD^51>+-`x(NZE`~x13VlDsD4E>MYmK?E?JvkNUqR3^L6i^Q$}7`9 zKTdz+z6V|Xoy#iPk@pSR)4<;6nQAr%ns)Z6u#xGZsPmQJ%Wx%%5Y~)jR2WFVoQQs@ zjE$BwS6ht6TsO_^_OIHP4ilNKW!*tJeN9EqEch}6JJtAXEymFgoOV~^#-u8tW`hlzVJV-S`ca-w@Xh2efRJ#r;BkQ z!#Y05Q9NC&X>A}38v(PS3f*vXK7_i^fAq?lVrq!rvT%Nx$?^7CptmD)KO+wUTQAd$ zHnm6dk8ZaIkyIUs$&F#$R&3i}V9g^}qji-}Ym*c;+Yvi@@UxbCY9>V|gMHP+1ZYC} z(wTKd)RV&_6+WRbX#zu(5*)wfw?$9>C&|(SEm@~^2>t z+eOJ`wz=oyLijXt?wOJAw^*^ncM(c*NYixI`R^wvwKs~ElUCiK6T81D#T`T$qSZpX z=8W6P%SVoBjqHqCkeeG`WVE@Ts}+idO8IXMvbcn+Y(qYf7Aq&fQEOx%qa_?0TNu7u zSX0{Gjw9>DFz(W-8Ki2{u#$Qu>Y=q{JD}Rr+9{2zfNr({K5A92ib}_hs)Xn;YfBg8 z$dtY|b%rV z!gY`%N+~H;#LCFU1(c-L+1nr#RF=uPm9x{K_(esLKUQtjTYjobccMa-3vYk@so{mG z=!;7_(qpOkE7R}GnrZyCN*LJ5FhtqaB@8_!C`f~=*(IX=2SNeaO#Sg6%^+D1L5Z=sP~yovW=}L*myHWGHy2Tn#IGcaQ-I#flC2JYa&lGW>+w z$1X|}LGlxa7KX^JTtD7x1T*p4Ka4(nj|uuI4s_^3dF~FsFhYk*a6FNrY&SBQ>pA&h zfHJG^(*t4A?WpAvG(E9zV#S2{`2_ZmsOLE7NX*}`M0Aif>Qb&Vr!M_^^V z_V(cvx5Lm6^6qsEblkX+DqCxUpg;ft3e+jx<80k|*pqnACdd%Oogny67d`O-rVyTs zJ6`$k}$e1UOrjj9Uo3~|c0lJ4_T*rce4bC%T=$8rdW*M13*IX_Nj=hLtJ`RuIDu zHB>&XP`{3_$!zP_4XjTuQJj7G`M|>qc>@&CX4Ii;lR^jdVI^`wimaKvBIdKz@hOTF zKl{O_`44$#e@^L$AEOcaQTJ55cwz<5w`3DNtpSucJ<2TM+q?TADJl7e^TU3;N&Kk9 zu!(?2Z4*l;$v41;xbX9&m*%5)0B}KiuiIbO_@6*|VMBTcX-ln0{fqUKjXa;{Ot6>z zt7bNHl)8DQ^EKURl7?4>s+)6)V!xh%iGxfBnQ)Noc_ntJy!2^x4EOc<+-<2o!KH@} zOEL~|7@3a-rn}%8!w7#G@85Zg)p8Y6)g8W7(Oi79XOeer{GCwwN(EF+`i1*^YR466 z1p-stYvEUPp~ME|Gad4rWfh)oh~~O~WF256xx}67ea~WJ<#CTgG_ca^AHOk8F%zd# z1%?!y*v7iWy)ZBOhVC@^++O+Oe zpqOnb^7IpVp36^Wvg#oF&@;muLN`H!HJALrYwpsRDaNEp`O0XW9-1uRUP`j{8uNFN ze`iHS#GI}JT}lP9oZ%MRvF_KU)<-;VfJaDB&>)ATaV>QOeKy4FCJLwFBA(@QLE$~s zt#i%`X^kQ!mQaXqPwiOZ_cTeYtvUn0{GF;EI>8t`DKxS58BXSIdoo}L8fXA{hD?O8 z<@T4wigX_Dm&iliW^CW6YTq7vYe1Tg+D{zDw$|^AE)j{} zD5zd+l&p2nud9=Id%`_w_mW-Zp*R3|pxgZ)mwscr<&iz(12uPk=X0d(PrWKvbkvWakC zkhvyKdxN^8KJKfbxWOy*g?0ULf5)&b{5j0#Y%I(!DRx^DJKUP=bmc;xQvgl2{pS%u zSJjRf!08K5r@r2UXSA5lN1?bs^Gm#ImN_SSPadHm_EoO|htkAXL;Y++uQzbRGRt?z zPm9{Z=hRoAOm5#=o~I?y9mz8iLfIRjx-RIykQ?sUUr^2-l45#USs3_7hT1Rr5P$3ROCR9?wtIuk#UkVOS#?mYEd_4|nRqi}eWfvvVF=u9(}@t02yUz97H=drfi%sqLf53$IpJk@ z7#F%&x>;heHW--4aMlunfJY3QevCmVW{;#o_z|+W$orzCB5dVQ#yK|A_9O)m(SM5b z8s19?F#q&RDs zt>n}}%`Vwt-M$*Q#JX7tl$_Rf=5T`cawJ6_ zl}JCsyhInmB1ODwm1&}9{EvS%s(I>vij^{n z{3x1#YBbLpGQ1VvWg3&Qp=v10<7ZndWUX?TbbV9o{zW*A2YhWC;~s`l0lVeH6>J*ey-#&ZMxomOe^%`ciy9 zoQzNGvc@+RiWp@e%PM0n500^;pduP*$QIzX^AB^%Auxv(RxRF#*wUHekJZV>Z$9 zLGuP$2Rrt^`NtBSW7a!T@p8*nhP_K!rlML%y`0bGSNKj`(=bhG$-P<<48l@Msy=wh;!XX<+*=F6`>2A z8)7RKolp`kKperjFJS5W2su2}Y7*>%+_;J#EA-@b?(765csmL+woFco25LO%d@^GU zzcxo9b~xFwD_%r>BKy13acl~t+$|Mdm?Dh9-Iga0k_KsRt0lHaE#r9Wnk>d}-=s?M zQ+azQK=f4Fj~8pgURBur3On6-ipUJEq+2IeKckzw@>KCZNpQJZFsykLzq z*>zsanJM6t{}G}gZMGqxfBG#;Y;$%HOk*}S+RmS~XrA#c-t9|mn!o+MW>*~HEp9J8 zf{W^2u2C*3*QQs%E$b87luR2Y;$Fq-j`-MQ%I~@VJ!Ad%3f)wt_~h8vj7Uli0qw|HW6;&lo%{(+y>Py|ak>_8DuL-2^B>7p%5cb7B(2U-E zv>59cp|7mkQ47lqL=og?u+jaCq3tDdB=&6wi4q)3HiXPZLLI<@i4J8Qj*@VeBC%Gnyl zrQ5aLdYLmQx7(I&h7_K}Ew^48p#%i4Aw(+T_M63Kdy{*(Ryx;$5g9&uRY+*$s|~3- zp&TL_?*^RDR0Jk_o9dlMA8b}1BaPJ$bqr75u`F%0;5_>1b8Dnlq=+Pe5=|!zxIFXWqdf_hf7Oy0>v8XzZRya-cfy`oe80ROYNWRR zj6r#q`wA_V>lFGfwGXDx$y@f_Q)%=I*Xu)fv7d^}F*`1mX;7Nb<1ND*W4e+BAtwcb z*qF!R+uyB$*nWiavd&LV24OGDFIB}13^G2`;-Ae}N@n+fTv%q@d*wh$$JE9h&bWL8 z@!a<(8`vPNZ|>O7d;+%=nT1eGsW`=Y!}ylgHcq}K4I~eGnxxxO6`~b}H$cA|??2}6 z9>)doisy{vlGup|Aw3_@YFxh9&@E~MIb9gZy|~MD<98M2m6ToQQX_(qg$dpO$|oO* zjfgLJq@!@9P!(b^;AOcCMlj?w4l*_o(y&bnEkp5mS)U+FGMo(;T!X)o3RYm4U51>Q z8SpqhK8reP;v^SC#cp#?)!us2yIz4W>mIi?pVvPQiLbxI-(m=iN^t#ry+S@S#-DiW zwLAK_$=Z#?iM}TrqTj4C>~aON;w=JN0|XbREk040y;hAvq71zSo=@dyb&C_*I6sDZ zZ#QXXNLHz07TC}Vn6iJYys0(1*inq~-V+HaAhfHFs$)}X#G8bf2>PJiFBGr!#vft~ zKKe7HNNm(YT5aNru@jB36%2oF-xr^SJ2>`&=QT=Ebn}P_;>`iz3Snb7ln=u@hr3b+ z6dTi4N0*YeR_qBa8aKZJ5&p(p)lpu`KPdYhLmhzh!Fpt0`&|w-)3r;YmJsM-ld|Mk zTw%Eg9|ohPfolceG18m_081p51r0xGFEV>%(VUg)B-cNV;n8 zo^?TUPKHbMsE9c=(BCo**gxR14WH-BBo*>6AT+!92%{In};j%bY@+L3|hH{B7q?k%QDV2P=F zrK17QMeGh_k3ph^FnQ(FlIKLZmfirp>T8v;841ocS~1s*j|F&ZH=5^mqP z2I_)^1-&&iPCM&jfD7Z7j^TmMpJE<7@}@}_`~yxSDBTM_tNf{+-2$L9#f!SSs47*@ zB>42LbdlS(?tt=Az_{*yyfR$LZ8tR88O)4tRHs3!Ij=bls>AX)xjGaRuc#)4B6s`8 z=^T^3w;IRUiRML&8TJ&j4auWQM3F8P2Pho6G)}3GL|4VEPNaNKeb=Scg4+9MlmSI2 zDk9g?2C6J(9BtOcnc&~->12L;80-|Ft3$&h!rQA4-RbJd=FtPXSv?(AL_~7CJjk)EO^IRihr;dKlT80W_+A`P5=3kX^?dcLuyY0+1 z?X8_{%?bcm(^%P4_SX^J-M+8|Z>8Qm4uBk?6!HHm}9Wp=A5P z*1At1wZ?3xKh0=)#EHGT2}}=`mR5oKdJxV+iJiMMqK1A-`Y+LyHg>iR<;EvbST@KY z^W$KAC;V7dO&jY2Q0;|iGv4M3sBO+AITim=;blfJ`(9$ABkIHR*X{M4Zw#=Sl_gu} z8uj-ZmwV<=yx2~kR8PpKJMyn?on;v$mF`AQ_z|SDJD|v8pp}fG1Ngfz-lpNQJu*JR zM5Ga6EZF*^qFJ5Tl0IUp6f*#^H9476qwuPRH`9v$>lZv_jyBDMb8Y1%L{jOBsT(hL zVEWgjeQBG=+#e5|cw)DO_mLqdLE*cBrqv`>KZfmG$YirPi%)NhiZt-5gK5J$*r86W z!7FQoz@a;8g@hra3Jo`GMpMiUY8tEkV=zt zZ)WRn_C)ocN_WhT?d|emJnqM%7exAXmx{`JV$hs%_Yz9QMgiZtZTF>ZQ#d3%V#BAT%yL{bT}c zrp2Z1FV8ASoK}J%V6&%R3ix74+BZrv<9)!}-eTbQCma#cQtU#Rq8-a+|24N#6`t_z zQrS_Y-eUy|suG0BOateuQ3QCGT`_7)34aCz7PCv2Z}a+>Tn$GY5bGQU-s2u4j$7%e zS=u?ebThw%t2utLmn{BQi(3B)rtU(DP@pS;0{;_6)veM*15FHk60~AB(By_7djWk| zg<-Cj$~C0yP@rC+AZKP`kbkLjgNXd)FQPJ`?R1X~jlhL9lUyra#aG zODm)y*#x8qJkM!mdYqLR-;&F;cgp@9*94-T<+ve0{x1W5Qcp|Q93g$AqT6WEIs*E`s*nl8}NivE3uq+_jf3ge#mfCc4vPcx7nKGA*l)!oD4(O9)T0exW*;qG)n& z87ecA^^x|Fqz((-^Q-)KaYn)sx=BSaG%Uhf_{gTtCyJ)=(Lr!LL{vkOrSClIRdq2%icB$xQj8PE z-*;6fZ{yw#R*;cHpoenC?!2Zi=mnG@CnYBpAl74oQwRvq_3++lAaV zbM?#~q9`t4hZ448%{9@S@~~Y+lkTAd1UgFrBa=ytThcnhA5Z9 znw!jTlJY-2<+z&IgI*&=bsm*$&{#}(xIr?icu(#U*UB{lJx0goWFtDu?LHP2F1?i8 zld^8Cc{pCL502|!GRVABM(g}M9Zl8D(EB$93QpWw8Kzft)}8cMH@EteKO;-l3M>L1 zvHPpDP3(0_X+Erk1np{ecAPJT7JRv#44?3xojDg+r$D2#OEhJu?!q7?Ds9^rcQ}Ii zqp|0#l?ejX692uXYSsBtV@qlzHxODA{3NqLpo=plRhfxEg9`*(lYvS2^DTf!7c?%E z{o7(|b3;wl(S=_Abw);7#W+b}${QW|i`8VNcro#;k4NBRH={O^_ziJGlP=7uCp9wu z!F6v-;$DQTn%XNfVptT2FsQSGNhcu!e8r)!D-|q2-(i~gnfCz&=v?;yqQ*^uFh zJNTn3ss6QmG@_>yuOfIuh}l8_eIa4d3I9o_u6AM!QR=Kf)s@{7WHtD-upRUjLfiXM zsET5I#yZ7*t4$NavbFWEa^cr#b6P!O^8F)@L)#IPWlEFdtRZ+}L{-)JSTfYdoCU_> zMSDXid{Yfm$P+L}+)EioTOl+v4F8klG_4hZ#zsK?`tTZD!e+plKsBv#<~|jgXNFJ! zJ%^U%Mh4R*R*dxSYoD3pdiMNq#t&RxfqphR z*l4Isy*C&XG$coMNI+Lv$+LGHwiQLjge|HeZQa4gchVIR7YVC;ZLYmowfjn8-_3IR zdte@0(3rlf_-V&3!MdP#w5qz{264f`T<=?zCkhQq@fOE_8gd8W0yL3{pVGVohxV`q z5AOoMK7`8nRCm52m$_E==6;g+C(VEB@^>0{WyH;cvnY?il4W@rF5Aqetpy*O@3~?^ z;bFC(D41J2Dd^&}(!J7b5lr0T*uVJu7wn} z2dJ9kCT)~)CYdC-Avc(Y;H=#WFEUR=U3|V5(Mp@x^V|;=@JSHB7L5pFZ!Y7Cutyt`wK5%dwN1Ul&#ij@WfaDK@9kEnQ;9#+GuypBAyz=E zQ@wD4FjQ0{Elr~@Vp;X=Ry!f|6*HhY>C84%P)PVE0?Y2w9yG1dGc%?V%-T^+b>jrNuL zbDyp1xXu}DQ`aIz)(%+1xqJg~l(zPAITKFl=ZF&eh|+MexK@SPC$<+iSM=&(@vbI; zl|l*WcV%r>L)IGbKI7$mr;b*?@ka*)2{`1X_OHl)o60I}O@=v3N^Qj#_b0?<$qTP* zdz5@cv@qoL>z-UcRhAJU)BesC<MvQL98KVE*Us>huMR^A_eP)W;IhT%CC3tAtPgAY{nv-xh4~Jp_bG{gTrah%!xQiL{E5$|(JdXvL20x6a&!sP@ zJmUZU*jrD3Q*u>R@kLQKlaqZ!eE2CK&5?(y`czO83}#8;jxT@GG5fnj0Ml_C^Y)l# z`|40>ab^)`mGhy_90Ifh$zgx*}8bldhc<`>% zSBw-Ve9}qdA0~1@*<13izaCC(=PpJUo_V`Rd}Cpbly4UUg3X<|lR;Rp11G0UQH{eY z?02o~V=3IP9mbyuqXyv}I#SE1a0Yqxp)GFYvXh4ZqaDXX>ETWOYUbaLGm($D(vw2n zmRZd9(`+)0vnlIO70|{V4pjC1DLIQ0fJa*1)^h_8Mq^{Rr$jxrenUG7X%pmtdE$~= zGT?Bx5}rrKnp-|j2|h-#$~MB8@!|z>u|@=M%D$})%G}u7+=4MAO2^k5*T~~;D4Bdk zcYelRcK*)7rMHN(en012^Dj)BWskIVkW3tKlY%;Cw-_Ay*D%+nJH8NkQwVRFh6xxo z(}&h$tyeC8OM8v=`@v_UUfpDT)DFXbxH$Z2SN3NKgV?)wVcwmdQ}H+-l`Q_!F3eub zOsad+I>q?p{#DRgmD4?wwN}6oS}AXW@>$hwhD-jVd!=K`7 zl)4)eM(Q&e5v6~9+l{m0PHAP+ZGbUTglU!dVF3N)d5UUO8+JGxsYRjvhQkFI^qBY!OcSh}Y{Q09qX(rqN|SK|(xA5B zaEfzxr&vJ25=kYP@j-0*2jirBdMplhJ_Wao6IC~ z%ZzX5OSLOhv%HQpB;+aHfww}rIPw)|CmV{=-9d~TZfdtUzyNvGC5&M9FTc~Ny3b*6 zl6~LSgEFwS+cVvHAQ~5J$^3z3}6>QO>UlVER*pzBmw{0YuxU z3@SR~dK%#D7b67k=~{fM1Y8*hz|#P)*~QB6u~VL4(3T&>khj%5&2MoePcd@LMs~oe z$1G72V~k{s9GXUpECVJ!ty01twi@LQ9}F#ClqgBBbxw+}pRRd)?$lW=!sAbJ5t%S;)ec77>#Cz9`4t;M`bRbqC|23u;;blB8< zIK=by@;Pj$iqDF6%%FZHG%+7EUar2H!J$jA6r z3F^d}HhL-|?nB;Y{{Wl%REryjIopOmvY=N>6}n@(hwiKPd_0qX zGfQWuIJ$PAS0>@}>rwJeMGn#v>w{e) zkKhQdq`=)&5#(rVh%m@ZWOu08)1D4Km7@ zt2<-@@BBS|X@m>>T%^5`?t(Gnnzh!XX5sm+5Uv}Y84{~sMhG6`bn~gy;EFPestE0I zlSlxH{Ks?K1kZE~W{8E1tY&4wZbLOdk(-$TKt~A1)p;C7ryF95afYKP2Y^s%z@YIa zc!md+LrRY?d)@J?38Q(za0F|}QioTJ#Erxu4c)?q@$sw85=U)gB~Mjqt1#@=GZKOhc)FUgU{sblVs@#C zw%}ov$692(X$!I>V>ldAIjB4UGnhaOFq!=80gz7#JM*heGsstul8gX4P&U~WB80Q3 zCAkAsQn9Yd-#oL@swK+?eegCFXr)ziEBBwE^Q1P^1-DE*YVx?)9r$XXtVr>gRLI+8 z@559{!m*T&DNiDK4?2{PVcQ%|ev#=w+F}Mo`8r0tMC7sOR*WhuE&(LtHJ53^I8$TP z)uSE7`&6mLLgDyFjc;xAmo;2`_Hov|9?~!sG~lQQ8-OuKDIp3V#?&Mz#e1YU{J;*8{iE2)k=#Vg?l0i0KZS= ztIH^e?0Dus{D01}XUBCp{c7|vWaYDi_q7`Rjr>GK8FF2l)sFuF_GpGH8t?_l=%=Td z^YW-HbA`YoZMiR}ommqDH1)8msm~EPC#`D)W?9lP&DbyAXpJf)mr{Z$6f(2mgVv3` zQ6IGlfB-U~81xicdifcw+*+lC_7RX85SU&=nC0hK>UNV{X_iw!h1NK5!FMB;_@&zP z62+*?B#L+?a>(5XroPW=u?SSbHb7qW=K!kLD;XcJe#x zkm(UcMJh6PJM*Vjim>}rBC7DLk(R*eoM-W*(b&l>R~H!JiY$`Hsm~!#b9*bjXvX~T zYC2rGz$yXw;C{79pzM98NeKa4zDd|}ApTWtcm%c6rQ0D#uOMk|t$x?{0z(?ci?XQa zk2BVkg54(a^Mh5I;?hrhAU-@s4nM5|#IYojNjsBL6qA9>_)#$1b1VTX%oBxAw0}Xp zUrFBBBxQ#Y?yhl@*VDw&EF!i-X37q!p7Hxfpz;-+&GdHp5clQAIPr{n4ukQfGRV%{ zPI!-pK}>|+Ur9f8F&txH0KoVP2=b}UPl>7F@u$#dUawcEC#%)!^#SVjdc8n-xztpe ziULJ?yeeo3KIp2|zJ*qitsgV#PUzaujckpS=&SuMkVuHa5Im_ zi30--j#Ve3lD8I)Btk$OnQ6YAtgDchJ=4+0BkNS`@~4F3$c}U@)*-i#5xM#&k)w(x z^sc7X{@(XYDG>rdz39(Bg+^0N zF}o7K+{p7A*0$i5+r#y&ijl^kj9_DLDk9hbdGThmts+ox-AN*-MRz19=n1b$-i`1! z;|8=~8wYH2=U#plL&M1PH9J;=TtuzA4>99kIn^T&>Q^x?NLg46^XFekkP_pqeD~T2 z*lO2rj_H}dI@`s0W9FOy1d8#&uL0c$%+;V?InjJtw_upv!vHx^3eEojVzViU*V48E zrt+yYnAyi#*&bgJ_f-@M+A+ONRCJ!gTwQ+FFbNn&(XnM5jyY5BWq2U=wrh)qDuB8I zMo%vTir(fM^QV1u^mi-Th{rFc$+rx2f#|wrSJL0(Yr$d(2K+MO8?VNMVMfK*(@UiDNk*h^&ftaA+%e9^JCLj-$q! zM$z0w#D{*P!jZ*nXY8MW&v2UPEo4$b2Z?-ZnkZF>BV$EaT{IGKws;TWQ)02Mp55?B z&1s?gRCHImwl>W=v*ZBy!KLub4hTH?8Xo4+46@vZa7q#a{ceV_&&M+DwmIq1x3;R& znFf^q0REHwsK|Z13U|_9{{Yhe0F^4T*5J7IZQ#0@W4wfdxnF&H9OAY1Us1G|QoWku z>NwRDa26XK{VR^+t^K_^rmner+FxncTlpLhYSz%lHyh=+iRt0%U6;2S#4YT&`7EK* z>xMYUI~6;hz*i63S?gNG?bY4XNo@*nrd7A|7#%s%crRsl76w*(c$uV(5sYMW^2n`l z#^t72*^FCKljgoOx_M3xJZPOw@fhp9EolMHTDvjD$(3HoiMrhKT6u2ZDva!T(hWR= za7aBV)v@lW@Xc)_J4pSa0dA0a8Xr&3X&Cc0zqCg>fbtcEiN(ZYZgp{$GrwLdDRK1; za_T$FT}|)zDTw95YnM&jRVJCrKX;CjPnEfH2H?}_fDlLPNbZI%9OkMfuVVaC-~&b5T}>s@C5ne} zw-NV6Fm0?{+uB`AB(f;wfz<6>-M{S%q>$OhL{A|*Y-#KoVu@wBy?>NWK9h1Df|u#H z@Y`DO<#@!5*e4ZurzF`XrDmtG(-VuUla@8Pzt;xeAxeogqDjL>Gv`>ot0N!dp!BL| zv}!kcq?WuFHp?7LKqPw5-qHd4Qa`e_I)&R$07Ew!EH=-b4XY!i>}uqez~?}8OLuP^ zY7C3Yg_`~n%t2$e2GvE=rlNRz-tyDxk+j$$*;+D@vZubn_K?pvWs1e;T-LdgBIYJXnT4i&g#=1%k*pB9>n`_mO4$}v`lMv_sPrFQiup1_XfvBBLq@vF}hrKH3@8w89{ zG*Y@1y6)BQkyu0Tv}4rL7HvZ1%C*F#eX6?YaEWBL3yjG}0a;<4^sdh&0aF{{UoYeJUVs zAkWqm;w|K!O*T->vN0u2E3~qUg2L1huu=I^tv~^PI{yGM=}+KO@;hvJ56YG3@e!~a z_;^(v*EKS!z|Tq<)by!aWh1l%RoG>TQ&@q*%g>b%o1D-d0OGQ^U6;wLd>r%mR#yP< zj~voBJ?&fpr-c6iDWtlMkQyAbj)(QGkJ?qtu%9XeP(l9yg)UAxAJ(pP&i3ThKhXB= z<8Z_9sDZI{xyN?3U-c!g{{XDF} z9MZ3nlXzg`JhPf6-q=L>ELilUVpIX%$HtZF5|(m`DBG!fIQjf55Q>S3efAtrJ}1JS%Rn%3%A~6R3045|BvS>9Jc)0f5KkPZ zz<5^oQZ39)bui(AG1=QjI-mRJM#hRTd2pY)r9%=zsV5#4ypGXv0)BP5`Bt_rQ5g}q zUO|U{sGWZLHZ%hV!n{1iIBpeyO~M3{jth0ixSd$gQ^u(hu*VK?gR6M4@}pxx3Y_c> zK?H0;qhapEN!$~Sxw-HjRTJ896N26TtTCch}Y-%CdO-?X5R9dMQLzc~15Sey9r1BoM5iUX84-$HL)ZokWae^c2 zPd2Gi^2*aMV-7?^-fpe_Rjd#IFa|42XaaQFwvpB~$=ar>L;w*oXlZ0FPe3XjQs*VG z1q(E#`>XE$bVydF;^3Sj5(kfsS1lsBEKV_4NJ6mMwX`LKo`SU2k+ncn+>D-srD(iP zdF*!0XE@k;(GUP|I%gDUM5<%Tx@{8D#tT?(?jAEF+b16&d;syHmeRrtX>6h>(wNC` zPF#$0J`|Q_XVA3JH*VRKef6EYYbU6SOJs-Ikq8)7kdQnEGg#}{OPfoy*tAN(`Kib0 zMnd8JuyQxy2k=V6RYLk6pD|s>8gJo}MISJ=#UI*RYWie>KrO@GL(LnZ{{TAWdpTA( z+@S(baQKjM`O}>S8DP~}9ZGP--Jm`g{{Zl#bSSN6(&Cn2r{wOwJ=IZwJwL4vJkKkZk+_Mhi9Kn^TX>zS zDta1NIr6ax;Ptx zQ2rEL7mSz_46lf)OKJ5@V96wBl^jvbHeSwU${rwp3L0x6%?}CiJg7L|gya(&c#c$b z7p{ZnlZ}3|($$LGy@Pa?7Q+HOk1E~?VPz;-z+0Fji5vAFjW&eaT*d;GagJSn>R+i@ zM+oAKpGsTUvs{9?f#NwMx_#CMAo>xpt+Ydn-2VU}{U~7Wipr#b-tg#t6h@7YmABYG zojkfJ+S;~0RDA_gPainP`D%3&n}U3WPMR|_1K~^HUd`ekHP@AFN#Z&Ds;Dpq)oC&x z0BusZA}|ibel@oW5yC(tG&EVy7X0x=!g4{!I#lBctbvHH2Wpwl4>9RWrL>k4+FO=j zI(;RsjZQ%6w@Mvg5=krPhhf6Pr)tn$H(Vfuy9I_Z#yO8#=q(*3iDikysm|iLtE)AW zCD(zvNW71&VFb6@WSnTnfc565)|JLyj%8$m1>=&Ew$~0GocPRtGg^4N zXXWU){{RhrO=)01eTQ$RD?g&6*0$6C0KY}{ze?%7Ip=MpAG|K#MAgFm^#}XP{exPl zsGTnM@-Ea&OMzJ+t<#@6R61Ym`G36sc=U~ zKl_DtKE~kRUp9B`f30wRN9A4K55^u|*~f7koB-L!Dn!%IrpQ9600Wd8@p+2tA^@Wj zGu||_SF}m{hab|pvA?$D*LP`kZYD#3dU#N?wluq^2i=W``=|@f+Rk^4#=zqvlYgCS zHNr`uUKPg>iLyQw(T+VbwZ~fOQ!L=l-J%|QZapc}2 z!`@FF{OEH$Y;(fE(Ti^FVe*tKBx>9)0p2syhmHi9mIS~jxM68$a9VMrLjoy zN*PJ#O|9lx*NH&l>M2+yUe4^qLP&C+Bc(ZtK+BLp$k_PTKPqEAcB!(yXc$K!CNua{ z>uQu`%9J=>edxd*dx{rKoW%{^{o)mVIjPm|92GHwRlsb9#^RNRxho-#7b?VYaJ4T* zdmL%5&i)t_@&>~2^Es=L z7Le=z0P6v_N~WGad5hy(>*pGeTm`H&=gs0{&Z!3%+iB9^oz&MY8SjjE*HeF=kju~9 zHOqUr@y#+ex!O3zBD^Q%4eL)X56wn58`4YRi>CvYYNBf=ERm@PeAezu#I25GR#zD8 zP*&$?Bc}=JATM-^2>@C`}ycGhE6SS``;yKxScSd|m|3fn!{CO_h-8Vo0uyN_3* zUgO$K$Ti~`!WH#J_s2F^_~;o7p1C=L@)f!_X1F~NLdx3<$mq=cVzW{#c= z-8cMNVP|iMZg4(@GzIo{%dx#KI;9b`G(0e*SjztVx5_82m zk-5(B#cCCTaH3`dQkR|0??K!GQ$82@l{0AEkf$pYBQ569`VNs&*e>^)$K)` z04&Tv18C0w0DW_}QKH|>3!cx9enS-2#yFnV-;4q{!!A!SDN%`p`syrPV$I6u8D|4} z67yHPMB^6FFD5$CmDDIxhBw;hUwT;?F7ynJes+!wTvNO%m9C`ItvmX^)+3-$TN zG2?|!(Hso?XsGoo#gS0M1MzMTd2?BIq$!UZFif2LxWyP8iGTzMN?q zLpwx5O1K|MC|ySC*!wMW4{6^#fdqA{YKs``xIqIO9MIa3U;HsU0(|r9RG*hVtfxY? zP&E_j=M(S5xxoB;+xHQtS~+Ho#Ta zibl>iHHGv{?b(BXDlJ@qWVzzF4p)g(>^y3nyEKL0y_1vYS2o}=1&%!`y@BE4&fJHc zIilrNnS_P$zfUUi%EKLZ&hlumUy0 z4uj6Kf;EyrtlT55XqLQXij&!=HZ)xhLziO3nB<7qq~u?t1Gw4IGmPZGD+)M%O7VUP9WIoI@QAb=suLG#_>44l^1XAa}avOKFxZ{ipD&Edp#V(g_@&HUyu}q${$~)){#lD=; zo++UWTWov3k19yKR@y3&{=)o^xYjMYMuWsXqquqftWq|7fH`v~r4*6HY=TKi zUZDLW=npSbRi5q(QNtKnBpk8sucwLgG^Xa_Nu0cm#7|7sc3la))E-qa!~{`iI2})q zne#LOZg}|TtwG5dH5B9|=Brbhie#MaRREqtlcU$IU@Oquta!O2+E^^9IzOrrjQJ*QASPDyvgah7Rd4F2o=TGW7_|o~Hc#c6J zj=gE|Myz2njoD8U*7`}s!yn}RYX_9K@c?7>xf_5Ine9z@r^T(xWX|>92)c#ey>CZbA{{WgFVzw2I{{SmoeOe=an^ZJi2Gy!Y0{Dg0yj@8>G9r}=N~u=i+uk8HBnU7 zfS-~tn^Z3SE4OYn!tOTC)vRhVcB-FzZPKouJgF(SW(ot1^WjbI6|Alp!a^eC1H+J@ z^Hv{8PlrlX83j;(FsC=H4a}aVqV}(VH!#N8ng!tD-bizjo?!hY^Xb-xjz@{ZqhN}) z#~dsqiHHhG80Nm7ULw3WE)dBQs<;_w$1HfSmzPSo&X_?uT*h&L!k?5d%~WE$}Wt7$YvyT-mrcl!a*Z{8eyu(!w_%grJP#;dFHDW+UdQWYsn)m zJgm@x+~PSo^75vD0CGC>rTR>roumpda-%fCut6gm($LvXtVe2{MryYxmloyY#}f4w zO;8e1an_bwUA4TV9np^Bo|AGj(g_l?a@Ye;;X98#>z7U;Rr37z&e{pexo)cWQ{h;-(qfq|f=lOA5 zzJ73H>r)is;2sqtog=*;y*_%=*}d4sBEA0h*&j-(6=!k?MHF0%i*z{XC~Mwh){17$ zvMvsBK`UXGlLy9|>0pc8W2Gt61|SJMo~7m$(bM6R!;fuEMc_t4X5 zdOFR*wsDV%t&>R6xOcOQ;!Rpq7nYaW)}EHqtegeexKAyqAGY8RX<;AApPf3lwXm}G zg4^WLBtXLDuzB*NUfQ}pw6HR;DgtDK=S(|D)Ck5r1p}<9HrVr`1@)@NxN^rG6wo@I z{4znpk;qPZj8YZKYMsmMc?xSN&Y^A()ml@k7LxaihZ_u264Sl>BPy-JxZ0@>!WHlT z0EUQ9IzVK*-}i|Q2TTmrRyi6{9#&<}H*$BWQ=)mHOz}vIw^kG^_ts$l0C-dBy(wFC zBX%5IIlx`bOWVc>KeRd@rF~=Wt;E+uzzn1CLF_Rf2i~s=?&fZ}pxZF1nzzR`z z*i}Xu3QiA=AkNWblIVjg1NO}|wzmxf_KlVdbDW$HjVia^=ZU;WDs67eR$ey*?la{` zs?-YPTV zYsSe_-<=1aPt+bfJ%%|?DFkD~`BqD|B7BkT<<~O-7{iUEMP(_eRPy$WW_q zG332`YGmIvd1bC6X&Npdq0T;&RGFe?Zi<5lJZm#)F&^mq>OM&@$>HQWRca%3nIN6d zK4zt4Rps#Vtgu1B8`YK>8FCY9dWE*E(6PobfzGBmWQlMv@q?Un&18_u@&pULSt6JW zs+<#n=Szdy9$qY*<=F0PR-I#rLkBbOHDqEg3BUw%tl1q@F;k9*6mU5i+AJy9#(r_V z_wXJ9qT+C|2x0|Ssp`}mXM9zd9Pdh=-c{q=^Q{zfC!rNFE-|%v2Jh=jX4D?(8`Ve{ z$v6XWD+ogkfIaaB==NvH6=h&&9aZivtn5C#yJlU z^Q9)oPdgbK0AWWV`kK0+6i$z1*SFBxs|4*E97m^GW9=oKt(DYP)}$U7{&4YRmd{^5 zDy_+MHEi3S)CLwmQYb^pjns$DA^vaDffc4bBCI(Ytyy9tL^rP>!Xe~5|VSuaMJPM?bpfS|=`ByEHKm?KpD$g0VxmgD4nv9pS@rm^i@k$2!t^t?bk;1de$q-+$NgtKxAH-!HxWCWpaZF>xgM2O!1Jr362Wjw9!du0h=SFc zKGsGMMfKa8eUVmcg^3DUsf|xJJG*>(RBdu9A~75}3fT7s`1Lh~zwzYttHF~fCt<%n zwMaj_$UN!7tS*KwWcyW^_l0YD{pL?v%c!eLJ~is`>t6U!Pj#;v^?A9_5niuv;ZZ@S zJ_4&#UZ6Y%YH?CM(0uFNO-{mM{vfHF_=3G3zAMw`j8geOgN0jJ{nr;KMLdX8d`Z`k$y0kXc5A;OZ59^LDx641vY{|XsV`?ft;rwVwq>6A_HVx^{ zi&2PnIW-kgrsNzSjwf>Nz2m zc0JRMb@Odc-3ktH)%57taS%w(Yvx*%Z_EO~G2C>mJYBN#^b4r;t!+o|3-SD`6VKsV z+J78xWF6Pt4a%?198{f&T!kYlqMISAU1` zjG;HW6r52Lb7W3gI;}pn)UB^!jz}Cf{o&PpXq&4=mLkAmzdGb~Z9d}4wikdYcBg~cRDiG3GI(f=}xV-k8pq8Hva$$n{8b$pR%|emB8kwucdokP`VY-+i08e ztudBaDlOc#^PGO~7^-)T3m74R$_1fgqY-Pu#O6NGudN1ONkEQXT+eS!q2kVc{ zx(h^(cfV-{dpmY@@@^#q^R9L+=Zt?au7gc%TWYP3{J0-{i%OgYaSN@ya}$M-uwRBV z`O@}{)%!?^RtGyAZ{j@btmMa zQhzFQFNEcZ8Iflh;R_~r0ALg8(D_wjERG!x2&-H{lf*V}&b<_YhYM`usq5?gYV^-* zYIiWpW}(}G__<>=p-g4QWFUC(nlDj}L`AxT_fpl}l}AzqREf7|mUo{glmgsw9z=L} z*F^-0ENaL>9SE*&?%7d7FC`ci8g290$`V3MXJh3{L~DMzxLk70C%d;Hj}1F{B9cX5 zavPDM=Zgi7I@5r&OuG3jg(b<2x%pRBV#@Z)ROEEWg>$f4qusA)pn?rPwE`%S6ab)8 zBCTYf+70L`G_#AL%xlx>KYfU0SCCF@JyU5TE^#FfoKaj3x7@0?%bl3Z7 zvL7nu#th5Lodr#%Q;5z6)Q0za<{A1`(Mkb@NI!LRmz!TV+Ny)iHO@8$IItvX zMh!-n`*XH&Z*v;37$^S4dsUh^@8U8L6i7)p@}e}2R>I!qMv`Cw-rejC{Yj3Oj@ zW|n(MK-S|?jCX%Jb7ON2-mxUHK2Sskel(NXO|`_%_~D>CB}lkbvtSh%->OxhqzQZ#RGx$XS$0-RJX}JM^P%Bvpdp6NqJSn{qU=IHW=RbxN`9{+;7| zDA>~SxrA|%mMeqOl-vg(0NLy5Ok3n!%Sj=qSuH^UZP@r`md1-CSp#tg-_nbX(^=-AK+Sho)gIoo`ite-i< z!x;n({OQu^;~c9`+3KoE2A0N&5+*~%!OVD7kN}Js4o@TDPv*7^>bUwMs%)1zz@ulP zC_z^R$s^XS#UOo|@t+!X@-fSY@Ty5>6-L9I8yW*7vIYV$RTtUo z>1Q#69~LvtqRrk~OR2$Wm@FY9J>%~h&`!Kjuh2pFn%-R=<|&M9Qy}=!5_>tQ#{rv# z2m?DE>F}M>^qg^JymN}tZU+mqJ_~Ju;Z?J-lIG{I?Gh(FBsk48Z)No$q>~l^&pI^@ zS`OlCTZrL>V^rW?^YtdM3~ksI;gJVQ@vxjsBg*GEt?#sZ+eKEFgAK63rKt~gvWDq? zai92(a8H2iUY_j=p3GzDpzt0(wKke<#lddPLlC*gjR<35DUJSZfx+V1jt1+-L9pK$ z-_EqSxoO8{tHPcYW2fA3ajL5?h&7A@Es8iCtMYO%bBcy6qz4;#(Q%};R{c3i4 zWP~>AYSAdmmLMoR%~7G@A;T3O6h*8JDGcC+9EB=#w8a^ffg=bx3Mtk#UM4tE%N);; ztq4fdILPD&Q$ft-+a%}Hm!PSWYP>5UX&)y54nTCHv|Tav3)Hq&?8_-&NazI{?DmkC zaXsbCiyf>-2Yh7yf|=;0Vbyerevio9ljvTZ%UnT@8|JXlqU^3Te(wo4GOK#*DNd

      Z&G-5Z4dw1e6Uxo(?S^&$JX`*gb$(^46=$oj&Tb6Va~&07&{MN=~KH`t#&T^P#h&KyQ|2^fA8=Vnn_DB z;U_1X9%ic~jO~^_gP^Jty@K zx-K?eb#8!UfztzXMMVTr4lAO{Izp$s-lwH!a$Logy}Y*$Rwd&j-Z{drsjb`O*2Hj; zb1?cucNfrgs$AW?h#^H0L_OHhV0?UiO=BE#O(y~&k^ZXwwLj|r0LP`4Nu0Z}W8zN2 zw6(RCa9S`p7v7cjRjc+;zynT1t~o}hx;;-?t;N*S;5qJ(brfI^K~MZ2>Udy|P^iXN zI~P2@0*-MtCO}V(TI1ed zN?#-3!dMC%GLhs(4I~3RxNB=``QscRl63z7(~y7P;YCMtr%rfeSuJ0$(qHRGC&eoZ zB!2HMxaC?waAI)iUMC+(4nGQSCYJ9XX>L|%{w`>CH~thrOde*-~XX|TvM!`V6Nyp0>*VoUI0Yb;Z*6i%!<`Fhb( zCmA4pMd|BYskgkce$qZH52loTma=zSr6e%N8uJx5AJV2@vvdcGa0vip4s=M#MI`T7 zTFGxZ28qLfF|qvXbzOiQhboHF7(zlqqddpPsUac8PQs|JcnIHNox0Vh<*~`AR@9C{ zB+hZRNX2o4hVKKAd1AV@kSxRlzX{LXUp`6MH%2IWj)t_u9iuF@*xBu4le`BDc#0M% zo-2SDZN3QQTf=ybfhTbI^sQyV0|XF!>gMMaos#nuwf^wr{ZU1ZDjL{+@c#g0QGjNO zBgi++YP&G3z{P03@HCCre`jOAsGsCd*18{Lhs;XbZ#n%dpZ?FVBh=gZ6ZNi#*)8lg z=4NlwxP1NBcZczgux}qTk6IG?By__8S|fblo<&mOw#NCza>njMU(yltB6mviam-R( zQug8<0_NKDa#W;mo_XnAo#O#92Dv|LZKIz`owCYf9iYb|M%&jj&T(vU@?=2> z{#@2e?^e?QV~d0ngsjz0M|Azw*yU>x!-HPI;yAA=9|Kkqwtdq;UIFv*9sS`?bi{cy z%~hjP#77=L8QYH}{uG|o3Au@IbDYy{4_2Q@x_J>5(eNZg)DHtjw>Uk>b?ow6NS1Nk z$YX)5?nAQkP+J+IR_$%Id*p>rVe*J9*<56_cw`{@<20_uVS5wBY^CKkR|B(NV3{%p z+-b#uwEe$*9qc@1rGtQYNU@gv4MvY{TIR)4!s6$Q{LR3J80XJ_!jsJ&cN-DN*F`(_ zp2^-h#}nN4zx=UU-`HDRS>4R9!FLR=h3O<{iN*05&1;R*EV18CHugeonH+b47&N^< zh?wWZDW0(lM+htk$r$scv40jk{b5>0RnS{pEzV+>3n2V!E9*=Q;)aH8osWU1p!SR62&9^wrWo+mblpMiSVKNqE{CY5M=`I@ z3=elS#W#rRKg;5&Y8MD{7?1MiUvVHDv-o z2iBu6g07#pJPL5AYdKjX$cdN^qM7N}a;r1PYa;?W5kOdh@z=B7(Lo$rQS<%c`UqJlo`Oq0j@cHR1=){dD8~w1Hdxs zHmaE71HCejO3qZ`MHoACtW0gb!xSEylWe2kX2*q8&1?ZH5o*O^a1J>hb>z1s5xyub zH8(?tiD6JP)~If!;o<>DpsOvZHKN&^>?i@+;!>IIH}I%uaz}ZH>qh*G12rPp1HA+Q z0$V&Jj{{aja8Gn^Op+LfGAXW)V+$;oj~Yn~Ah8X&*k?HE2i=kZsn0o#-BuV}?xSB} zy@l3&rI{Kwg2Kg)8t&+jnEp^Z&+yyKSKM@OVEvQ!GeN!7G~a3OMynO1hD)(+4;yR% zNce+xLpu_^ivyFjd^g)~?1xa% z<#*BbD{XEK%0`2;xgdB(c7O1ae5<|}Ql^tE_Om*mnsCd<^n|WH74pAnJ*~g(-5%hw z0uL@{J8#n!SnW1BBWaC_kVeODRezC#ji~KQRc%lA#y`BV%#3--=6qYvudOYfOO+Wc zM)jndPZ4uyG1F?+J0&O%Ds00&rdX0m=S8G45CAeCMa3!u$7Y!2UN)#79#mkpl<(QU z#j2}rQbWX{cJa+4CTqKRr63_B8msCHoUApK{6n+3am`NDHiZeFQHnMsf=}g7MX_g6 zkc@CBrmh&p6L9A^Jn>x3;uO7+M%a8;V;pGd0p#UP;0oL>-|Xm>eXv%Io{7vd zf$xlYsTGXec)=)ZqgO^4B7we*I2eT=brO|?I;4_Bk(D^jExw+4EF=Vi2*IYB^8CbJ zw7sJTNSTP`T15PZ_I^i85TNbGYoXDybsf*qq#6?c0Hf67{h_XdM*jXj$)$QZ*><1_ z)L+)R8^gn<9lnJj)CMo)Kg~}skNPO*>QpJrC4@SK(#0lJo=m*OUT4;HLQ#Rdw8uW6 zewD6>f6_6JI_a*XRz~UyoZ^+IBj?ulNj>r~Y-PsBpE~IMs^R%PzB-fnS2J~|tIo{{ z;C?NLddNE@l9dbW{idlQ)uD-KRJB9?nO!}9cS z!GQ;rHq=bFA)t(vjC<|lsaY`jb-f3-wK8=a1(w*E6%jj7yUuL2hXqPQCdN_Q;Ur|LAv@~x~qDC2kAq5Sq7hI zos13|<>zT6>cAZB<>^Wi{zcOvvr&T-=2dWcWMdz#Vu;eQc4BgJ%uhNdC34^$`sU5g zfd-VEQ;kOQ1%>TlUNXZB-V~fEA4@gSjJjc!n@?J<^&lK%ovOJx*wrOCIIV03Zj^Z+ z%BjG60>_^gD_t;V^)u)BQp=;AjFC9x3!He9&{w3sj@~g9w?TsBepQyMw54fjJ^IgE zUi27DI8D@9z9&{k)aY^Rn6PAIgJpf4;}uvxbI`d6{zzvW&huHPD! z2#!Gt=0AM%bI;-7S>&-9&QC6+*7lZiPQ9Zt#TWjg{)4R=w-)wEizNBZvp>FlKCi;F z+erhhiHSqrIe||7nEoSr_*6}I!x@I%78tw-HuXHsVLYtu#Oz5uPhaa>L1im|@*c)B z^qby3lz*fA3%da7Ko!3}040w>xinOE4ik#uyEXcQnf0y1Luv}!uLg%dwQJSt^)f|IO7RsG8`bLddVuwMy;6PJ0y=?L;R2{Rk6P8anwoLs_s6Yz>)u-O zd*jxo@OPG%$=;etY)89U;l|Cl^QI#1-c7DyXjuI?_XpwqD#FxCGXtdK`A>W9=SIfA zKp>gmaU>H-1CF5o07_|Ztxf*`owttZI=c5;?;oh3q_;UB4aY;VtPCuts+u^Xn0*-1 z?}zTU0vQkcIlHIed45!`_S#5fDI{eNnArMI{11$}hsR#OeQOQek&ewLAwTry97{?; zZuBimEsvx*(`$IRlrSV3#`jFNx%bn8Pp*QCl)Z^8<`1&DhU5o@ z)yJ;lh`1+&*C95Ye_-9UyO%-qkn;5uU6#Ifj`4HTjYj_fbt{kQQ!k2W;1}cYQ~6iV zO??bJb6dR7vbu0F+tAm~Pa)}Ac)nTreh@ZnQ5K|$v6I8$SPy(w*2m}TOVd1iA8Y;M zOmqT^L4nUSHM0ehOzp*rDR-=^SAflF7$+Om7XaYafs_%>kahmT0yOPWv-L;dYoYc$ zXHEwjc8&ShJ?ubc(KTKIIEyG5<(?B)(6zbrNq$4Az(iR%bsLQSVz|7R+^y5M$9-hm zyLRDUvUyb`lZcJ?Khm*+>fY`i+S*i>Gu2II&x^DKWLG|$>@EHT&E@4>_q0bkE${p< z=}+(SXLDTt0JLWsCF$SXADFGM?laG-`RvyBPbU&gRY=%m)g^}J6%O;U2f&&t#>ra$UjzE>hKbnVtkvjU+$k~;MJ!*Os4f6lt~#ei^!}C39nE<(V1QuQ9y(%VmSV|KR|@-$MR*#3vg zoM^hETShO*B+SV*!5!@aK7OG0N>wUo-EQxv1+-G*Kafc%fo#~#YrEH_m)D+2EAm1Znf(H*eX`qhhk9L5t-%NiY zOf(=uo_^&JQoB2tVAZB+TeymQ;_x_h$1p3Rj>^@wDZ#gg0yV(l z80$!VpoTcLBC#r>@Qr}QI72;{{ebA#zkWRHmkNjp-VLfje2$4WzL3yXf4KMI(p zjim^vcQh5caZaduoKY5wjYuaz#8WMqApx<%O=*+TGx4pWfH5SKTZkjb7^ShWOdqIG z@vNp+F+P6^YG6gq0HCiiz~YDs8A`~h&m%O?S-(1evZC5I;d`bk#ZS;vxcIR@bqvT2 z%w+vhNxiJNc^cj#NC^-a^(6jgvhw5YWNqQg)>>5r+*5Pw;a!G-eex%@nHvQzVUzw> z2Dmtzz0a*Uv%F+P97h3x=iqAf!XHFF)Xp@i?b>1k&ntx|k!NCmI^nfzu`H#F9AM&u zp7EcI@g2$Q=Rw>|%%Bo^RY|1UBEs#~Y-eodx~)neV+DB=k@r^4Z0n@>TwoNDpjWrD`ops<|M)mvr&?Gbikl) zfe+V}OgiT;6E>G;%vK)EC>qtUJxTnitK5q#u6)G@?AtNcZOF;NKb2^fI+Bl<&VSw- z>Y!FD0UuOXCw-rm&7OUs{Ohx_8Hx|GDst%Y9|#;dH5a%s6U!B<_zmkTkW6G^vfDs& zH_xG5j^OEDEaQGIb+yuBNPr*g#%slT0iCD|K-o;TGg;k)5wRy~&;zi?;Z(R>#6jyu z!4|uN1YWcs4s;p)X@<8JA&76a4ypctxZCMgvha;^2ifG#luv|>P4s=W5ud7Qf3pKR zV~_WZO*FBMNPUx2Y3R27vwbIr6+6^_)ou1EE&7j^zuKpokRP&0&orspwCD6O{*jB; zx~ahkPm!))Lm1Se^{%q%3q$}@leJB}oN&w-+%W*2_l0zR*4wLTR-x1|J|oJr)FHRi z^x}*GnpOmwC)zoZ=S8!UBbClS3OC5t4l>3&>r25VpWh=VfbWrA4TiaEcbFz$lTXzf zU`+|34C^rrc+-7*K(@YCa=a3BbsPTxoh+=qs}1}qr~tOoGW3ks7hmPrjL5w002)ungejFEJVMJ}u?QdeWtW;^<8{Msy#ho?ew(l(G2+ ztZzvjo%EfM@p8LU_Sn{nJ(-#~FJ-ur6qmAuuvQrv$RCk3%Kj9DTtydk6)uzyE+rz9 z=;+S(D1egI%m5uuMLN|aiEQ-=nnBtLrGXczEyI)W0MUC)=%EIEoVfD3L;nE8(6ilf z*jn2vl`t1PS?9!SKGH)Gh&kXa7_Xf~QM{6fqh2RHIuBaY9Br)f&SN)ThB5CxaCs=^ z-j#->JdyVs3*e)t`PWyc=_v#zX>#(ByB?lH%DGQym3~^vqk8N94@`Gl6YA%eKU{hz z50Y!dg&A&j83;&T^B%qx0du+Dp}$Bao6@z32_ONvtzfrj8TVJj(+g{L3&aRS>h0E* z%0*+1$QLm@6c44p>Zh4v$M;X);(Ee2$++MX~ZEbOI z*z%=Z@~y2b=ejvT!5>*4 zVeqS4LkwN{2WtHZ$mAcTwODg%-Qoig=V6A zr^HHI&ytVpMZsYbVWw`?{5lFld*})z_b2AZbbU713Mv~!Lzc{s^^IwBG;7@(kFcAZ`UbOnKv_0^jR5`yz;j-IRurhR0fhe~0Kh0i(ynxi+AGyH6v-{`8i7*#HAhNhgI=#1^&s^~_f17e_ga8~ z%zD<%xiyIATDLlysPcQm)~|dpSJtS$@bwkGrZB_Sr{!M^7qm}w?cvg_vM&~RSsUvi z{V9mBX-5^a$8bCl_rBvoy}K(Fbs+dK!K&h;RtSRnY;edTyiW$%hsT{09GZ0f(KFh= z)SP91<{OWQr7Z~Qky08}7+@q((S~VUPGoCwWh8O-oH>uAh|e@a<&c=k4V)-?sr6bzlH zL}g$Y6N8dI`u3zaiQ8@wwPgm#gFPx#Dj#@cj8T^Dk-Y?j78SG&!giz}ve;aVbE2c~ zCIQ}sLJl%Ho^)Nl%6&OzrmihwNLB|s8ZImp&NuU*p>7sowo6fwu_MUxsH>eNq6NuP zK_i%@x`vx=I4vYxFZJUXKM_p}0Eay{tfXO$=}r#9Eo#j)?Fl5exMq@BLOTPEuy)0A zPtv=Z!(&jJWb6k*+Q4e;XesX^aB@01Cag@x@U#C(^HLj@Wut)^oEfZYM4} z2E`lz3I|#XPQh6|-5L(u>nha>In}@!=T%Oot<>U?y8i%Sjx;S$6)gCIl0p& zVmY*aBlV;7k7+HhE>&~5J|B&Q2>Va$J8nVie= zJB`QjIhAitbZ+WU{FWF2D&7jz4nEsSUv>Jt_{{XW$vs=DT z2+Ey`?mAI0vnl!)DRHhQU<45J+*ROE(h-lMe=4QV@NLKP=B;VH*vHjx%DWteh^gCP z9u^01c^Vc_!d5$jo>Wc5Wo{VmH`~C}BL>P!zK5u-kRwFd zX!|!nzgLSHKY*@&-f1o7Vs zDOQvL)a^gxFXk&vWE6Om_!_Q@zOQCK-zVlMoI~F0xqBfsm7a10tYc&4+voDlDb{SF zj^aaVdrM;9Hglbd=DH(k>d-++6U7G4Zw=ksK;9_|!{RWF+j& zXCvM4tnOh~P9dGX@&5pRH16irW{h21t`bLbso*%mfIjg{CPqV%owltd+baUuU6_cs zxZOH8g%^2d890U+Pa-HuV_CbPVZ5ttHtDUKu(;kM$oNrUh_JYON9?6Jgq@Gor_h{% zjBZBss`}JmvUicX);fLhw2(tFCM@?))&Br0J3f!~nE32m3Qc2pQ}=oO-b#Ea>$**E zfI$Rv6o&5CGIx5MQh~3u35b*rswpG@5}^3gtzimV#~TvGR1BI^ZlJo4=Bvk~RNdQ% zRyI<5)P2G5g~_Yzr48Yz&2#njfibXv)2nmOTLoIF_^&1<1uTU*;o zC6!g0LU2y>MwO^pMkeiNMdFl^lhUY^h8+FR>5^CrWep_y3tDW+18BNPdy)pyiK9sii*z*8v%m+Y7(IS8MG5 z0J1ui>MZQ+XL%orxspomR|`l*f`r4QPaFDn45?bnOYQvrU#cql>a|*cdqJTzuy;IUKmF zq4r65V=azmr!J2k-7G3{25Q#}+&QmCa6#K@ncpZu7_3?cy-+2H?oR-(Ajae!>v`2$ zNKZeT73E$30LqP?l@SfFDz^}EDFTTIe)`7p^48ddxR8b;IL2vha~C_V5JJWd>&#G! zf6&(v9f@vKZSjWgS9l+YdSZiUn~@b$E)#I%KeG55e1MUj)YDxtLDbjK($8n2A10jR zl!lt=3;vT|Lq^L*+LC_y{{U*8U&b3s&ru%Kvrz!wK5_3;tKbHhcK-lpNc85kRsR4< z!}hDKyqYUpLp+CNzS2T> zI0L{_{dN?GM74}sr0_fY14XJN+Ub=I(?k z(@$lVa;0UsUO;t7{1?T!w~*$l!$zL;-ZZ4c@@saTxR(U&umjGc+kEBIPhVa!1EpzK zda1a0isA^&j?K%+QP+2kZS2LZgb^Yw)NJ!UH*7H&`~@@Db75(4EP#MXEGWS?+px(W z9MHE@TSe?`tSxFD;(pN*U#P12BCFeI)`j~?XqI|0yAQ=B>)Y-10;oTY1$(DlY7eMe zTd8I`kU8j}q1^dV+N5TCN#J9F@>@CbdJJ%r_ZkmU*4o^={C6tl@_8l`kmb0~1U{Tc^rxB)ivkG?{c9UNFeV9beFZV??d)JPOyLoF_@65D zJYG46FDvRi*?BmI_c8EVv3ErPc-PIf`~EhBz+!D5VmroN~@ISS3pk~estAS+mH-G>`@6YC$+u4G8Z3@UTfo@TS# zO$WY+$EQCQ0pbS$@}aa$e$ijB-<1`52-9WB$>JHIv<>wo`w#h1{{R|aF|M<`htN`# z{wee{+g9C)@)W5yl=>Pm=(6m>+6*jlPQhw7kzf%$yLbxjh$`#L%TF^Jco82j# zS95Ui_RA>xvU9I7h>S>&4tkB&jsC@eWs#isj!%i_M(HClzuNsMDU*S{;KQL5evkYo z`(LFi(8sXS5yX8>JJ5f)pSEcvi@(N+wo8cO4;!3+DWdZP?AG)6t)B|Ws21ss&M9oy zw>iOW@r}i6Z>ZrFB}1^rMJ+3E!V|H_JXWxifKJ{OjlA&5x-dRnXv<)%0qcsIax{ps z$AujORm0jsD&c|q<9b}^ig$Jf@10Ux!ST&Vt z5;g}NYRgq8!mfuj8>jYL{{ZE^N6ugV+UWg|j2$l2;BqJNHO>1u-S%Sm=bXp>kzG%+ zAL@%wvVSvNUSF4QkKpH$XT#2fllaI!Jm{xCHreYz%YicT9n_Jwy-WWB6BZ!;|C;vT$8Wj554OYN3H#Wa_8ASAIoZ;TLpDi!fX8s$Trzg*QE{;yn&B@&#R zXNw%EWzo&c{i<$PVd>JfWUaNtmc+#_Oh@pmUE7BoOS+xG6)K_BsTl*Oho|(YiH*78 zJ?PKj=~GRvk$BeRTTV{_J;pseskZqjn~c~?Ip6_vP7FvhPG(+xp^5%1Qv)tlxcQOmB>sL1b*CeABqE+&z1 z?nnp1oFp`F2of(Qrx{@DEL_TxNN z5HIi1{jvGeCwVXM@_Z;pkuv*_cN9&@#j|I^k+hjR6GSSdm{h(;JcDG`t0ZZDWa-3B z4jT{gsOKkMbkgaqh;$4N0izILZ$fGK7U`b~CFI+f6$?aztt!;X#@l77n@F8nmFh!? zjvSr(Q-xg?i|wW5u8uTaMjw}1BJjZK!DqJ_&J?$G*FQzEjGQp#T>k*dw5?80^nSUg zzJJ)=IkS{`VpG|lgocC&`OgWiX5&b7)Y=z9BA1VWfZN1;e5*XM#~->i!rb_;t7v}D z>VT~6rQI|~>BSk9Up;t}Abs`K>5*9pk{hM@IR}IX7$Eb`_^-`{Z#2pH?WUI9f!X15 zhwofddp~dexU){q-`f3pH2S|Uk%!#G(d)jbvt7SLYSyvlNNrDS#Wvv_WRugo{{VZ} z6YUn2s6etjmTheo01{m?+o%Be%2Zd%Z@swo%K1v&`&X{ar|6sM0Q-Rgk{;6LV)B-j zLU(sOP4}JY%xq1YeL_7;*=;ZhHC=IUBp>-*Dle2VK61AVOYkr0Os+k(y}i;6rk8HI zKAS2S%uz~Yo@DTrYywpML<*;`6@0$qPnWf~w?!=N7+^lL6aH1#S}br|MF(faz=3u< zXB*W{Xv%5{(UnY%oO7;$8Ze{2E1r(vq3%MX<60Y=k~RoF8KWt($Ak8kEMUDT_J9d& z%0vqv0Yh=$Hzq#?tYH9iuwtq`O>HFIpT9d3^+DdS zHyJ(UlOJlYbvj-2f(d7qCCTxlwC9S+cnrwH%7H^}{N0rQ05GjmD8UDfapDC{yHtlO zsaxmXW9TYP@=3D9=CiWX;gJLOgoEKsW7DBg^pB~mu9`(Ju7q8ISjp}VwdijH4E9VY zi@R9IWyHDe3Ye_p$RJ}i8CJOBv=<84$}sh%9?>nW#LDrz8F?`2igj@Z1Oz9%+X@an zC9#sfg=3a-H^&W?=`h(x#Aj&(orc?Di+dOwyrhtPsJ7DkqXM_Ih$8kEtuVHLaZca-M~w~bPJtDMm)c;N2?dz- zCc3X??c%eA?ruoqZQacW?FSa9a_UmueZ@T3_?qYbOYg@{pW>dJ_T>GK>=NQcnn;l2 ziA;^cgB-~|0C;YCQ{7Wk0@(n#Iw5LrXCpjDd4{olgSLWOBMeB3gdXB+x#ZF z7SqYMw@^RWD|vFKgKNkIcTWGoy*=m|(`kZLOc6aPsbA?=t`uI`ztk?GXhNIbp zdGwWc3(K5~`U)v+F68#2-dl!Y3ru2+lhcErrADU}zsPkcEEv2N*4FT=XWjvhe-dj8 zp6h9ZktKp%~4x>cke&xvp4L-J<1h9$?pAvgqjV!CJ^9X4;3 zO%H5tEn#?6eHTRl6XCvVnYy+M8Jg-q6lIGs*kt75w8uMmXO! zKtAwM*W*g=WQNp~KqQ;$^d7&`wAFQGk&ISd)Z}F&bLstQd@6%{?_QUK!EZS{x| zj~K3q^0|@DTgSuFkA(s*=QKLc6}T@W05M9g^(pS$!)UCl)wQo5%_oB!--xc>lVrvn}=XboD)tfz)1Ad+%O<<7c6sN30( zl32kUt~TLcaZiaoO(EA_NiHFhSwxS;gN{qTAyMVjo$}M^{j$5(pd?&hNV{yrel+F< zhA8_+9BuS-%kHHm0M%wz9HcuF=S{8QdGG|E`yItAR1 zpM7zjw7c2iol$?`$ba}6bMd8T-51oiKMGdA#Xg3b>Nw#aW|XJ#TkM*6^o!Yq0~5r5 zl>T(i^be6s_Dw90X(2z#e>!b;zqvn;1w~#ZI^e{X-~O(@tt=v(dqB80N5<8EGfGWq zk4Ve3A9LeG+n`~W99{#Z4BqF)w~3g5sJupsP+mYA?~a3&XWF!l!y1#Syv-1wR=P__PW_sm@%UDGYIfHNf8tFw)6Fjm24*K^P0z&9w%Q%stH*NdZyDc& z9nYz!65Q!JWLy>yDxdvV+?q{$s>vrdBR^Z2^c6DO(ylUgAjhXzugsuwIkQlgT9dk9 z9_K>G3;uOmJv&jAyuwFVhwDpu z3Tf>S!`h#%06&c^JgZE4WtVE#zKO3?k9DfjhB?QjM~zA8ULU0(ii1Iv^=0m#zm-yZNun8e&k5wi zaDF0!F5gWR{u|b|_b(6dr;;x$X?`4UYKbDhZ<6eQYfkKy6HDV%bYv&b89oYsr(qhlOH zH9JScLp(Q~h#8wgfrrENL!|a?=xXaP|S=+9R<%gK9(Bf9kcNNT8 z>e5EzwE_0V`xnKewph;p#*GmL0G9apl9hCGTsDL-I z?g;NA4^EZMmLB_#sh6yk^r;Vb86R~8ESb3jz<5_Xrh8*)bBON&wvg?fYJa6VNft>% zs|Hds3Y>x~8{^9!+RWx%H)a_lYUTa8BlZ;d#_XS+bi`+iBDsHV)UJm9a-iSVtH=34 zXZ2zgpx>(+1r>r>%>bD?+zaW%}>U)5~P46spxu-jaJd5a6@u3ghwZbLs=N* zf%gP>R;0`fIVn=BV;_OoYwKU;)T8k`q0je zy0ANRraL)eVqRQTSw%QfBQD6%ZRLbszUD*EQrNe zaw44BUd3^QkSuck4M`(8LCcV-B!&W=n;X-nQt-$bIf4%SsfFKVf2G`AnN~TXkRHoB zvXHBv!nw;GMWe)58F={v)Kezx<&Tag489_w#meRGGxC=ERn%zqu-)GzR}z?^0JM$< z;XtlpeXiT>{W!y?3c7Ws#BB=r8A&%m-R&EoY5m%Z%8E`);fExtksH4iOJnP8LcHeriVpkZcg@8CCts4udZg@0Bs0`ha+mB)E(!3@Cc8?VhJ|;(C zc5KjkUKrUO)Qk~TwqM`l&(|NFIlYcK&|X2XVcs4Fl|VmzPqsfgtZv3w>DS!Itr<=w z86GsW+r`#l@U7)Ajzfsnd=A`{D5nuwc2>adam!#f{A zP6ZDT_ng*kz$S)C4iOv{Eyx40&)-H`#3pq}qAu;qf%b(MskVW`DEHX`!9D}TRA*(H zY2%h(Z_}96<+o>LkBZ>r<^9$8bw6;W<~Du!B2nZC{OOFA&7GBr^r%=HU=@d%6!FGM zqsuF9!9^bl8IC6P1b(z_i@=iuByAs$(qHTO)y1<64ib09F|5R3Yr&-ci>beMa=k?!n?<93Jq>oO2YU z_268+xel`cd%;aO(j8_(#YQPw+Ne9z-98nL0073+vgk$bLF`yBcWi7clhh~Ra-ID3 zBD)D!Ag_&cm)5zvDpXX%rEtj-@A7tI;!SJYu^roF6j1pjY(qK%If|2YX1`5->Yxxb z?aCPc0OhR~8Qn=C6nbK{I)$!wVtoY`@uP4aFM9_SH-m;cL?t2#&uVBkQ;N#gFtLny zR;RDuSyqvx>5&#k&=sUnaj9Ne9Q-P?f3n9_6jh!$hHD(17#({l?2_KVx0e?L<;w7n z0bRsC$>~a%Xi3Lh((ml{buipo6S|P=@#kH*!BBb{&&T7(J9d6wCRoi!Hz%@sK^XZz z;%kZi(6kLZPlnm8k(Ni0=e^Jh`m-)aT#d0`I{won5^8W;^o=rpCZCtbjuKd2A0}Dd zSI_5MMEmtLrqq9=S3U-w-*AL*K0dUD4fR9=s5Pb+gU)gXTb)Gxgjg?}u@v4rVe8mN{{Tp^Jh-!(ajD-&WoROg23A}s@bfiR{31f;mMt*?#GuZ@Vd3U#+GIs!d;7^e z*^LjUT1jy^mQ1^`q5ZD;b&T;qUkK~Q6b@Au%Y9l&sqE>j?oHwC=J~5g{lz_e%?GUN zfuND$1B4Fde=}S?&Z(%peT!X4QGSRx6eCMJgU2j{cxIgNbF$0oIMb!}dKS6W46@0@ z%@mm5`3-$LP16LnR_<}VynpnH`3JI6vTOFkh~V)r-lo4o`!j5kXtq)ww$Y#dBDsFH z+-!7xC6-!KJ&nws&|AqSL~%Go7{DFcU14J)+uXtsaLk}FJuq{c?{&V$MI0a^#&g7W zB>30NeYN(|%S%VH(>P|jBL#=LmCfRr`ERZ*^UoYH_Q*f97nV940NhK&`0k)Px0QU~ zUe>PlS$pS#0DG|xL)XTE)Nd|tZrbARW|l@flUO^djm|6G`hTUKIlJ4%`j4v1$;9a> z4SMGGD|O*f#PlQ2Be7V%Ca^pawnxrM_*Y)^;kfU$+{tizTbVc`=s%#XBJFM$v9?~y zAEd{xsi=wq?b_V7-W7Ro0A2_H0ClH7wBOVf2g!8s54|VWBY%g5Qs+^c;X5@ZD33wS zsd3_CmL!^e?8UXLlNY!~kd8~7RpV}7Y-OLW6W=aZ(R5q8?V~{qBi?2>1JwS5dXH_i zsC3x0(F;3qmdg=<*dvhWE3~zaX+T?RS#C-Y1W+L=neiiGO8)@0jW+hy+e4D_MKVfc z`L!L`@XOuLT7OaFo;*La{U6k2=JH-RaGH{EYu9LZ#Lc(HoP4!niB(7#9vcb^+89iJ z)Zd_7k#NHl-VHw1-rZ-qaV(@{Dde^1WoDz=!d=}Lc6V2e#EMl9(|%tHE(<$baoS43 z$mY$+R9xyYue*jI^5`feiuY5S3+|3(wgQ(wD&k%_rW%FBHy+Plm_foa44t#RAog?p zYCqvi{{TZ*OE#P>J(ASV8FtDRZk+3y_H%tDDr@aY-;O0fCAjTr-kj9_ny5r=T+ z#)-FxI;mrwxpbLqFaoJR6>Mfaz_yS%_z2qQPkgp+6g8Ht9MX;-<>bI&%1-(GX1=qYFhsQ zX~d9@=;)+v@#HBKw{u*`RXF5h^kd)g{*>|$W+I79+O_Dy@7bZi{{X*AD&JGnwA*v? zTSScgXWRVE63NiBEBSCqX`$*4hIxY8#-k*CBSC9Jhg5@ZaF5oQ-s>}5xCFByAZ5F& zkJfn2QgXXm6@wfeHL8ji&e|FQ4`;(8pl%92Xbjv=`QaLxJ zM@p6J=~k2;mEq6fUOC#lInWW(po*TA27-83k2>{u&>pQvTFSKXrA{r-(=AZ(Y01AJ zpOq~egGb(+>C5(3qV~DfQEmjD{BcX>HZ@``9PIBA@Ntn=mc|BBRf?Kk>nvohPCp9U zFCJL1!^@6in$WQB6o0VPG?wK~8Av_^VzOD7d%&MVirp^Q3<;aj#zjWz^#hoQJ7iUn zQQU9l6!@c%GCH>;;XVNEO|&hooc{nZ{Ha8!Rj@@i z(T*(~`Jc+CC1ZIE!vIqaImxjR^y6ciT<0h#?KooCeWObBCv9bwmerF3-X}D|1P0w4 zjmipJF7Y>!rnblTXorH2%B4$37IIE$qChwTk+wei3O$D0skVEdZOarDrP5k2XgjO{ zJjUQqmv)QIkTT~Pl6;f%Qp-EMnrwJp_ZIU9ScyKRFo9vsCox7H(J!!i{;O8)>#X+4xrkt|Bt9`M-G zyWJlHiXs?zHpY$0e9o2C<&I4zc8$X+1DB|-UAk9C?L-k-*xSczAt^WU26MQP;IN$_&u@SpCHhnf&OkL&~wWtm$PYyytUJ z3C7h0j%gdG(I1D|2?0Fkf5=mhXTXz3w?+Vhn8D@Fx&1wg`zSmN@_v=jdp0qpTMy(I zu6*ZioG(GOZ)R+6hZJkrN#dP-X(+MQ^eH&)d|*x1h#Ojq*niTJ zYAy52_60Nc4Y92=f4OhWR{lx$Rz5rb0FnmPqK17!;g5B@R>KcdLI`Jxvx4e6sNe3Q z@9l15y`DrOMKUqlW6r5S$8O^OEPO3%W?5(RIi zl9xq?KFUw}4LrGt#_F)PJE-)n?uP{YJ_fM2$dNro8>x(4zmcYv5=c1B5oL8O2+bRH z83&P|@Lh=ltrHLm^fbcl-?-ufn`XMr5;*3(ds$>yg~V+bcH|pkGw~J5Lfzm;Flpty z$vE4&C)M%vsL5E~U0uu(e3244fq3p$jy!ZS;5XoZ3R!&=u<4hNXEBn=?u>5O#}^_t z^#+Boy=!}n${EuN4~PMS56ZV_E@k$8CqPUKGxodflf#VGdedF(t?ea_7^h|Vxj`sL zTpSVWSB-&Q&P?$1Jyx6P=zdJ$VOh9sxVRW(ay$Gv{3u)7NRs(2t=*d>A>tSzvx8N# z^pQ+E`Osv0T2lbSJ53zgq;D;vorjmQ|l zs)(#bvmR_}!qa`pH9>JJV|-TjZ6nSVn2}VL_SVWIQ;t;28w$qLd0BCQKN@9eX>%(i zk=m@5;!IB~%h{|^fJ?t3ScL@esL91mx;Zy>3$7C?bGF@U*51$S7lEa-(r+#mP`7eF ze*-vPECxP8zSE~^e$8k%u*+v-74B3#S93RL3Xzp@^hQAh9|~3NceL?Dvftj`Ltz3j zXznMJE*NqOIk&)X%DL~w z7lY*PJh-<;`^7wbnA^`|JTjAxoGaUFxh1tEQ`Z8hZFPbHZBr+Z+PZ7a6I{29OE#Bx z+4OWy(ND!PDOoPK9fX`=hI@n`#8%TN#>!S~b)tXPKm2QGZ1u%EYDw`-(`fB=Sr~S9 zS4f+Z$mA4#n*dy)`#J2*mBdDA^*OZ%>js{jC=Xo9<9~pspDKshm<8|2 z?yT%PQ5?@~#zPvN_~qD^P(T|3MsfvbpO$lHGDswfH4cov85pmldo}G87cm=~Ti9a+hq$qn5MsbQ$JKC+w0IXYzoy13Q{uLRX zCeiG;s~>dMakj&Ks#&?>v1_ptkQO2Qf{3$h5kXuqDG3K1+S<}gVzSCN#=8FiV(!Em z{6L%uRK|Zw`gOE{;!-^;;j!G!1cG=DB#F3})|u&^)@w05vPpEP8M0KzkhO;L!!5?w z3FMEkNgx^D81b)<`&D``HH(?S%J!Tq=r*mj4{G&SwsuSO&Njq2&&IjA<$l2nlf-v4 zdu8OjjC^y)6uLQq$>wQ2s(+->k3eaZl4jYt^Q4npv{U6h@-gXK;~C{w)o&6B8-u+m zI}Z<9U2PQCGMQ##NjsDIQ4m>~7|k(0XT;O(CrO%Qnsq_LZxNA!J1URN)aRVWFAp8c znEN+ikwPvcPFn+wm;CFS{?zzQ{h3fdgnD_`cX@T#=~kL_YN`@7m6&yA-|{u{{{ZbB z_@=ZVosf^lxx6;tF6*PsB=K1sT%+e3ZnaP{IaS|sO?gH|dT%gyvw#hD%;){6AAZ&P z4@JJU)BTmQn&L%`65V*2jt46I>ti>`^$U5q@JOxq8u|_Hm92Y2q(EiVQrZ;+M{SLQ zjzsvH-uc&GU{%z_WS!rn*E;3N@EqjCXj4f)4*5H8eqhhIVW;y?y>Bw z+I~#eu@*d$LE<&fT-)|ic530zTy(DAr=C19)(%gozD)1l9(i%d3c>Q*$Z)a$u65Ab{y%2x_sb{B@4bY<5e+5yy_P|p2<9MvE7%5IOI$F2i7oKvd~4%>+h)CMtwZed*y-OPwnmqNGW<+QWXUGG zpZ@?T3sqZ<-5CkBU`o~}?ceFeEO?(gk08rJ?rm7a&IIUs@l|U>;0IxpoNvE-n zt-Dg+LbbL|*6vO+26D#=D=WQ98+9?+M5oUiRx&lk)Sc&f+v<)&u9{-wj_OdO>L>N6 z*Z#}){{Yr5mr~q&C9L-B3uZidZ(QHAhy5BJSP<%OUzzo%ql;Ym&N>M`wjU~tbS;Hng%oT$Lu%dT1HfKcE6s-?Vk{6rSahtH6rLq!nW z@e%Y_dJ!a*#uO4f_FucLY?kH6&M_mvY_&A@^ItZ2Vi@vKll>{ikL=#Ds>Uu)4XwKz zc9I;E=}VPjgaXA>QF3edD+q}TEMu1&6<@oVtn=UeT487WodvFoplLGkUCZ+6$1n#F z&yR=SQK|b)0FSY=jZiM!F(_g`L0qUBmZotGa?ZKvI3pkT=T5DCl#pBYx~1yE2Pl(Z zYb%VLj>j8oz=6 z0La#JUdt?i89MH<44=NISUA)ySp8rA<5eZ!DYk2cJ)s}D>6`xmv2V_ko^;<{BjkE^ z-|X0aG&Gix3maL-7Zjnmx7%jM)p&G_`vcOXb@ZYH3H6%2*e(tj=B)v`)UP_cv6KMk zIjRnH5(g@&t8_I}KzhAiuTUN}rDl58oqiOJW#nkd&TIfbR8ULSiDR2WKbEHUs4hFG zB^dcbDe#p6A9&uV*2Y7`n0~)B!M_f4wDJ8Q52&vz@SKh$J|Nbf*+yQNn60Xp3R*IL ztM^aiSD#MdUD4OfZYWsq?f~IwR#p144E}UXSMaaB1dtyXWFURVYN_O(F*nD1lp|S5 zp5X`ZHCHzf_gn@Z4l_*>cxCr4<74$^P80Wv8&Hl;5Lz5APk9@OO&8MiC%n9tO5x7P z7swr{o|pa1k2a+&H>TQe_db7Gv$3dW_eC|+hwf>So`0PxkW)=PIBlbFd8y4!IHkr_ zPCANl65`!CdxJl9DY_lcg*%N$WTPC^55keH7I-sFIC4kdOJf*}=dCncDk#oK01-%6 zm~W1hCCjX~vXms?ls-fq=Ct8kJz@}aI609S7sN|cM*B@LyPBXxBn zJu-1z({iqx+7XR1P07ot-`2UN9m0ITtug5tc8;d67t;GRMfY6!ezh_6^rlC;U-uaP zKb;UyjSZ%pSjX}F>wJ@+D$e%Sbge}@tQ+j53~OO>dP~@ z!V2c0Bzr3e{&_z-==4SjrP_JNT-o&B3(1_1fOk7k6HA+jv7V!yZ!`1B=dh)d$VJR~ zsZjdaBt)H#^Y0`=`R@Yc0aKG10kH)lu!uk+i+~BnEo_<*$1!I_|lDEN}kRpmezH@f`mEx^K$5WO7w)$IhT1 zSblVNt^M*}S`yiFJY#=&espH6KYW*Nw7yPs#>GQ%ZGA_)DNj=^*Akd})(3k;2Ioq`@XK z6!%-gxr=5XoyZefgVm4m;tvEu>|~hb4x6{E3jVKulu&OyJbyI@ zr8wzZ+uHWT=U@+7z3D!?38mS{Vs}BeT5as2ELRtNLkF`yRDAX?VGnHr7lqVuDCy@w z=$4}T?rzc95Ggz>wtZ=P%Qmm$^|CQ*w|DHVmyL%u=(WA2s8;P|CRu*5)bptu& zNi}Mi>;31#mVR&`w9bkF0;o_T0tj`=&cj>_M8SX|4| zQ1=I^>+q~5_JQEm^r>Y5Vv6=5*@1;sW59OwYELc0#{oQJh<~89u6fw zV{!P_SMKek`(HuUq9ZKNfr4IUVt*PZO}EpL8dbHocH#taC@1l*WH%I>I|H4^ zDs8998pVU0A2UTMU1f#Sc4j;(0Jy@8fA~~t5Vg&p$zYMAk%&B5J8#yK+Dj5j%&)N9 zbJCev%i2woxCdiV()L5FX!=ZY{IRVsbX`nx)HH%rO4;8kyJz`G9z@YvJo?3slG@j_ zH|=+OV`((-sf|!X0607=w;K>L-1>5^gRmGM67hBubK{Sbe}|XdisGy< z2z+GZ@*);Lzw^w}bcNfqOf3CJqj{oKVZ($EX|{xo&grEqPQH(V4L zD%%i!Xl*!#)FO2l4Y(c~Q-wiHgXPXYo}aF8l$Lb;_0DnMr%B0kQqGe3l$pUoFH+6r4se&zY@nW%;$iu5;OWiHWi~ zH8;AGi3T^KVWF3j)n}c>yDDyINUegmYcph?gPE&H{1CfQdJuwJ*xvZFFA{)@*C&^i z8Q)lbDeXt-8gabTZBl%sa?8L78z}3KJXddRZEG#n>^gP1iVKSs?h~A6i*xY+(!C)# zmrR*d1Wis+!;OGA0DcsHtEtOqox6pO@>t^S6-F=tVg@}iUVe7vUXBt-2Uxb1E#kW= z^D^7S6^|^1!5@Wu=i8-eQYQmE1cT*Ib!~b^gjvTSWI{^svgGuxdiv!=EF?TkM=I#> zc=DHZhnqQZ)0NIec}^lw+zJhR1Espd(QcI5N1zNUr^NVF6@1swre%w zc8iUepLIaziuqcx7YaP<>v!sl>}$6V&Kq14*BGok-wuxl%jLS3uW@rD66{&M=3}{_ z?ce7^6Sivd$DWith(J;+rb#CbOs%(J(42k#SDPANhqJ{DlFjXG{~tCZV)glpDDQ08zniLQi2rh zt>HvoT&Ydn)RzsMdGTt^oC}ZrFB`NW0^JwlmaGj``Yi*BTQnGRFe5 zrU4rqie59?WR8dOq8=f@4k%X`t3dQQYkyN+JOm$SNbrt9T(m=n(OWtFktBc0 z=kTm^>9>mWN%eF7jnfbNryu;OSUXc4Oy^D0{=@!amWtCJndRE7a);K4wv2XR$OQP% z=iF-6E;c|1A>+&LrkFl9j3^^6dgJ=lWV&|lA;*+sKaEx>IEQ(e{0AXKg^n?XARnr{ z=>W0CE4Fg6=dUyO*GcT=pQ43nuE~-`-1eJ~fa^$QxK-E%Pqn%Gg?ck_aClNSeD!mM z`-M(Zb4$X>U3K@g7O_Uw)@U(|Vl~P9HWkiZYS$9U?}cv<;y3gZUABiapf_^xNA-Qh z`>2JBPP1YNUKJbgjBo2%V=xcJSFC}64)t?7Ou=SLG@~pLEn_E-%g=#m^ zto)u&%vD6?*fx+UBY-!?pi7njCNg>Ev}n|vkx|($K?9XsLo2b}Pg=nHqt=ML7)14< zkGef+hq@Z6t8}WGLF)B-y+C@j>+r14D$}pRk)?Xp`Tg9F<*Ws7{=og3o7urq*|;6( zn;sx!P_F?Ts*z4(IgVMPKg!t^y57v*`$0e3Tpzx#bhQJtU=Ck}P$?XV9~wKiw_dAcn!{8x&Go^5Nle;*FZd?Knm^9-^M5 zEzpv(vC4z-rgj@x{2G*=blS^pJRjw1l?HC|)0-iS7{1LVOyF-$?M5vWcqpl-7~PB@ zr-Niso`R5S5(JE7Z$#Vb=)pwMmF2pe(W5&+2m`{8UI63;A4=L$jF8`2K~!+sDq@u6Lh68_ELN?!t zKp-yU)v$PvsM@@!ag&UU)bRlth8*@3jhy5GzD`ay9H>i>H|3f!w>Tags|izP;?J*V3scI(W^LXO}w3=!x_E>t4wllKwT7Z8}O3jMU^+qm5MTpw;G% zFaZmU&}OR2J(#!211%=!?NhxH>IpRaWl2$)R}2GgDIkUk{g}2%pR*ioxZmj-Up|F< z025lt+NLrZGyec)vh|sE({^<2?paz?P;v%nDR;Y2E0Bj*)h!$ei%1uv^ZV(&mcMB{ z%4I!?BL|CdOZe!$SPor<~BrA94p zGb!i5`-;hLF6~HLn45%k9pOa$vgX|I%>xt%VmreXyf=2!uEY-zH~c8r{{R)YzPFt) za6#wPRb|sH<{hQGn2+-Azjb(LR@$s#`#Xgw{tewf(wRYHVW^SZ@1Cf5U-}xH zweq|-zqX5$OVPCj?JQ>L zskiP_pKjFBK`>8_dr<)AyCAIeXv^AMI`m}}S9QCxE)R_>c~qP;2+6v4m%_2Vjy8bE z2K`5c7O}i%DZ18rfr?8~z;L+yXp~vOY*D%)d~J%dlCb1>(P4sGG;F)@f(=^Y!hhMZ zPZAbJ86EL|DcNTGJ9?(bI=@RyLN;55#hvyf>srp0lu0JKXUV3);<~hzBwY{4$ znC<|@X%Z7FLa~q|VZ_wR;Kyk-&AZ`Pl{@vXdp$L@+Lin=IsoJmlg^8kvuEoi(8zAW z!XcPV9h7cZCU-spr!2RU<~qe~T2?k2ZMJ-IwIj8ZHK|;Ku@pr2B4Y5k3)vQ2 zXP1ZJNv#VjNH~WIlSD;*KiNCN+8&IrC;(cZAe?)ojQMh>_p(}{3*vU(zHy6VjsAYeGpI!0v#>~^B8q$=D>*d0Km zC3SaF%x%_4!j=SNa?O16`#`yx3A0F^0$)XHA~6V9@? zxoI^f>l{c|7|7gX@5OdkG(M3Y>UV|T=K(5n*B|9fH2C`#wRXT5Ad}(=70=t=NYkwC zAQBY;h&ahzzd&i!b9S~$%v88;EQ8D)xBM!RXDZwjH%v}3#hPPjGE6vB=M<&D#WB#- zcbloHy($_aoMhHlG6>^l$mK-=k+lJ>AZven1bNnN61P31G2ylgiq7U>mfUz3=iW2qZ| zlOD}*b4%3yo9H(w6}*9o88pM?k$rkkqs<&}HymNR-DuyITXld@>U(W9+B9su^G50N zaL)sHI-kasJgIKy zXf8Dyxnwdn9QT{4q<7bH+&);4y#{DEpNAn%DlqWL%S`*pFm6YFjMM>`qHD ztc$dqkH)PR3TMW*n8@bKJ5`Q0$$1WTtu3W3DMi>|)+L#Pobsz_V>dWIRQ^<0Qidb< zkbLXuxA*YAfNT}Pm*jwH(id^`J}IM)}C+Do+nl4aNrK~1fuODk}!IHktJ zpA9P2B{BO+bjmoJwL52>Hjd7DI84Q2QZf-aWelY%d;6lfb*5v?(p3hQ5gi1Qx|iot{^w?CaV4-6%N*cg-461R&sN z6d6uALNC%d6wog@OJ>_SH2T<|lAe3S{{WS9_{4VOz}H1;56K3{c$oeMvd^ZzKFKu= z^ve%N{KYO_W|-dp0IKXi$NEzB7&UnGjJr_#gyOe_)nXa^P6ZBq!$n#~I71Z#_?l^H z+epiV3`duAe_FalAszSO9t*WuojDEu&1Tmd;1vhJcaQX>1jlZOyg@)7CW(gmUN z)2;2#V+w}PylF)GgwDivin-{6jlZR4uwC37_AcMeGk$`eziHg~hIcx&WqUZ!6KCB) znop{?5w<7Azv`pm(j{S;W*`n~gM?5Tvha(4Rv(QMLffuY)Xr>e{?k^mZ=+iINhj%9 zYCqf{`$zJvVE+J9LFFs{l~EO+PYRr5QC2o>bQr9NyeAv=sJyg$Y;m%%ZbVkU$Ct0R zxMlpfdwTDZ+tKq$_NZT@@uM%lf}XS=PmM!Ik1C~H@~Y5JSF6L7dVuleSN@eszh8w0 zn%I8`k1E7+tylPG(x#kf*8T#sFc5hfIWCK1iqaWJj8B92Rr`AqaUi+2Kg_&Bt7*|$ zjg;(2uPBoogAXy9YHe-i!G`wQLVk&E1NhZsvzi^+Cj-Q8KMFV;mji>74m{M6T8Y<( zgv}!PNW4ObE0eJvhO(YNn>kTNi*y~w4-hI)`KED9ZB8`d_Dw20@l7rN0M(=H8b%p< zQ>$~Eap*rPN}Vayxc%LH!2GIe;vOiaby;78Ho)T}HCeQ2SN)e4oNb@NuP#q#Q@)2`XvTeNM*8xjutj&(`2h@bd#k4Y0Bh@fZC?i6KW z;vO-uZ^DiSom5v)TrbSe6Q3i!OK}wg1H@Mf_OnFT3_}iwV?;rz>XxH~OCdqgyTX=( zux#<*9+i#3AxJ#wCBL+fu(*L+%?=OUMgG^anSJ&{;KGd_%YCQ^_J983{|q5}y&D#-ct==~jQ>r`i2YL}M!6RLJhfyQ6|OAx#4v z#limoYX1OzFtHiY@%)B?h8JDH6%7{?+;y5xUNq+f=(cjPEX^dDB=4~lu0@g05ehIm z8fl;OEt2>&znG;&6U2XEK)!AN08y@kPY2}iVDH)fmCrFNqT8OBKbfbRY@BdIk%AW< zqZOU$wkymbxr`;mNhutO8~yaQ>)G2&hCe2DhC|6)are=L6<`58=!+>ac$w>wOLlav zOWU1&KU>lpjs}n?ikzvTb&XQ)_Rcu&;{lds!($oP*U+7^iU{U67_KYZXyZcxL<^Zl zKps?Km$l{=c>2x=HAem81M08kMf);1rI>#w>p*II-5(AS`BM*NNE1zy^hf7f-kD3u z%oo;^E((P_vWFw?=T)0ev$^je1pQ>#kA+0~O}n;u3LmVMn`!s3kk(?H`{{p& zZ|zZKdk1>jaVQ@}_CI}Snv+J{7qGNv#fIN_s2Y^^>=yC{Up5&Zc%$IBw7OhzsR!t| z$ouJE?C10vQE7CUeg;$ZhDY8i*4i}6J4*|Oi>OxbA^6s_XmPjB+LyO)7|vAG*j(!x zG~J@YCyVJAx{o!fw~iN#=aV~MX|+u{HMiDu^u4zm0>g^~$%lAW9?@$0UZtlq+Pe}4 zI~n`Tzh(SAX{DaGq3VmlDy_8rMmTbP4%DmKT_(yqcb*hdaggzH_=?XRdvi5f=f7Sq z!?<(f8Jd)R`o= zEy5MS-yLY~#^T)Z43+U4iW^sGWwzr35)OWJL3(3*8CAg;J(3^7m_nEKI&@bs5YV~; z$af!gXRb*U&R#8t$>JFE3I%jp!df@6RwZN$aFM9npDLWP)|ZYO-E!+Co$EO(*h|7r zIulD+aIpfkRm_LS9P1IW-nNc=MA?(u#xu;(sc|i}>6Qr|IU{VVDZvNG&^md|+(3P5 zCSUJT`qHy%mdGyqP`kglYm2GcSzF#?%+@i;%Gm_gNz0vGbHz(jq3v%j%lkZAty5TQ z9^Lp1EZgslVw_xP_c}Gz<6XnU+95Hx_gm1?FYMa(O*>vUQO2?X5mpDlkza7rt~7sW zwCA>!QTUg?6YRsxe_G@6-(2+V@k?;q;}+M2WXkR0w8AuwSyog~4_Y_dKV&D-CN~gq zO=M2b);}ixv;~ueMHN`;^9A2jVn%!^^@p(fo~0687KSuomC4T3k`^a?*Vny?xfdD) z3{FU16Y!_q(rxv}ZW3?o<4_5dmIgl&NOfHv^GE_4v`|O7ROdDKB5|7ePxh5}$E)^B z$PAiyA6q$2Ir~ev;IEG7YFsjNOfN~nINE?yk_U+c@2%z3VP@`_dsN27jjjM-iXS}3 zbRW#uKW{p;>Zo=bfu3f%PikXLN7_sHxbgF)N5gN@xRyt?zG&F{rvj%HWy4#kxNqda zz-0$-x`&QXy|xcJjY#6@BnM{{A$%9!w2WMQL z_AZ|zwNtw!J{*ZTrj~aEp)bNn8&(-kTF!^8jKH=w{3_B)3$J&VTvl*#6Sn!H)l{Z< zcJ!$WAq=A+A6lz`l80m0YVc-24st8Z>PTl8pfv4x_f*@&?O75|R1UlCS`&rH_)yXk z0Ua~F0kl}*Ct&(D@K+O#UaYxYNy(5U%C*9{wI~gvga~hOMam2V)AYhu~J*1Z{ zY}wDwOOcEWkhI43RJoB?iH8euZAiVK$%$AnbpBlvX8>Ln86awFmno%mOO`zb>7e0$sMN*u33r` zzfb$cb9x28%CC&9xyIvc*H0wE8`xD_1B(a14qMYKg|rG+_<$PP&UCd>3#m1Q_i}c^ zHb%zyOhQ-`0mqXnyf_qq{UIu<986yItSt&QO*B7P;<7p)v93vP|akVPa z{#1-w*msJR_!^C9-^ZtjW*jjn3I;akn$FHz%faWc$rEX=@)!VXkcYHfmK;2VAEfDU zOJ#rB!n|@w(ZpMtk-pW+do_Ki!*3*Zh>oGdcb7P9VSquA}=JYxgh6|@Wmkx?=cuG0H!iYtBWZS!x)sDR{8IZeI{~S z*=HmF0Hq(5e8@g74*hHB-z$WBGSG2@A+;UQe5)@s>8FPF;EqbvfCwD9)PguUSF?p1 z;uB`IiI0*VHuB?DVT*zx_IY(_b(4a27`R*JY>Q z-yJ$TVREX1FuA}a3f~tenr=Wp+Ov~??9-FE(_H@m^R8<}Qt>kQ%m?Btq5jprX7|~o z$-vUv8T)n4XmWhSr;!o^_}1PV!;|W`edGH_;j`4ekdOhww-JIofm-?R{{WRV5y7wN zjS?z$o#GS$zm0t#`&hD?=h>YC`WFINXNQHn+lTcP@xSfw+9@^tUr%?lYeQ@VWm(mW z6U_I2D&&)ROa8j&{{TIg`u_m<`K9qPdqHq^$&~xY0*;nxBq3UMkd3hz*nDYTqJ{P8 z)N?Y|K@;0r!U2&Pz~vatb6cmaj0YW@@7^jS9($VAY@-r`BXMJ?sFPAZ?A2Gy?tbbV zi>rp>!yh)-RPwF_-xyArbdk3a3J;gOE1I<1Qn$zcs*lFHSuACbM7*8bAS#SwVcr$Z z*pM}AVtP!U^$M7IG?kfhnB|c}MvnJUq71t*0C~|@V;61a=ku&!Z0d0wYB zNLT^q#a%V1R?{MId%`wSKKkb6J4An;o@sIuX6ktWM=HxcV{ac6mh=5rWPIQBpjY0b zZqNEI%y={YlmI7)R+#k5F4aEatzqME6+qj^f5Ngp<5u?42-F-5~8!;F7=5>;Z#)c<8A)o zOSMMgOLBg*eqx?Or`yAZ5vbpuDK@k)V*uw8Kj%(s;Wv8ao}hDK2ipBBYi;ysyrzH1 zRyX_U@cpmSwY2{LQzw+|`3k6-BEsxj1_e079P`Cap?EHWkeoa|d7!uHUh=KKmoHym zh9AR+zrML=fBY5ops3s3;2&y&>CUrio`$Jc=y&T>GzYp@tKBQq1Xi6#rBbdsdQzs5 z%C%o`)?&0zaMGs~FpTGVx|xu7WPEsLn2B z!|3iYRDGzaAu4dnRQNE(W+6Tqqfm0N)Fxqvnkh$w z(Qo&Pp3q7NHi~oB89z#+z`a)$jF6~OM#NE}wiBRPHV!uV2LLz@4@Lm~b%eHdQf&5t57vm4{5er1wpU?{?rJhiu+GD&pcLF_&^h_JvE?d$ zqJw<~@aM9HoOr~+zYcZKu^f#;77=j}19?-}b3W8UE#T~xI5997#yKr>tz9Rz?pi2| z5=obt^saI0vFSIp-}p)Pe_Hfj@xs)|`%gdUbM{Rqxsk-g2Ow?Mo7iLa zNBB)AyH@Sn3QwS^ovQS;q>gStEJ(rYPu0KC)~n!T{KX;D(f(2iQUC{hQ^g;-+wb-N z06H=}Oympu4%DBjf9f>bPb>0OVZshTT1#}yx;>hKw+YYQX|1DohCS6>f#J1fdTlQ) zrT*}8M-Dl8)LTFA(T(|v!RGIl#`SAP2KF*@%v9+2$^5-B;p1Fyw&(l5{89N=VRFNP zPWk1vaemr1S^0oU6%rbNY$>KN=TP8Mq%{epSAU-R)b$ zADwi3Ij3epwR}GxO__@HA>mYjd-&3wY3;&s>{(2@hr+OoJmHRC$X}yE%=% zPa)`eR9VX9;w>6oTWoa3~Q#ZE;JtlUL$Y7YTf zS7Ll=Ny*#8Ek-j4c-ZF=r{pW3)Qzm3%vywH5~?nK>gP2%jEwGg%BcH*tKLjjDA0XD zMaOzMp0*G!C2vDQvDncna>V}tEe%>m6n2KH+NH2=MaFAu+%BPT2O!3=(SO!3`88hm z`}F?+YL>ZI{8dKD#cv)ny@Re+0o{BnOW~4SuW;i8=FnlYmvc6Vjp4L{5 zR5{2vBEENNcG34qBvWfkmJS{_Add>=^7y^3-JTyWtkdcCe$&Y?`97$DvN6U6Lk|Kg zo7XMvEw4k^uDC9h=ePUAgQn=1t&&MW~ z%Q1>$ji`{RRn&yU6|=;Khhv<8cP9dg)TNF_FT=vbZ;rKvg7HqSeum@MrE5B6dpe0u z;aK-@o`4Kf8yHL@i#ZthP!RB?u*U2t>q~|(V2(q>aad(q$UfRe6Ns~u%=uGzv%_5V zvoN?`5^_%T<~HC(el3pNx2URVJ{P-;@8MX_vW^k8T71cokXSxq6DPt=aXrK&^ysH&dc-^>3VfoW7F@%vHJ;52Q?<9U470%eLqKTwM z4UvucR&yYpM?!gRy*O49CQSQeVDCcekr^#qF6_!k^;4hAG+~aoc!nA}EixT_Kx%8}V6M|>q7*a`5;pJLF@)N+jXKdF*tk0}wj?Gn5 z49B`?sApukNly46;O|Lbh?fWm;v+lw(_3}~D)8(;->p<IHGJQ_H{}lq*6i z+F=a`0);pL93DhbU7p;jDsupKI}&RtV;KgIlmHD0AS~bja!nv&BL>|*%`Lr9vA!vV z)SoAgG-0_~S91JH$2BoQ>@H`36B3i3D$82CytubvDiFII@Ym7*0J8X2O&JTef3;VFJqlZBtiprBdq6hlSLr)r{{V4!>iKSsdvR>8AOz&(?M-9XH5EA#<3Gzz z{{XVIQkQ_)e4v&aW-u2@PY{0 znw22U?oTqbMZ{U2M)Ryw`|dIHYa7$656U%?-CqY3Gg=ts$r~DH77F0vveaLMFLx)V z)s{J3>C>N&8#cC{sIi>j1J<2dM6GWrQS=Tz>gQk%>BQMMJgcSBU-x(M;6Ifamyf5< zH|@@I&c1`E!3=)R%P3C#miaBz?O#5B?+x~ieF`JP?6G|AZSjh~C&M2X%Zk9^tnL$z z--jes^WFGYn*~7Hv}9qZsQ&=Mii7Ce{pXTkJi4ur2hbEQ`mbo1%{)d{Jg{hMIc}U z0mv{tM~JVOe{SB=-g{8GZT01y13+va+%PO)-8 z+{sOBboY_~&RF?U>$X(ZWo7_?z~K5*INwpakLJTHU(4MU$&=Q`h*)i{Mr4r_$Zl$l zs6`RXFme9?GuCnG(qx$&FOE6=^hLIt3rUHegmWxwJ7Y;Qy#>3}F0QourIov!1G+g5 z@UCvvxOE5*gs6WJU7oU@zB#2YA7d0~8#r;j z9csrlo$01LP zHS%c=m0^P9G_nD?eb3`lA+xr}9Fask+w>H&OSiZf#r4;z5U1QSYKaBOIYhR$9xA*| z_nM6~-1vqKsat{jv@=iUsf8aCLfmT;?y7CA{Ika2g=TD{bNj`_v$sH4{#0eQlRpk( z)7ew&xZxj-J_~siOEtyMHn^MDxU@E+2!J4DiK1lU z`WUYgdtM#(>(Ybmr25r8w7*!@Bvs}+4@MLpN|uq>VVIFo^i2Ud?w?wrspx7b4-U2J z^7ZtuP;XWGk4mRXxasLYNUal*ti@S*8k%uDP4tpC^;)!37@LYQEJwyU2%{vkmNSP& zPqd^~M%?&SYA1EPTHd1=z|^J30)O%A2 zE}@VDH206h#V-*1jSn=I#*U(Z-07pu70VEBG?$p&pOaXYw<&m0r z2o5*Tl_ezh(1EvjQ<2ZkrBSGJ{+pUesqH1 zjq}T;X3dTE$K~f!%LB{CvrD#lO*b{#v6;61Eye z2dJpEZXG=MaMzXX81XY4{{X`^n?{K|P2EQX_)#mLlSTe7&W8tp+~mh0(3cX8}J`S=egU!SL)?yTWoQfiOp5WM_=Y6DN2n!6PS?XM3V)bK$M7 znl2y?C6DzL9DJ*vgo&b*gB*y%$k7(K`BLrSNhkJl`ZLFF>nQP!!TdSa2z84Y0n36q zF#fdlJ_hg0yq$waFnL!O?Sc9D2lM`wyk67YDB-%cR`Xq{ceHnr-u#+))Tl0YJuyoh zY^R=5z#50~zrsH%Cr9^W->T4e=jX}tAC(uQZjL-zMQa&T`D|?N26$tCF|nZEM&WG1 zG?1SIRg%WyEcP=x_yf4BMR}=P?9qu=%9f9Xq8inq`L`0N=ngAUtpIp$?AZ@i#y=X; zEpp#DxPhW>yJC)xTMNX(O%oIJTx0yHU+m}gL#54)%Hk=;{{TiokyL#u84naul|1;N zZ_=jcLxxPUK+F8moc>jUSYF$=6}8bg`Y-)y9{&JwydzY!Kf2zR1L(HIRvMP0bnrS} zLUMkP+*a?YUq-waw!NSqOb##ep)W5j?k!v+kofma5(|H~Cg(Cpf0~NZ%J9pPxlO+M z59vRtqO|aSaE?K1XvU7ww$<&A`@vf3hc^=({WDo zSzCDVnPTG^86N~=)`_-vMi@D!I^;2`Bg8=kzUm{{dnj%iN0D+<7^3IK#yDSXCeC8~ zAgcz=J%N!F4#*SKk-ccq#T;OS0Qy#LMl<7F_bs}y$JOh(P(_fS8Wu^1WcfWS4ORGU zvJYBZByPZxdHL3uW5XXNTCKF{@hq6jTu3WMDm7^7Qs2mG@kZD+8yy%X$xh6 zyA~FfUk6lVWHf-0k|b-(Bq8c zfsFO>tGy<6D^74wsloN4qj!ERC{fV$p)H~L**iAM7Ca|B#%p<|OB*RBc@bPG5r!G! zY-}-D-rCE6$XQOHtSIx%OGeZgyhhy(~Vv^|kCCt$^+^o{e zC=5y88Ql1oh+mh(|i|WwiiEj7SZM|5O*8wccrO3s(6Oz4=i&P zw3lhKa1sgIC-AK7Ud*lG;C zX-Q7#MDD8>0s+K!+n}W%wC&;4658M#BZA=fK^XenvC4$Jy0|Xf5;hLob)jTtc$7%I zyS%fJTFA=eZS5N9@!UXk-9$??ql#-_IJ+IbxZC_Z#U#IvF%rEypmipu$igNOm@vEJ z8)M;AymS-5+2K(taUNT74AoA`(ydO;^3eYEZ6satxnZ$k%mOyf;){obo zIb>%=91QHrLCC>vsagzx2U_UIn8u2PxsyD2rf^JEfMeIEod<6U#JO{p@T&;qmO@m4 z)~yxLXxC1cLHke!I-X{_RD7bh))^JaXx2P`IVm8h$i;M;bM}@nzn2btaB)hWEhiZj z7BMet+R3u6`_{!cg=ElAGj?dCFQqDAwJU=?$#6TPVM4L)ovWt3)1kJ~3$X9wopZ%T z4NNyt>?gGPZj+@omF#kp##<^j#cl2X0JU0Hr|i_WR&hwK#c)`1!LB8f10sghvMrCO ztJ^E$$9r`j*@v_ink-j|a*W1CQV1Ru+S~horSXvQuw3+7_{N&V7v7FZ3F}7B`0>2g z)-S!d(AfxyA0&NDR}rgfF>0F0o)ut$F})$;C#@5toZPpiD{Y5|j~s5}Y1ikU%+Oq~ z&)K8o2e)8+XeVFvjz5;Ny*e@cpy)zlnayRW4cB_w*mtl_JS!bU;nW(#9^KjgCYnr0 zbi0NsG8dgrlIOgj>`}iejV$9zxyRHshLG9f@>BU%nN6_5_T!}5cKcP|LU_HJ2zDKb zt_n@(WBkUuJ8NDI4Xz8bGeLj}*b1*F!yg^(%Wc74$l)8;vE1^g1G}2GV)Y_hNymf+ zli3a_ZL{T19^bdp=YRb>MruQ3z%{uiZL41wRgasRCs$4tY&L3$b8Tt%jeArIRf_V> zL}%tLNAnur$J?LF_`45ev+|paeNkEaUbxi1_9OhOUt?6Y)zBYQR^HOtO*X7>z23MWw4hb~7V*;IXLG`Dwd)ji1^ZusChzw6z`105PDhE^h9dGPUIA z##wkr+$pN)^P=UV5ig945PmgA`2-)v)UAQ)u>$AtqlDRSWh(^Zbr8j$s+m7|pzrh8 zs3ejkIW+z5?6^;1X?b#bGY$o$I*}w3!V@wR!VYm&6K0jT&+PH`g#>z0lONna#6LO@ zrBo`6Z(hdLHSUI)BBXn@2i+Cn?$93TQBzQ82~K|sij>)fMFjO+eIH7tTytMaDWp}C z-8rg?vhp=F4Tn>_hz`qAxKZHwBlWG9SGqXuK0$Hz;{g7Y5rfjGVDS}RrR-<&_}}=N zSoMZe`5f1U#-4rQbpifl3@Kk@j#(98CLE+;@ulle*u}m|-^06v`7kPIX`m!!3b)x{ zXmV%j6^ELNp=^85C&MC~*>PC9m0}nWeCYHzv-k=IRt=0P9<7=Z4-7;4ojEPGcBJR~V2rhF(507G!(42`Oi;HGdZP~F@dWL7gA=LeSb2RrR=@a_7J zCg0#Iooehgo1H!za~=JQ+=*3$MJ3=dIK~^yZ_2p_>7NR`Q(hG#-8BNNJ=0W2R!fU$ z^Wj9QAsm3L?T7B@HsmW)jvNuaXIjOTRaUH{jl!-;tjRngtqjH+g^(z0a|f*;Z>S+% zKFtoqAfslCghRqT(fLrioT%0|WJkaX1Hw8{H*)c)Vf95ym<{T# zefoLOd_hngXEa8gy~+@Le=1bv40iW0!xne}Bxjv>b2;Gz z9fffI)t}$v<<_1ZjQT6T{wdqSh|*YuY;)sWP`9V&8`g-@NC2~JIL2#e#+@d!Ds6RU zM~P92DlJ1#pKd+|KUh^`Hu8+D(Kq<9pT4~=nvw!cA%}{L{#864=&@-9!uJ|EJs2O( zgr7%@K6^5U#AQtkbmd0OQppj|My+C-R<_zZks^+cDCBM|mY4SDiq`S{8i*REr4sPn zTCD0iuIKvJX{}C&_pLcw#iQ8%6hwNalQ_e?us4G)MI}$_v3**`U5I#Fs<7IyzYtAo z&Vn~1ksRpDi+fqdVwM?(Ja?t{RuM%6junuB(9@8ua$xS+@uI9q%a1A)43k9Id+q2e zNXn1W{{Yr-{i@FV{OfP@jcccWtfJekV}1Nr`$mH}_G)Wr>||S|JS_VhWDTjxS=vgW z?I$S5e(Brpr5?)MTE%BHS0zAa96UpARMgnoOrlG7;XX07P3=E+e^JX~*LMZi*QMMtLMYvxE*w7mF(#;i6A(GCDiue1ij)B}fy)#(C#F{H|l>YBYiS z`X5@n`_DJ2q&^d-e|(G9p01%awB#wu_-2u5dtS#(=NY&s#+92?wsa=``a7V3Q-tSw zZS2I+#tr#cL4Ae)Gg202t`jMGmZR^_)u^Q4iGt(;KvIqY^n3Qr@n zWrDF4fV!0DzH2$+Ykb-;zAo^9-ZU)AL`Tx1Ih~Ffi50ES_j28FTFi9EEWNod(^R~! z2TEqKwmH&`J(*p~p0r_-PpolTX_mxXoJAx+jJ!|R!AY)u;?-{L1gp$!X^c)<{FW`< zjgvmAb4m31%s?*|*xYzjW!mM`DxM<=!3TO5E|T-Wu8Q*F(bShfGIjuTr1x^$obUmk zFB)++fVzD1=~RJUSL`=k`@rq@*7mV{t5AXre-c$syo%meTdiW|=pF=`;oG`70^ib| z;Go+#Sn(H5m3xJPN#L5{LkOFZyxIDpTk8EG5|0OEI3oN*4cJ>y$0P!=Te+NDMA>QIMbL8zG_ zWL51O02&|*U6xFaK1b@;k_$kbA*6CT<6}&LEC|`enHa|^nC&BGMD2oQhFONdd?=Y_ zf++rLyvMr0j$Q_bGRBH?oSr~_v~rz5PaJ7BLlQtds0~EM2~GNQrZ^%}aBxOW+^A)V zE;VR_BD$)yjJYF=17WuR0CiODH>W*@Kx5Bz*Pty6f>4GdBO|Ac7j&vJstCc@o@3+I ziPzO-w$krnK&bYDBBSWEWP(2&{A;5c%7S*8x4}M?evb{?N-%^W8}V!?3tOq7AcK+S zDZQSk0hC>>ZRriPIPV`VeXGVi|%YJ*;I&Omj!-2nrIn!=LFq>~}G}{?&Tqs?u(R!CWdoS=u5;Rbep}TrT9Od#O=Y`j z*au(LQdjvjM=B2Hlr*YF)kA3@UN+x7YJ~_DXVT4sKx#+#X7!>QBgTckB-*#FQfPfR zcixRry#uEooHW25bO~4CJQ>=x(oQbO$4pjHw{?e=ZKRGXywu*82T6|H?LbVybs}3~ z!%P@{@Ny^%q5hHS?pAFla9kKTAP_w34M^^!{&l6H$;N9fSQTaISx?E=mHQ1e;s%v* z_6=d7oIJirPvKtE_>Pq~d+67_njNLosn0RDlTEtDJGSg=p0wUOTzJ;rE|__HAF9HUz}!2Ilp>SZ+kLv;`-t1QXUOS8 zoP3_x=RNw@$9ZGrpKH1P&xmWw%#WZyI_xgujilmXlYzb~i~i0x)Gq+v=EZcnrm1Ob zciBrOAHa02vzx9wGWCut+abg4JRpDc{{XEn)4?&m57IPuwlbui)5OSfI|2F7T2ac$ z>ea7_kJSD8f9{cE{{T>awe~OV1Ox0&irE{%4_`4~ zAolbHf;Hb~9R4-WmoeM)ykO@w2UOLao-p{v$Cn{YK3#o0L3rP@=&Ep|;3;;Zy{@dw z#;6HgvvL~>cW)+_YY~?M)mk@ZJEc`0ORkh zzi0()+uB1PfsmI!jZC_>r6TaP^r3#L91plsyE*IfJ685~_f68Jxx119!~%%KgNXU# z!nnym4t;6NtnCb}S;-@EPfAHC@3*Zfzmv9nI&Du@xwzAs+p>rwV`W|T70b!ax(fmg z#k+A3dF6SHsYa*#M>`Jr8y%`b^ODgk5;Mdot1>%!5>OTu$A~mlqK@48RH}9oPws2~ z02RL~5Ycb_)PKe_Dd$xaP(9WawW2d)4Z=Kz^@m2Stz{^oRO8WdXa);q8NqHRKg?@Y zf*A3h1oJo)FCD{=a&{lg+#~R*NM5&UQaR$E2b&I#~EE%{dIb8ZGjoy?>8 zh>U(T2V*f9Ylj2Dd!z8JR>n5L;Vw_sIi*fr7@c>sjK>YOm1~iL#5D4MN*--m>QF(u zzmOi0BErAciL=qCayVfKJXnPvd9AMW`wM-i)~qA(Rem%0R(wXEb%btOM$gGrkJg@6 zb5;vIx?^GT-*=Jp37g^S+(Oik>rs7 z05cOnY74+PF^(3-Da_j4)(DPU8*$+bd`Iu3`izYzGCP-MY?dP#_*03x_)>4~KN0!R zlw7AaeuRE>A*zL5uXH8mOxeqev#KoQ+gffW~t`hTki&KKvJveat^f_a2nz`{a@B^x!=H z29+;pqq^)qH9T{5a(zZ<)h)wShROZSLe!rIEWenm3kGBJZv?+$Wk0PaEZtHw>b2~z zSQFq#qm$s)YdKJ5qLhD!Ka~M+oIKCoDv`<)mu#PAO4sFCTs6hVqX5F5>1qKy=+JWr zUrG{E3zDZJ(-czj1JaSL)Oyp9PXWN+6rByaGMTSx5zkK)_>RjGq$HgE1~4!>?M=xaGW znqo5@^`nnGtsEY!71r$7?y|4LG*!N>Wg=wGBRTh8fq!Q&IFAZJCN}QMD+x3U^%*vE ze}rf9qk+llO$3|AG;NX5#b{T!a0&FTR!uhIKYBS=?IEazE|O5IaLJQ`az-f7Z|#1< z)Mu;ymCrX%N_Xu*DlHJZIRSxV*Ov5^x%?{UNvIsE{{TX()2&&u2f~>;2zG%7@`}?L z8y)K?i4mvS6|l)&t0s{c96#k*$Z+Pj!QtgtNH?I)FXinlY|jWEHWvU}N|a56(4hrFW328y5nwy2+KOohewy-8gPNjcpjyDKyx5 zpelcrsw0N(2Kk$*7s&5c?R7}`ymF7`8`O*W7yHGDK4@qmG3q+93^!wPz6`tmHF2xO z%I8gzGvg83v5QdCiSL==Kg_umyniB?<{Q{fdNIWlE5dRcdeNi1 zk7(|sBf+<nkwv5VHSy#6D4n$pPr{{SDYWpr}Qw_0G^*|Tl(X%^#yyu$&h$kT0E zJ4<;Q7V$>fl>0O-4XdTlLzWogrz@vgw|>@XAw4)7B9-ja?DZ%B;F3Fq@L_{Xwd;nK zE*Wj!Cm83*{AsUcslk$xMR22`7&N2W3#ny?vzpzaU`Lpx0e#21eMK4_SPl0IC>im? z@uE}=a_LTptEn?Tr3;UoqWMWDr3=nn(gJjY`}%xp^M4j^TBehcex8P}Kk;S9jREa6 z{`nm>llbP9Y1#Q)eze(vHw02J@BDgw?DFE)cgHh|MJCr6r@9Q7wV6EXJe@W1enIZW za!m)s6|sYZMqYB~)`FCGg;prfu@I6@#vc*haPE|jA{xCP~D06#je!+dgK`qPwo-HC?Su+K=C{5e)RO*O}uyK1)}{{RhF zBd1E*J#Y}K#D$LD>BR{pmGsS@l1c~s76PuiWymLr-v`Yx`qc1znMCrkgA}OE*MHKA zjtJR_n;H5%TV&GYOSK_{HmG<&*r?B+y;p&*McA31+_2k)qvAdF4W0Au|$fhzfr0fp-=!hh;D~F08-YIy8^EAI&5ty8zJUG~w zQhAR9RVO8SM4_jQ%egJSNWu8gk=wN1#k9D|wY+8@WrBnGiVsS@S#b=t5U0nXSmcx@mZQ4#555wa1FjClryX83zWe0;wJ992W$k1U_&_olI#VAd!Ju zB+e%U01rPpePm3XmfHn9&no3$Y&H)sT63q~GP06!iYYtG8(l+KXzilU0w^9_sg3^t zvX>fkYb2x)d?*iPHI}lq;*9POz5f7z8b4h2s^a!Ehin6rT-V>*QNBK&y!L;pe`flG zKFhYN@`y=D`%@PQ++#faYv!}Z!f}r}`j)Nj_Mtzp!oj0JS}w@R*BqvmKgo%~}=jzSaXOLWY3*ru)gBjji)(>r01{*+#g zkCYwyP`0=WC#4ak98P^HUX_h7BQr7SOYZ*wzyAP+k3;j#ORtabyY01Q8vMbQgbmnM zTDx%(LpFn19i8fzeM&-`I5Rb%$T~E`JL4kq|m1)R^Qe z-oTOjb;fa+U-GT2>BYX>W!S~!o=$%{>-2aei%x0YV(TO)g>&xLA$T!)D9_VBop#nA z>InD$0A^`<6@#A6RMk}XId!XJxN4(38+g+pmhuF$x>L!mTpH%=ecNBPT@ZNFPMABO zCI%aw$*z9He8sQZHMftZ9!bk<{w0n?$Rni=2k!R&0P!gOLKQKyFNFm77WVl1{{W?5 zj`GjTKG%8ul*QWW*NcJtG5OFsv?go2%d$x(?T~r{MSo?NLfclmk-2s``>9;g%Ol83 zkQ!EgA2MsR8N8lWd1?UGv-^55Px~Rxy`+xppJ}TL_7AK=+(h>|pIRqI8IE({TAz#Z z(E6S{Z@+s-qUrZv*;bdRUe7X!p|&H3pd@Wy0shdG1n$Y&uV^?}j+@u$e`@kS{GRL^ zmTm1f{{RrL&VJgGY$M<457x26pB`4ae0N#nBc9bzjY+}k7xEN-n_%)Bn|T>=&lsUE zZdo-$GOFY%<2&@Cmg4r{7UFDr;8!ElhVW?0MrE4T+<(28epRrv&~3>#8mW~1OK3}e zCu&FXYlgvM25VUCrG85CA0e7w{i}b`maTiDK9@DNpQlW+oHxoQmo0(Qgl)ZXQXczy z*HL?=-&*O?-Aick!?N)<+n!a+N$3w&9q$%M-mw6)y0Nxe-NMoK2b*Lzpw^L_&MxdX;>Im;0&z0E&NF7vn`u{n`Hj z;{O0z6m+VId!tb{1r;*VBJb4iLXNeypmy04GIYO)UdPtM}LcAok2L^s4 z;EGKnW0_p#pjY#nMta#+>xU}QL_gg^qw%d$OK^6!yO4SXAB_|HQW)dmk4myn=ALrL z?gpl+Lg`?UjwPN~@-Av&(?kjO1?6uBk!xbB!?{w@)Ooc{{W>8caF&60`5DY z=M?73*og=3XW{wK)J%u>L$``)iuBal&2tXm}3 zc&o?E&<+KQF~Xp4MimdH%s<#k{{Sv&Saj#uk?7=Bi*Og+YlZZZp6O}|dpBK~8GTgN zW&#a(Y8M#C%WpjkX0`pRc2p~0yAD`*fu*`N7#P5;rB%kjW{NlRw>j>JsorJfzvWePfOE>3uN!1B#tv(ErNdxIRF0W6EF|QN^{pOA#Hfrr=Qtox z1~tXN$n9HUjp%u2E$_z^ndrzWuEZXB$iXx-H-C$4QUre26*5~DUIB;O!*NL4-ltyG zoVB;3{$i5vf^oHJIz{d7l`qfXP%2M7>64(0jsyh#5nIMoRxuO6yt!8EA;vH>S+#-) z90y_LLA+(8z#E-~Y8lAK5%^WDt{UD$k;JE%&i?=dNXBd3rKB)Mv4&-hLC)BrqSo9l zCAa0_POn-i4W!dsEU6+d625XruZ>0Cm8BOvHuA@ht0(mow*`dbShXxmt1f)2dp%aj zPm?HB^A%>&^uv%RxKAcf)tUBw)<*fe*syxC5l@2T(i_`JMkAgsUs}0eX}}tUcsbgb zOYFqzGZe76KUMMh(w$}&x4O24h8Y(GW{hOnWxa9&v;|ZM*fYVkyer*%97p6V+=}`5eCG(r3(KuN|AP#{xg215}$#1ZAyAK0Gu9#gA$3 zG*Wsvte;9^d)C?W;j9gSQ{6HrqY+k)JIF{d-prqkAcJARa~YB|{H#Ss75sZG+=LE~ zy=n4|RZf0Tl6|32_t#vevxWS|)X774dOi5zli`XRRh-SIO0rwB9f%<0bD|pdAE#*| zdK}Q2oz1)0NRgM~Vg?BFpb;+Ig&U^JDoEX%viDCGI*JuW#){KNenI0Ir#mV#!~5!d ze=5%7-#(_TWBuh%ujN&^*^jMIKlWNXDJ^7Mprr8*9Qsq0(rt(>Z*e3?J8-tto7tEw z?kyZ#V~9T6<7`tyrlfn@T+12hhRCU>7dHBxzwqXcbsCh++4go7Z%|+9pG{(6tdv$@uF1heJERx)`?z!3Us2G%+h_D9Dfps z8%ZJZq5heq1ZkUJug0%G@nrQio}2ygPm!z2a`Jl7qgzh?^&hP_P3LM+rhj`+T6GBd z=jBpxBbJNR9GywHc?N?D-ybmHLj#PfF2|MwR?mqwXc_?PPLsg~#8uFVe@(KGl77 z`z4GPT-L2Cy~AMTPbvsF4Zdr0Cut@)dSbA6j}gW;sgYHyp>zdJ3o?}0 z^P&}+Gm6QvEUFukAbvGOd10zer&`+S@L36`WD-9c@Qk_01K>qhUx_sxFZQ}y7$=T? z!sU4QhTM*R;hHa7NaFUUADe`!fC1VN0K*VD?L}z9-~Rv(`#^3LUNn%N5Ze;Vfr1I@ z1ugO%UA&Up%i2RUkv}dZVyEvERCjuX%<;n4*DhUx4k_4-laCs*m5$z4SmO=DjPL`D zoOP+Q+E~s2!vnDMsJS$lS6+RS(3WZ-ZP;p>GmjTt^9MV@X|6 znRjIjKqt=>))&mcl5@qM#;s(x4FD-5tHeuSIUM(>nOWORu$Q7CY)>d#;TfsCAuE}wOe z?pGiFfxo47PiH!>@n`r--`0V?f@O%Yd5^4z`qAz`h+naqtNS&5rrfJMme(9{-`YvK z5L~D{CzB582cAWAx~9LS%`xK9EC>g3VO*16K8;)C(J0AgX#(W+7$fl%!fTb87G(Ei z?+^R@D?Fy|+TnFH=pOso#{MRUXvFixKw`X?9?3F%=7j>BbWGA1pqZ^r(1K=xTq8^) zB^8e0OLEVZROPS$$vX<2D&_qK)b#snuW4S(M~#vhN*Ixjcru`!{08UJzKoG}aHMKU z2%$kd&IdZ-)Xg%UES|(4BBy`7KN{?{JNrum6mu78rO#&^X~gZ0XC5AAy0GcP zpKqOeO>6Q$Xl|4YE3lP)8-LF<6HSl@>0Jl5lG|OawxMd=Yl94#7-eC&3^{|&xsX9U z1z9ewhVe92tc)bvC-kgihlz8ML?Bqx*PSrw^f~ef;ybArKYo8YCEW4#q*@$=T&Db- z40wVuPF;?9QqXjlY!9=M_|h2;)aqu>v$2XzE_g*L4zQT_Ia2G-lB2X?u# zkkulW>Br~kwlNbLQ>Xs`98-29uzChPGPdO={VQ!d__dX&?#by}Y1>OvdQ=n%SqU3r zg1#r^W73VzWX9a+E8p)!Val_OXK}1fRWrp@yC8r;$jwAa#6Zpfs$Ap+#{1Mx+vR@O zOQA0xv)7|PMuheqxILgb{{Yf)_*R-JchIiYP5|8b)*i>@y`cX9+i%LY{W$*sZc6%L?3)CNNoI2esQzYK~ z@@i7>E^xci{?)H%dB6rX0GF*cLxZ@ zSM{cP5yH+s-D~vyx&FFOT|Yv5OCWFm04IGrW3(2a{{YWlojtT6tPq3rg?;zh7nlD4 z@!r%KGQEwq2047-uYvo22g#s@0n8$oK6}6(1A#!A5L;BkRmwdq3vscF%i$6{QLMdc=? z_38Or!5m&-l50q`R(y7nTSMcQt$$)#q4~{H*+A#RmOqs)6+Me??=Nm`WET@i>yAaX zu4+NwYV5U3Z6X~uL2Y?8#mOTb(5M%D`RA2!(*FPvs4?@gSYadT56YKK&z&7|e|L+Q zxF`t@^)w33ZNBOzAANmjNdEx4AB7T!yebWZ+d||0@AaX)D2cy^C;U(AL-neJ_l;|9 zAwj~t{F5fK>T7E*%x?1V`Cys|K$>ILbN(Q|m3f1najE-G&0494qR#$_inx+BKi!=D zsRGags>{$szh*I8M;*Z%&maT9;-uWF@=I0qkhkSl8iT09%WS`50)ILUnYRwuA>8?r zYj||o-GGkO&QC=|W!dVYryHZIXGKawgVte|0|!8i|np>V6b4rwYAL zdDpAQoibT{!YZPrebZ1V2pQ2Tj8DTEf4;$t9@+hC7u#a-xTn!a>25dZj(W&?+Vg7l?;-O|~aAJ7b9B zdX!dq0*+>+%x%|?EfXx9JDeTB@x?HR?6~EMM#&|+q>9)e?90&8n<)&iq^*EkIl#cF zs*P=%7pgo(H9$-54=PmxkCmb4wKj~5mgj*|sIesT;vQ8hd2hW#@g2$g>oR-5P+~Uq z^f;d`&)?RhvovH;}!kIcK zzlOZ|Ro9hg9(Vxjiq$j1D>jm>r=Y4xYT$30&Cc|Lpt$eDWTQXBN-AxOl6Ih-%Dt+A zxQ%(yv*n_H98ytfY@GD1t=j~5b3=V0cE}xisQYd{{UJhH?F$?DLrw{ zxZh|SI+_zk9gO-blRRyo8aGQZ5V1(a7kml|e|^1cNFy@D0Oy+4GpAs8e62*kE< zN$0`^Nz}CC?^@g^q0i}BM|-2PoXI?G=AhCxOQ|3qJEx!Uv8uiGi=OmT$N1LB`dJ%Z z{ptR743=%~UB-Pura_FBFYeqG`%6o8zRU=cITlQkPAS2(frisUel&+(wtIVkpejuRgIDI&7L9QyFfvKv1E>G`bh|^b!cA@S+z0rDD`PVeBM>{jR7=s=ZJgwbd zO5W`L?r29RgnClNS&gu4L~9$?%u@PQ?8nR#=R@9Y1iqE4BF!%ytNK=6)si&W$Bd)$ zHKvuk&FNYDSU=IR`Ak0}PV`aD#z1m;ZB;GT&Zxxj?abC-9~zjX%Ea`=Z=%3%^=oJ` zvq%ei4bR{!2ibO~{=wUWb8~jX+))~n;&(rQ{Arbrt0yiEvhHNn05R0YCE(>sGfYF_%o_ZN*oE{atmRr@G&O-L z=gelG@WTFlmS;l^o5tB6D`A{tZ28pO!zGh5A{ilL-i&Ni_=>`EV~2;AXLZNVkRv~# zt?sobxX%gV&T1^xT+4H2Hh$9F$L!pm&-|?hn)8{=Z5iVZ+&o;oco)Z(#AcVxJIM=} z5s^4fWNn$YxSkv z;tiPJJSQX4wTv=v?WFnkf_04S$sZUUSPr=BN+aJDp1|_uy=f$G6s;7BQPkm-^A)5> zs4_EypDNYZmCE=~aW(x!Z>(d8?0Gt&pt2D)h%4o3XVan^EnZ^gd(2D@1X zaC|_Zjb(52A}uYK-4s-hn*>T8<7K4<4JW%oU63rL8Li#6B7oE!{G5*(WkTuy0Nw>P zlW2`8u>SC)#+*%#1A#$f(>p!Y{VQ!eVrs(A06(P@Vf)=r>~!`&vLYG!6~#Hstku?O z^RckEiBz8H$;B-CUM0Ba>rlBIs^ks*Yrs^%7Vt5GLO!Xa_J;`%lhbWc-a9FtHvxeI z2dFfb*!K=fckJEN&|FSpa;#Sy zR@ZaMHPJ3vn2pIfrTPQn;!=0oiDzSXkSk2C*kd#r<12G-obo@N8=^K0!^E`u1|vSxbp-KeAzN(=#f~1Yt?o4$xQ2KeUNB<&c&EjIF}C z-vNltcW~UTpRo@%%*3FLNyy_3k&)rGe4E-;)Fr%@^8Q43l#`X%bL0m>y#sk!FGHvq0eSjU81Al|ZzFQ(X<5OX7TdZ%D(I}WEiT>_Pmqa79`h5EUVVE| zDw&^~zx>rEJOa!ZfHFzxOn+|MsrijI6h0(p^Q`XmdGBoHwUH1-BJi+K0sJW+1a~(I z@*stQ7(7@MzHj2Ut#mg}XZs$`&f3gJCApdAxFi>tzYYg2f`!<5n&)QzD|*r~)5|Py zL;^>Kjc`f=X>_^bJY4CG%LcW#9uWacr5J6hLugAF7!$VCQga4{i})?*D1|(!8!5kp z{{Znntq=5t5kK%``(lUsLYyQXZCAGAEroVpN~!maUfxa-!Z@>^q6Gk1fS-7~dbL_R zPA1ws{3|vtPU2(g;8%wc{{Uo9tfr6|@&{ZV1sF%EByx{ao9x0D^RF?m2j=vv)*tUBRi#Z6G2P{FS0=o+VZYfkA3|wp_f0!{ zWE*KP5BRrZ^rYImtd|nVk;NL2FtIlhjk+2tJu+7JZ5;X`p!Eov-Q~~4 zX%`y55)75zvtfgZB0OciDot{e+%m6b5l4+Tg%&6gRP3VyfwgW~qh&q8j|!Vq(%2Dj z3FI?PAURef(%WnoT=f*n+z)^?Cl?s!fwxMl4)=vwfd?Rr8iyX~_!7D+bw(80p-|}Ur>H_C0HxcZY_vE z?ADo`xUxMdD5&gkPg>eM1|DXyeaOk=Yh)vZPcxcn8N_%SC#KcK>%Z$I$AxwU!$d*H zD&zIhjYUT-zgl<5h|y=cuZfm$;m;Z8pB@Dv;F#+d058J;+lWR^dbX&KX08fzV| zG3vFtL1KN|=)NMbI&8WA1AW!wrA$VCOyBa;AqLhKJ6%A3#aCS^q=&mC4ZlYey|l>( zI2e2lRjeIHxghwO0RI5lF0q~@jPKBj8cj9&L_QUWvzMbx2dS?cX~!w0`{)Ta5(Dlq zrJBf=60tBLNY4FffsWyS+sR7rZkl%N-a^QyZ1c@J1Hj5T#;xl{==W`FcwH@_lZ^@$ zkYr$w!1>lTA|UPBNUAt?+npDpO{d#xaZ7lnTX5KsM>3~lk3O_Qt6J}LHu0>ledDzq zG&a!cj+S>zb#55;a)m3zy)q9YX0YBa>vB)639B1}2Mxn3E_^8AYj&f%bN7m0tgXtz zJ6Bd5Ly({ZNJ_HswpTo#cBL<)!OUdu|F{0wT1Bl-d{@E%WHGfdKXYXFyqR!MFFLM9QsyX*Dw|krr9#* z?jPq?)0={9?L+%lh8Ed41TY7nJ5iBh=Qhsu;0OeaW};+tZt|7$tjip8r4MS#mWVmwOqdr0mkT&bf9P6BY%{9>UdG$!7nQl@gMhTWua&e#OMc5asYok+w zJ65#p)Ji1cFT{2SY+w$xpR`w6W#NF@MROIzND4A9pXpv%RiHGU7XXOMC#$n~6R7BXIJa}vqTM0YLGIrjnEfj+QTy91`8pb~CxHuj)UOcH884P;))jLvV;ylURngX}z z6GZx8Ox2g&td)rkXPy+*|i}WEdWx z{$jM#e~%=GZV_2tD@TSttJh)r1r3rytU^#TgKxtrL39RP-b76|_({Hj*gU#hiXaCaDdg zUHU{;P~|{gKnu@9AAef=SY0&pfy0X_32} zTd1mCWUW=$lvNn1x%VglB*@JHf9_+(kCS=^`EwS04FZCI@XUmG)42{%(m2n~udO@h z6$Ofx<7e>26Jh*H!Yz@#D{ChC%2%b%+q+^zo>ae3Ve*CCa-!vN+5pD`tzqp7TSs*d z$)paZFi)*!y|9UaVZCK~PZFOxn`~#0&y8nxd&)fOXKix7Y0jA>hf1G>;0}B9r55pv ziQXq93=_38(`7}|E)wJu)a%NtacPgNYPvu7i81xfbbUW=FRc74 zwbgBk`wMS%#qUfPhtQhfJ*mgZ*V4QFZQK6<;pLwDcKp63zI*LCJ%Z=Lx<04zt`GWu z=QaB#kxv@=pg)B-)AYG#w^>1qDe-OTL$TvR4*U!GQIQ$ld(t&|RrHYNJsNGXGy~Pe zZTlFny{Ooy{@^s31c&LhTqBda8cN`Pp<@IV4ccb*DE*iO*@r%Vtv8d zlF$4@NDFa`Sp4G@6ytrU`7!cnzu^i3VMsJhqHjS&AmvyO;eUWu>&R4_D}#iPe>kDW zIESqfa6yhwwkUP?g*Xw^)|Q+Bj}bZYT-Ilqt3af&#(oq75b@xA+{gSlt1G5)*h%qq z6gt~+0o^9GODvz^54wVD+Nl2kV-WjOin?6Jqj;?ktj4oj5>5m|?xG{pWya{EJ|qf9 zHle(XIAIlz-X)k;{{Xh7QG{JRKFzT|omNdQW&Z%v1O6h_4owdI_DYGF%*n^Cp9 z)5_vC`xb(zb(`{kzg&;83axH**ay9;*bn{MugEOH?`t+A(TSzO{mdIvx_^H6RBuTD zrT5Nck(`-Wl^HU(6MgjOSU4Dt5f4qKzr!?YDcY{S)_BzE1rSzUq33-DBHGd8~i( z3h4#Y49~buBmzk0x#WKF0FV6@R0l{v7yX)zvEU-8!MA>j}ehegXACWi@va>X>X|B zO8f}|5`1X2(E-QrL+=z#rjHzCv)pC6cYvdT%bWIz%U(nn42ZYKEacMK>GiD&S>+Pj z&l3>1D$UR1T*IkHD#HXE5#VZ~YEM6fS$*a86;tmTvU|zuKRRUS;!)v5Ap?~NnfmSU ztAOMEt9{j*NIbCN?{uKtc9I2LZ_2BQ2>vtv6`RI-%=8$|V&K{}x~yf}vj=WfLG2Xy z!L=vjM0HQD=8VHEO@Y?8I z+o^u~)Ap=AEEN0?^{cM02pBqYec$Iy2l++#<#i$THSd*bB;&VZTb)u8bNf9%@8eRM zlpJII9J?IsXbVemszn;9pQkKP{{So0SnnV|3MS)ONn0Yp2Zdwu^*{MF9+W{rYFAgQ zYH~&i+<~|hlsF z;5Sbif~En)9$qEW-0s|luijF@dS@}A39%p2WUlGNQzZaF_0L`@Rj1< zIPj|9x6YAO2-`rnGg`L{yai7z(-g6ouMoM%#*}D~O+C99$WRXCoKrQ^?znO%82eNl zNw>HIYl;h4hFI;vl1?GSHlotbZbpB`fYxDn(MwCmlgl&`0Rcfi6g-#j9H)gwDkhRh z)CWzmwFxtZIRbz&H3lwt&@ioq{2=$B6tQ*xFO+(#pDu zEcw|hjD@%X8O3Sxh6mm>Xx(g{%&o4U4y6XA1;VpnqVpAjW$$^sPa{8hRo8?G&BOLH9*k6p~9&6?0Y= zv+dlX3f|1(1M5I)Z;0{ClSiylq&?-prCP2>4&$9tXgH4xiXYm>&8?<6@i*isfJtFN zds1@+nDc+qiXkFNA`a`Y9Y;!ske+-w`y#3ZL-U~3ZO&`1_9XuRqb5<(eEsSxku}wO z5a;B#Y2hLtydUXItAA_k;ClzX5h$GxS=87J}-qH)@L8Ik_Z;Qk;Q&o0_w)ho8{r^2;4;Uckw_ZGFt#w$q9yqgog_^nHj zrw4i;iw9#?;yBpQNiEM6bYe&}JdJ=05CP;#*wyXZiH8mkh7AFDpNSoZ)<2zQNay2O z+aH_wlU64u@u0;i$j*1H=GnIJs;eASNZA8!RLS6bxHSsfobBUOL%n-F?DI4luFn+A z=*3Ge4h}LpiXy?}7Sp=6+>S< zow?9Kq^0-Mr)DDnF-vEsw=Q+qjkNORVbosBco$Pfw>i1@L8YBmwua8I!OZfvHGUH8o7+B9(ApSoT)L8fCmZdS8FX3Prb{Z zGhJqiB>5a%f_8lClepUH{Y`bcEUWuIDEH#w@TH$a9>7XH;yh}rxD}*_1cT#L7{J>V z5mXMTzBk_nlELn;+NYYDIbJnVKnFCA6Wm|5TVvBKjN~~@fyO8U?+$$Exf#`QgUW*^ zaqCqRk%o(&-a-7db%xhNC#3_U98DqqS~9`M%6B;0t&`f}CR<{Dy+)FMc$e*(uDWt9 z$Up5WbdT>6eWP6;Px(0hwtwTU-&(-_&g_(p+I)lYHNg8+fIy@lqhCeUtc!nUHkyHu zVJ=oMolZ&KzIp9W*7bbUqQxIgLg`$8-zmM$(_3;9!vYs+ZRD1bMpq^b+a7z5~v zac5xi06~j?7R7mQq8k>g3XlbyM?cG3omvskO@RLZhy3cFvS$bi_6&dGtw7SR*yFK} z{{Ygj^{L@pv(z;)acLweWduR7-c{UhT)h7P#A@p=^lRIFK1;bo0yM@znM-bQ$Q;)v zKk*uXE?@5P5BEZXm~3{VWj`?w{4qgFb~Pr`=nt?fW#m089k^2`1At`H2%Ajd0iNR^ za|=k|3H`}F*sKRSCik-qFJxH8Un*E`MGKm6l6jh#S%Y^=d=4rPTD`L%&k~Y-X#on- z9zsL^0J&4&<=K<#A*&?Ofq@_1;rEZnTR0SnyxS59~fO${;rnBr|h^%atFS@ z{*8a7VRX*qnFwa#=ZsU4ePRCq{D^)xbiYvGyS!DlwvOM8LWC0W4EW^oqhm$m_$}#K zbTn<oQ5e)N2m8ZaAY9Dm zxy@7kV{!J)RwYAqHKcz0e`tPnnCn`{{7C-Ls!8%36SZg?d{!vHvEHt&zvo%BY7Z)g z=T+kFj1B4-?dL#R$G@oC?eyuitGf>apITR7NY!n?&d2no(jD8LGM#%IC5J)`0h8r4Dyz;I-r$LKB;pJ9rB4(WDLD?7;IPuG(6t$&wNNAwXtd zNK^b-55l3YbiwZNnv-Jy_osw>YNp=JfAbNVWEW7H(d?xWhTYo7wT9ZUf0Koq}P ziy3$(QrtTM*17Te(xGkI8dj?n2QUQUG4@x)h*HzXS60VK+X>Id^VD}?@FW9s0fY+65;3D)`iw0 zM2%Ty4tTj{ix$eV5b_}&v>vYA5 zkg}CM)*Qk8Xr~-_nK1(6f{#%e! zwd{!M4l|l}>_nhk+`@j8L5INq0G%?eeYumlX%E|T_yPLXHXuvvh5UTVvcKNH2xTR(xVBRb4C zUR9_#!+sTxH}S2;>IvyV3bf&Y%#f<~oVb{B@z~^V=~pqUTpNdM$&L8|>wo~Pp}<^| zu<@&0NCm8q*M$5j8DvLc;aBQGtYJ6dsXbC1-~x&&_)k8YBoMhZy>p5&2B{jG4iXil#x zkGK<8I!DWusU3YNi(5vX&g$Sd2)9sqXNxD53J&zcRIaPpz($t21O}0rbJT6Ub2f?$ z@v|sk9ebo~cNN=b1djuX0_l!AiLsMW8xA`3t-T2j)T>bbIi{?6(w#*7^#zwq9BrCo zVg1}v=J!Q1um`Xd79;FpGVv~PUWgQ&u5*g5xhfcfc~xR=`6o21NcGw8iUUyo@V{n? zxo-HN@6YcG>DH2!PJHT@J<>30@eo1Uv$@H}dDO+_ctXhF3=>qDTcJbd&S7kTD#YA9f&caj3WZVH^w5*Zw^$=I5OVsnwop^4vf zP?_K)c+vpok;=+AjyI&x9hdD>iMB~I&jyn~ec!cPV$P45&Iad|2IswxIxTnp3@X{tnn$&%5m_j+BCkoju^N`F(pov+%w7c zs~thn;!X)fn0%UxRx0elmvf$Vw}&~6+nefqcRY0+&aXS4V>H-uLU!55PG-3O0B#DG z?(*Oi%xV{t*g;_IjRa4`qipBamV0QD1P>yG;!%N|*8YDkIZhmZMfBPD^81|E8wQN2 z!3qXN9TQv>$d$R`fL`lF%nmp~ruLVX(T(l+^YyFGdnyN*d(yRCT0$}$(QA8P-t~f? zLPZpp+5k*Rq)1PS+%WwpGR7=oZYMmsVv%@33n|7b3_!NHbWRu~IZ=(Mm~@>*hE~=?nh%a_gT(uc zj5)0m=Iu{*TY>2%Pbb3n)^~8B?VynWBX$^|xL6!kw{p)Q9ji*f9QV#^1vKF->PB)Z z)~UovC2%}VX2)}0fD+qd;wT1i!xjfrrhVfZB#$N79&T_d0o)E}H|aMSI3w+dfnbY@t{f!8q9FswVMS4UKzzVy%?U z>-g7;FGc)mg-<$_uVi>sjAvnr2~szxs~&Y)1Jxp;q;sGmrlO{iz0$m%^?MmO8=5X1 zI_>a8K}K=jU?>gyOHPS&-{AtS+S-r&t;>3lDSl);-M;#a6V(0m`6DAdAZ=qO_@t;8 zLws4q{wXPU50ywyDrK><-Ej;EZP(H0c_j>aKs_^A@NHFf#V$gp-s#S^i>+We(Gc^c zPBjFK*4k+cGH01$KMKXp%xg;n^XZ;LCZ$J2_34V6bs@)wYc*~n2Z*gBVa38u;AW*w z=iJsVFsBuEZMyAPyMVL+>Og#-15g{dqcuXqh~;gWBl83f2%+1_9oN2PBT7jEwh10jiQX`C_@9Pkl<`?V9O_x@(%${{YrkA8gZw zkWt9ivHR)jD>2B`__1o?|EQrlj$cj6u@C`JO2Q*l%HDBG~0x+70PUN^d# z2j}tWKzsH~{JSRj)t5?;b5tItvF$Hd_pTnJvYolhA^6eAQ&_d^EFF&qat6kbQ+-+% zj?;;Y9`GB|fkg|BbqANmrFqmIUm5`2JNVxLTHTB}8}qDm^ND`y+U)${sv|8X-bpP< zUMy#!rU_~SWu*Z6((NKCWVIz&h0l!~wu%?$Cj4mx_7G>iD4=yTg;jVPCyI(GZjJmv zXl+g4F)E#T^hP2lr&k#N>t?npzKuvtwl!|d;9{8}1z~nO!!%F@Mrd1x;*-*tQX_^L zqeknuN(p(<(Ek7rl?3EzVs#+&+x)7w8iLqeiDE+0 zoumZ&%i-!eS7~i)Yuo&)I3o`r1jrY>!0*n2aX!(>+Us|1orCZXfCKcS{f#+mn2*!9 zZ^412w=QM5nnU#6o9{H&*yiEY0)2Fme)Z4kQJ+i0vZx0Pj-OSC{A*?$&MLBw4MO33 zBsFo~7$UB8i`y(>tgXlj@!LCWDl?pHDU)PkM-FzVylh%X10J0G&3O(NJ{-kmc-&U` z9avFL29KDn6W$`+QGKz$lE{n|1&1sC!a&wFA|VQtWMjrj_7rIwpWw0v`j54&&DwtHojdpROm z6rXjJ5uc4Rb5O+A-pNapJ+0GsR1L^D$KVP0(m3Fqn}uS0`cq$NFOALkSQ&&+WfX&q zx6(hS!iKSfQND8>xs}J#VsNYKYE(Bswe2+s)Q&F1c8|V5$07IEP#|NPA4k)c#@n(? zyRpoVk9hw8K}`}j`lgy_Aqy$ZX7RRq(@_hz&@~Ti*x6_VtcN_QPN=w;dRI{Pt<(zV zwbU`(0DLKx=mGaBo}NE;6tRbPooMlyEr#?KJ+BtQst|5XX(IM-!&GCAlqrm(EGTV7 zaWdd^qJSn(jSr~*0C)q+k?cHVfxT99xT}IW8qVNu4)rlsy&o}Kjz))w@~zZ@rixG$ zXZO|nRo34&EQa;TC->F+RnqEGe(0mdmVXC{YfJE}Ln82znhrvD8Lvj$f#*hs*SiA_ zNcuFEAALU6KGb93h~w(g2)1?gtHm^Pw&$HLkoS+R9PR170QloRw8^690<~T$s&W;w za-fx!+Bh@kSsBIw;OFO8z5WNrhWatk1;;Xujy(-}=4PJWP9|f*yKx-VQAXQT$OmCA z-$sp%1;KL)sNaB7cr@u9K~{{6bzw<&%y>UUQwU?2pdpxiX(+&HS9$J68_|VBX}731 zwV3!}b3(6dzfG%ExwuYKIR5|@0cW(mj@{*w(qxPc*r5PdKPm5;=w!RQk_U~hWoXFn zDPx0N^w{GxfVTb=CqL}P4Jg`)Z{WxO01Qyl`=X@VfHN2@6mX5r5Rt@rT|@CCP>g$@ z;i--=R30PBk*|G)LV`q-k;@!bLR zVm_>EWxE|=jQ;@cPy!-G*fn7TovJA=wg=KdTgP{6fEvzUgM&(Y2OmJx2%LQe zpls;f*q(ORBkr#WwByWOC;r$pmxaeht0!o4!e8&DquI!9F!Q>dJz+H*I&V!#5496g zo;j3z@AuRhrqA&Y-A0DZUf#w;EBjK|gV2T_r760FVx6OoWSK`NUPi1gCGk`0qNO-w zV$#U5?azmw-9QT>oDy-hQ998V0Yb1x4m?1`V4Y|s4MkeLwJ@z%R8)!s-D)aNI*ybC zSBE7uy_e+BVX%d_@#3TH54IP^Ex{u+LKn6V#2l#4ur0Id^qK-!bU9CsE zF+Pb{N!c9Zv_Ijh7n6~5RASyI@1t~)^uMid2Qx#Cb-XmG#;4t5TG;;p9AoO5t8X9S zQ>SEHAF^sxZ4t_ndJ42{hx5f|fQZP?Gt#da+>W&;8c5q?Jm`5Cg(J$gagmYCQ1W}E z=7?cSko@@y@FR!Tpzg=gqXa1Rs!H*D*zl{|HtCLaShk}E_x$L)a!%Ad zYB>D`5fH(o8-v_x=JhZ2g~$9uT^AR32D!~cCiZsdWHj*=heKK?yq=<|oCCIM$a~4^ zDw1s(n|*7Ib$>(`j11NETaKXu{AqrI1Kn%%y7 z$_L&Epya`3Ju_C*B<%GFr24WWeatCk(y{HXtcE>m;dx}|@T#x7M0--5p1&u76gnR0 z&nkHIS#ea5>^uiLq+75fY#Nz4;8&st85>heUBKm7-G2!NIkEh!WbopwZuy|~Kb10M zyt!1bKD7hgsZw*1Ku&AT%Aoo4uQ3z_YgmaVddPFFV;B?|m^<8K9Mp;p0ix~5R#rLZ zSTdB7MDQk=K8NgV@ISK_;qk>AI(|9*X^EQOJ78Bm{ht++O1h1Pcqdc$um1qsT>-a< zo>d@*T?T|;s>Pj!cldSHRDtPiCIx5`(d8qQ0D(Q2G%4hssCBss=t8(}Q3 z!cH+9p?5)No0f{aPUc&8A- zG;hfzC`iQ)@H*!pib`Z6AnjTzfSENgraQ-wqPQVs=YvX|CI0}<54BIVNxyVjM8FH& ze>E`FpD?J}ohT955_hjFV;;4JcdKUvA38J)br#LJ^sadiczV;@qs4Adl_F1j<4+!n zh<49P5xw*4M2|`xht3~bWZgOuTQ4de1CjBfmz4p9_In?V47`w0SKq-Nv@(4P0I0=! zZK0R!)uS5Wh`gE8?UO;117h#OILU=3%DNX zOlRX@T>fs z5wjunTE#9l_mko)WVjzzBmO*4Pkfoi;34#4E5ZqRgl~kEvRo!NfzR1+Yel$#d&@d{ zu4;fo6oZ=2_k&(u(KCjTePYcPC$=a1z#nNytL7#nf_R(!RDdHR^?3gP#TgY`t8@7= z{{Rsb$FPxxR4aNAYOikN-h}@E%Sg-nFi-GM{h0+}b~pwCvSXn+G|8>g=|Z{tG`jr) zGb*nL+iC!QaT02RuD`)GLDqsnsHr^a4KVdUsT}LVfbr*0IUh=v=T)FRUawcE4^-4t z^rRlIFTGyrQoit@+X(!s%Nac=!*BWf0m_2v2KK8@2kYQ zbNwqQ&NzwaF%DndJOu#7l+#d{8%4Aje2$^eR z9u%IS(;)G#=WeyTNArWg8kkcumGJ=95gQB-5-C=^+){$}wKW#HYU`hvP){@F2uiY~F6)(yT78KiS6&L&9tf^7x%b{@iev`FEh4kKbiqQ(o;X)a*;2Ax;rCyC{&vqA-AD^QEarYmx~s2MUz|K*69>ogmRibeg4Y z5X?lM8pQ2P7-?hoxbxH+KUzW9Mn*HmOY8{~LfPs?In*ObH10moaUsqsgAFkqt?(Fu znlI$27m3_w)`ruF5DdODc~;KJo)MOymidI`y$yEA>wuW8TrpgQ0-+*OJI8utQ6xt@ z3eq^w4Kb44MR{%a9JinX2yzB1!46JEG>X_62Zcbj1)CIsVj<3PTE@73RKhz==!h%_ z7%hxYBP(ZM!EjD%qtWaYM{4dAkw8ThF~~3hGYjMVzqOB)@$`(6jV_90>O{r-VfpaDwAp>qLGop7VWts}V9_#L9P1SgMELrD$A&KU6;xsI9N zCisRjYSys#AxQ$Y}B+m$2s>k;X; z$Pd3UKXU&7ojG<|(~Xyz+ZB{#thw?h^{rmAAH`p~s*%UG3;vO}oN|&NbN5p9#|J)C z$J%4sX}Vnh0Pez{yZotQoG-$b9Sr+;j_Ji&0pP~pb$ATz&(f~v2mlpnLL74ISlyh; zqrpE~)DIq&g~9#cjB-#Y3iR9KP!2QUQ`2gKC?|=ilaQ%Au~7WSg$9-0wH1m*ihGfIcPP*1IC6w3QB*wDy8Y!u~1tSKP{4+%Xe8V_-1S2IA^J_3cd zxoEBrYz_@KXx%T0eWnmd{M%ju~?zHhi;K%B{t)r7UiA`<`SjcNE`F zyN2b*69w_frbU|6Gj>BDi1C35VuH2cj;0oE%0%QB^D91PC3DjD_IdDiUPL|ybg=VQh5F2OxrkeMm99Q zH9MN9Rb}N^x4vss&P`8bNzV;3Wo~vpv}8Nh5kgd)=81q{XRRO}`}jlFhmVrcI)KV; zzVtdN1wj8+lrEJ`?|M)*=Tf*Yv$c8gji_M;BMXUBmwRC>*vnC$TPb(tE$`?FHz}Fovc#R5f$GIMUpseKNIo6H3 zNA?9~+=s16H=k}VvsOXfUrMa|@t-QZe(3u&jg+JKzu~Mp*7Eb0&{j0V!>v^YPUfxS zQ*NAWd<6usQT2sS2b!OaZm@&ZgJpFq#KY|h*iVy+C@bJ=(2X zr6CY&$?ppBuP?kPHTXXIutQ7@v?zP`5U=>NQN?1X26FyLm0Tx~LO&|EWO2%k?QQwT zYjFN-a4LrDhhb}OpKbF-#(_HGsOoder4v2FyKf{z>?LCIlbpMs!j{7o_o#?@W6rQ& zdbf|4#*xOd51Ssfrk(s(`!!d`Vm)@NY5xGlYB5*xFeV*mXBsye8Ali;HJHP`5PUmOF2QfVg@_4d$uG~khZMz z5oFxAB7#YzLA&M$sK1O{-3j$(54_ahprbMpIBL*^a1ezOFJqhbXS{c?%AOS$! z`A~YJaXl~`8f~Ktn8rt5belBOPL4OV;(3)wCkjE{sE-+-L57)g;5Vu@+-SH+q<=H8 zrRc;BhYz5wV($!-nlxK%*ORfrta1D@YO@)YL7GW0!)}?Z=2OF!*z}@r?;^WPaHz`2 zm|%LEG&TzyO^~_ut$+xnnDBryYSE;mcOpKgYNg=pE!pQ`!;El_w8)C`K{dlV@;s`M zgPvljMp)xvQn9h?QB-fIK;;e|++=+*LEJ*iDF#Tn^Bk%ow4IlTXCAejw$drwkG_EE zG#hJ4^w}YwQ`6vOkUH_Fe4JweygaHN1M*oT3>%5Dk;u}GGfWdV9G8$p6#X_k*Gp{B zNQGix+$RTZs>@~emZbm&j9X!hov8TXQ(A~e4FpzV&n`l!BIiwv0~KGAPzzcdfJI70 zhTfSQau=Ofu+5SaF~U1ZJbDUSE!_8s!o-j|3ZG51{!KcKW7>w4vRfQ4jdSum z*Io83bJnk6rpYE5!2>+&r?#-Rf(1uh@pYq&dK$|<$h3P1T4ni0ahmFFj~X6aZ$3)9qmqnI>Kq z=nY=#HIXud(zD*0>u`?pCq>MXWO!nLmP6T|?%pPzUqP6GCm83NPd+igIaZk6vCe2T z6XS2vxxa5E;%hjw$z8t?KT7D;8#n*~n&kbqKk0bm`j9W;Nv(11hFv-N22aAUV}}RM zh<zxR32*JN$jV%iwBpJeo$k)!Yss zLFG`H;yVqhPUP*1w5#F$C~3dFN#&2qi5vLPWajEzbuh^_5NSpYnkVAFup*n`9E z3a{6SMgIWfpVGSftc}*VpJtrJ?H!&D=0cx%BD)FuW?~4yrF#oomwc4~;%-Y)I={Tlb|UzBB=IPD&MdIEdtHC~lr5;SJB7V;}|g&MHEw{G|_%4r^7@jGM=C1fE&pKaEycoqASAQoO;W1iqgvV=_eOJaLit z(3h#fZ2jPNq9MGNG4pad`WnMixq0C|rw%~o1~WmEkKsq2Sv1nwATh4vmieV)c%uWv z{&dbee&XX}>r6I#XvoT7`WnHl*d2~4{fmtAtrA&NW8NRkGe|3LlO}uQFIr1D@3nLd za2hsI5L4nSpP%1ts5anXQ$JKzFYf{8R+2{!MstDGR&2$N{{WRBDr1oTmE<^4=~+YW z_p^#ER^8VEUKa2oq~Li7J-48&I@Ypn+V$LTSyLpQeCi^0R@*-c^K+<(;kjqyKoXY> z2ITx#G(>k}uVzogRtwpYxFg|KSfgXzWj`7~Y*#C>F`w{|Yg09`BfQD>l!{(04srp< zl|hbW_g%-vfNR4G{{RkDZ$n;^(3QzRN8d_#rU$$cy;iQXvi$~Mu;fq%J*;Dz0BXIC zJ=b;gYRNC;8+P)KCQ!n)TkQMaCx2Y2qi3Z`NtXUuP#FLC4V;6wF-0-u1Mf z`)&;`)eJ^V#m9~j?~EMKG!1`-YPDqd4O7N~MR?b%)C8|Tg+leIUUdsVdAZeU&Ca5j zc=V{LsH9I-x>ai2UP6P98iDT$o+060$R>kn+GE{{G4RjlUhQT-Opi^f%Nac@XzgTk z-Hnf+s?v5C@gI4K^)>DqJ#1Wm5Tt%?z*Sy5ME9;$kAi||-~ubXRfZ_GXfyM1%HC&T zSW4iN+(plxXbh9y6hvnWL#Mneb?H)ZtfLVq^Qp2WWn;g>vXqi}>;~1fk9ZxjbNW&< z6*$HY)K4A|W0|1Wkgban=m#UcNwx&?@T#`RxvEOt;(Y3zrxFwAKw~rE!)KLM-x4-A z$Q4dzd zeuv&^+%{6YeW6uEBO#rD73+ksw}EAwP>sQCaKbp6r)tqSu#doxjY-p^Jj;FbQ|kJ3 zeb_7|mAZsBLaIesW0S9=SD$xWAkLv7{^KxvPATxDW(IfyROJV^rki(Vka!4IKbMs)GoePD!D{JqW~zttgYtk*_VVc zsj88lB^e8_t6Re}wp+TrNuv$Ly`8gMT%aQz)z0jEE1132F7M_&?#evui?9NhXLSv3 zH7jdoKPNq;i`4R^ce=IR*S#xX^alci?EY}%zj0$NOxQcE9Hm~AdGs{+!Z{v(XIWPw+yn7zEzdQ^|?F{Nw-32 zA-9rs<5mM|ptG1T1k&`yU&){7ZROH3GPIf7oiAzO5%6wUo^@-RQl}hX(9*>UCd89f zF^uxg-rAW0fq{`+H?{J1p3u*aqNu-eitAaN;X%!C`qLNI?%O}@Sbf`mm3YlFv?tMT z8Xf#-lkO4sP||g)q`>ZRlSVG%KXnMZxT4}xa7dyC=m-av{#6+y0r0N|7$>byCIr(Y zC%gxpFNo%LJ~^f&VT*WD*mK%0^n-kFULNW7sl`CY4>8WDk=LC~#&W)u80AxOxL-;^ zSo!XH(E)NOc){YW!w@-B4`gxeR?i7iJZhU{)yT*P29b}_8DrP1CT*AH2uc3{5U;10 zU|?174r}DlF;b1lqpN-*zP3>q5^_x}jxv_g1REZkRrIYqOzsNcVziDHWa1eZ@fEJ0 zB&EnQBxA(V-veBz+8~Xv`-4GU>CJC46bA&;sbsqCFpeF5wN;~e2xf5L8eZ4r{YbB& zl_e^QN#}~BLPm(5%;ar~e{pKe;&@mq(#=8}yK}~;jIrE~luNVq(+7nWRLG<;r24&x z5`wB!k(zMRl~D46&yTv7U0pNF-pL&@Ia8Y}CWzVYET#^Hl#aF2dp~tHq=#hUQN1d< zXyjfO1IX5TXr9%YYjSWo;+>l;c&_5!%HXB~ruD2EHPW*=Row{_%I2qutxz$_K4z;W$^m4m_!%hTj>%6*+~!h{m@K3y>v{1st(hPaU{&R!VU- zMrfBjBWlTHTwzdEo8*BqX92t`HImeFaqz2*tZJ-|xMbdkkuq`0wG!K89wI&!=APT9 z5k8dl3R?m=kq<12#zo`KVHxoh$SS(+#g9tOq9Auwi1VZP&-uP7U&$MfyZ2C6$kD{W zj)tASLD*0?w#_mS7!1^0bkiK=Bh%K|EQ!GzKH@y{Y;`#0;YcYo zU=A)V=wq?16<$SR4#>PmC#7U)F)$%y*_ZFFOe{v}pD|e5`<1XH9D->Yk|zW$`q0}^ zS93^EA#zlXMunh~-bbZO2pP8`p}rLfjNpvW1`BXE4Ua=!F+bMG{$ZM;F#`eIel?=V z{{UV#^%$c;0c2iF{{SlyTP4Kl&E*66lrX7DGw;Os@lN$^8MS?d!lQUNB7n?Xs~j@G z$Kr;ige)>)l}Cz@!iY9b>y=cLc&P@kdrlL&G9M#~M#Z9l`?G+291&1#+>EaakL6%% zMoC7(RwKcNYK4BZF_Yq?siXt6E{Ant@TyCm4)M<2Xu#!ul52(N_l0U(hZUN8^=WLcs;yE4S-ab|5mxv6m^nf_-?iJ9p91kjHHK`*A)`-gB=OdV*ivpuzSBgYIo<00A zPeIuGDgB{qk=?~-JmsU1@b~aQ`{?~{#@hb;%Op1NNXNYJvf%lVn&DDF?XU#-3U6x? zNf!)^5crY3RLAsJKig}|Lkr5VxRp`3K~cL5bH{}&7c2=69!H&PJPxcvPUp;RLzo?Y zku_Q^#Z2jq)}?2NX8`i5n8-Vg>Yx$yLHJS&$9)*vfvHBM;#;?I*T$JLH!~I~eCQ0U zO7*2g3aWEk#D_V>N=7rBR_O}kB$4S$MyF(Py?RKTqN=WOL_M;V7?G;0Z{D z6luA@$v#4WyqY61Fe5B`U@^(BEyS%5jxbJo4f1FWZsfN4SMI_10p{GzHH4(ds-E$s z{{XX$c29G8bq%z^ur1sk(YEJ~gVv_X`pysIqrN_?VuLwb3y9CoD94e_8QNM~LEBtF z6Ni3&^f|l3!EbK0<*V4 z7DEA^R6-sdfE5mf*b-<<0zf>gA)Jy%)OGQS9uXK;+jGwpDPZfI;P_B_Z)VEGDHLC3 z3vd8IrSNef4Y(A^p4`NeA&|e*2bCH&&;>^d27G+!wVW2onMyD|0+B=*w-UGpn%PTz z7{>!T`c!1R8{E#1lyxdPZ9+oO$mTEsAkp_iXN_1yp!v`i(8V0gWgs!|sEsV-Ypujk zaKjjE`PYfKXmCaxbgdC&?8jpx5$Qr)G?6hb9nXgvr0ZMUs3FO38z+eYjX-QUiL6|pmjJ> z!sS%t1JE4ir+*E7enRSRYZFM)02uD7C~G&do4V+~8okY;-^#^bgku}kVfJ$1wjiBa zt8-nZ%Wn|HbiE#InP5&Fa}Cz3`yWb!xdS?h21qSb8Wy7(aJ1^HSxKkPyZo;#qr#_u z+P#0GeMZ{%Ot>!*X17zb3U8+SK&=ptb}hFscdB1nUtHUEU9uG;ew2!R8tUE--WTl% z<`%A5l;xe7V|N{*>k&m4Xe5#2Jx2A6`s@;}B7#TH^4Ae#s?BW7r0vuiZ>4JyyxcMl z5Klu&`1Gme*~-1@TrI>lY(5kQu5KDbGulWCd2LLt=aaBKg~4S$2YO8=p?00Z=WncN z#tf{{Wyi|1k^%~tuBKA4hF0;~i@CmvY(~Q@d<6>8Ww@h{96t4E%Focr`$Co+%hgWfcVhTT}h0o%`&5IEK#}4&4EkW3t(~DIr!COyqHG7aRPj(10(S4 z8;d>^(?=DxWwA1*d|A<1YZL#ABg!@O)CS){nb$vfA0Ge0`FGD3UH{Obual| zR3`!Zs_{(xd1NGdRc)WCl5pcVOnO$xoL=f7ppo;+Hy;WnIXFhav*}eTGL%xsCl9&? zDvYNc>{TO?XB4-?)wI zN~D2QI0%FY0U_m@7D5{993nlM2N@;pCkt?~wL^llH?IixflOlR6eUe>9ptOB+{y=o zfZ~Rl{(FmPEo39JfDnTl@6URoo#`2nyd?MHx0mdm6H;chBj+KSA3S7I-nDghUv-G| zG-zypXKyF)u46u@27uI~F}Dj~<#V-5I6nF#`H{V4C56Y007m|9grvhd71-tBNbrkp!u4-Ht4Z&JFz(2 z3MLsX;7mtuti*fIzuic|qRAmVDsXz$!~h)0AoLZXEJibdS)OzUfQ?SWKD8|=9JZ^N zacS~{G(?#=J1~3vv&D}Nm5{(}k)J99+2Y-|uK|kLnl_0QUK-sWMHxilkV#4t-P*kn$>qIZ(z$#951uHSV&|9w zp}Jj28`8#7N^I+q;%R-tNyV}Q@uXomBG1yPJOFoDv*s((aio}Z;m1m>Y}q>l z@T6^6s9${MpcBy15m`+;u1Y}}{{U$*;ZgDH@S@CmWu%}*#i)=5S%Ho``3_`#)ZnbG z>}9wHP@z+)CjyyUTEQH7Ru0+0Anifi-b*+I!UZ1cD&bUl3O`9`zD&&_J#Yt&1q4LO zi;VZYJSt>3Y@BbsTG|<9IaO3ouIGhE#MiGi3kxRTw8hlJoUA*5`3}DtnyDGJi!tMQ z65b=f9EStp)YatGAh5OUG`RR=J4tlozTQjqN8?H-yO!otEYcTa)SAvDd6YZWFnwys{9_!=V`^EaLLw57bHGMJc~+bt zNLYZGIl$>cli8ni;BjqQ%W2q1@s~o#IjP93?%iUA7)>03x-T{Lp;B}#IGKmSk(uA! z+erjbLu9bB0mR{nENeSeiNP{Fi{XKq&ECwS6_!VDqzd2xMBPVbE*Inz$s}9=p3ns$ zx{5}Zk{IwJk%|6ciZQhdhO-exI8&VDbF8ga)_GPb2LUH`;m#_(g}Po8<5H?|;hLJM zzk^*C?dEO?rjdZ?I?-25ihgFux$!2m2{J-HNd$Z>Ip=yFJ1t3O?Rzpuk~LJaOEnd?@W+$(S^cHZpl;m)ppe+ph!ts@6HP-^gp!dwn+T-Lr^afAE^% z)N}N%>)K21(?h%*3Z;-PN0|b+RXqG^@n>Gh9P1VtCbn-H$c}YHjBILDo?@e=SqPvs z9P^x-xH&oHS*fiT87In_GQDq@K5PX7bBxiKo1|;v+59UBfB*_q+l&+kJiw{I7~Y~H z3@M)qy9{sEsF3*K=UGqh40u+g)m&uspfMG)a>1&q?N%d)8`34f^Q(=w&nlobpc_zc z9$_)T?a)t ztiD)TnmcQC;u{__iqB6#-SoWd!RNwpMNMOB7qnT4e;o6o$a5+RAKDSg^U_BepQyyw zMWoNAbKKIlW z&0T8tR@V&#Q##3Q|!t`MhpT`xQx^}S0=_-P})YR!>bepqAh-B_0VZwg;VQB8P+0P0P z#Qy*y{{Tw$-|g!(6HcWR{UCz^j~AMANXaF;+DthZ+l>kI<||9>Lh9ZT3o|qlF3rQl zj697SEfC47>P^nzAMlUqSsVN3_ov(J3ex2*_)7qYKzF~#HW>W^hw!ZBXweWwKOYe9 zjtp?04?3udvNgnu#qyQU*%e8W^qeird@J3pzh~Jq5xz+RsoPn0gm$v19F95FBX%tu zSNtb3vktjxqr)TpIS2U7d8M~4fi#4ARm0n398XRra7S zL}C^hG9CI>k8v6v45$Mb$*ufzAD1tiEcN!O9*&@ebtIa-#+3{)7kB_3BvDrSl5qr$ zION97oY2?vUc6YICz}9)#0U%NU7omWi1WStzTDE1w#_dB#G~O=mN?^M!m2$*VR3Rt z`z1r-D;AqO7verO!Q`>)_+{;Lu^=et&aRP%$t(cysw{-2Nf;d~%pONQnsm+=%DLT5 z8WrZFB8ky-t6S@?3)|n3L&8Xtv*X-y7!({bVOdG$HmSF5K+L}<3Z+iRH5F2hPi5KF zq+9q(@o=sI?|t+|&DXQ`nk1TISivpOIa$$r;kuIDeK}IiLLE+NT3eZi8Q%(UKMDy1 z@Ww=NN7{9Bxgw!kj9w1eyI3MBwG9-J?C8VcTSjh6fYB4c-q*D{g0MNqr?)h=a%dBL}`Hqqk%aTA|2Kw!BWSB5j1F)bu{ zdnHw3amj`^qjhZ)_HBwwJ<9x{+xQ@IUmVidELr72v*dU-^h9@2u*9&AT+rk2G$#vm z6;N$NaE+t^&}vqr3bjDvvv{HqI%9%zRec8I+Q-A}|&=X%oGdEq&RXOHZhQVbg2 z<}LYAGq&BNn-JwuN-Eaqe0vX!Lx`^>VB<{7M;ewZhq=|;&HHzmOh6nQ^L3>pyPwYc|(rBMK8!EO=bjL;OQIHQwK zX$Q?nvL6NK_f;Crl;MK|<|x<+Qh8BdCIgzaM`EL58jXObokbF0QhA#9V7_#0Xgc$$ zJnLf!@gk~G!8jn$Y^%rgt$W`}Fnubgv+4+-C@bAXUxXe_nyEvY15}0El9TYQI|X0j zIxmqqHAj@Uzbm(p*i|@(L?0dL?Jbq9*OI)4%VAzO1bdN1AE?RvYXZzhtVlNUd{( zI6UYvw)@uk?t$e?LAY(RQqpal>?;Of1`cYHIN&&?pv{}Tkawn9UAGn{eam~kL&lV` z-i(IgNFqX#I-GI`Z@Qfj;^5s|Cu*6VA@3`D%kl861on48_Hq~{Jqf@yjlQ)qZ0NFl zFlcQ+Lve|qj6}!YQo{$%mXspiS!29H@-PVdoaUZSquc5VXN9{d4*W_ot?Db6v?eD8 zM}&_CZ2nc#`!6cpUbU^Y#8ELq$Q+&)Bd38milg65k^WREl!M&> zd@HThH3qPL#_9`aVhAETfY}~mkX>oft-Mpke`zbpzhH!xjC2I@qhmlCNf>T(UQ+%B zx(Mwwb7+e4G;)~75ei8SOAWgN-DM;3qh+AIqwSDtK?b*Ih~!lKYu%Q4m8KAi#xg)0 zAdH%x5)KH)Dnu*H9QO* z(`*|R+7JRF)2%-xL3qjdRu&pvx&X{Ln0?glC5S|LF~mIUe0Ln4OD*87i}r^$s;kp& z>pO>x$B_!L@WmHAq1cWgkjqCZo_{% zsc7RF!8MzC6)SGHZWf~gvw^GJ9=`2Ll4yRx#6g4w=NFIgFIgV1&O&^nd;x3ULzA}~9M zJ=F37fF$OS=v>!ROD`OfGao*co3|4ao^_rx$WfNEOBJ2OOB_XK;SB7cumI;{(t=Hz z!XtAkJH9)B91QrH-9r?|bPuX3kdK)mn+!eCj&&`^fHOh86im{ELAf+!0WGHnbXhnX zEg9r|s|A@+6sW_FXU4Nl zMFuJDWehj~1I>jWqu5+s+^w`?9yZ)@IO$0)J0RfUi0i#?7NKmB6o%L<{c^`5jU29! zJ*~Q!%&8oMW8y0dQ6I`Uqq%{yc|9w(vH4nwK5Ucqj`T>=H4AJ@1+BX%IrXTxu4Vl? zh-3gN=G>0FE-3rikXoWylF|{G068MK>1WmMAB*-qvK(V00Dg5b&8=BxNTG%{J8adT zqiN(nS?`s=iq2**qDsM6Y%9%2{+2hYZO%Et1ylZ=&^x$|Xs!j)FN0Fd5FwFv_b44Ui!Wb*5 zQ-ioTJqW28>0J-E@-*6wmD9z*(pbh1p9sc&;wzmEwtCSC?XzAZZdC=8Y;Y=uRLR(p zL97M<+N{HfrDA5t#x|>ofX3Oy0jiCTb|R#o3NuF1@3n(DvW_w!3ep#T9%O;}Q&>HZ z)#Pk5K%SXweiR2e^s|n2-Twe)CP&jRVn)U;6z-t&U-F@2_9RCtt>yVFci>(WKZ!Nc z=-Ml3_RgAQhS^x<+lz>?9Z98n8!uKR5Ys26+UcEcbYT2OeUM zhuT@5-Pc=$TNAg{3fvsLD? zK*YDkiM!Ccos6H^*yc~4xDO~?gUY!rLd~sZVkSZt!0%liqwNlnZx(HJDeoUR;RsY? z)Y571J)6`mzHTXPuCuvm2@mkCF!uRn-0m-`KOnk*{qWW%#9t55EVc zb2_vT#d#^S5`348_C`;8htI~k<2&5V+0JcPk;JAI2Pea&XC|9GT5Yw{Y4$F%-R3DJ zok+?YvNC63xX+C_bXiYl6sN?~4LeeMc%Irt6I)5|M&3Rn!1>j6dpSky?hH>eyE%&4 zGKvmK3yrWpDp;+yb649QWp!G1n78oBC4ouYf3f4?ka>ahz7)Dh842yUlZQJIy#Zr) zCA8@*PF0n%Flqc3I(D>WOUtj3UgI&zDa>-820ujj9$qy)E?t&F@4!l@8iUM^Um9Uy zs7q}WkOoO%li!9xl|Ey@`HBMa)_ZWBrbKQylLuxVB8M^_AhD@F1DUGqx;ePDvbkQ; z$%Jxk#cv~I`lEI9=SlU8d2MDf%L_vy^HW(o@`Id!X_cO(9nTHEvlCp!$V`V4p!GiR z@-!8)x&6tgVBBYgNx;d)brO3s4cV4W8&kKtMcrd!Qc^z2@T9l;HT|;4@Q1N#{+Ydr&d*a(!BnL<+d)@TQRbmw=Kk3uA6r%~C0kZ69acwp{s|5=*61 z-nCqc^fCh;5*8$R)hCi;gYt9gMOHPQQVCr`-H0!2H}a!mYkteN`8)F10!aAM=q6x4 z)vGBU2Aaovs5)(>K00^6#dmnJMC}^`-v+B$oD(`7wk5P8<4Ju^_M%gr%X+kMt zk{LkwnvQ>rHfb8 zAzRs+8*<~cbzUN))2%HY*v|5!VWVaBTvQoJUFpuNtEH{TT^Hr6Xf`Wy%PO~+2bZR5 z8&R~l0JXl7So3F%qdyVL@u*QDm@m)LG@EVera5q#Ii~zB4&^rhGxxA zC&8qi&a(m8O@{tpNHo7v(l2!OQE-Y2d$?dp_;anL_Onnic5z1>B=dD%_uhF@gLyMt z3C|po1D+;1CW*0h*O)bd&}46byM|ftnxcVlt9Ow5P#ay3Q-9rmjzdTJ zD$qt665X^)!Lh(e&##4e6yf3EQ@(T8(xIYWWF7qI4ErEk21OguoG_||3S=X|(8~g` zz~U9RU;=Q4IS0moun{)R3n205RhAgI)j&`ilVt7cDxw!V2@PCDHVETZ^`rwBUnd)Y zagoZe2$m-jA;Ap#4_;_QM<|EzMp$swVDzG)!Y`w-; zsK+|+BCfbJXguOV*%LDP04h;HB)1fxjA5FjdenkJ=Rj+2VT}8-#-|zKY}cn~NGlnb z_p%9Yo}M+I#-sz919%*)MR0IWGB^9`{9};&>ZK(RhB@r`un$b)tAWGLfZhpXK>hK= z+aF5Xw}D9c$j|s_4XU}p-D%6Bu-z|hMhh|D!Fg8E-r0f=Y zQ;-)2kBFp2+n05D(tC-~nU@$NZuL36x|NAk$|(9+-1-Uz-sT%wrI6|I+_OejCYibmt^*i1y0w{+s#f{ z;5N#s1-D3I7+;T8K4h8T6b0&myR*(L_`O!_Se$YN~KWRZA5M#Be!LaEN|R%E83kK&xbM@bv_E z@}wkUiZ;$_B*ziP!@{&7Lt##9((r&-pM?g%E?b@`fY69a1P=Mn9!`BRLh;5<4r-wr z96=k0#)5AljHU#9E#sQkOt*r2p3dgzTc-&;WplV24~<~!!a&Y)IvOid7Q*F5oAQ$v z0`VEZ4aJW4E|dUl2NuJvX~P&9JZyXgUx26_SSQMfg@}l!(QaeLjg149p^-uexK4SN z&1qw4Ez6X*LghwIIu9DGk*^j>;S@!c%G!xL3&Ra4HpV(4%u&$%bsIA=~I<^JAMO~zA}!vV@>Vt7Gad%&x(Sc zJM@M>k!Wz40q;K+b5@T@eMPvn3k%eKyfSV08p|rz8Gl1&wOE%gG)jC6it$nVeto<=dN*+&3mw&(*4@v+&Ik zxJ_E$ih*hock7ip?vb&HC%PIf`8a=6NWusk4s?ljc zll0&#Up&5u!F_QKN6pIV-Q}|pwS5R`8ebnA5xSn4#c@8+aJIL0>5dnEG4UDv=moq? zK9Q;IBp*!u^)AyY@oJNpT9iYSD1BVY{q< zOi~~10@4_Cj?qdp_UbYmov>&xmjY|mByUkbO-QPd%X+XB2W#vRhTBiOo_k5B63VCw zX9I*}^7~cS>DLysHw;$tN95tD53$qhwtmXN`#w0DDJ7Ck_ax^Wzr#;$bxm)B_q{FL z{bT@s6b+bOXqrvpthaD0$Og@f8eMN4^eoo48dqm-8=Fax-guy3Z7){T8BNvt%1O$0 zZV^x9D3#G}7VL{zuVjpM3$gp?7Pq?jYy<(L2|P}5T1RmW()JU3KIHiots6|Z0|!l- zR{G5$TAO=4LfSzhX%T`B*_o;Av{W=pn;YYMV`gJJ;ThE9(urSbFRkS4t}P`G;72+- zd%tNVx?6a3t4P&`@<}GbiF+MJH4S&EY0xp`I}`evoBgg&(|tcteMT-BG-=!&vQ>D0 z8m6zJ>S9>MhM#5Fk~sUsF#IW1#+9kO;zrcjP;%_mlu<%i?Z8&mWNdUf-m$Y?I&r(4 zy6rpUv03(An#Aj~808%N=?}C6Oqj{Td4DX6%v#J`k6Z#N9=ddE*g?3Obelf(D8-xC zZR>p=+VaZ9Q%ltEQXhM>dsfDN>dV($?YF-8&`W)DMYFbRc}4ZZ@e{>xj97V6i@ire zmSVyymCsc}PcH90qghBsw2*kb2S1G{xb}nE6p+L%pyL~NZL3UWWtIJlwrqW4C@B=WH4SQTZLjjdKRNlD;#CR!014(Wr9wdIVa0QbVIk*E!2^ zOm?m0y0pHq32*Gno&o$vW09XhT)myxicUY;WXJ&_K+gRsm+d)bwO6?Lc{#x=ASiq` z@uli>Ci?xo*~Pu0i%0-q6|s&IH)7j&tC-d-QKb@FtTBZ}QX<_619s1e@u&AXJG(|^ zyAaDD%EfagUHk|GVV^n(>3W=x!xfaABYpSBjX0d9+_MHvjzO<+6Si?owMea?M~Rq8 zC~g!eNCN#f0Kq-qn|-Ywh`vO1DM2XHEE{T$2oGH9ALWsn{&m=&aP z+8c0Xxd`3?39g8?lkFCoi)je4)zh3&ugzTg51{^Bk4#rHt5{xX*DY;(6qfQX30DLW zo>f@gmQzdE&2edVw>DQx6tOmAk!0Xu=}%$SQuxjLN?S2JfbmMU`E&6Y8LmuA8iIF_ zk>iY1p$sw!2Cq!_VU(73@VObIdcxIVI z&nmAW!ZCxrR+CjlSdMs4-BBc*TLs9YCTt8!JK4b)+*Uxt!gGpv&QX=&OIx70MONZG zu(ZMle#3@Slbn-{=sO7(JEC%-d`&iIEg#JSSdL+KuFNi@%=2UINcCHJB_d2n7r<>u zFB0J#1!uw7ce7nnz2vhsv&kR2dH(?4Izf8ZP~0?91n!(3?)m<;K3Tc7{WZAV00}Ct zU9x>^*;CAreJJZKKIZyXSQm+v8b;38P%=$mVZq#jYl_FKjba7|D#ld@megY?E4i#+ zffVHLP@ry6S$>u|gHU)|ETB% zN}OUBj1hs5Gg*XR0Yw3Wkawyu;!%=2y8%eq0HdI*C4(=}eu^(PdAZSk=cTrsML=qd|0 zjWDrOJLAKAR6Fz z7uK;}bX<|f!+AY6td=PFx0eI#&=3uHbFVNXk;w6{0w@cCxHaccYs<0ms{xZp*s|@m z^-~$}t;oUYR6eu@Tv9Jnk2;>z@@4pnvGk~A1dMM?o2H?1v9w}#;cNm9{JmsI3eAe;;DXNw#9dQcG@Ztidfz@5ky zWI%Uj!1Ai8smY)O*<+BX-Ecu~cyyvKZLQ%*3ThEti9Pj+7#R6;;sYjx1c8ISSde!h4=N4i zMQJ!g1yX(H=sfXN;cRoM^c8RpC<>ruIRpyRb{s?#lZ@3ujQ0-|GGq zu!yX@1*6YA=Wbc&S*}6mb6(sKTRuDWpfwShNOoX~&4O{T_zHyz8)hVDo;lTc@-Q~9 zE(HKtla2#!sUAts5!mhKXj43o9C16bNb|s??77_HyvH3YB2InU4YHlK6>xfWtmDrP zP6Zq;6|9opOpzNFOaL*Sd-F5^!+N<)b>aq~6e`?6=jh=6bx`7f(MI?cbw?~f8-bpE zD;$H?vUTcfKB zNK!ENu{51KR~Z0#4;o_?y!>K&f%1a9yFrBm$WrYx8@B->Cp_?Z4~0BSNm0SLmPyDT z?8gePt#nDlk1VxW-CV&c5&JsTPC60|B$UST5gbaOZGdx3wQEiR#3q$Ex;OQpEdE1o zM4E-iXCD>{uI~PWr>U&7)NkUR(T@fPxwnmA^DJHI_+nmzn;$_~YI@-k%N>k;j6{)_ zJWN+RXQe4=8bV!(C#kG%ZRR=`E~?EqSW|_3TXRDh8JUY5pE?#j=2PcH#~hMMQZ#2{ z&{U~~$s~hCTU*H_u5cA_336}+S)zg@9k0(z^+E10sq5$}$R0z)PD$tn!mC7>t<#Kz z%MPqYKH*j{5?Fv+8QgmlrC$c9#T&5-St10k<^3ooiCNyLeW4q?Msg z1#maUbGhqSB$p9JvPy1|8i>$%Pdh`hZ}vT*(7YuApesNLU#1 zVJ|8}7KMJT#3F@H{6;^mYIIwpBAHhUp7#v++v8QJiqbf)On|U*JU&s1V$XOjibZN9 z$i@xVFp?))mhiHHbEZuj^$5sU z@6B@F*~1h%y7n=$BfzH&K{*72%DO8HnGB=l8YC*GuR2}*psl;Dgz!NeCl4EhTxXFT zJ!)#BlpBLkF^Zm*6a;~Xs~zeaWALv7ny4M8u$J=OX;(%YYYAQnhW9K%0f$bQ*wy{B zwz*Gdb*h#1*%d)JIBPbn8vD@x6XSVvqt=58;_UOve zTqz`iHc(IJid(xHaV_su8kXiN4FNprNNs|GSn>m@s2kHSXPOB0+X*hQ*e${tGsp~$ z=qG(1sibK-UA~*xUm0SBV`(FehkF~4eRE7bp40Dct%c+|q|-+)y0a6N_!=(kTD($3 zw+QUpW;sA$d~=!`OVhg-{*DEbpf$kMRk0qfh|wMTBMN0 zjEJ=)+y4NnAJ&m-@@W=wEZ3Hrqca?FB>YG4H1)B)A8HA$TtIsuB0tYLQCQl0HFoXC zs7ov4WQe9C@g|Wi?wuu@HkG8^J;5V}OSt&dd3~6l#sbYwu^{ zjE04^Xvq4PMutAf*t$XRk?Qdku2UXFRh94n8^kD?1%G+9l!| zhN_n!@(SAuovvu4YF7GH%GpKjMAF1|%J;{l}`K+ zgO553PWJx*+q=f>?JXjgrh77@@6B|7w5?@8zbdktGItS3GS$axx1P{Ls+H0qxrWf5 zVkYl$X=hl!# zb?qXsGW$gec>K#B{@QH!QcGwSPi$dVA4js_qgGM5VJ@wx+@vk1>l*%|P;6mTAQAX& zL)hATCSejsG_t=`Vi5jSHyTUocW<3q+Uh_yVYiW+9;||&Nr5E{A# z9yPY9?Ee7BN(Izxu2M*rRCw6;gAdGdB7}kmvy?KC#5V-5<(hqtod%Kn8QrI8ZKj%0 z#^UKXT_o@sJSB7ZbfPuX`KXSQcm>qXLt5Hp)C_LG4E3ZIX4>jz7fcr!V$3%qz*Bd$ zp4P%$XG6Su7m1b@SPNwF0#AE8a^+L4ReNqZ!(h^ve$IITUBe zgq#j#%Xki%p(cG{AU5WC+CDQU4stk;Gh5hQvqQr@s@zVF9bRW{6&*(pDyD8?+ojK%qfy&>S)y@#YWdO*%|7 zIyV{;2=K0>{{Ryvv!wpb*VV2iiGOpvCo)8SqZ98T`^P%uQHb1PuL}_TV;JZuSaOfQ z({8MYHxRU8hF3jDm17)=BP-bDx-mSdg_f%sfo*jdntNsUcv})h_DSjFcJ!uJp3Xk0 zW^S~bh_2Or_=5$JeN@#jBDgi>phb(lUn#Z!0k=L_j z*@K)AXo#=}b@S*eNm*H8?AO1wWIrx2tn2_2`=F84y!`2X+%s6siBvN4S5uW?;tdLf z@oq>SIHnqX+QPC!BHK?BjCONuN1FH=a_KgEaaObsGA!Mi1kTLoV@$!3p(I?|Mn=ac zIG`5B3!8_x)1;k4MaS5%$uHry-iDa_JE6yOaIsAkg$cuuIaf{@?Zf5p+(oReF{ zl(~Xe$oCg|L3eX@%*JSY#N@GB`VX`^UX`ZVGDOeXXCaTg2Zem@`gsyYUeuM}9+h5c zWM}l5O!BfNbxYNYu~y(hNjxJ2;+$Xc*;m@CiWzRH&7TDmL^liex^RGWL zDxe(lpf|aZAlLw)y5GV>Us&l5AZkrw4 zvBxFfVA2e!FtdaI051Okg%qC6O)9*$m)2LY$M5`^%Q}w|gaeN{HwK859N}_Lm1^lK zaQ3mX@eHpL<0HzO+Pqd$X4Ckbxbc(zR8_>67qFsTTdbi@RhuBMkRzonoP>6^vs|!P zVkajBxhVM4DYUzIEu={mF7Qpq=TGH|tfaW}x$+ zE4k-h3!Zg!0I&suf_a`oy+J&n1CRmr6+X2a)Qos$fbrnQ!2R`J75dd+8JH@Ju{Zz@ zW}-!8c1KdIq=p1;2}8LOpU_maj>81tcmaVxRK`@`k(_b| zl};33=QRSn8wWffK z`$Q?1T=3-c9tUo9mPJ9%H?IK1_ebGC+Uh_Vtx?^WV>LGLN1V#%1ESL#S>i_Ff-t=c zV>tCDkVIAt2WfJ_RBppOsL11!fJ<#0QN%gVHp+bg=UE%bVPn}^rNe{#Y5Tx=h2{6q zmlu;yF`D8|+3|o_a`YW3z$LpSl*puA%g?lNgj3`wTd5jG;+A78fAJoIv1cvJ{q=;b zcyO6J)7dpV3d4x!#Acc47KZZchS~=_*eGn^deXZqJBxXBjU}#`36Uf+ zNy(UuAoM+JTqo_9mn}_0%{nNcUKtaHPJx>nc;~HUtKPI|!r9ePM(-&BLF?CZNOezX zIKfzcaDmK>FZtI!cYQs~oKs5D5z9P>rB;4lh|9;|o8Cs3`s0Qs7UPujm4MsquOaKs zx%lU=K74Cf6`nR#Qp61GGhPtzgzd5q2+9tB z9||HBE?5rYw>2Gqtr|9Vk*60Eg6sxDgMsls(u<8|DpU}N+`!lx*4oNUhA2Y#(@Tk? zc%fB-DEl8LLAyOE_m(*aNU2;-=>2 zY1z9dQ~~u@8&GHv&TYO>W=<4w7()1M_t@0HdyRobTyZG0JdEYw%hdx0E09tpt~4Lk=u?QJ}QSOlYAINFB-}6$cLyCk?e_fbF>N6UYtCI89k0XJ&RJu_WWhvUG)8 z-9HmnxQM|oXDBha+=Eojx{cVMg#$~&ATp$1Ga9=E<9y+B)cIDjHQlw`zbBp!=_s>A zm<%)TE=ERv`V|U^IMe_~BIlRFqGpWy_ZjjOjS*XMF(3zSd1F&=n_VT7mNSkymy-?gpd}Ba|VXy`|WKfag4a&mur?8lmBrfcIE%y;5e`ldV&zJeO|cY*s!o-1@8`iv^s zwi`aH7ox{mrmrJH5=}lCeA$7l&Gs8VvhBQp0MKi@S#e-$Gas^or0Mo|K~-hFncJ2E zfIj*%4M>={e_=$#^#c?g(rWh;aoWcvs^i@akx1lP4`eUc@qDsGL&$Z<-&&t!t`k4M z&RfWu^|9Ar09)PoX$q@x*eVb2Lth9YX*l>%<+-I%B0r*kh zBf8=F*Jky&WBJm*{8yt|%h@fh{-y^x4E!Ma04UpkY4j_c5Bwu~Pl`-Qr@X&ISl^V( zV{;%XhBZA87HKm36{(1BXrXj(9gp49>JoQld%XHcAppnqG8(Uuxf zwu^;qbm{u$Nl8DITRW#ebEa4!?n+ne-Shj!8nDJ-NRv-o0lOQAEZ>bdy3x{We$n*J zITJgSlYfE5Cck*>vVUexBxC7EAz}H`NVqI^?%T}2V(a?S?`m}UA4j;6g~0hZ6EA5X zVY2{7+{f;y)AcPT<=D*cZiAF&Off#EkgIC&>20Lm$pL;Y!OH&e#50cyl}8MGDh)!K zlf5vr5^?EJHmJ$ldbc_V>)58cI`0LXiyW^6fD*ab08ZZuGy6c6_{FD3c{)lI$XA6p zcka^9Wu%HNdf3e~!y6VxbsMNC!i)CE+q^a=3#o25ej?)-_h}oOZex0$mFB5Dsgg!9 zTE+=sj%46gLzOZ1dKJ0W?4V%98f7iQGI&AB+t5%SNPrrk!xZZ9Ba-zXVKrIva{xxRaQ{YzAmE{z`$9~{$~D+@Hu zF6AapElq>*U?}2ZapheaS=>0uypV0oS?~Co@Y6I{Wl40~n>Cg*?_J8y!2bZuDSo4@ z$q^}Sab?lG`}2yV7*8#pmWw8#sp^r&$AmD2ICJnDQ4ubesl}TgYG=tA;Vz+v zz<_I+{iUwTp{1~imziIawK>tfr@4ssa(g*xCkDiX3Hj2hm1p)^S!C~PQ%Jr%U*}hE zV`Tt#8pPoF=kzpAt9Ptw@W!@wQE1AfmUv`R(gV{SC>t$1REFeBd2@Sx80QzuJ1|d~ z6_#0F+gx$S^x98mbxT`zlInX|paXWEMp5ygK2>XA*jY4XJiCRP{{XhSIeoht4-8WK z6K5!4&8|C4k1}&hZ8cpBR@9BupV{@oWMoHeBeZ1rl>(yMt=6(hbqp+Rq`tF`YmF|> zYj^J~kwQeCs&=F1_Ip#hvRBgeJ!U3Rgo;#0Ks+6)dbx6uy|8Byv5XDzL73twse+iA)gR7<7tMLa{)3h~o@vyuTZwYT9TIC3&Q zL8baurR^r6sljci>etpuD{z-+&v$LI4mQpy-R6OL2rqH%Ji^ z7kv7f>h0$CS_`XtduKf-YoY8ZvXSQOtRYrTh}xkiRGrh8f~R#H>7z=}ujA>&U)W6}0G&zs<@W zSI`~Dr3)kl<7JNK;XFW%clc0Li?!@z48@K)B*>nkoGbZyOc;Vz`P#z`}%EIWw1DufZUpZX$}3|$dw|qvqVT*Mhq(nBr9%6Z z&>}}H*0xvESzRR7^0aQJAcI3la7gg#I{DDS%S+|bic#BLT-I}jEx?k31^Mi2<2bp z`mg24`B5&FX39p2jk{b<-lqbs2A>=f0?FFo=L|^{TFP09wgCrlNf;>0LIZV_`IG;SIc?X9tn=J!_nrHi|+R9QgRxCV1)Sc=Pt{R>v_} zNTJuB^|}C6iyU}uLd@k4LMt|}1%*e>D>3qF#PE_?M|P}OvUf&n7ULP|)Kt@*9z(`X zG1F{OQ{M?Ahvt!9GD&c|xz2Z_WpA+~HRV2aX^#|)*v3wIRb$xDOER*1%0_qJ!mkmz9 z1J!OeVfq?Kte|og?$JwbKMGnsox9i|{`~`emZ9ajuqSJW{{RY_Ta+heA9YpE`(V+b zvF&qY2fuRuTqd!5*hbOXx$|NL4!Fm>DjWeui)*#a&+aU7{gIRR(5#Kc#8{GidDeh{ zd1ky=_zHR(LJ*@4IG4hx!G4J&)~r~0)D}Jzf~6QQ77q`PN~!U!J4XPh*m_kkG2mzk z6*Uz!2dZi_P-qVmim5p{Cp9LbfVy(4q;DexL}p{q4AobaShEEoS%5siG#hobMI2Wb zF-82NzW)Gl<@eQ?+XV{@QZXFfM(6MxzVkt@D`@#*fY*tL!8>>jg-8_&D!@<@1y1$u zq#E(%L7>!B)k!@l3HaB#)Oy#b3xkT$RoNMp7=`zU8w#u(9A7x4hk!WVrg<5L1{HcL z>;(aoj7b^a8&*d-+*OTK&`T0<00Oj)n-!BWatQ!n0kFp^V{N8NZPMcHlFr$V(#y?< z@~6Dt4ZP?!a0O<}#DpC2&ZmiS!i%3Ee_A3*ESAtgZEEIDAm1yM$Z|fYKzKm)$@8Ir z08lisU#{85(OS|;neYfyP%sq+0RI5L8pl093b4r(2FWv`vZIi!FvB>_W?Q|IHtUM6 zO&MWfad^Ne3Yp#8U_LY&u|lq)@>NN|$)g3VjU)m&;kCBM&dnhVIrJRQrD;6+cAaY_ zx~ROlBw@3dli|#t!jfKHyv@YNmn;kc48EGvYu$tpg?8 z(vT!_R2`Q)4?#g)oS4s@Xb#nTx<;nkv+atil6R^gEO!27xG zk5W0*nxYvUJ4|5)#g8hpi2FVWf%`;mf1s_%p6)@!cH{sU3OoR&wi-6!o>e|vHBt*e z#bL)F4A~?Dh1}CST|A)-Admsfnlt3E+JaO7+{HsVxJ(jDPsnQJ}aXnn=)d!<<*7g(6(`g}*wqGDO2Y;J$1J=U1dk7U4oa5a41Cz#5pR z9ikZ`?t|XPIwe^mki2n5`BDgZ6piRRspe6`98e(pS*+}98(!VpBftA!=*CWnU`D=^5QVYQ1VhUQj22@%PwNqCBaG)SWW@4iX<%`j(s zrGcLH`yzhQ?#Dq&LtoE*J?iu*E?@Lx`0~t-4Cs9*LEdJwy6;N zAk@`O9co%8hiMD8p{{8tS3Stdk%=7#2(Ec<{heI!TF*Ctz(M%r*4%m<4jFI5k0d6h z+8<}-m`5LLE3v={7UqGrw%3|z1G9q4)a|^ax%-9%Gq$-&SAjjEh5_Lnz6a-6$?X1| z$V9N-LJ0o=>GSzeZS2mL0c5+qKmPzu-_oM$u3J70E;PiIc$?ZQX}qOfzY|I4(NpCr zi9VL)&fE+K;X&VMu|$4tZ)P9x@mI2r7>5Yb?+f(ARd~xjQI=Bt7_N?ys4dvwb?)Qy zt9+iyG2VDK@FV)xXqPgt3+WdjI&qQxYLeQ(s(AGN5;_noNm*E}#qogxL33-uGlU@j z09uPpUr;dyEnxvXgq%Roy^j)^Ak&oaw+T4|2DOe&MLpd%9C^w9RLU~B)i1k3uVts) zj};jdHmsa_Rm9Jx+CafF85HDhDbyD_(f2glG3w^C_JVC~^ee=BLw%gU*X%f(g?> z@~Y;nXg7w!x!ujJh&SPqQYKafC9lSVM{!m$;sN@$1 z%b&)99lgxn*-sn9w)Tz~V<>U?ng$&=+jUMJIhB9o3g~P#31-qQFIMoz*AT0|QCkc~ z{{W6^kuJS)dOLl75oAWf6jYPbaB)N`hVjf2v&c;etri)lsbk!dbnW z)^6N#X{POe4lGb|1=0TiYxa^gMLl! zV(Ea3e{1y!2ZGFp{{Xg$(&D_gix)PGfFAAuCm#x(M^Dl<2jZVfn94RU6bu{V!Z)sb zxVo;qCg$OMn%p7rAGf-SkLDo%0QT1Q_d2eo%@&pI?ZncBBqJ#Pl%G}5{hYOMCcM;a zorYJnjN|cIizW6}!cN}X+I#o_p+H{0B`Q?BaDk9|a--I3aJ{beTi;s$0B9ESugW!x znIdNk#}kPUK71f&;Y}vD_J-Ae{&3V3WBsO?ILH403Q;)H?gt&WwzvFQ$S#L(yA&Rw zu6swPTNbeP!s784nlWwv0OrjezTX4e*X3#T&1tWVw7%QN7z1e}iO^@m92p;VV>CAm z!b^|s64FJR!@oM~;06YKzFbTW|jWFr(wpEhU4ry3uuO2k=JXU+Y@T zWMh_Av!4FLgsW>>yvQ6j?n2~x&@!f#IcejP;Fe-eU3s2;D_v^B!L1>(j!3PR7iL1} z{A^np40`hL+Ozh46K8N@oM~5<%%m8uWZ_)&V0Iw-5t_X->?qX!M%abes-3cEtAA+| zwocmB83`HSB~4pU(5|>UOJuN+9OOlL8-2q$tSoHxn;V6>x6}BgUDSY&`qLVxdWM*0 zj!UUyjucQ^y5yGIl^|Hqh6<9XJciY#iKgoM{;=9*rLh+U9%B(9017h4bBc{aNtaHH zHO<5wuV_)Bj$raGI*>UIoayjdy|Qa*0NEJl%v7J0EJ37J?9|{B$b4vZjy4~~kx!g| z=R{h`b7br-ucnKSW>BYvy+PQ}OFiVxA(OUlGJs@lu-g@6g(tOnzFll3R>xxbS0lt8 zR5irKroim71~`^5x$`)$1(~5P72Q|gA#xYPCV+t%GH{nf9&Mb~a9S6Y*adMI%K+dX z4YSYTUL%VjFdk)Sa>QjuF+gO>vBfg72Uc7rP6{_hAC59c?u>enm$Za^{ko@v9z%~ctV(fFzdPeEAyuM05Zez^QSXh7$gx(YCB8@1xRHhp#*G2 zeEc!-G}}nj`wk0RlJeVz$Qj)U=2yehk*z#_Pg>8*;+{$Ux-mV+Y;lgwx?^!nG`N77 zUVM?)2NX4g&`!Kjlra;Gk%Qz2=zk9id#A%3*O10j2+RQ^bBgPhS+|{*Ib(HNYR5&n zgN7Nc#KYbkSZ~I--9p=fUz&9VPE~=y2jO2r_NPzNts$0g*_QJ<1Sp0(AQc`fZVDBxJjaLIBP4TIIOvwGr**1ea$g4^ZLugdJWO9|jS zKq%_oAC)CrVizpf+ofq|sNY)K&uecp3we;Fkdk-~eK{Xbj%%AaW536gy@GXB+cY$h ztK@M3O>FF=pHH}$-6~x`K@c=&=M%&?Ea#!etuMGIyqF4k5sVR8SkyR!gK==4nW3&S zT$763p?(tH0)~;WKs73lASYo_BJ~ZQ8lEAstk|6MrA=@%2_&9=6$%#{wMrkFZOvv* zDF($9jgD%Jstz~JKz*2R!S?oo{CdnnI>UOet)h zxEaL(L!5K3A>lQ57!_3lk+fFM_2%VXQN2k6l>w2epSrYR;y$sdkL6I6z^5 zFn0C$*Q6DlGJ9<8n)N~0)KC_$a_Vzc+*Z%pwW1OivR5D+0CI7kGeB35I}x9SP~e|* z3X1VG1dIdDq%aH^u1A5YnvBpAIdiXP#8FxuV$lvDn_sau4~w@3Y7$q z6cSG$I?x`#$DLNK_;R*-eb zuSTWF3JE8W139AF(m3J`c{1Do04Kd6A7`h;iUx~YoiVr4E|^Cp&jpk+46L^#qLJbU zGw>ByuhQB#TPsMFoM6o|i6jI0bKPH1Gv`BG&ppiTJ;bt2D|2}mvmc41d>h~0Xtr^z z8YB~3NspYqy+M+8{v2au9QSOKurFFIpw`Hh7~k*mhS zDFKotkQLZ*ZMfL&S%B`rR2C zqOdRiRfYDb;@m@IO|mOwlsIPa$>wS3wree=u9YTrA|;dzh+|-Id>Hhl_xi;1sElGb zbF^u&`1qPpCBw^>b|sH8Pdcv_aZI)%SqmJB$<9YQf_AG$yhm~Zj%WIK&=|{;!|O#y z1G$Bc$nA}}f#X)UfoGqBH9RT_$>;w7ew5Z7FvD#e#_hOYlEw~y8U}-Wl47TV9?Cvh zCm9}O^P=rE`0yFrIO)U4(Gc4qLBzQyU|g0oN;nM4I8_&Ho=4$YV~wfHIU8ER3dh9i ztHO51*&m%2qcP1H?~`@B^9aDqTt}x7 ztl^R5Z{eUGB;ZlDvL|QSTp&_;205vg;AD1C#Uhd8iZojRcW(SVK&JlyMFA$4@WqTa z#CWYbmg#`Nv5!7aK(+H^;?5(UtTHKC7miov7p!T=ju3PAR7hh(g@p<8qWczp@tIR6 zBr4++Jg`f-Ng0%LBx0h*ushz%7U+nl$ueuu-rd|WSyn>0>M$!Cmsr>al|k#ia4I2| z--nIw7&l$E6%}w>T+E&0$G1$-^J`M3!-aptS6S?(*j+I`hP-67S1NAy0AQ7+!kEFV z$s^)hg;hROVow+V_KCk-iou@D{{ZHrKC4p_Ln3hkSZ4zW258{95-wr-cL<}$IjYHZ zY&l*ps1=)AMn*e4^w6{@Ny4w41yJ(G!9O&1OOqo+l*uC=~Qt5oxX7KzO2s6FqTM4sNG1wXAOK&*sHYM`g-u zhl!6MyPt`yb-PJyf_4{AA#=+;JZb8Un!_#BXk-1KWYM2_UNzpA>Q+`Vg6nFwugek0 zS##-0f?gKg+wrZ$sS7BQbDq7^wIdq`vzM-c&|728&2M98sn}h1mgdw*nI7@4L#b&A z7!P%L=gS~ht@S-6X3RqOexXUE3>#4PnERh31IUw5FFmPcZ=Sd1o)CnSMq4ZwiIBRh z1LRbGVzRl?EsKCGH7N=HVn_W{OmRD&K~jBRv*W*>8*W%Exd+RiI=bDfj7hFSpJoyL zYLn=8$_qRV&H?*@G`>wgObvk(e}&r>qdMr|x`s`^@ibtctpd>6mY*c5T|K3? zV0;h{$kIrxElYQ7E*N<6bNp!Qdq|@o#ihA#=3sv_Mun{765B*!O=8)y#fdQFl72Pj zn^aGCP`35#4R3RF)^j9NY0SJ!#Jm_Mon0?3oPw4U0sPFP^`SeUB(&CU!6Q}TAQQs8 zN-GUM()RC7yEETh@PuU%@sb#UoE+Ch4c+0wy^CY7&MkOBBRj}r2&~!17Jd~qTYTtX zj&&HKH9K=>e?6;h*|`JE9mn8BVhAFGM0-}Jaa04HPIjhC*@bK972G13R2KT9BYNxS zy3!sSi0(D{?p2Y1K=@O!`|FzaZWN!|3mD`hfXoXM%L6C$uD{wFYdEw^=~ZFk5S|<; z&Q8N0eIZ{wT;O=(w3E8nst$E|4qTc_N&>_IMJ>dOZ1%$(48e%UQA67>RxD4^HE8&r zRa8>W#|j5Bd<6mB=z~{}L(}EAhT3>UdF22>M)Fe~5PRF!X_~M+UW2Ca5O1XfDn$mG5 z<$|frXCJn&WcMxEKE%#H zT4bupqE4m>7C5qaPjOWL0F@05gfPrugWFi+bvOxeY6%C!J!xjQ?B#@vs}x#+E_Y~) zxELLCnqMEY7BI=hELYMW_lVg11wE9Grux^~3smA?Y4mO!Y-G0!`qw{ouKP=A#r}}7 zyixxEqze85u(lR9)1K2uxf~}PM#bd)X~cT|fePYmM0$tQTvYBfl9Ng8p1TZrby)gj zWS_*-%S|WS%~sw!%S}!tj#Un%U2vQco|TQqv_8t+M9?|6onK;x*~MXQp2f6ec5MS5 zvCAss;aKPWM%aIJ(*FS2KW}vy;!Q$JJHE_daoqw~bk1m4y@~e1&gwga(KOlnGoA@% zRzu`PDZA5jhhrs=v~$G6-BxBlj?}+XlKjpr-`Xq7xYj-(L%9I>bEP+U+ODTMcQf1j zQqgvE`yF5a>jl~myEK;e-&M0?G``Hrr~WK*W8f>8(rmRmtA|#+mfaN#7nVi?&~MI~ z$6_GEOYK;UcmP}THB%p7lw7^O6LIaHp$BqHS>g-RVUN0oZ)$I*Q^DHhheAaYC9Z=o z#ox7($)18BD0`hN*}HRv*X|VKAa;M!u4xuhiFIkEc3C14DLbQN?^IP;7c7!4dG2s2 zkc&Z%RgraR3n|DwiOm@IR__O-}{y42noFw7b&jX!faWfU>J`~AoDJ^W=Jc)4f?}<`g0s-l@X(tu#))PcWyz3%x zxIUwpq3k|Sb#>U?+#7g;mg5oeorb^!5`w_!{m0C};F!8y^XfgbzsV8DR)FkLu?_sG zmW^j`EWMrZk|?l9mNg8@d@x7^QR-JBm;y8K$i^^!kX+H)WsaTl-Ye;*p3no`gSjKN zFaRtF8{nTRywSrQ%S9B4E(rjIBO}wLZEYNJwq%hM?zhDf_KnU8fw%ICm%AHexg0B~dxgPdTE#X*m-y_(uk=)_}h zg?0KSt1Pms+p#RTJ(m{#d_F#${cD3$*EO^gyiOTO1b9_roy9q0GMv8Qd3u`GiVSHi zv#9SdY>elYJZtCLtQXeT4IHL5->RI|J(>2d_SWc0716htuL*ntt~?!jk3MwER=9mt zdubR*&A)I3U&F0-c(a*JJnuh_`0ueOmBL~8Tc*{Ux??y|SZY?$LP-xH^fU%zI~9Mv zqsf-8ogOTGrs1q|x=6Cd190^pm1Q;042u=yV&)9&RN_S+%HN^Lpp%3E0CApM)no;H zPpxBa-4YAAh+CC)EiJ62gfinCU>t5Y!SbLTVb2ViBRS$;c&(zkF@_ui2bjiHy+>Lm z-Yqu$yC#`*`5R?v2{7l(^H0Q7D`gie5;}-x?Nq2F@RcfjKhCik2bO4^O3Hf+x3{=Z zuBV!?Wntn7*o;uhamu9E1mhJ~6(c#`r20@4=}IP8Qe=^Nqh683`ia1MOyA~&sw+Or^Zpazz*6hzCh%@095!>FiG zO9A3*Wy4#x0LUQct}7kshmSh;4-Rp*ahmbYYBNYIfmyK36m>YwRM)G|jj^6v=9pW4 z%Q+tREL9DACm78|0qkv>@ipp-LF$@})RIm&<;sBdcoI1hJuB7WKuW7I!h&`r)Ew1? zY>)$ICBbwY4yYG9l5@YN)EH{;+Pz+&ED6Rd-wf0Wkw93mz#JIIQP!@kI;pCttB+a& z{7c|K^sA#U5XzD>$Q)*)1RO9R_z_;mS`Fr4jzermLsk+g>MEpXbG=zYa1|&E5-{Er zf{w#GSF>6{X(i0UC?IKMJe3AbYc8I))3jGNaic2dh7u+3coGf=p63*94N&0JsX*QC zBjmj5xIhM9KN^+CN@28j6Gn3rb{k{n$p`P}Sh?KQum<(+9x4MeY6&Foy=Y>PKWD() zdB+Yn&xR@td=oTNk#5LHVJIq8j)Y?%&=8#bsFgz`r?QNI$GU?pk1sm9TE@1b^W_oC z3bzcMj#;DdEsy}uPZ}y+WZ0)+ra<jitK91T0!4nr7r% zbwTOW{uSWCgBc?aBYh%y4jHag|1@tmhTwG78?9lJByG>SR! z9x4QC7J-49(*uwOGfr-;7SByGTiqBOu6BHuq|tWsz9qU~S9UMU*19(3)S~UBh3=N( z3oD|WJRmGvXU7zKUqc>4+TJIuCa+@PqNuy$BW~nm{v^>iFi9*V{Hge{wm`u3tJ5!S z(tF$WkwA*x@FF9o>G5GBjoZiGJK+GUzuRxjeD}Y zVU8Pz9&bv+m*BjD9OF(4o_tN3my9yut)m0O0*)3JE_Sy$@n$uY_Ojcs?bbMu{UUa# z+*c*6w+h@g;bLC69O#7kLvBJ7;$zKj4X4q$4fa&k%wd-aDo5hdAJUEoECcHvDQDI7r*I^)E|-$bQQ68{N!5#43#pe@M9ve=^?;SD3P_#plZV$jv42Vo%NHS=4 zg@EG9wmiAkX{*3?`7(Xgx68Xh+_N6Iqh+BQb4SO$vEs(Zr4@3KTf#0cfZ%rFQVw_U zprO0D;`yscgLEdQ?#|^=WU`OM?r|dPfHld_;ibM|Oc@QegcV#2-i#vwjyiQGM zEus-|KnY{e?N)0>RPRbu5xC78qfO$zv{l4rCf0AHZ<9f&T}{MrKs*chQ{+Z6={NFTG}ji2jNF%H1K~y6+TL6L z01gFn^-;hybQU&@0hadXkEsN6qAj%R0WbQ> zZ)h(f08OP_rhIZY`>U)FX^_G=uJt*a9E89Rz*5Wj?5-OTLv~M#&Rg`VnM7P{q{9AL zhj&gy&)1WBt48c{Ac+tBN;S0AMah@5U*^R`HujI*8j@uBtsIUSp`BEBA^!lF{{Twx zzPU%>K?1PxB;vBSl1G~6C6ncG#QZDS?V38u!YL3u(7Z?L7tSff-2%D!Rpz9ZlUzsL z94i_r;RElZqenZ52mG{3t%?p2Bw&x{6^zz8ecO&QWG7$*q<%)4N;Rwd%PDaj>%q`) zR{Ct3&F!*H43^|D*fJffJx|%|F(=Kmu!G2!;{5B@nr5L2i0!p^jxp1KU<#VJS?zwC zsK?pr7i$hMB4ZFfcqc!1-CX$fr<#thaW$;gvRyRsu`8AUaSZHn_|hYgdQy~C(C%tY zRuEo5HXd~jSQ0Wm>aCHtvewOYti=p>KPHf)m6HJP!^?jfaqUi@e`BM&TwaNhllfOS5x34eNsx8#Q>`COvAdNO^+OmW4d=!v*2djMyZcmQ0L!OBI$|bo z)~hXtv{y2tKD4ovIRYzu4Egxb{?_R+Xj*-}-Ild|7?HwY%v*?KITg?8+LhGWwX{-e zw}RS7!?BlysHdXr;{O2IT}FAHc{L$4kB%bIk(_enMF>5rScFFDX5kpgxsVf0?W{EU zF`Y*4Qh)sTpUBZKqiIscR#Q8#P}fiWY3!V=wm#7V+I*E|&f|vl{{X0=TTu3{+g62C zOsyJm2wFnu$~osJdhRWBk7oiZEDXz9gi?XA_MxbBG=9DTrMqRd)MvNDs|?`?IcTwGiGHK*~Z7&iP)bKrkkTW|fG z`)O@BF&!G@1D^S12OkQQxz?w(S(n@UmkdAITP`V8+&c8ELH5&8kxx8^U&z*cw07~^ z`*EhAU;GuI&H(2Pz#oC2wJ&Quq0_@P_x5qZqnn`OA9{mag6I=ZhL_q))^8KUfBUJW zhqBWs;y%;r0ebL~KU#~1KP_fid@;QK()8QaRGZn+2vfghC@1bBvHt+Z-px92zKe0N z>Zoaxe`WSE;%N0L)Ue+%gPJDK*!I#F5YKCHr1P58F&~XN{C^4m0Lk*?H9d1gy^WIB zLy(d%GZOxr(o3k4X_i5xUBmzYs>awqg?)7{wF_hk9;K&2j*D%>idTQDYO)f)_@3QQ zg2aEVX^vXy8Dnp6nF|MOl+v{V4=n49S;{)@dt$n7~r;%;#ufdhJRcRP!@2lmXN{gKw2Ki;arEc8;gCd7}y#S8v*C)%f zu7=k0+L+ARN+##y3#{`3g-u|K&&Qv5`Jz; zm+etkcB?ETE>}MqT6Ei-;T;dD#WXDK7ThyELOOCYIP(U!u(S~t`Bk$@-$X2!1Nzad zVMxmjGr7x)HBmLcv(^ym5#6!YZS7tN_~S|20%PDj=u%`>8FDk{SxGEhCD%=tgl)vR z{*)oRg-%)t$Em7?O_JX3QIwIfR!cl7)aC@aRP+wrxH}91`%KJ*c?M3m<11 zjAx5tai1D8&L|vHaW$#0|K&p}68Fj3Fnf3~2jO?wL|Z^EF<( zMbFjE-$!yL%z;#afv_1BRhBD=`zybjlwe0V+yUVJBhQ%g718QyvPId;5zo;*J_fnl zt7b;X3_N(N9Q<}S@%d&!rixp6Omcv%H`wG6;t1G}I?c(z$12__gkZ-sU92bGOyGm! zr=k20TF!V{HCX}Ug~{NM4T&7V@L|+`o7PpUC32@A(|r$Fn#OFm&PKxz8!-WeCTtuZ z!lX9zOsu;rC7Q1C@(8spJl|>D5=1a1jj$w-%=nKw=B^?z$->y7w9QK9!r^6xMpCDt z>EY>JgJ0=7<&XDx?Qawes*daUk>Gs3>f7JnwsQ~T{CaZe$VLkR>(ac_E&?18)KMCS zp3t1A&JGC2;p^|P+^EcX3VKz3a%SLXRpA7T{$8f1 zW+>lXJ&3YtfrB{+${UB%JCB86`gPaIn&vd^pk3MHIpF(4nDymYWP`mMrD|6?W#o5u zvY4hrm0?E&UJ2`(l5<@p_v~$U>f-H8dOgILVG>81VsXDN^5pNZAW}QqE1M?^Ja`T6 zI_{1)FpgncT;LP_6xlVlBe9qJCoy^%Pe6fxmB9yA$_iUZwnum`);X0g2`ZeIWm`3kO? zBSmtqGq*fc-nVHpK6#o!A~$$UrvX95VyaqDsyK<*4;qwi7|7zNMkv9@F}U%j0^D(j zA+{jaG)2MVC60KB$)V3W2`ESe1B{BP=U%T+5Zvl2O+lbFjtO1~Csbn`WCvh21oHf= zBSfvsrI~?F1AE?nR5bx0fEX3dM&4Cg^?1-8sHp=d0B=!1MM{zm#BMRlqptO73bcfx z@F_bkbBY7Pt&_vUowJ&%f=`c^z!bgNoh zTwOU!c#E85k$?d6Cu*@+p*UmPNI9yUDD^#l6)M*Zd&Ku>$X3QUL(Mdj%udlpFray{ z{RhT}mPeET#|k+ji~&^`8&TO#1xa@^M$pDY5Vttv+dik6_|U{{j+O2sQInc_8(wzp zrDOmmwn!UZe_fqzD(7dnUqd4>O6kJPT zVIVhPUCg}UN5pD;8Hc^-G3!AqZ)taMk93hv$q#-g=kcgK?BFy zI6`t)Cj|63@vAczfeSuL5}PB_Ts5qY`v z*mWYJ23uMCOJl_2+;$tO`oMHQl}tnBH%ceC2pHhWCP-26-|nrn`;@TMBe`2^d#=oq zBe{=`HaOdfdXBiMRDsc-jhvIj*~=4>bIz;*JuAcB#>di&l2~{mSZz#hv4xPCc>71m z%K?t=b{sqM^QIV}MISkwd2^~sa9OgTFCpC+<;#^cEiKKAFlv{RL2Yc0@>Fi{UMAvT ztLAqmmE4PEU?6!U@n-;M;3y#$kz2AW%W{zJc$Wp3{5gI!(hY9X%L38@>^9<*@n_-4 zQaIp}<^F8|9st)vrF$oHbpe#fBU}P_t4wM$lU#>qz1Cl}h$sr%pc@?1OK)bihE6f^ zL=CYVT>WWV8w*6@j`C%EV4|)KdM!dHDm#1TAnX;Zd8yl*DV6Ej+31(60++vq8<16i zeq_=wXvO`t>{dyC9EL^7J&?fP9Svl-yf@~vaj^q9a3 zmTit~>~s0nKDE{F0h^0O8R1We%|N@e>l|cy0Y%AYrtiXZ@O@1IDnT5d!?hkAmhO@Mi2&Ivvk~riib}BX=6jXYpv`xZpNDOBm1<2%(wa0(LoXbOfduE@&anI88~v5lCyX) z!2BwWb$1%?ra%XYLVsFYJ_NL}aPTyi%Dy~2NAj#~z>|%Z-U$bED;cg`242{cyM*jeX zV7GqIapZR7=jsZ0+47vF_(+mfmDAlQ#ZO(uY1&Tb_@%tFS^S#)6SSJrLd;1dkx| zmGVG2-vgcrrdr!Oj`8k>^C%=^Arm<(F3v==>s?K9lT{N4v~l z&g9YUA^O?`+{tk#W>OAY@W;R7P&BPP`|yH(@5;9tZ?kwV5>PrHlr;|4{?2i5tT!3) z7Y$YIv|M!BJu1ZxV}OrFBlWG?%FPgQK$-I=^)wsX`#%bjR_Nn%^XF=|yP;TF#id>G z$P)4U@jK@WjEr@v)h)d7>Cv6yw_jXT8>=Xho-u30qay?gpV|6w7+XjQ^WLqUhth~mf|m0}MFJ~e6KF-q~U-B^#htDf#FHKr!vY>I~@obOgcQtVGt z_tg`i_9p(`&2D43l_Czxz`4glDYvz9+TPf#){|O1gWlmPSdU(GgV|}U;!C4=v9LTL zLu1a2)i1Qggr&3)c8o9zsM?s^iGcy6+cT(I(%M{=h?6$S1oh}2r7aj6FJkT`5xZ%f zr%nk1pTLT1q-j6d+=>WmDV%dxyCe^RYWd!;9*S?2Y4*1>LQv<1HXZEv5z7<}-My-! zv9!B@XL9inKN?izeYQP2*lr9*YocSri8J}okEQzr@{l6ZRr9!6_)p-~@{JPPMtIxh z5!NceL)q;TxtHng&ma6t^AWU4<3o5Y6YRwp5|x4DyC9#fk&tIf64tjD8%k~ zZM8j6_;6nn`R0@RLu0Dk7}8B&QUiP}v-3VgQjHHs_Gxq}-%^%%wMb?N@jT@R2|Uye zV-)Jk*=+{!skegmQH|a?U5DR9!pqpX?sVm~OASH=GQ8JC5O>SAPp)a?zRhS6-Ll+k zgR|_CRCb*KY>mOkQBLnav)d(vH_9&n$0Ir4%X;K>k7FUXjpen}Rl<@QGRjE!gIdbY z&*@EDPWE9pwba$f@t-;TDQqIn76u96EIAzH(0BH8MmQShBOI_OIP9c+@Ub}NamuPh zTm3pEdC3wj%C0$)gI2hb`Z(5T^?O&(PRtT3pN_|TJ<>0gFdALI2;r7Nw?j@uS{8J^ znae%sa(u|F#g3pxQb7KaQR7TiITsE+aaT5upZS1CrCgCbmVBR9isQ2EZdP1p1D-s6 zD_QNec_HC8*K9MA0unuTrtnW9$qQUuG~J7FMoHa#MtZ66qUY6b9y1(M7|{I~&M`{E zm-bJkUu!mzI9Cf3_gQ5b{5n>m>f~;3N2W9R(6?)-NjDnE%ukJY#i}42cB+09<*=@( zww0wF^KU1tLbGU5xA`@x{{RjsW}axjjb=xnt4DTSf{RvDSJq#*O`#d#BrxI>jji zjJiHS28ywgG6V1t<|sL?p}K^O$qSXob&fvj^l2@nv~oyM)wTs2KYdm^$F$|F`h)cc zm7~OHtb^c1E}GfQMV&!Y<3+~GedUo)j%t#L%%OuZUjtQU+2d@ka_%MKZtn|c80lC= zbk@eiV%eTel zmx5)6NdPdbOO-8z86XYLK=2#qm1GSaZpPj?Zmg~*x4Vtc46(>nxpX6!KgNd^+&1Ya zX&K@y3IceO7~Qtm9PR1SxvbNnQOd6ruM>twAdd>mbvPi@G2V@bQDv+p>ZCW=2OK@1 z8{^N%)~l&${1Nt+%+jgqHvm^Oj#SfaCsvZ#_*t2d^BKinIq!;_kIV@=N)Hq9Y%mQ_ zPRhIh<9&}&PjywaySDjFw-|D8+$r5Yz6Z*X+(9H~yo|o0o>*(5$1V0c_WdNd6GE|Z zNdly!v%uoU3CE7ZaX}VRNyksRhXjLKh8Q@EaszTsJnJ@%9b}2{>d3>P*wJ>{l+mwd z;bw&U(MU3f)Oh*xpt5<8qj1PdusIA42=t>bH5I;ue6j>LBmV#}z1Cs;T(a4uaytOO2CSmw2aQh+~l6MN=eYQPlNtPK9hahzJk4nhv%F0)bVODFmN?1s@vmHqa!^}| zFc-Yf)cB79OKR5*t!(AGSDEEV<6nA78?T3nH8CUrI;JHmIJlhfj1FK9v@ipyH6v9$W1RD;s%E5oDU#Xp zsL88E8_ME1(7U$5RAirpZqUPQ(k1YkDU*bVN?@=)B=Y;H46QBhF6UTn;(26lK!4uU zXtlDkx{?i6;PIeg!EV9(*f<4-K;Ho4G&I`9$H|SYxLar$aOoJwADKMKrKFN-w4IN- z)TNO-7*%bc+vegY3`bTx$@8F?Oyd|(WhH;(8uZ0^8Ev@9Z z;tEk!MqS;wRY#fqIn`xIRI0_s#18W?z$eIb9SdQ{q}NmZUTaHl03I6g-k)fL;e62_u74a7J$;XKAXD@S*dMv>W> z*p_Bvl1b)G8#augn2f-s0Mplm)FJ|vnCix}JwIx+!l zj)G~>hFp?^i-*Yh(WBUO05IcX7sL$H8x2Z5K1X|dc;uJpNhr?;m>jd`T57k;b*9_c zTiU|}5R$>Zo3R)yPr{ORBp>51!i|vGrkd_!Ebh`VJCbV3fk4;_2mrtBAMdNIaX-By z{91!Bj$X)RWL5OV7@pAHqz2hzugvXbNEbD~CtjE3Qe2OgA?#VlobduyqqgsC!+N#P@> z#ixamFFe@Ce z)$P7MP0pQ!wz@)$#d*ejI8@M@ou!esE<3;u>16|d0fR{4y|q@_C;TXZd1)~U@;YOX zW!O={e7raZ3}H&IQWJ4RNgc8goua2_Torc?zJpfuT+aB{FBcSdJWd zV|rUNtv&1(NgDR%*bC*aW2!4s*9}`5Mqq$#^hW`LhW#K9DWF*!mYXbact53`EWMutV-h!08{TZM&6cbU}S zg1D)+)MZ5>U_uYpP-$`|lfi55h}n%tXB=maI3(g6wlyMon351FKTu+-(n?O{{_{?9 zRkRnk%$yAbpf4&S3)hZZ%^aY5&??h(RzH1GL2!TB8hV3t_{$aCK_Y0&{aF~P&1IR< znPi42_(u6Tq|rxsABj+pS|#GtZ!;NWP*g6%kRR5ZkhfEBdb8ZWbA}{r2^4calygrO z3GG<7LIx-X((hr3Lb`+L=qX4^8WzTUpWgB%O#GZA`2h(m4=Zi54Jx+y}g9*=T3%t5)Ckq^ifpJpQ$G z&{ku^9y+UWZ|E`CEL^kW>~4N+#6i7$5X+#Y;GhZN-5S`z;NM3&uh`n|9R zrweE9q_SGhS%eezq;&{K=UtucwY9`yE$6j}5#DDdn3@(H5@WP_jhXNq3q(-5>OtR| zgq~xBVyD*5*X=$GI~^s*2(n$a$#eZ{W&N2ms?TU7DX=c&;CW=y=F>QombsHYMyYLK zZgO0+;P1rdoT;$?0I<+@FK=xa>Pup|-9mjd5^Y*w?KT%JvagLCmUaPhY~nt-Kdo3< zX>xa7(j?DOkyoaE&8_FMlmO1`Ie&OR){c_HN0K65TbQ=b5=oj?+AfxIV~qS5)-q{U z%BOjed<2JjT%O=9e^0Qs0$WW%?s%I89ecyiJ!vcOmBs-yW!0n+PFLl83&PB~QgTNn z+sDR)4#Qw^@T~7^W7(hs}Or} zvk0&o*Up>{!$sBf3y8;Q@_64L?Gy^>wAZnb6vHGe4=w^RQ>1%A{gJj#q^V&-uNY4_f&!NGi zA+%1=0QTUY7h20N9{yY7l$sgjcI3bB$5FnP-ngg7+t#a^RA7@v3BfZ zx%Mo=z>vd@jxp<9OfwBN7UbON>IZj?oeny4<~h_pwASj{e7cU66l8IBU9^0?bK_H~ zCnw$8mA<+D%ftyBb_kaf5TtOh5M=JmbIa11*n1J|)}s;m72b<0pLd4ui{pV<%{Q~I z%<|glZ=KzT0j=y)*z1lZ`39E91ZT5PjbWVMO|aL_osO0Lllvt+akTc*2OjW>R>7{D z*{@Gkhyy_ohM@dJ%M*3RV{B1nNke2skOeJ4eNcQ*e3 zDPAYx(uXcNP2T@$0&@h@rTml0tYzU)fJ%^!-pC-r{(&-Pc(LG3GH% ztUaE$6E)1p!T3%FEV1~3uk18rl$%?dh98AiJ5X2VXKq^zRc`ccUd~Xnhg2iq;K=+c z1+Cg}qFu($#|s#ZxQXxs8LMQh(Om(7Jz!wIBWXePrq?=7p$&>lHWqem?bEcoJ@L3UcSCkJ9YSXP2#u4Df@Jhdxw!k~@e@YB(F~9(AXs z{j&aCeq(E~9jfrNmIJ9=559nV__Kw$OnI6%*?v)G)|aistM0aU^fWW+Rsj3C^lIB2 zZk)bM=K2w*Tp1=%lfp^c97B3%t7x{Gq#>s5B9k8UV zB-=FcpZ9Yx{cBH6&RKsf#_?Q+v!ojcjB%q$!r5oXczA8$O8APfZPz=4)KlGQZ>%Q( zT}?7KAm@nuX%))cG>l|dEzIOs50?*G^*laLYSzEI#*5Y#CluF0QPZ|$8f6B z+q3T*k&vs!xmmANn|DD;T%o21jcRa~CCV;(>xoLYFc-~Vd zIFx6P8}jt4U9GHvWV9`~??%UUKd7uAo?Cg6Xk4SA$Rnj<$BD}mxj8g!w6l%&81kxs zPat;ZN7%=2a}&$<)Z&28f&1HM zhn-N>^HnN5Xe0rVn)3n<_3UDx&>pWEit(U5UawS86H#8MGz8RjuT)TL*QzsCRc1I< zB=`ZE0=TIFlYla7-nFH??{6TI1}fu|P#Rjn6T1tk`vu`8PYy{v20vPqo;dB^6ona_ zVWeT6y*wylOEF?{Pcu>}X!rVEeRr!0psNaGwNFZ|PDlg;fM_(=vs&8P-CZ$TYk6iW zGI$WS2c9c*uqv!>Wm|o_yhA)*BW_f-dI%J;*k+o~r(0Ru+g#6i6~fGl<~R>|GIvvv zvt!gyr%+3H%yv-($yV(g29a2OQ_y)(63Wk##F9=)qgxx0exs?gaa-8&TiRq5O}O$p zvj7P+wnul6ySqCb%Q4A68m4nmPE97=q?+|bN~gxUFH111c=Dkr}~uRmoq0=UKDMaV}iEvNi_$lYzBUByB>C z;e9SErMP=+#(*D_yD<{{d4c6jeVEb4q}N)4$8MIE3MQFuWWZscbOE`pXaFPaS%KdH zbGfO8MghC*ppC{(^%oniD)G)s%pdI?*X=v^)FH68vw@ESM{a>sV0aJCmm)De=HV3v zUClvqPb#T3G>dn3xrm-lNa>pJfwS*aB#n?bNuuM1<)D&vwv@#f%fAW2jN>Hw(*lIY6QTEtw!yli_g;YTcxaxuSJ&7ru?Sx6^wM#4lXAHObqt60{} zwkj(w!cs6${74l~k>km)`g~6#Ct1; zxpVG?lk?hBUMN#zqI%!>>R-Rrh%WwcssV1UoFIJRD zmVvU0!^oO4*vHw0X)NMj7k>BQPBi}jX7tsN z*0G5iSC|ol$#OoIl|{~86+C%PbgXjef&151pm{5}{BcA}d#A{Y6YFz!W9XzfQSi-k zmi7o?StR1`avZBww6+I$*!)cz{>0DvG?8>yDpy;OZvo;D9q`@{0sRdd0(&@-lG@5M z1F$h2=^9&Ff9UPzO)`tw(2Lt1J)rFfZcHE5Vy!xHe2&Sc^X=d~{rTxYvx{{Vey4b8xi=GnpJ zxvSphk*;>m<}F-GM`F93xN*G+aJq;Gw1|K?@~(j1O)Pv;+Q?N0k0C?eO=ok(LGxhvQpAYVhHPvIKzle|IE)b;gV7gkQyeEb^jYn^u`~3^T|F zRZ?oD(RS@_y`j9iw|h-W(kbHD50k$Jeg>6C9oq(2;j@Y|a;8Vi0qQ9zO=u8)M=13a zeTde0fon8>CU7dfcZ&+1fCQONltHPa@dlJqPPmjF+Tka>utnCYh`?%&?#g z@i9l>nMeeA=Dlfac(*;B#m8n8_lR)Vt38)y+)Z!^@Kada*l`u?7@r)PF9Kbj!XZUJ z=}A{@j|!dWDGZO!{ST^&RCKGO)kmqSHJq^!ts?vdEuNyVIvc&O=G%CaC?9FF%b_pJDV=AxlY$Q7VSiH%j5k~`TL0Qd@&jb!4? zh@2`|ac8_oLFY_#y&@aSZrQasAaR_dsmP}$%cpbf-jnRL&Yv4eV3Ii)B(cdoPR5$a z?ANmqA(k5^ia;`~ldwO5u5a1TX8ojw$Z8g;WpfLI!5O*XZw%ubQ#&g!Z|tTsMPXv< zc`T9#1M#h;#xuC(dNhL9v{Xl$?c$BNm0orrW0Bs7x%O{QzlX3fOB4)2kt1TOCi%e} ztH;_OYb|XU-}?^*%VP@m^K1{AocN<)Z2DYilw& zRry4Gd5%mRF$C@p^{($w)_t$nB6zKRl#x+($(Uz<&Xp&yy6&f=Nj>GPme(mMRkwTt z!?qY4@6>!LVq8j3@Qh-{@y^`4>ieQ^kjig=~&s9 z#cMLh<~!B0j>Av4u(p=|+TH*}N+%=$PEImBX;!PHt=9`hs^7sN&PvQ!H^A3FAGhAt z!i6rh+iQX2CA$Oo8uh2PnvKoE!#A_>vq*SU!mbEDhn-Hdi}vx~hMJy}f2UiSxrv-EhE}X+pv~57dH~KV1$>$so!DeLCgD9W->H# zscraJ5&6^KWOa>4N7f^e<3rqH(Ye`|8-rK0XuDU^^-VfB1p4Gpb09sXxZ*7jlO9?0 zp#av>M7oOgOt6s2BDoBtaw3@fPwfM0I+I^dYN%uwAvpj!Qnl6X6k~#L4=@1UkMys6 z3B1?+sk@bAyS+287zLCazUmTdo7tSa?EFWc4#V!M$*Wl(b~}&2P_L;($Ga4tc%?NC z+j~skDQ|XCe2r!n`9@Ud$Zl%F@lPmaKMFF(SNS$rTLOGtGm5B;s5rGt%XT7OCI^^p zt2s3S?Ztwp$kPkWZacIoEHJS96^(@YaFB`Y;h9J{4UvzCtJmtY-usNA)aG0$mnXoQ z-EU`XX9w1q>RO%NkEK3|q~4^OMf&#A#P;zP4sZx9g2NaX+)}$~Owjgyf|5KoH1W3a zODtsOAA1*n6`!=W63g>Y&c@#78wOVx-{VPdwK&%Dcu^UZC1h4TKqLyu5s~pMPr`Z= zkw+6~T)c@HW;rB|W{Zv9#LjC}y){se-inKhSwcIoxW`dOTZ;xD6^oyRFtoX{v@(Mb zCPTznV{=;LGGU#-o(+5C^YMs_j-jY2bz-`Nvq8n!J8=lxd=Cn8_j+s0UQ1=k>yC64 z`)S5?p4v51J>~JOEXsVc$1HEb_K|&KG%F&=%OM``4Q$cFASG=s!=I^;Gf1G|kEFQ&_!pgWy2SS#|Bv~*bVL&*Hc#<|%9~!KU#N^Wcy}r%&aRmd8p{K!>329LJYce^0aYHwsOBk zfcIM)WZYVvn0jit9=`mX~s~tZSQ?4$?#C z{LAJ(HCLXBa7;&yRjS18RW%Ahs}?Xxiv1#DuIg}6F^nD)k&#r=X$Pppgmp{6*wRR zjgKk`73z~wKt*`e)EWW}K{Y0#gL=JQsT2gSFMjjPq_12fL6UawFd6>-YF zUZ5ZZM3t(d$jE7j@)!ne2pTf>dA4t(p?>H`(43iWz|Zlv&$(-l!(uTX0tDsrTPIT2NE zX1!jZDt+ILTf^49UZfht21de)MO^!%?ypy=gMBR%p91I7u=a)ALlj|{CJ5mNZh7Ti zuTW%JAOHy&=jTvK$=-%b6aRJ#@8c>6!*t5=U%T?Ri-_=KWiP~vUP>pHQ?lj1Msh!v%4}YI~6A+6S1#X zs~;Pq&(s-uNRw|0^uNMS`{`b|vbfntaAfIGWxanT6QzEncPmNfT zUvplsP@1$`2LsQk7nSE`~b z==WRy0B4pN-}qeqHS_zQ;y0~&y;}J`8F>Cf^{oILJge2}#j1y`Yi;hITJ?IWb{}!} zFa1Ra*)(#qe5|h#z|PsPSE{dKbUR5UqMIb2Us~n0*M19z;%tGj&3e64J72?@f>}&h zGC3P_W8+8JvEk-^`t^Fcu<6gAZ=-uY0Mge39pC9qe_G9_g=FtDni!tHNb@wd{awI0oMe<+U|ZP?ZGno?^XTu6XIopz=o_$zna4=Q!o( zO!VlY7ZDK}0uJ5LUawVNlRI^~ckoY;+wY}*-?M(s)7K}5w|%p>x@*kq7@^%9J50XB^+@u4UuUD%|#fj!=o{*|glAxUU zSF6-c%JgJZ1vmhFDzPXbvH{z|ycJ<;*6SE=Gz zFmN(>h&y|V2S<4^s8w=cBf&=yIvSTTJ;BOMsruh`U=3~81${RMfDz4 zUeZ&K0mr%PS1x1th{4>%{OeB{Tu*{1-BDk7qpL<92MjU@=jB{eO49WCHM!u{Z$*`* zyEu`+-0!rJwMVJJ=cnE)yJ}Wa7~NwTC&o8eqdPr#W*rSUlEZHo?`;(JZuJvdk@fkNav9CL=^G{8twN6BCy)N;RU`-G7S*2Pq zxYl($+xZVBHI<=@KOk~``frL|D@C{NEG@0=q93~w1r()s+8G-w3BW#dGHaP7Ig!b& zKOd_ay0YU3+(F#Fk-&`C+WHbqM7KY60Ke8}n3diXP}#0A8-RSMOt)SflUQCu$0d54 zuSPLOpt4KTUF4j$ed?^2nCU@pwVP{Td&y8YrgCX=`?T^%NVQB4CV%Z$qsP1ZPJ4il zGwNv!A*GR50A!O(I;U%+P3dcyTcB^<6r*!@adz9TC1>_MDlAu_RKkTbIDwqYSDKaG z+5M!XdMfZLok`qDfJ%@Xp(Cwan$9GM?YU6I=MDfPkDf>UsEPm>0$7q|Nav9{bM0ND z^f3#^q2At+v99OYyZ-=|gUkMAZ@Rd=mhwh$z#cLPIUhq`NA^CzX}z7(tpebrDqH4x zKb;2l+BohbuCvpx?d-$yHX+3hMk@o7#O^1pUAxFYdJ3!%h+$F(EIhsQLIPmhlJjhS z%@lb6Dx(?g<=+dD>bc;LdL(1q$BK$*!mdwRVyej*fh^UM!f|iXrR;Y7tY)_!8EvC{ zdLBU^hACdcTa8ZgD|9TOhy;P0eFr~EJ=^OWjZe0VXKbL#@h%BFRX{9BC!hnZ8H2Lg zMV-1qXRQ2P$N)CMD#AwA zQetE57yF8Nw7IbDexDV#qh=(#03@)?r6dea0R&)r=YfDTircbU&CP>aX*ZTpz>*Of zUXQh$k^_^Rj=eF8lT*?zh1u6_fQMCxnPgS*Z%#s!{KZK)^dKH{F|w# zZJH}>PTpwMh?8iEW5Fh3Gq@@K1=@Ww%jrm3rllJ|nscvskSSjGaXZ+O&c{7YanJp* z@pGwK!v)2q`l+~Rq!F{6_gMQ+$6po@4?ga>ee?#}U7x$vPIHk+Y9Dc$dOFHh0hO5Z zUKNVY4@^?A$U=L9){!o8h5PE7X1wpa1Ib1!XorfJ(uxu4$jl!#H6WNA%_n9M6gg$Nks&AotCz(Wj+!4W@Hr8ut zt&qL>tie8r9N0FSN) zfsO*>oK-Vr9FbvZ+MJGzQPo&-Cm_`OB8%d+k=M~%#3^p)M!kTa*_H#34>+#nE{xBR zz+=k>fa@A`a48t%4AUOF9uF~A(xK{c!`?#QzK!=(klozI>e0_4vYe?6(wnslXr?Tk z&?gzsl`mas+g~w^4@^{tioF<&T5oMw+pKz|MVWZ-qaSPLJ!@-?e@>j`E&x7^q*B9> ziLv8gN8ME90G|lrh%IlJothetIE}v@Zzwxwjlbro%f`n!2kS~oGJdpwMA%D5Fv>W= z=gOqoV19vrq|56Vd=N+9Rv<~DaOu2b(9rwX=hE&n_`R7qCsd~L8 z{{ZM;?OnbP>4#C4=IQ2!CSl`+!($z2{C6uSiB3V}8s}}P-Z)h=ut0YJ6ak-nRsBC) zc$;j;3+w4bOUl4or1+0Pfvl55EiZ(i5J3j72G2C*c7~bnQCTSUt%G<k$nwJ=?MhX_SbV; z5@2$<7$erJ{41f|X#3ay0K#+6(zIFAd5%D0kbdLTPKRu@J86GmtJ{m18-t%Jp{aHg zPrn9k%-w}!&v5=#Q1EI1G+QK7qwe)GhDdeT>EyC-F-TqWVMid&V!x|Jt*`DYo=;ZBxUKpYd1 zRy7MS@%NE@#yqOSBbDwsQvU$ePxYMk!$8(tM-{G{-Pz0wS2KzR_nD^oM#c$rm-7u_3;c2flEh}?FCb=P-aVMWMRVTd)J-p2V)O$f|31cMc zSe_M5YrLMH*03^;Wpvh%2qqnx^8n)&t;VF0plM`P0esFW4)e6qyZ*u;7uEXEd#lOr z+jR0XdJOPBluZ_u>B&CwFR(umvsCS5TV5+)+BxGRr{7DLy5;52DZ9E)MDzO4{kc7H zQa!m{qd6_e`FhjFwI^{Lz^TB%kdjX%l24hec~NaEONRbq8(cDNk1Q|&E$A~uZaWvK zAqL(^WsHo1&9RTtiGpWEq#4B$veK{b4lV4i908Jhq5vMGo&fhIi0S$^rENCzWRe9q zD(pV-jz`X!AR6mHBYj5N*-7RUjK1&=M(m#u6(I?g?9FWS?M5p=i>R_HfU6rKx}X4X zI{tN1M!soU+IyIjcEiMFeF<+vG#Qqbxj@aH9O1XhfTOwMSEYA!Bm~Xr(eaWSx5jcbN1!_CS&A%IKUa` z0HIx^)uhvwOUAp6QX810jbw{p@r|vu17wY?Pb2F{pZrMnI=z|GMcTwr4BeB7ROIeo zFgfD~01gFOv$xt`Q>QkJ0|oYcKB?ODmi{j45ppD&HdBFv!ei-=r8v)c`aY|13aNG@ zawqXWJ=*(az|Zo7RJ&1b?=(8roCGt>2Y#QqD`Oy>dH(=6_BHGHmsPWmv;@l=+sEAA z+DLE#RV$OnLX1X7mm|`TxTR!!n5zMGs>gsh$H9wTug;Zkr`RzscwrM{Hl#*J8o>viq~r3&ti!~U`2!6 z$k-)<#=fHmE%|-*LLtZ}qVj0goiWs=j>x)3WH?gi3O;AZd-+i+2y?j3a>Ma~3gFcC z?qe)QGDZPDRkhWv#jV7a_c1(EBb9jAV5zNkZEz`y7oH~*E!!Q8k`Qou@z7B@uGS%h zIdjnZRTv#Ykl$z0tIH-17PghmNsPr=cegWn=4WE^KIT5P09hpD3<{DshuW9uD`t>^ zh47C`S=&6ZgzJGTyajrYY9hSitq%~vAbXn1DhUtW`ji8bEieT(FXVYHRHr+d=lmmR^a9DXLK3Vnj2C7YHq`2Zr?{)z@ zjQS?2ajR+H6D709A~wf;gd?BjKbZ2Pc5J|c!x-kR>erTb@S9s$BiMp4Ar}#O_orzG&^38$M&~656VxCguphb5bj?yy;bqH)^)yyXMbCK|BaDTvd#84e z(tCjl$YHrsM|Um;PqFA}u03}F1d2zIB+!c#?o(!ZmaZJco0)UZkfp6)B)rH+UY?Z0 zd#T#Bx!OkKOIMOCr#S@E2>Fn}j>H3VYa20O2gnK&bEkOPtsc{T$QR5*vB9v0AN(+0H$IiLA3GfM6~|^2~+55_1>6A zA#wDoOAL^)<0IOnw4qWX1omyJSvPc`+(tJ?{NAFL;zTdDNqdzYS=8`-@yMn<8t-9T zF;?lHO0C+BHLdPGIyKF_!z|eQE${O+VDL8A#^C}L#~BCQR;I8@@r>3Bb61K>b~=>y zN5O|r;D0ZX^8Wxhrkw{{hVEsyVp38(JB~LWLF#EFn({j%23`m`2hi2gwwX&RR}-p^ zzuu)B)lDjYkJ9a~x)(vXdJ(~^U|?2?wnkaOf8Z4?A zLn{VT(U*{Dfut28ReO1$AMowpL^;^sXjZXIlAXCB$L==-RkAjmj=r@V(Zz9rI{1f2 zUI?pjWpg7Vlf`}I`PgFA^^Nxf*#cH9tgjP%7eY4?DE&2!7WU{9{y zLg=x)ZM8~{9~=|cub=dzx^?~njMtjAHl8DTs&+K!cDEqonm?!Bg;Q%}xvV6C^*;#t1dFE0=6B_V%> zcoj!Hl051}h&Jua5CBeF&)SU+%HF&tNF<6@*dMzcPJDsrY2YAW0l}*<+RZUh5*B7{ zpbs-v=FoL3ekQb)SeyU`9AT`&a>Qxw4DwW6t^eLl+sBI* z{Qg{2?H@8T0>`fW1)^HpBu>C(xXxJETGkU2{^L?lJaGXzO-=}SUFinY1pfdw z4u1N$n)mcnsw5 zL1V!A`YEd#G#6I=_P4LdA62;nbYKtIq5Cl>)bf1KQ^iH6*-5WzO>!=LHu86p_gOi9 zKni^na2w`v;-^q;9L)R+t@}EGw4FxUE2!=JPh@oKgBHkcRyOY3kie(_fB@(-oaFk| z({pYw?B~+f>S&{gqTLhS#_6}n0fUYOUhO@^Ghf)-U1~7fIyqvJCiZOO0E~8+BM1iMA(!{D{5j*^ zsdkzbn#E(a3B4pp<7q#2NeV`NKkeyOwDq!z^)+oa-Bv5L9}{ZP1!&cj0s!(J-#)cZ zR!E|d-8|>HKu+S>Kv3-`9!GNe@x?KXz5BtQV4D`2Z6-|1-bf@0BVn9I2Sq;KCeOL! znyss9A{`Ru&6{s~wM%*_Jde!%{jQ)n$F$sZW0K=FCzs24AxxKnt(C4 za2~m=q>UV?!}m^cU26AAu$tP|JF81oNR-920Ij$TWS$8JAB8CEU5;p+TxoNp*7EX^ zmj#zTSs!b!TE5bRuh{a*AESqh?|1MO!%e=5<_9iuRPnX5mL>08^xWqg7-^*GH!qbrXy z(yXQaD71;2CNIDKW@_8`D6m8@HJcvbgY4z>}FRoZu|vr_-I3ChT2X&dYW$iAI;q9 zny$l%JIIS*{_Y$4{&bi|IpYV&QC`pL%cEaAv}WSkWZ67<+DP>t;Pj>SRGTU)v7IHt zyF)Z@dyEz={FCQdww16!$yWO$4l`7)ue6D6J|fQQNdY@>@sujwhdy;h4dKB^?-4qJ zQGola1vf7QPeff`kq35~G+UnaavAX6;+eZ4sU1&D*(AnGhz{3QJniytmzUC&`$>5; z_<7>}r#qQcfJyep6gRT-J+`eJ#%Uo;g^`rw!g}Z1`&F8-=wKScmZ(|OE+rvCdHD*x zrfE}Lc;zJ%%A$td7GK&sNJm0w%oi&LGTss8K(7K4<|nBq>X;!+u`Fth)q)(A;8fQ- zq*=gVSJTd*H-*7F(O6W7YA6jky&eJhBZ z3=(a3MxE;5x9*=KRByE6qi`4ic~cWb9E^pD0CUArzqffC3o+PNX#{>WGGT%%2)->E zG6?C_N$W=}uGVN8&iE^%Cf^Y1J?bWnVo@0Aqn;|H`xnHVR|CuwSB@gysbeOccJ}fD zK;<0%^7$I1N3A?OF=|%p1@GD)W&Z$qepIQd>GElpCf;(dz-4v);YSu^%*$yh$m$Qx zc$Ekncq~uY$4d6q$-@wRDmEva`B5N*f9w_Ha@b90VC$K_9$o1sronHM?!M8}atW zdQg&>G|^mh6j#WQkydQ4r?PCs{vR|w4Mxjal&WG|IqoyrYPR=a1|m6sgq{z`)y7`5 zngPudv()CcO|lO1KSFr}*wwj%Dm|ghV!c`|)J~y+13pAos@%ckM4s1a@><;{p&tn; z!N*l$=k*n5N7O~kMY>3s-lOxTZDzrBTL-i)u(1R;91wF{#wlm8y3RYfVhvKb6n?7zm9msk+uhzJyg>Tjp1FOlg}WYGARaLW*xMZ zIGqO4@7|B;_xuGsgGhEaV2-qM&g+4LP#Oli8m7pNS5~Vk_mNUBY&#)ku3AVQ1d8(? zvz`NOf zGRMropW32+%V|%H>6RxRe-4B46>+Lxc^_8a_8G)A7_7G8tP!qVvfaU80Q3j`)oQ}a z9zTSF%mKq~%dq*AU3I%3rQ{#gw&NaakxsXy!GrY&0=B-F|3)e-x)Fq197%?p&{g~hq065@aeJSa?3vZFO?(AcrAy4$J zTd=#GSYEkdz-E9F2eHjt)vUrUva=L#Y_#aFfBQMECqo_#w;f!O*B+elRP>D?U-q8X z)dH+e@fiY)_(NsK{UN-m@;<^&T@S}ADzGJ51L7Izd{k$%y^U=${VyevB$0RIqO#{b z1~Y&F&#C65kVg=r@WY7F8ItAqK2>~_Rhi2qU;$C2Zl^qfLi<;*4Hrw6Vo?|&+VYJGAQx0%x{i|V6142XFE^1yZGk$k-qocJ=h;i`({k&sDQ4stE2PmoF9(S-2ewW5a-O z03dNnGxjs}9MEdLmDEj@&vsbA(s!HB85@Tx4?G-?l~;EpN9w2|f;fb3`$4G{wzutW zoh7B`cq0;|G0g?WdS@gRJ$a_Nz{o5mf$bwZqq&*ON)(LuWOG;wHA8u4GJLNY2?rcL!r5JFvR&P^F&{k9 zb_O6tbryPclOydYI(@TBAI8g_*yW$h*Ec+z)4%B+<&x$L5hAdQEh3C{AY7xd-H+34?91QkVo2@){{V)Ff;x}3P7nE-8`y5lUG|?? zTT4xWV;$tLA;PMI{cEot!E3YNU0&EQ9SLS;1LjvhjV)Li$%nSkyhT}c*)6QXUnEgK zl#xh6lj<@uK2!r;yGdYaT1!Y{c`^iXu1jO7#!0T2pQGa$CR?a-M`?xM^wlH1)^A;U;bKAg=9T{dNd1_Pvtq*5+Ui@2cR~TU3%p~W zAUNseGg6XqS~r17z#dr5L}v7-0pdvnnU`$H19TNW=8%?d zN%N}FjJ8;2tfwC;ks-L^Yyde2^37puCcG+TGd#c^1$ro?nrPvKW=UO92dO6lyx0ej zNU8LBmfu;hmO=Y8xrvWG0AbBm#vw@(=rTYvv}w9tm)X5K-WHBIWQ}rIsLMB-eQRlT zyLbNp$PypjRZ&a2&E$gWSY3%KfGupBTr)t zQ6iFeeWE^<$~EW&H*%~P3R|G_717fF0Adt<Vv&Mv7Bsd^v{v5pE?JCHUU4y zLDW>$KR*1xRchFrdrGjZaAP=j{wkI30bF#Ua<;>a)}7`~Gg7A_1%$k3>&KZ1Mt2520$vh?)$nRi}b2uG%9Pl{<9=_DGH)CYEQ7>loOFdpA z)gvM~Q|6@q0G^cE9m67ITUo8JWk`EZG}((&)AZd$5=m*G2_}7arVf4SpR(7{N`}@O zOQ<7ISp&Cw8lI(5@DHiM&qK`yiFI8LDYWfNv(V~Rz;DE`Ht31-S6)}4>5=bL>@_=k zTkCnWY4r$T4Vmp`m@*OPw2Wi{&KPHpGetwR#qB`oM0(X>?`?~I@aC4;d8Zi_U3leK zWP6HMyN|n>*U;9zXL8RrM%E%#D_CW%>&Cc=Y{-Jtfp>Uoz*P3TM8khURRVD`SO^h- zdX5cZwURb2Ok@CS)LfV?s(H*}Wl%X`pGr*a#-628`Y3>KcFb4Ic`^0$raN|#rv-^) zo=$6BYCCJIN$pDomQBd2RQ;kdImQPynPAG#P^NP$OQ~%q4<8;(2Sya%r{DZUNXo}< zFb00lwkbzYw4TO(;^j6-R5@Jd8L4!u?}VIpnK3uo_V=XSawRUSc+b4)dVS_GlT3D3 zV1a{3HkTOygTd%%<&Ey#4b+<~z_zlcK3d&!Iir?0m?I~ON3y)#j%d_3iyCic+M}s8 z$O$+d!6ULZL}k>wrnGs31;9N`b8DN8bWI~g8|~fU2{_<pl7ynjlT9^U{zXpDW*Kz{>8 zB+<17;z-r-e}bvc+4o{hx_mBuj^|LdVd&Af^fY2V&Fc{^Qd=oLOzV%t(&xq0hx485 zy8f~I;vkG75f<`$!3V~Qr_Qsplei-pK*KdW% zf#iy4^u?EIyc-D)I2%DDa}In%Dx`6eGBfZ`@e_Wj4-7>=@Yhd;7#&})iy)l)`_-Ki z{_V8gKGxRMNhQ1?nn~mDGCBeP!POb1GW zNH~S8Rt5wsr`}uNSZUBrBp(sEm%Ep9qY$ly0|W0qLlh49-D$J`0IhQjEflRG?iSq` z=N(Dh2Z(0_JT5BKH&WhOTKq+{(7nau$@?v;ApjCGbDSJ!)bl}S*X%80u#;B0wKji>C1g+jTWJAf)@Y~*~2g2_~MU^(yN778cT^Z9a)ymi|Nu#H`{VozFt*x z<+ZTK&jS@FYf{@s7LNmo8btyWUb25N_RmvR;&j#fKXrdPqRVT!r+?>WFC&5J(0wTZ z@9uRiL{8o=;Q~aiKnOZ0&rYqLYOP_dOZ%9f&#Akfm$^$_zMlH@&v4+#-Bb^;<$!$0 z8T96cs+M4&WRrng&z|&x<=Ajo`qK|!G&yz7(8Cl#Ho^O6GG}ic0mrGV)f?LeXuB@AQ9pG*GJVZCO??bY*VjokBAIWGB=5t!BqpzU<0NQz`)V-vfkLEUBYx;C2_Ls0Pw)~o^ovYJS?TzM? z{{SRM`r?sg(_!e>S5NW*2jD78dkaB;W0p_%%yCSwiKp@;m_JMoOHPQLsD-2ONB;m^ zpdYwqm3w&q0Iw|~k`RpX95g@@Sx-6Sc@gR6YUY(4nyRU@hab(B{LL_U7Az_%jDF&Q zK(d5R6hVD)sm4xc&iA@>5MH9qA@1g4GmZz>=R>Y6-p=MoW?vL%o_hKb?b5pEX*)G< zdmE&2svP8b07<01OG=X34(DA)O`aGpV?yU1L9j4a>ye%_%_q65IB`8DpHp6;H&$Y( zz^`|zIIEhDmv?H0SfcN(PuaMIgo;PZbo%0`K!B-jz@JQYqpg9C1TjyUv768nTO^tC z#cZRg!1wm6Hg+@L$Ro3bq+&qG1giYVq80#iC~+YyKqEX+Eh9m^)n+LaU__vqBs~-k zPuKk7i9w=U*fJeSyXlynu}8{+Jx`y=W{BGAD%y>`s_jDGY6y4%K+XvCOq;L<_mF00fiQ@TKpF?;kKhbh+m(wQzm8qIY-Z<@Wjc z)ypewKM+hjbCTPVNRAiKspxALU^z3>C^eu`a$?!mrLvSI+|Gm?l(`3=sLd+tSCQS^ zH^YImaXcD3+PNdTR&W%!^Yo>gG!8OHl|P}=Ew2>TT=k56$;R0sjYMD+9Gd7|kk&s~ zST&u)f5gJ0B=vRZ4I&8eD;C$2X_wJnTDByN{TO+J>}yk5#J} zsNKmuYBvrKTFhw7JWdGqq5@zDm?XDK%xT`7RO=Fi^mqj-s;m z%Lvvfl`k6G;fXmqdjU=Q27NiPc;_g zQ?ZLKIaVHi)k4^efEp0CyLjeIl2;`7PH=y%3)ZylH%woRu@~BOlQEOxAY$+-^H)*P zd|VtHXQf!07cJhSF;6l$A9WPcH2|(5oZ=}+SIUMf{JIMFYXay zxSrDPD3pK2+R6(c3)PTwobkBh)Z)FY>AjrRT|~Xjz0ADDJPfHL;C06v$KR3XK)Xqy zPi=cETWP)Ake$mtl$%c8xkMcE>70DJRb3YP#LD(EYG!+KL5eHb`{>Jgf{pMMD5w4xG=S> zaK=<@c;`DGkKIGl&!#=aMXAHyTQ?l7Xz81Y=k>Miw3xe!!4vB5p5 zww&d0=5blf2^>#UdW)T))8f?ZJ|J;*3gk9AfHSoJ07^vNn(4L>JU24iO}E3>9Ewlv zUXdQ3awWHHK`A&>`-iC?DqV(om#Oo?kZAgew<`p>G5+c6xBk@CZE?Wnku7`UGKdhn zb=s?({VBr6!%?}8CpNO%!r2Ao@C=V3p1(}e?^$ESTUAExL}t_Onb}kxy$wmJ!>C-~ zEzAoT=%Q24&x)sKqsGua>8C3iW>;1U2jN>oqT00LIhyNh095y!;Pm4a=)7-@6c17V z04bg5s4^(@`}BO9i+-8=XZux@)E>$Ulv5gq!jPvW{=SuN9?t1f$jNPRw@jxG8r_wX z-@0rKOmDmYywaYH z41XBFvd}w@Y1<14TQkC+bx4}#iEzh!YCUmCal@j{25~Ar|C$ReVEq31jQS#Ukt>5 zN;Ms?Xe`j|vX%b;+aeM4=9YTL^jrPq8&S8q}k4NYp|oKC@?;?tadjlo!!(N&YYRC9 zvnXasXa;H0uZ?y1j}ex13En zytpqGPYMuc&!OF&xbvycv}I9Lam0-*?`|R1bnTYxvbj6uJ>kTP4oV!T!3T_B@xj5N zkl#;#6l->Zd2UFG9NP$w^QxR=CNa6ausx5x^2sE#>C@a?CBX}b!hl$Q?)b93yzQCgbO{dvKr`j^3hLMixWCIyLFCYg1 zc?wh1J5AZ^`~Lvd_Y)SA>@CUy27Lqhk7JcRIiY>N?K!vaEHv4&06qID>VJTLT21Wk zng0O9ckdjo&_x>NNr3Y`6lc%+QIfxN5di)~;v4N3XSG`!bcW9OOQr54GqWnfalvu> zqxpcq^Tk`zw0#Al_=v3`mP8%fr0N*N-~hmmnd3Rhrh~%>XzTBm}^~{5y@jP4RvWBDpSeOc@BKKXVaznhtu2v!~67R_E7eA!&nuO_)iT$<}WiC@)ypM@1zJm0l{ng0N_Mv8-V zm>$qRTHTsrK6sr*;_?XMEC@8Msb8UE{$ht+>SRTZ@aNpp_0{u8#0dfU8uWT?AYMtH zYfhx|h+12qN#>&Xu)Pfh@1zmVQ zV@Zi+sAr2=0sdka^Q%!?UamKHN_`q-{`4CvrJ{Ff%f{b`S#oz|A1bRj7$X3w>ZAe> z%pMI4w_B0+rh!MPm-`C68xk;Qg}zLGwJOx7N0BqlHqzUa;w@`G1EkC+k4Z(}ozHJO z!_UZZ_*BwCrb?nmw-W*~1p6dB{{S&f-;EH~tm3}0mfgt9FNJ~Ve2pii+dzT|cyt?E zKBI$J9$vMeDX3#Je^0B_T|mQf3}A}aNQ4s>nP#QD+Azd_pLJsQQ&?jPq#}X#R0UD= z6t{P+EC@*>IN)ZNFZElCvQ)Oz^d5DH1(tSUYSG_$&5gt_srHL)(o1E;@f@t(b{}tg z3t@dFo%B~|Nn|-7pR_!|`c*SlEzPjzT%T$>r~?yjy4IBeJ*Pl`rR*Z=!PZ4#&>s@} z5mLuJ?V$`23gQ`Dd=YMM0Jsl6(ap-HKX}X=3 zxo6)%aWek^sTuoA{{U}#=9jVf@;I+)63-5&Zq~CrQWpR+oEq}JPecn6Ccc|cS059i z+*+u~!OxWplWc5z$;cnVv}tbFD;@4|c<(^z^A)Y;o(k`Z7Lk95bU$@q2P$^7)oQXb zB^zlXIK+j%`m}HdG&WFe$=wu-k1<-Vq2A#UiSi)P34+EUX!8F6z2U2t*4q@|oOR^T zn7hyyY4G|{3rS>F+S%Dr%(x6h1$b!eJ9o^l+5a1J@eYw4J&#Pb^D+<~A=nESceeGOPepc3Obf}#98}tVm?eJ^!V0+k%sE(x1B05(%=KYq zC{er2^OMw?t*>du_QqI;+9SjM;mH29N#sy~r&`(*-mqUCDk7HPED#kG$ZT|q( zJmNUWd*)f?>!Sb=l{U_Q0B8ocuo!$7x_yg)KYt0>&NLW6*M{eA0e9@T3WOR;Wy z*s+5Y${k4b!LLbT4-81Emlg$n$>N1|Th2h2M%%<^ufYgr1rW00MG9Vt_NZ}-{^LYtXkWA zCA`Y%nId&wKK}qprDfRtBT|-GlS_zNiAqM%Ge%zr1dXI|SL~y@y@TSct~VF!Jbr$> zKO^ZzEE4J%ZQ_DBe`X619hZ~z_w%J1*Hyqg%MzJ`qwFT145zud)L{hpOm`hW>ISx# zvr|E8yJ(N3L_tOJIP~>yh?}uCrx% zd#kK%el+_?tchz|d2u_S>yh?A`Dg1ww2e3QtX55ZzC?~PEbV|%BgPN!HUU&0#Ci0q zx_*}hvF|PW%b2Hb;yC1Nd|QLbbNi?;c+kPeaKEj4|*ka@9TNK07EE!o0H)hIaE~??Zbtp?;;Z@1!8!&I3r_!ZE^+$3DMxTGh2ndks2k z%YfO4U;&>K9)g~%U~e%kMcdobum1pYjJxyJzX=76-1 z*;&N4?=0P(x^fpIEomp3AM=sO_x7{~rJ~(I1l{DXDw(I-v`STmMmp^tU+tiFTBX-# zFU^LqiF>8Z5Q=zl_TwEGdNTP^cUZ#B!fDZ^QC8pQ_5T3!FWn&rca@Xm9pKD|ezw_o(&pxUx)yaw#!1BrU{?x6Un$6S^zXPE(G{EfM-JWIL zBF;@iQnj;!CYDL1R0yLbvVXOG0~|A~YOwY;GEs4dc(^}Su6Ozp)8dm{ms6CD_S;e* zM@DSq{n`8Lw5{E=SGSB9;f6rL>*q{qNl-``&+jvQji9(sh@E{dq>2LQ8hx?<0DOPb zG!o`rWOK5{Ajbn4JpBa~yw+l!BO7_|UwJ2>`>1Wz{4&}sMnm7UfyoQPDE#wV^wz)( zh?PymfJd!L1P1aHa(N+1KT3ewYBI4_)cSSsbo^>#szEgAEJeR&p?=R+&;HdN{V*ddAYC&gj2^(ab%^scdmqZ0UNuPB$tTW)J;ZW5DO{--AoL=E zt%Bcd^!gE178AP<$I850p++iw zr=<)Eh8;-I7Hj}d$Wa?TCTZ23h>sls1e5nxEl?|9XCCxgIi57aE_wCoPzGSEw;f9H z+AJe8k(JLXgdaaJLG-AZq+k|DXUFjz(JS_vOIYWd1AA=&PnHc0#cOD4P`jWR$?jzV z6)3GmZRJ|a#0fKO@mMF`v6_xY#aOlkfHNVI>Fwlpj43Rod`p}IRrHq&t6DQ)0V?zL zt!`Tk({tRyl!NQ5$iRgX?t7{s(m(J*!SaZPhKROa=%BTy;ncAIJ{{XdmjXjXooM0wPqEpEhfx0(zoqGeZ)9YYM#%&E3UUqf2d rwpMw!Tp5bWf@@?<)u`bflyJF$W(zBbxanT2!ZD75y;j&Dy;=X+?dYjQ literal 0 HcmV?d00001 diff --git a/integrations_v2/lingbot/apps/cam2v/web/scene_presets.json b/integrations_v2/lingbot/apps/cam2v/web/scene_presets.json new file mode 100644 index 000000000..986c27051 --- /dev/null +++ b/integrations_v2/lingbot/apps/cam2v/web/scene_presets.json @@ -0,0 +1,112 @@ +[ + { + "name": "Dragon", + "image": "https://raw.githubusercontent.com/Robbyant/lingbot-world-v2/main/examples/00/image.jpg", + "prompt": "A soaring journey through a fantasy jungle on the back of a flying creature. The wind whips past the rider's blue hands gripping the reins, causing the leather straps to vibrate, as the aerial voyage carries them toward an ancient gothic castle, its stonework growing clearer as it nears. Floating landmasses and cascading waterfalls fill the fantastical landscape below.", + "events": [ + { "event_id": "jump", "label": "Jump", "prompt": "The creature tucks its wings and launches into a sudden upward leap, gaining height in a single powerful beat." }, + { "event_id": "portal", "label": "Portal", "prompt": "A luminous magical portal opens in the scene, casting colored light and swirling particles into the environment." }, + { "event_id": "storm", "label": "Storm", "prompt": "A dramatic storm rolls in with dark clouds, wind, rain, and flashes of lightning reshaping the atmosphere." }, + { "event_id": "fireworks", "label": "Fireworks", "prompt": "Bright fireworks burst overhead, filling the sky with colorful sparks and reflections across the scene." }, + { "event_id": "barrelroll", "label": "Barrel Roll", "prompt": "The creature snaps into a tight barrel roll, wings tucked as it spins a full rotation before leveling back out.", "health": -3 } + ], + "directorEvents": [ + { "event_id": "rivaldragon", "label": "Rival Dragon Appears", "prompt": "A second dragon bursts from the clouds ahead, wings flaring wide, blocking the flight path.", "health": -5 }, + { "event_id": "windgust", "label": "Wind Gust Rocks Mount", "prompt": "A sudden gust of wind buffets the creature sideways, wings straining to hold a steady course.", "health": -4 }, + { "event_id": "guards", "label": "Castle Guards Fire Arrows", "prompt": "Guards atop the castle ramparts loose a volley of arrows arcing up toward the flying creature.", "health": -5 }, + { "event_id": "meteor", "label": "Meteor Shower", "prompt": "A shower of meteors streaks down through the clouds, trailing fire and smoke past the flying creature.", "health": -8 }, + { "event_id": "aurora", "label": "Aurora Lights the Sky", "prompt": "Shimmering curtains of green and violet aurora light ripple across the night sky above the floating landmasses." }, + { "event_id": "griffin", "label": "Griffin Gives Chase", "prompt": "A griffin bursts from a nearby cliffside and swoops in fast pursuit, talons outstretched toward the flying creature.", "health": -5 } + ], + "hud": { "maxHealth": 100 } + }, + { + "name": "Jet Ski Cruise", + "image": "https://raw.githubusercontent.com/3a1b2c3/flashdreams/demo/integrations/lingbot/lingbot/webrtc/web/assets/jet-ski-cruise.jpg", + "prompt": "Turquoise water near a sandy beach lined with palm trees. A man in a red life vest riding a white and red jet ski, keeping it on top of the water at all times.", + "events": [ + { "event_id": "jump", "label": "Jump", "prompt": "The jet ski leaps up off the water, the hull lifting clear of the surface, then drops back down with a splash and the rider settles upright at the handlebars again." }, + { "event_id": "onehand", "label": "One-Hand Wave", "prompt": "Lift one hand and wave it high overhead.", "health": 3 }, + { "event_id": "spin360", "label": "Spin 360", "prompt": "Whip the jet ski into a tight spinning 360, the hull skating around and sweeping a full ring of spray across the water, then settle back facing forward.", "health": 3 }, + { "event_id": "jumpoff", "label": "Jump Off", "prompt": "Stand up and leap clean off the jet ski, splashing down into the water and swimming alongside as the now-riderless jet ski coasts to a stop nearby.", "health": -5 }, + { "event_id": "jumpbackon", "label": "Jump Back On", "prompt": "Swim the last stroke to the drifting jet ski, grab the handlebars and haul back up out of the water onto the seat, settling into riding position and gunning the throttle to surge forward again.", "health": 8 } + ], + "directorEvents": [ + { "event_id": "dolphins", "label": "Dolphins Leap", "prompt": "Sleek dolphins surface right alongside the jet ski, leaping in formation beside the rider and diving back in as they keep pace.", "health": 3 }, + { "event_id": "storm", "label": "Storm Rolls In", "prompt": "Dark storm clouds roll in on the horizon behind the jet ski, wind whipping up and the sea churning grey in the background as the rider presses on ahead of it.", "health": -5 }, + { "event_id": "wave", "label": "Rogue Wave", "prompt": "A towering rogue wave rears up on the horizon ahead, growing larger as it closes the distance before it finally bears down on the jet ski.", "health": -8 }, + { "event_id": "sharklunge", "label": "Shark Lunges", "prompt": "The shark's fin surges fast across the surface straight toward the jet ski, cutting alongside it in a rush of spray.", "health": -8 }, + { "event_id": "waterspout", "label": "Waterspout Forms", "prompt": "A towering waterspout twists up from the sea on the horizon, a swirling column of water and mist.", "health": -8 }, + { "event_id": "lowfuel", "label": "Fuel Runs Low", "prompt": "The jet ski's engine begins to strain and sputter as the fuel runs low, coughing and losing power.", "health": -20 }, + { "event_id": "thrown", "label": "Thrown from the Jet Ski", "prompt": "The jet ski bucks hard over a wave and the rider is thrown clean off, crashing into the water.", "health": -15 }, + { "event_id": "fuelcache", "label": "Fuel Cache Spotted", "prompt": "A bright floating fuel canister bobs in the water ahead; the rider swings alongside and hauls it aboard, topping off the tank.", "health": 10 }, + { "event_id": "calmwater", "label": "Calm Water Break", "prompt": "The sea flattens out into glassy, easy water, the jet ski cruising smooth and steady with no chop to fight.", "health": 5 } + ], + "hud": { "maxHealth": 100, "healthLabel": "Fuel" } + }, + { + "name": "Noir Alley Combat", + "image": "https://raw.githubusercontent.com/3a1b2c3/flashdreams/demo/integrations/lingbot/lingbot/webrtc/web/assets/noir-alley-combat.jpg", + "prompt": "A narrow urban alley at night, dark brick walls and heavy rain, shiny puddles on wet asphalt, yellow police tape, blue and red ambient light. A lone uniformed police officer in dark blue tactical gear holding a flashlight.", + "events": [ + { "event_id": "jump", "label": "Jump", "prompt": "The officer springs upward off both feet, leaping high off the wet asphalt, then lands and rises back to a normal upright stance." }, + { "event_id": "pistol", "label": "Draw Pistol", "prompt": "The officer draws a sidearm pistol from its holster, raising it two-handed and aiming it straight ahead down the alley, then fires exactly one shot -- a single muzzle flash lighting up the rain and one spent casing arcing away, no second shot.", "health": -4 }, + { "event_id": "crouch", "label": "Crouch", "prompt": "The officer drops into a low, compact crouch, close to the wet asphalt.", "health": 2 }, + { "event_id": "punch", "label": "Punch Combo", "prompt": "Snap forward with a fast jab, cross, and heavy hook, water spraying off the knuckles.", "health": -3 }, + { "event_id": "roundhouse", "label": "Roundhouse Kick", "prompt": "Plant the lead foot and whip a fast roundhouse kick through the rain.", "health": -3 }, + { "event_id": "baton", "label": "Baton Strike", "prompt": "Flick open a steel baton and swing it down in a swift overhead strike.", "health": -4 }, + { "event_id": "dodge", "label": "Dodge Roll", "prompt": "Drop into a low crouch and roll fast across the wet asphalt, rising back to a ready stance.", "health": 5 } + ], + "directorEvents": [ + { "event_id": "falls", "label": "Player Falls to Ground", "prompt": "The officer's footing slips on the wet asphalt and they go down hard, sprawling onto the ground before pushing back up.", "health": -5 }, + { "event_id": "enemyappears", "label": "Enemy Appears", "prompt": "A single dark, armed figure appears far down the alley, silhouetted against the neon glow, and starts advancing toward the officer. Exactly one figure -- no second figure, no group." }, + { "event_id": "enemyattacks", "label": "Enemy Attacks", "prompt": "The figure closes the distance and attacks the officer, fists swinging in from the darkness. Exactly one attacker -- no second figure, no group.", "health": -3 }, + { "event_id": "chicken", "label": "Chicken Walks In", "prompt": "A live chicken struts calmly into the alley, clucking and pecking at the wet asphalt, weaving between the puddles." }, + { "event_id": "drone", "label": "Drone Appears", "prompt": "A small surveillance drone descends into the alley, its spotlight sweeping across the wet brick walls and rain." } + ], + "hud": { "maxHealth": 100 } + }, + { + "name": "Water Blaster", + "image": "https://raw.githubusercontent.com/3a1b2c3/flashdreams/demo/integrations/lingbot/lingbot/webrtc/web/assets/watergun.jpg", + "prompt": "First-person point of view aiming out across a colourful floating inflatable aqua park on a calm green quarry lake under bright summer sun. A bare hand grips a blue and red toy water blaster at the lower right of the frame.", + "events": [ + { "event_id": "jump", "label": "Jump", "prompt": "The player leaps up and forward off the edge of the platform, sailing over a gap of open water, then lands with a splash and stands back upright." }, + { "event_id": "crouch", "label": "Crouch", "prompt": "The player crouches down behind the raised edge of an inflatable platform for cover, only the top of the water blaster peeking over.", "health": 2 }, + { "event_id": "splash", "label": "Splash Blast", "prompt": "Unleash a wide fan of water, a broad sweeping spray douses the platform ahead.", "health": 3 }, + { "event_id": "shield", "label": "Raise Float Shield", "prompt": "Haul up a clear inflatable board as a shield, incoming water jets hammering into it.", "health": 5 }, + { "event_id": "slime", "label": "Green Slime Blast", "prompt": "Suck up dark green lake water and unload it as a thick glowing green slime stream.", "health": 3 }, + { "event_id": "dive", "label": "Dive", "prompt": "Plunge underwater, murky green light and rising bubbles closing over the frame.", "health": 4 } + ], + "directorEvents": [ + { "event_id": "cooler", "label": "Ice Cooler Floats By", "prompt": "A bright floating cooler bobs past packed with cold drinks; the player grabs it and takes a refreshing break before diving back in.", "health": 8 }, + { "event_id": "ambush", "label": "Rival Blaster Ambush", "prompt": "A rival pops up from behind a platform and opens fire with their own water blaster.", "health": -6 }, + { "event_id": "soakers", "label": "Bathers Get Super Soakers", "prompt": "Every bather in the park raises a huge super soaker and opens fire at once.", "health": -6 }, + { "event_id": "crocodile", "label": "Crocodile Lunges", "prompt": "A big crocodile surges up out of the green quarry water beside the inflatable floats, jaws gaping wide as it lunges straight at the camera in a burst of spray and thrashing water, snapping close before it twists and slides back below the surface.", "health": -10 }, + { "event_id": "balloon", "label": "Giant Balloon Drops", "prompt": "A huge water balloon plummets down and bursts on the platform ahead in an enormous explosion of water.", "health": -6 } + ], + "hud": { "maxHealth": 100 } + }, + { + "name": "Circuit Racer", + "image": "https://raw.githubusercontent.com/3a1b2c3/flashdreams/demo/integrations/lingbot/lingbot/webrtc/web/assets/circuit.jpg", + "prompt": "First-person cockpit view from inside a Formula 1 race car, gloved hands on the wheel and the glowing dash ahead, speeding down a sunlit asphalt racing circuit lined with red-and-white kerbs.", + "events": [ + { "event_id": "jump", "label": "Jump", "prompt": "The track kinks up into a ramp and the car launches off the crest into open sky before slamming back down with a hard jolt." }, + { "event_id": "sparks", "label": "Kick Up Sparks", "prompt": "The floor grounds out on the asphalt, spraying a bright shower of orange sparks past the nose.", "health": -2 }, + { "event_id": "lockup", "label": "Lock-Up Smoke", "prompt": "The brakes lock hard into the corner, boiling thick white tyre smoke off the front wheels.", "health": -2 }, + { "event_id": "drift", "label": "Drift", "prompt": "The wheel gets thrown hard over and the whole car slews sideways, kerbs and barriers swinging across the windscreen as the rear steps out in a smoking slide, then it snaps back straight down the track.", "health": -3 }, + { "event_id": "drs", "label": "DRS Boost", "prompt": "A thumb flicks the DRS on the steering wheel and the dash lights up, the car surging away down the straight as drag drops off, the track streaking faster past the windscreen.", "health": 3 } + ], + "directorEvents": [ + { "event_id": "rain", "label": "Rain Sweeps In", "prompt": "Dark storm clouds roll over and rain sweeps across the windscreen, the track glistening wet." }, + { "event_id": "glare", "label": "Sun Glare", "prompt": "The low sun blazes straight into the windscreen, washing out the track ahead in blinding light.", "health": -3 }, + { "event_id": "tunnel", "label": "Tunnel Section", "prompt": "The track dives into a dark tunnel, strings of overhead lights strobing past overhead." }, + { "event_id": "roadfire", "label": "Road Fire", "prompt": "A wall of orange flame and black smoke erupts across the track directly ahead.", "health": -8 }, + { "event_id": "flag", "label": "Checkered Flag", "prompt": "The car sweeps across the start-finish line as a marshal waves the chequered flag overhead." }, + { "event_id": "puddle", "label": "Puddle on the Track", "prompt": "A wide sheet of standing water lies across the track ahead, the car hydroplaning through it.", "health": -3 }, + { "event_id": "oilslick", "label": "Oil Slick Ahead", "prompt": "A dark oil slick spreads across the track ahead, the car slewing sideways as it hits it.", "health": -4 } + ], + "hud": { "maxHealth": 100 } + } +] diff --git a/integrations_v2/lingbot/pyproject.toml b/integrations_v2/lingbot/pyproject.toml index bee2a3d0f..0dc35d549 100644 --- a/integrations_v2/lingbot/pyproject.toml +++ b/integrations_v2/lingbot/pyproject.toml @@ -59,5 +59,14 @@ packages = [ [tool.setuptools.package-dir] lingbot = "." +[tool.setuptools.package-data] +"lingbot.apps.cam2v" = [ + "web/adapter.css", + "web/adapter.js", + "web/scene_presets.json", + "web/assets/*.jpg", + "web/assets/sources/*.json", +] + [tool.uv] managed = true diff --git a/integrations_v2/lingbot/run.sh b/integrations_v2/lingbot/run.sh new file mode 100644 index 000000000..405b9d888 --- /dev/null +++ b/integrations_v2/lingbot/run.sh @@ -0,0 +1,83 @@ +#!/bin/bash +# Launch the LingBot v2 Cam2V WebRTC demo from the venv setup.sh created. +# +# Uses the v2 CLI (`flashdreams-run-v2 `); the old +# `run_direct.py` / `python -m lingbot.runner` entry points no longer exist +# -- the v1 runner and its RUNNER_CONFIGS were removed in the v2 refactor. +# +# bash run.sh # default app +# APP=cam2v-lingbot-world-fast-taehv-window15-sink3 bash run.sh # low VRAM +# PORT=8090 bash run.sh +# LIGHT=1 bash run.sh # lighter stream +# WIDTH=640 HEIGHT=352 FPS=10 bash run.sh # explicit sizing +# +# LIGHT=1 lowers the generated frame size and rate (512x288 @ 12fps by +# default; override with WIDTH/HEIGHT/FPS). There is no encoder choice to +# make here: the v2 WebRTC server hands raw frames straight to aiortc, which +# encodes in software (VP8 unless the browser negotiates H.264). The NVENC +# hardware encoder only exists in the v1 serving stack +# (flashdreams/serving/webrtc/nvenc.py), which v2 does not use -- so the only +# way to cut encode cost today is to give the encoder fewer pixels and fewer +# frames, which is what these knobs do. +# +# Note this changes what the *model generates*, not just what gets encoded: +# smaller frames are cheaper end to end but also lower quality. Keep width +# and height multiples of 16 (the model's default is 832x464 @ 16fps). +# +# Application slugs (see pyproject.toml entry points): +# cam2v-lingbot +# cam2v-lingbot-world-fast +# cam2v-lingbot-world-fast-taehv-window15-sink3 +# cam2v-lingbot-world-v2-14b-causal-fast +# cam2v-lingbot-world-v2-14b-causal-fast-taehv-window15-sink3 +set -euo pipefail + +HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +VENV="$HERE/.venv" +APP="${APP:-cam2v-lingbot}" +HOST="${HOST:-0.0.0.0}" +PORT="${PORT:-8089}" +WIDTH="${WIDTH:-}" +HEIGHT="${HEIGHT:-}" +FPS="${FPS:-}" + +# LIGHT=1 only supplies defaults, so an explicit WIDTH/HEIGHT/FPS still wins. +if [ "${LIGHT:-0}" = "1" ]; then + WIDTH="${WIDTH:-512}" + HEIGHT="${HEIGHT:-288}" + FPS="${FPS:-12}" +fi + +if [ ! -d "$VENV" ]; then + echo "ERROR: $VENV not found -- run 'bash setup.sh' first." >&2 + exit 1 +fi +# shellcheck disable=SC1091 +source "$VENV/bin/activate" + +# The GPU is shared; show what's already resident before claiming memory. +if command -v nvidia-smi >/dev/null 2>&1; then + echo "--- GPU state ---" + nvidia-smi --query-gpu=index,name,memory.used,memory.total --format=csv + echo +fi + +# Runtime args go before the `--`; everything after it belongs to the app. +RUNTIME_ARGS=(--mode webrtc --host "$HOST" --port "$PORT") +if [ -n "$WIDTH" ]; then + RUNTIME_ARGS+=(--pixel-width "$WIDTH") +fi +if [ -n "$HEIGHT" ]; then + RUNTIME_ARGS+=(--pixel-height "$HEIGHT") +fi +if [ -n "$FPS" ]; then + RUNTIME_ARGS+=(--fps "$FPS") +fi + +echo "Starting $APP on $HOST:$PORT ..." +if [ -n "$WIDTH$HEIGHT$FPS" ]; then + echo "Stream: ${WIDTH:-default}x${HEIGHT:-default} @ ${FPS:-default}fps" +fi +echo "Open http://localhost:$PORT once the model reports ready." +echo +exec flashdreams-run-v2 "$APP" "${RUNTIME_ARGS[@]}" -- --example-data diff --git a/integrations_v2/lingbot/setup.sh b/integrations_v2/lingbot/setup.sh new file mode 100644 index 000000000..7a7555e6a --- /dev/null +++ b/integrations_v2/lingbot/setup.sh @@ -0,0 +1,118 @@ +#!/bin/bash +# Set up a plain venv + pip environment for the LingBot v2 Cam2V app. +# +# Deliberately does NOT use uv -- everything here is `python3 -m venv` plus +# pip, so it works on boxes where uv isn't installed or the workspace +# resolution gets in the way. +# +# bash setup.sh # create .venv and install everything +# TORCH_INDEX=cu130 bash setup.sh # different CUDA wheel index +# KEEP_VENV=1 bash setup.sh # reuse an existing .venv +# +# Then run with: bash run.sh +set -euo pipefail + +HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +ROOT="$(cd "$HERE/../.." && pwd)" +VENV="$HERE/.venv" +TORCH_INDEX="${TORCH_INDEX:-cu132}" + +# The repo root is a uv workspace manifest only ([tool.uv.workspace], no +# [project]/[build-system]), so it is NOT pip-installable -- installing it +# fails with "Multiple top-level packages discovered in a flat-layout". +# Every install below therefore targets a specific package directory. +if [ ! -f "$ROOT/flashdreams/pyproject.toml" ]; then + echo "ERROR: expected repo root at $ROOT, but $ROOT/flashdreams/pyproject.toml is missing." >&2 + exit 1 +fi + +echo "==========================================" +echo "LingBot v2 (Cam2V) setup -- venv + pip" +echo " repo root: $ROOT" +echo " venv: $VENV" +echo " torch: https://download.pytorch.org/whl/$TORCH_INDEX" +echo "==========================================" +echo + +# --- 1. venv -------------------------------------------------------------- +if [ -d "$VENV" ] && [ "${KEEP_VENV:-0}" != "1" ]; then + echo "[1/7] Removing existing .venv (set KEEP_VENV=1 to reuse)..." + rm -rf "$VENV" +fi +if [ ! -d "$VENV" ]; then + echo "[1/7] Creating venv..." + # Debian/Ubuntu ship only python3, no bare `python`. + if command -v python3 >/dev/null 2>&1; then PYTHON_BIN=python3; else PYTHON_BIN=python; fi + "$PYTHON_BIN" -m venv "$VENV" +else + echo "[1/7] Reusing existing venv." +fi +# shellcheck disable=SC1091 +source "$VENV/bin/activate" + +# --- 2. pip --------------------------------------------------------------- +echo "[2/7] Upgrading pip/setuptools/wheel..." +pip install --upgrade pip setuptools wheel + +# --- 3. torch ------------------------------------------------------------- +# Installed from the CUDA index explicitly. A plain `pip install torch` pulls +# the CPU-only wheel, which fails at generation time with "Torch not compiled +# with CUDA enabled" rather than at install time. --force-reinstall because a +# stale CPU-only torch reads as "already satisfied" (pip's version matching +# ignores the +cu local build tag) and never gets replaced otherwise. +echo "[3/7] Installing torch + torchvision ($TORCH_INDEX)..." +pip install torch torchvision --index-url "https://download.pytorch.org/whl/$TORCH_INDEX" --force-reinstall + +# --- 4. torchaudio (CPU-only, on purpose) --------------------------------- +# LingBot never uses audio; torchaudio is only imported transitively +# (transformers.audio_utils does an unconditional `import torchaudio`). A +# CUDA-linked torchaudio hard-crashes at import when its baked-in CUDA +# version doesn't match torch's (_check_cuda_version() in +# torchaudio/_extension/utils.py), surfacing as a misleading +# "Could not import module 'X'". A CPU-only build ships no CUDA extension, +# so that check never runs -- zero functional loss, the model still runs on +# the CUDA torch installed above. +echo "[4/7] Installing CPU-only torchaudio..." +pip install torchaudio --index-url https://download.pytorch.org/whl/cpu --force-reinstall --no-deps --no-cache-dir + +# --- 5. pinned / hand-listed deps ---------------------------------------- +# tyro 1.0.16 regresses the SuppressFixed subcommand-union path the CLI +# parser depends on ("Field runner is marked as Fixed or Suppress but is +# missing a default value"); 1.0.15 builds the same parser cleanly. +echo "[5/7] Installing pinned dependencies..." +pip install "tyro==1.0.15" "transformers>=5.0,<6" sentencepiece scipy opencv-python pillow numpy + +# --- 6. flashdreams + cam2v + lingbot (editable) -------------------------- +# Extras pull in the serving stack (aiohttp/aiortc) and runner deps rather +# than hand-listing them -- that list has drifted out of sync before and +# caused ModuleNotFoundError whack-a-mole at runtime. +# +# Uninstall stale non-editable copies first: a prior plain +# `pip install flashdreams` leaves a static site-packages copy that silently +# shadows the editable install, and source edits stop taking effect. +echo "[6/7] Installing flashdreams + cam2v + lingbot (editable)..." +pip uninstall -y flashdreams flashdreams-cam2v flashdreams-lingbot >/dev/null 2>&1 || true +pip install -e "$ROOT/flashdreams[local-window,runners,serving]" +pip install -e "$ROOT/apps/cam2v" +pip install -e "$HERE" + +# flash-attn is an optional accelerator: the model runs without it, and its +# source build fails on boxes without a matching toolchain, so a failure here +# is reported but not fatal. +echo " Trying optional flash-attn (non-fatal if it fails)..." +pip install flash-attn==2.6.3 --no-build-isolation || pip install flash-attn==2.6.3 --only-binary :all: || echo " flash-attn not installed -- continuing without it." + +# --- 7. verify ------------------------------------------------------------ +echo "[7/7] Verifying..." +python -c "import torch, torchaudio; print(f'torch {torch.__version__} cuda={torch.cuda.is_available()} / torchaudio {torchaudio.__version__}')" +python -c "import lingbot.config as c; print('lingbot pipelines:', ', '.join(sorted(c.PIPELINE_CONFIGS)))" +command -v flashdreams-run-v2 >/dev/null && echo "flashdreams-run-v2: $(command -v flashdreams-run-v2)" + +echo +echo "==========================================" +echo "Setup complete." +echo "==========================================" +echo "Run the WebRTC demo with:" +echo " bash $HERE/run.sh" +echo +echo "Export HF_TOKEN first if the selected checkpoint repo needs auth." From 65c7a1e4ac38be35dc3663d024396f58367abce2 Mon Sep 17 00:00:00 2001 From: "3a1b2c3@protonmail.com" Date: Fri, 4 Sep 2026 20:06:59 +1000 Subject: [PATCH 2/2] Serve an application's own browser UI from the v2 runtime Adds IWebUiProvider to api_v2. An application implementing it returns a web root, a scene, a first frame, and the result of one page submission, and the v2 WebRTC server gains five routes for that run: GET /request_session index.html from the web root GET / any other file in it, resolved inside GET /api/session/initial_scene the scene, verbatim as JSON GET /api/session/first_frame the first frame, or 404 POST /api/session/input one submission, answered with the scene Serving stays generic: it copies the scene into a JSON response and hands the decoded request body back without inspecting either. JSON, form and multipart bodies arrive as one flat mapping, uploads as bytes, and a ValueError becomes a 400. Applications without the protocol are untouched -- every route 404s, and the wiring is a single isinstance check. Lingbot is the first implementation, restoring its scene presets, live text events and HUD on v2. Text events swap the rollout's text context through the app-supplied generate_step hook, which runs on the model thread between chunks, so no shared code changes and there is no mid-step race. Picking a preset asks the runtime for a new session, because a rollout cannot swap the frame it was initialized from, and a scene naming an image that cannot seed one is reported rather than skipped. The runner also says why a run ended. A run that stops without a word is indistinguishable from a crash to whoever is watching the server, and a client can end one by sending a close event. 63 CPU tests (20 serving, 43 scene rules); verified end to end on a GB300. Co-Authored-By: Claude Opus 5 --- docs/source/api/serving.rst | 31 + docs/source/models/lingbot_world.rst | 29 + docs/source/quickstart/index.rst | 7 +- flashdreams/flashdreams/api_v2/loop.py | 7 + flashdreams/flashdreams/api_v2/web_ui.py | 72 + flashdreams/flashdreams/runtime_v2/README.md | 34 + .../runtime_v2/application_runner.py | 28 + flashdreams/flashdreams/runtime_v2/cli.py | 1 + .../runtime_v2/client_window_factory.py | 19 + .../runtime_v2/serving/webrtc_server.py | 163 ++ .../runtime_v2/webrtc_client_window.py | 12 + flashdreams/test_v2/test_webrtc_web_ui.py | 286 ++++ integrations_v2/lingbot/README.md | 87 + integrations_v2/lingbot/SCENE_PRESETS.md | 253 +++ integrations_v2/lingbot/apps/cam2v/adapter.py | 354 +++- integrations_v2/lingbot/apps/cam2v/scene.py | 453 ++++++ .../lingbot/apps/cam2v/web/adapter.css | 15 +- .../lingbot/apps/cam2v/web/adapter.js | 101 +- .../lingbot/apps/cam2v/web/assets/dragon.jpg | Bin 0 -> 154078 bytes .../apps/cam2v/web/assets/horizontal-dark.svg | 192 +++ .../cam2v/web/assets/horizontal-light.svg | 182 +++ .../lingbot/apps/cam2v/web/index.html | 92 ++ .../apps/cam2v/web/request_session.css | 605 +++++++ .../lingbot/apps/cam2v/web/request_session.js | 1430 +++++++++++++++++ .../lingbot/apps/cam2v/web/scene_presets.json | 14 +- integrations_v2/lingbot/run.sh | 98 +- integrations_v2/lingbot/setup.sh | 3 + .../lingbot/tests/test_page_protocol.py | 97 ++ integrations_v2/lingbot/tests/test_scene.py | 326 ++++ 29 files changed, 4954 insertions(+), 37 deletions(-) create mode 100644 flashdreams/flashdreams/api_v2/web_ui.py create mode 100644 flashdreams/test_v2/test_webrtc_web_ui.py create mode 100644 integrations_v2/lingbot/SCENE_PRESETS.md create mode 100644 integrations_v2/lingbot/apps/cam2v/scene.py create mode 100644 integrations_v2/lingbot/apps/cam2v/web/assets/dragon.jpg create mode 100644 integrations_v2/lingbot/apps/cam2v/web/assets/horizontal-dark.svg create mode 100644 integrations_v2/lingbot/apps/cam2v/web/assets/horizontal-light.svg create mode 100644 integrations_v2/lingbot/apps/cam2v/web/index.html create mode 100644 integrations_v2/lingbot/apps/cam2v/web/request_session.css create mode 100644 integrations_v2/lingbot/apps/cam2v/web/request_session.js create mode 100644 integrations_v2/lingbot/tests/test_page_protocol.py create mode 100644 integrations_v2/lingbot/tests/test_scene.py diff --git a/docs/source/api/serving.rst b/docs/source/api/serving.rst index 9d988cc02..78e4dc31f 100644 --- a/docs/source/api/serving.rst +++ b/docs/source/api/serving.rst @@ -41,6 +41,37 @@ The reusable applications provide concrete examples of the shared serving stack: - OmniDreams model wiring under ``integrations_v2/omnidreams/`` and serving under ``apps/interactive_drive/``. +Application-served browser UI +----------------------------- + +The v2 WebRTC runtime serves one minimal viewer at ``/`` for every application. +An application that implements ``IWebUiProvider`` +(``flashdreams.api_v2.web_ui``) also has its own page and session endpoints +served: + +.. list-table:: + :header-rows: 1 + :widths: 34 66 + + * - Route + - Serves + * - ``GET /request_session`` + - ``index.html`` from the application's web root. + * - ``GET /`` + - Any other file in that web root, resolved inside it only. + * - ``GET /api/session/initial_scene`` + - The application's scene, verbatim as JSON. + * - ``GET /api/session/first_frame`` + - The session's first frame, or ``404`` before one exists. + * - ``POST /api/session/input`` + - One page submission, answered with the resulting scene. + +These routes answer ``404`` for an application that does not implement the +protocol, so adding it changes nothing for the others. The serving layer never +inspects a scene: prompt, event, and upload semantics belong to the +application. ``integrations_v2/lingbot/`` is the reference implementation; see +:doc:`/models/lingbot_world`. + Launch patterns --------------- diff --git a/docs/source/models/lingbot_world.rst b/docs/source/models/lingbot_world.rst index ac4c9d589..9673116e4 100644 --- a/docs/source/models/lingbot_world.rst +++ b/docs/source/models/lingbot_world.rst @@ -76,6 +76,35 @@ Application arguments follow ``--``. Run ``flashdreams-run-v2 cam2v-lingbot -- --help`` for custom first-frame, intrinsics, prompt, and motion-normalizer inputs. +Browser UI +---------- + +The run above serves two clients: + +- ``http://:8089/`` — the runtime's minimal viewer, offered by every v2 + application. +- ``http://:8089/request_session`` — the Lingbot scene UI, with a preset + picker, first-frame upload, prompt box, and buttons for the scene's text + events. + +A scene is a prompt, a first frame, and a catalog of text events. Triggering an +event replaces the rollout's cross-attention text context in place, so the +scene changes without restarting the session; clearing it restores the base +prompt. Changing the prompt — including by picking another preset — swaps that +context too, so the scene changes while the rollout keeps running. The first +frame is the exception: a rollout cannot replace the frame it was initialized +from, so pick a preset before connecting to start from its image. + +Append ``?manual`` to skip auto-connect — only one session runs per process, so +a stray browser tab can otherwise claim it — or ``?preset=`` to open a +specific scene, such as ``?preset=water-blaster``. + +The page and its presets ship in ``integrations_v2/lingbot/apps/cam2v/web/``. +It is served because ``LingbotCam2VApplication`` implements +``flashdreams.api_v2.web_ui.IWebUiProvider``, which also adds the +``/api/session/initial_scene``, ``/api/session/first_frame``, and +``/api/session/input`` endpoints the page calls. + Sample data is downloaded from the `LingBot-World v2 repository `_. Valid ``--example-idx`` values are ``0, 1, 2, 5``. Note the single GPU command might run diff --git a/docs/source/quickstart/index.rst b/docs/source/quickstart/index.rst index e31d575d4..462d6f505 100644 --- a/docs/source/quickstart/index.rst +++ b/docs/source/quickstart/index.rst @@ -62,9 +62,10 @@ and streams the generated camera view to a browser over WebRTC: interactive-drive-omnidreams --mode webrtc \ --host 0.0.0.0 --port 8089 -Then open ``http://:8089/request_session`` in a browser on the same network -(use ``localhost`` on the same machine). The first launch spends several -minutes loading checkpoints and compiling kernels; later launches reuse +Then open ``http://:8089/`` in a browser on the same network (use +``localhost`` on the same machine). An application serving its own page, such +as Lingbot, also offers it at ``/request_session``. The first launch spends +several minutes loading checkpoints and compiling kernels; later launches reuse the cached assets. Inspect the application arguments without loading checkpoints: diff --git a/flashdreams/flashdreams/api_v2/loop.py b/flashdreams/flashdreams/api_v2/loop.py index 12d23e528..cf941c915 100644 --- a/flashdreams/flashdreams/api_v2/loop.py +++ b/flashdreams/flashdreams/api_v2/loop.py @@ -5,6 +5,7 @@ from __future__ import annotations +import logging import queue import threading import time @@ -14,6 +15,7 @@ from enum import Enum from typing import TYPE_CHECKING, Any, Generic, TypeVar, final +from loguru import logger from torch import Tensor from flashdreams.runtime_v2.event_buffer import EventBuffer @@ -24,6 +26,8 @@ ) from flashdreams.runtime_v2.user_input_events import UserInputEvents +_LOGGER = logging.getLogger(__name__) + if TYPE_CHECKING: from flashdreams.runtime_v2.presentation_manager import PresentationManager from flashdreams.runtime_v2.session_desc import SessionDesc @@ -471,6 +475,9 @@ def _parse_lifecycle_events( ) -> _LoopRunResult | None: """Return the terminal lifecycle request, prioritizing close.""" if any(isinstance(event, CloseUserInputEvent) for event in events): + # A client can end the whole run this way, which otherwise looks from + # the outside like the server exiting on its own. + logger.info("A client sent a close event; stopping the session.") return _LoopRunResult(stop_requested=True) return None diff --git a/flashdreams/flashdreams/api_v2/web_ui.py b/flashdreams/flashdreams/api_v2/web_ui.py new file mode 100644 index 000000000..666bb7aec --- /dev/null +++ b/flashdreams/flashdreams/api_v2/web_ui.py @@ -0,0 +1,72 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +"""Optional application hook for serving an application-owned browser UI. + +The v2 WebRTC server ships one minimal viewer for every application. An +application that wants its own richer page -- a scene picker, an event panel, +a heads-up display -- implements :class:`IWebUiProvider` and gets its files +served alongside that viewer, plus three endpoints the page can call. + +The serving layer stays generic: it copies :meth:`IWebUiProvider.initial_scene` +into a JSON response and hands :meth:`IWebUiProvider.apply_session_input` the +decoded request body without inspecting either. What a "scene" is, and which +inputs a page may change, belong entirely to the application. + +Applications that do not implement this protocol are unaffected: the server +registers none of these routes and serves its built-in viewer as before. +""" + +from collections.abc import Mapping +from pathlib import Path +from typing import Any, Protocol, runtime_checkable + + +@runtime_checkable +class IWebUiProvider(Protocol): + """An application that serves its own browser UI.""" + + def web_root(self) -> Path: + """Return the directory holding the application's web assets. + + Its ``index.html`` is served at ``/request_session``; the remaining + files are served by name. Paths are resolved inside this directory + only, so a request cannot escape it. + """ + ... + + def initial_scene(self) -> Mapping[str, Any]: + """Return what the page needs to render before any frame arrives. + + Returned verbatim as JSON from ``GET /api/session/initial_scene`` and + again from ``POST /api/session/input``, so a page can render the + result of its own change without a second request. + """ + ... + + def first_frame(self) -> tuple[bytes, str] | None: + """Return the session's first frame as ``(data, content_type)``. + + ``None`` when the session has no first frame to show yet, which the + server reports as ``404`` rather than an error. + """ + ... + + def apply_session_input(self, payload: Mapping[str, Any]) -> Mapping[str, Any]: + """Apply one page-submitted change and return the resulting scene. + + Args: + payload: Decoded request body. Multipart uploads arrive with file + parts as ``bytes`` and every other part as ``str``. + + Returns: + The scene as :meth:`initial_scene` would report it afterwards. + + Raises: + ValueError: The payload is not a change this application accepts. + The server reports it as ``400`` with the message. + """ + ... + + +__all__ = ["IWebUiProvider"] diff --git a/flashdreams/flashdreams/runtime_v2/README.md b/flashdreams/flashdreams/runtime_v2/README.md index 4c239a3eb..7bbcd76e9 100644 --- a/flashdreams/flashdreams/runtime_v2/README.md +++ b/flashdreams/flashdreams/runtime_v2/README.md @@ -260,6 +260,40 @@ replacement must keep the negotiated layout, frame rates, width, and height. What a sink expects of the pixel values it is handed is part of the result contract, in [`api_v2`](../api_v2/README.md#what-a-step-returns). +## Serving an application's own browser UI + +The WebRTC mode ships one minimal viewer at `/`, which every application gets. +An application wanting a richer page — a scene picker, an event panel, a +heads-up display — implements `IWebUiProvider` from `flashdreams.api_v2.web_ui` +and returns four things: the directory holding its web assets, the scene the +page renders before any frame arrives, the session's first frame, and what to +do with one page submission. + +Doing so adds five routes to that run: + +| Route | Serves | +| --- | --- | +| `GET /request_session` | `index.html` from the application's web root | +| `GET /` | any other file in that web root, resolved inside it only | +| `GET /api/session/initial_scene` | `initial_scene()`, verbatim as JSON | +| `GET /api/session/first_frame` | `first_frame()`, or 404 before one exists | +| `POST /api/session/input` | `apply_session_input()`, then the resulting scene | + +The serving layer stays generic: it copies the scene into a JSON response and +hands the decoded request body back without inspecting either, so what a scene +is belongs to the application. JSON, form, and multipart bodies all arrive as +one flat mapping, with uploaded files as `bytes` under their field name. An +application raising `ValueError` becomes a 400 carrying its message. + +The wiring runs through `ClientWindowMode.attach_application`, called once +after the window is created. Only `_WebRTCMode` overrides it, and only for an +application implementing the protocol — every other application keeps exactly +the routes it had before, since the handlers answer 404 without a provider. + +`ClientWindowMode.create` builds the window before the application attaches, +and aiohttp freezes its router at startup, so these routes are registered up +front and `WebRTCServer.serve_web_ui()` fills in the application behind them. + ## Adding a mode A mode is one way to watch a run. Subclass `ClientWindowMode` in diff --git a/flashdreams/flashdreams/runtime_v2/application_runner.py b/flashdreams/flashdreams/runtime_v2/application_runner.py index 4e518d62d..a71b4b94d 100644 --- a/flashdreams/flashdreams/runtime_v2/application_runner.py +++ b/flashdreams/flashdreams/runtime_v2/application_runner.py @@ -9,6 +9,8 @@ import time from collections.abc import Sequence +from loguru import logger + from flashdreams.api_v2.application import IApplication from flashdreams.api_v2.client_window import IClientWindow from flashdreams.api_v2.output_sink import OutputSink @@ -82,10 +84,17 @@ def run( try: self._application.init(commandline_args) next_session_desc: SessionDesc | None = session_desc + session_count = 0 while next_session_desc is not None: if deadline is not None and time.monotonic() >= deadline: + logger.info( + "Application run ending: the {}s timeout expired.", + timeout_seconds, + ) break session = self._application.create_session(next_session_desc) + session_count += 1 + logger.info("Session {} starting.", session_count) session_run_started = True remaining_seconds = ( None if deadline is None else max(0.0, deadline - time.monotonic()) @@ -100,8 +109,27 @@ def run( except BaseException: # ``run_session`` closes the window on every failure. window_needs_close = False + logger.info( + "Session {} failed; the run ends with it.", session_count + ) raise window_needs_close = next_session_desc is not None + # A run that stops without saying so is indistinguishable from + # a crash to whoever is watching the server, so every way out + # of this loop says which one it was. + if next_session_desc is None: + logger.info( + "Session {} ended and asked for no replacement, so the " + "application run is complete. A session ends when the " + "client closes the window, the model finishes its " + "requested steps, or the UI stops.", + session_count, + ) + else: + logger.info( + "Session {} ended and requested a replacement.", + session_count, + ) finally: if window_needs_close: _close_client_window(self._client_window) diff --git a/flashdreams/flashdreams/runtime_v2/cli.py b/flashdreams/flashdreams/runtime_v2/cli.py index e1e98366a..509a8d904 100644 --- a/flashdreams/flashdreams/runtime_v2/cli.py +++ b/flashdreams/flashdreams/runtime_v2/cli.py @@ -79,6 +79,7 @@ def entrypoint(argv: Sequence[str] | None = None) -> None: return session_desc = _session_desc(application, parsed) window = mode.create(parsed) + mode.attach_application(window, application) _report(mode.starting(window)) # The session's UI and client input decide when the run ends. metrics_output_sink = ( diff --git a/flashdreams/flashdreams/runtime_v2/client_window_factory.py b/flashdreams/flashdreams/runtime_v2/client_window_factory.py index b5d018b2b..2ab4f4817 100644 --- a/flashdreams/flashdreams/runtime_v2/client_window_factory.py +++ b/flashdreams/flashdreams/runtime_v2/client_window_factory.py @@ -14,7 +14,9 @@ from pathlib import Path from typing import TYPE_CHECKING, cast +from flashdreams.api_v2.application import IApplication from flashdreams.api_v2.client_window import IClientWindow +from flashdreams.api_v2.web_ui import IWebUiProvider from flashdreams.runtime_v2.mp4_client_window import Mp4ClientWindow if TYPE_CHECKING: @@ -49,6 +51,16 @@ def create(self, parsed_args: argparse.Namespace) -> IClientWindow: ValueError: Whatever :meth:`check_arguments` reports. """ + def attach_application( + self, client_window: IClientWindow, application: IApplication + ) -> None: + """Give the window whatever the application offers this mode. + + Called once, after :meth:`create` and before the run. Most modes want + nothing: a file has no place to put an application's browser UI. + """ + del client_window, application + def starting(self, client_window: IClientWindow) -> str | None: """Return what to tell the user before the run, such as where to watch.""" del client_window @@ -100,6 +112,13 @@ def create(self, parsed_args: argparse.Namespace) -> IClientWindow: return WebRTCClientWindow(host=parsed_args.host, port=parsed_args.port) + def attach_application( + self, client_window: IClientWindow, application: IApplication + ) -> None: + """Serve the application's own browser UI when it has one.""" + if isinstance(application, IWebUiProvider): + cast("WebRTCClientWindow", client_window).serve_web_ui(application) + def starting(self, client_window: IClientWindow) -> str | None: """Return where to connect, which nobody can guess when the port is free.""" server = cast("WebRTCClientWindow", client_window).server diff --git a/flashdreams/flashdreams/runtime_v2/serving/webrtc_server.py b/flashdreams/flashdreams/runtime_v2/serving/webrtc_server.py index 59535f190..e7dba1a18 100644 --- a/flashdreams/flashdreams/runtime_v2/serving/webrtc_server.py +++ b/flashdreams/flashdreams/runtime_v2/serving/webrtc_server.py @@ -16,16 +16,19 @@ from dataclasses import dataclass from fractions import Fraction from importlib.resources import files +from pathlib import Path from typing import Any, Literal, cast import numpy as np import torch from aiohttp import web +from aiohttp.multipart import BodyPartReader from aiortc import MediaStreamTrack, RTCPeerConnection, RTCSessionDescription from aiortc.mediastreams import MediaStreamError from av import VideoFrame from loguru import logger +from flashdreams.api_v2.web_ui import IWebUiProvider from flashdreams.runtime_v2.cuda_utils import resolve_cuda_device from flashdreams.runtime_v2.session_desc import SessionDesc from flashdreams.runtime_v2.step_result import StepResult @@ -48,6 +51,9 @@ _BROWSER_PAGE = _WEB_RESOURCES.joinpath("index.html").read_text(encoding="utf-8") _BROWSER_SCRIPT = _WEB_RESOURCES.joinpath("app.js").read_text(encoding="utf-8") +_MAX_SESSION_INPUT_BYTES = 16 * 1024 * 1024 +"""Ceiling on one session-input request, sized for a first-frame upload.""" + _INTERACTIVE_FRAME_QUEUE_SIZE = 2 """Send-ready frames retained while the media sender is temporarily busy.""" @@ -295,6 +301,72 @@ async def _next_queued_frame(self) -> _QueuedRGBFrame: await self._frame_available.wait() +async def _read_session_input_payload(request: web.Request) -> dict[str, Any]: + """Decode one session-input request into a flat payload. + + JSON bodies are returned as-is. Form and multipart bodies become a flat + mapping too, so an application handles one shape either way: file parts + arrive as ``bytes`` under their field name, with the uploaded filename + and content type under ``_filename`` and ``_content_type``. + + Raises: + web.HTTPBadRequest: The body is malformed or not an object. + web.HTTPRequestEntityTooLarge: The body exceeds the size ceiling. + """ + content_type = request.content_type or "" + if content_type == "application/json": + try: + json_body = await request.json() + except json.JSONDecodeError as error: + raise web.HTTPBadRequest(reason="Body must be valid JSON.") from error + if not isinstance(json_body, dict): + raise web.HTTPBadRequest(reason="Body must be a JSON object.") + return json_body + + payload: dict[str, Any] = {} + total_bytes = 0 + if content_type.startswith("multipart/"): + try: + reader = await request.multipart() + except (AssertionError, ValueError) as error: + raise web.HTTPBadRequest(reason="Body must be valid multipart.") from error + while True: + part = await reader.next() + if part is None: + break + if not isinstance(part, BodyPartReader) or part.name is None: + continue + if part.filename: + data = bytearray() + while chunk := await part.read_chunk(): + data.extend(chunk) + total_bytes += len(chunk) + if total_bytes > _MAX_SESSION_INPUT_BYTES: + raise web.HTTPRequestEntityTooLarge( + max_size=_MAX_SESSION_INPUT_BYTES, + actual_size=total_bytes, + ) + payload[part.name] = bytes(data) + payload[f"{part.name}_filename"] = part.filename + payload[f"{part.name}_content_type"] = part.headers.get( + "Content-Type", "application/octet-stream" + ) + continue + text = await part.text() + total_bytes += len(text) + if total_bytes > _MAX_SESSION_INPUT_BYTES: + raise web.HTTPRequestEntityTooLarge( + max_size=_MAX_SESSION_INPUT_BYTES, + actual_size=total_bytes, + ) + payload[part.name] = text + return payload + + for key, value in (await request.post()).items(): + payload[key] = value if isinstance(value, str) else str(value) + return payload + + class WebRTCServer: """Own the HTTP, signaling, input buffering, and media transport.""" @@ -304,12 +376,16 @@ def __init__( host: str = "127.0.0.1", port: int = 0, startup_timeout_seconds: float = 10.0, + web_ui: IWebUiProvider | None = None, ) -> None: """ Args: host: Interface on which the HTTP server listens. port: Listening port. Zero asks the operating system to choose one. startup_timeout_seconds: Maximum time to wait for server startup. + web_ui: Application serving its own browser UI. ``None`` serves + only the built-in viewer, which is what every application + that does not implement the protocol gets. Raises: RuntimeError: The server cannot start. @@ -325,6 +401,7 @@ def __init__( self._host = host self._port = port self._startup_timeout_seconds = startup_timeout_seconds + self._web_ui = web_ui self._input_callback: Callable[[UserInputEvent], None] | None = None self._started = threading.Event() self._startup_error: BaseException | None = None @@ -668,6 +745,17 @@ async def _start_server(self) -> None: app.router.add_get("/app.js", self._serve_browser_script) app.router.add_get("/healthz", self._health) app.router.add_post("/api/webrtc/offer", self._offer) + # Registered unconditionally because aiohttp freezes the router once + # the runner starts, and the application attaches after this server + # is constructed. Without a web-UI application every one of these + # answers 404, exactly as an unrouted path did before they existed. + app.router.add_get("/request_session", self._serve_web_ui_page) + app.router.add_get("/api/session/initial_scene", self._initial_scene) + app.router.add_get("/api/session/first_frame", self._first_frame) + app.router.add_post("/api/session/input", self._session_input) + # Last, so every named route above wins over a file of the same name + # in the application's web root. + app.router.add_get("/{web_asset:.*}", self._serve_web_ui_asset) runner = web.AppRunner(app) await runner.setup() address_family = socket.AF_INET6 if ":" in self._host else socket.AF_INET @@ -694,6 +782,81 @@ async def _serve_browser_script(self, _: web.Request) -> web.Response: """Return the browser client's JavaScript.""" return web.Response(text=_BROWSER_SCRIPT, content_type="text/javascript") + def serve_web_ui(self, web_ui: IWebUiProvider) -> None: + """Serve an application's own page and session routes. + + Callable after startup: the routes are already registered and answer + 404 until this supplies the application behind them. + + Args: + web_ui: Application whose web root and session data to serve. + + Raises: + RuntimeError: The server is closed. + """ + if self._closed: + raise RuntimeError("Cannot serve a web UI from a closed WebRTC server.") + self._web_ui = web_ui + + def _require_web_ui(self) -> IWebUiProvider: + """Return the web-UI application, which the routes guarantee exists.""" + web_ui = self._web_ui + if web_ui is None: + raise web.HTTPNotFound() + return web_ui + + def _resolve_web_asset(self, relative_path: str) -> Path: + """Return an existing file inside the application's web root. + + Raises: + web.HTTPNotFound: The path escapes the web root or names nothing. + """ + root = Path(self._require_web_ui().web_root()).resolve() + try: + resolved = (root / relative_path).resolve() + except OSError as error: + raise web.HTTPNotFound() from error + # Containment is checked after resolving, so neither "..", a symlink, + # nor an absolute path can reach a file outside the web root. + if not resolved.is_file() or not resolved.is_relative_to(root): + raise web.HTTPNotFound() + return resolved + + async def _serve_web_ui_page(self, _: web.Request) -> web.StreamResponse: + """Return the application's own page.""" + return web.FileResponse(self._resolve_web_asset("index.html")) + + async def _serve_web_ui_asset(self, request: web.Request) -> web.StreamResponse: + """Return one file from the application's web root.""" + return web.FileResponse( + self._resolve_web_asset(request.match_info["web_asset"]) + ) + + async def _initial_scene(self, _: web.Request) -> web.Response: + """Return what the application says its session currently shows.""" + web_ui = self._require_web_ui() + scene = await asyncio.to_thread(web_ui.initial_scene) + return web.json_response(dict(scene)) + + async def _first_frame(self, _: web.Request) -> web.Response: + """Return the session's first frame, or 404 before one exists.""" + web_ui = self._require_web_ui() + frame = await asyncio.to_thread(web_ui.first_frame) + if frame is None: + raise web.HTTPNotFound() + data, content_type = frame + return web.Response(body=data, content_type=content_type) + + async def _session_input(self, request: web.Request) -> web.Response: + """Hand one page-submitted change to the application.""" + web_ui = self._require_web_ui() + payload = await _read_session_input_payload(request) + try: + scene = await asyncio.to_thread(web_ui.apply_session_input, payload) + except ValueError as error: + raise web.HTTPBadRequest(reason=str(error)) from error + return web.json_response(dict(scene)) + async def _health(self, _: web.Request) -> web.Response: """Report whether the server has an open session and client.""" return web.json_response( diff --git a/flashdreams/flashdreams/runtime_v2/webrtc_client_window.py b/flashdreams/flashdreams/runtime_v2/webrtc_client_window.py index 218671520..83e5ceb72 100644 --- a/flashdreams/flashdreams/runtime_v2/webrtc_client_window.py +++ b/flashdreams/flashdreams/runtime_v2/webrtc_client_window.py @@ -10,6 +10,7 @@ from numpy import uint64 from flashdreams.api_v2.client_window import IClientWindow +from flashdreams.api_v2.web_ui import IWebUiProvider from flashdreams.runtime_v2.serving.webrtc_server import WebRTCServer from flashdreams.runtime_v2.session_desc import SessionDesc from flashdreams.runtime_v2.step_result import StepResult @@ -72,6 +73,17 @@ def handle_input(event: UserInputEvent) -> None: self.server.register_input_callback(handle_input) + def serve_web_ui(self, web_ui: IWebUiProvider) -> None: + """Serve an application's own browser UI from this window's server. + + Construction is specific to this implementation; it is not part of the + ``IClientWindow`` protocol. + + Args: + web_ui: Application whose page and session routes to serve. + """ + self.server.serve_web_ui(web_ui) + def request_hide_cursor(self, hide_cursor: bool) -> None: """Show or hide the cursor in the browser window.""" self.server.configure_cursor( diff --git a/flashdreams/test_v2/test_webrtc_web_ui.py b/flashdreams/test_v2/test_webrtc_web_ui.py new file mode 100644 index 000000000..b4b126ef1 --- /dev/null +++ b/flashdreams/test_v2/test_webrtc_web_ui.py @@ -0,0 +1,286 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +"""CPU tests for the application-served browser UI on the v2 WebRTC server.""" + +# ruff: noqa: E402 - optional WebRTC imports must follow importorskip. + +from __future__ import annotations + +import json +from collections.abc import Mapping +from pathlib import Path +from typing import Any + +import pytest +import pytest_asyncio + +pytestmark = pytest.mark.ci_cpu + +pytest.importorskip("aiohttp") +pytest.importorskip("aiortc") + +from aiohttp import web +from aiohttp.test_utils import TestClient, TestServer + +from flashdreams.api_v2.web_ui import IWebUiProvider +from flashdreams.runtime_v2.serving.webrtc_server import WebRTCServer + + +class StubWebUi: + """Smallest application that satisfies :class:`IWebUiProvider`.""" + + def __init__(self, root: Path) -> None: + self._root = root + self.applied: list[dict[str, Any]] = [] + self.frame: tuple[bytes, str] | None = (b"\xff\xd8jpeg", "image/jpeg") + + def web_root(self) -> Path: + return self._root + + def initial_scene(self) -> Mapping[str, Any]: + return {"prompt": "a scene", "event_catalog": [{"event_id": "storm"}]} + + def first_frame(self) -> tuple[bytes, str] | None: + return self.frame + + def apply_session_input(self, payload: Mapping[str, Any]) -> Mapping[str, Any]: + if payload.get("prompt") == "": + raise ValueError("Prompt must not be empty.") + self.applied.append(dict(payload)) + return {"prompt": payload.get("prompt", "unchanged")} + + +@pytest.fixture +def web_root(tmp_path: Path) -> Path: + """Return a web root holding one of each thing a page loads.""" + root = tmp_path / "web" + (root / "assets").mkdir(parents=True) + (root / "index.html").write_text("page", encoding="utf-8") + (root / "adapter.js").write_text("// adapter", encoding="utf-8") + (root / "assets" / "logo.svg").write_text("", encoding="utf-8") + (tmp_path / "outside.txt").write_text("SECRET", encoding="utf-8") + return root + + +@pytest.fixture +def server() -> WebRTCServer: + """Return a server with only the state its HTTP handlers read. + + ``__init__`` starts a thread and binds a socket, neither of which these + tests need; the handlers under test are the ones the running server + registers. + """ + instance = WebRTCServer.__new__(WebRTCServer) + instance._web_ui = None + instance._closed = False + instance._client_connected = False + instance._hide_cursor = False + instance._lock_cursor_to_window = False + instance._session_desc = None + return instance + + +@pytest_asyncio.fixture +async def client(server: WebRTCServer) -> TestClient: + """Return a client for the same routes ``_start_server`` registers.""" + app = web.Application() + app.router.add_get("/", server._serve_browser) + app.router.add_get("/app.js", server._serve_browser_script) + app.router.add_get("/healthz", server._health) + app.router.add_get("/request_session", server._serve_web_ui_page) + app.router.add_get("/api/session/initial_scene", server._initial_scene) + app.router.add_get("/api/session/first_frame", server._first_frame) + app.router.add_post("/api/session/input", server._session_input) + app.router.add_get("/{web_asset:.*}", server._serve_web_ui_asset) + async with TestClient(TestServer(app)) as test_client: + yield test_client + + +def test_stub_satisfies_the_protocol(web_root: Path) -> None: + assert isinstance(StubWebUi(web_root), IWebUiProvider) + + +@pytest.mark.asyncio +@pytest.mark.parametrize( + "path", + ["/request_session", "/adapter.js", "/api/session/initial_scene", "/api/session/first_frame"], +) +async def test_routes_are_absent_without_an_application( + client: TestClient, path: str +) -> None: + """An application without a UI must see no behaviour change.""" + assert (await client.get(path)).status == 404 + + +@pytest.mark.asyncio +async def test_builtin_routes_survive_a_web_ui( + client: TestClient, server: WebRTCServer, web_root: Path +) -> None: + """The catch-all must not shadow the runtime's own viewer.""" + server.serve_web_ui(StubWebUi(web_root)) + + assert (await client.get("/")).status == 200 + assert (await client.get("/app.js")).status == 200 + assert (await client.get("/healthz")).status == 200 + + +@pytest.mark.asyncio +async def test_page_and_assets_are_served( + client: TestClient, server: WebRTCServer, web_root: Path +) -> None: + server.serve_web_ui(StubWebUi(web_root)) + + page = await client.get("/request_session") + assert page.status == 200 + assert await page.text() == "page" + assert (await (await client.get("/adapter.js")).text()) == "// adapter" + assert (await client.get("/assets/logo.svg")).status == 200 + assert (await client.get("/missing.js")).status == 404 + + +@pytest.mark.asyncio +@pytest.mark.parametrize( + "attack", + ["/../outside.txt", "/..%2Foutside.txt", "/assets/../../outside.txt"], +) +async def test_paths_cannot_escape_the_web_root( + client: TestClient, server: WebRTCServer, web_root: Path, attack: str +) -> None: + server.serve_web_ui(StubWebUi(web_root)) + + assert (await client.get(attack)).status == 404 + + +@pytest.mark.asyncio +async def test_initial_scene_is_returned_verbatim( + client: TestClient, server: WebRTCServer, web_root: Path +) -> None: + """Serving must not interpret a scene: what the application says, ships.""" + web_ui = StubWebUi(web_root) + server.serve_web_ui(web_ui) + + response = await client.get("/api/session/initial_scene") + + assert response.status == 200 + assert await response.json() == dict(web_ui.initial_scene()) + + +@pytest.mark.asyncio +async def test_first_frame_is_served_with_its_content_type( + client: TestClient, server: WebRTCServer, web_root: Path +) -> None: + server.serve_web_ui(StubWebUi(web_root)) + + response = await client.get("/api/session/first_frame") + + assert response.status == 200 + assert response.headers["Content-Type"] == "image/jpeg" + assert await response.read() == b"\xff\xd8jpeg" + + +@pytest.mark.asyncio +async def test_absent_first_frame_is_not_an_error( + client: TestClient, server: WebRTCServer, web_root: Path +) -> None: + web_ui = StubWebUi(web_root) + web_ui.frame = None + server.serve_web_ui(web_ui) + + assert (await client.get("/api/session/first_frame")).status == 404 + + +@pytest.mark.asyncio +async def test_json_input_reaches_the_application( + client: TestClient, server: WebRTCServer, web_root: Path +) -> None: + web_ui = StubWebUi(web_root) + server.serve_web_ui(web_ui) + + response = await client.post("/api/session/input", json={"prompt": "new scene"}) + + assert response.status == 200 + assert (await response.json())["prompt"] == "new scene" + assert web_ui.applied[-1] == {"prompt": "new scene"} + + +@pytest.mark.asyncio +async def test_form_input_reaches_the_application( + client: TestClient, server: WebRTCServer, web_root: Path +) -> None: + web_ui = StubWebUi(web_root) + server.serve_web_ui(web_ui) + + response = await client.post("/api/session/input", data={"prompt": "formy"}) + + assert response.status == 200 + assert web_ui.applied[-1] == {"prompt": "formy"} + + +@pytest.mark.asyncio +async def test_multipart_upload_arrives_as_bytes( + client: TestClient, server: WebRTCServer, web_root: Path +) -> None: + """A page posts a first frame beside text fields; both must survive.""" + web_ui = StubWebUi(web_root) + server.serve_web_ui(web_ui) + + response = await client.post( + "/api/session/input", + data={ + "prompt": "with image", + "text_events": json.dumps([{"event_id": "storm", "prompt": "wind"}]), + "image": b"\x89PNGfake", + }, + ) + + assert response.status == 200 + applied = web_ui.applied[-1] + assert applied["image"] == b"\x89PNGfake" + assert isinstance(applied["text_events"], str) + assert applied["image_content_type"].startswith("application/") + + +@pytest.mark.asyncio +async def test_application_rejection_is_a_bad_request( + client: TestClient, server: WebRTCServer, web_root: Path +) -> None: + """A ValueError is the application's way of saying 400, not 500.""" + server.serve_web_ui(StubWebUi(web_root)) + + assert (await client.post("/api/session/input", json={"prompt": ""})).status == 400 + + +@pytest.mark.asyncio +async def test_malformed_json_is_a_bad_request( + client: TestClient, server: WebRTCServer, web_root: Path +) -> None: + server.serve_web_ui(StubWebUi(web_root)) + + response = await client.post( + "/api/session/input", + data="{not json", + headers={"Content-Type": "application/json"}, + ) + + assert response.status == 400 + + +@pytest.mark.asyncio +async def test_non_object_json_is_a_bad_request( + client: TestClient, server: WebRTCServer, web_root: Path +) -> None: + server.serve_web_ui(StubWebUi(web_root)) + + response = await client.post("/api/session/input", json=["not", "an", "object"]) + + assert response.status == 400 + + +def test_a_closed_server_refuses_a_web_ui( + server: WebRTCServer, web_root: Path +) -> None: + server._closed = True + + with pytest.raises(RuntimeError, match="closed"): + server.serve_web_ui(StubWebUi(web_root)) diff --git a/integrations_v2/lingbot/README.md b/integrations_v2/lingbot/README.md index 182b992fc..5a1b449c7 100644 --- a/integrations_v2/lingbot/README.md +++ b/integrations_v2/lingbot/README.md @@ -36,6 +36,93 @@ uv run --no-sync flashdreams-run-v2 cam2v-lingbot \ Shared [`apps/cam2v`](../../apps/cam2v/README.md) documentation lists controls, application arguments, and development commands. +## Browser UI + +This application serves its own page, so the run above offers two clients: + +- `http://:8089/` — the runtime's minimal viewer, the same one every v2 + application gets. +- `http://:8089/request_session` — the Lingbot scene UI: a preset + picker, a first-frame upload, a prompt box, and buttons for the scene's text + events. + +The page lives in [`apps/cam2v/web/`](apps/cam2v/web) and is served because +`LingbotCam2VApplication` implements `IWebUiProvider` +(`flashdreams.api_v2.web_ui`). That protocol is also what adds +`/api/session/initial_scene`, `/api/session/first_frame`, and +`POST /api/session/input`; an application without it gets none of them. + +Useful URL parameters: + +| Parameter | Effect | +| --- | --- | +| `?manual` | Do not auto-connect. Only one session runs per process, so a stray tab can otherwise claim it before the tab you meant to use. | +| `?preset=` | Open straight to a preset, slug being its lowercased name with spaces as hyphens, e.g. `?preset=water-blaster`. | + +Digit keys `1`-`9` jump to the matching preset while no text field has focus. +`C` clears the active event; `R` restarts the scene, discarding the rollout's +accumulated state so it re-seeds from its first frame — which is how to +recover after prompt swaps have left the world looking like a blend of +scenes. The current prompt is re-applied to the fresh rollout. + +### Scenes and text events + +A scene is a prompt, a first frame, and a catalog of text events. Triggering an +event swaps the rollout's cross-attention text context in place, so the scene +changes without restarting the session; clearing it restores the scene's base +prompt. The reserved `user_prompt` event id carries free-form text typed into +the page instead of a catalog entry. + +Catalog rules live in [`apps/cam2v/scene.py`](apps/cam2v/scene.py): at most 20 +events, 64-character labels, 1000-character event prompts, and ids drawn from +letters, numbers, `_`, `.`, `:` and `-`. The built-in presets are in +[`apps/cam2v/web/scene_presets.json`](apps/cam2v/web/scene_presets.json). + +Changing the prompt — including by picking another preset — swaps the text +context the same way, so the scene changes while the rollout keeps running. The +first frame is the exception: a rollout cannot replace the frame it was +initialized from, so picking a preset in the browser changes its events and +wording while the world still looks like whatever the session started on. To +start *in* a preset, name it when launching: `PRESET=noir-alley-combat bash +run.sh`. + +## Scripts + +For boxes without uv, [`setup.sh`](setup.sh) builds a plain `venv` with pip and +installs `flashdreams`, `apps/cam2v`, and this package as editable: + +```bash +bash setup.sh # TORCH_INDEX=cu130 to change the CUDA wheel index +bash run.sh # then open http://:8089/request_session +``` + +The camera-controls overlay is off by default here, because it is composited +into the generated frames rather than drawn by the browser, and so cannot be +dismissed from the page. `--ui` turns it on for its timing readout. A UI loop +runs either way: it is the only thing that can ask the runtime for a +replacement session, which is how the page switches scenes. + +`run.sh` uses `./.venv`, or an already-active `VIRTUAL_ENV`, or whatever +`flashdreams-run-v2` is on `PATH`. Arguments are forwarded to the +application. Settings are environment variables and go *before* the command +— `LIGHT=1 bash run.sh`, not `bash run.sh LIGHT=1`: + +| Variable | Default | Effect | +| --- | --- | --- | +| `APP` | `cam2v-lingbot` | Application slug; any entry point in `pyproject.toml`. | +| `HOST` / `PORT` | `0.0.0.0` / `8089` | Where to serve. | +| `LIGHT` | `0` | `LIGHT=1` generates 512x288 at 12 fps for GPUs that cannot keep up at the native 832x464. | +| `WIDTH` / `HEIGHT` / `FPS` | unset | Override the size directly; wins over `LIGHT`. | +| `PRESET` | unset | Start the rollout on a built-in preset's own image and prompt, by slug (`noir-alley-combat`). Unset runs the bundled example scene. | +| `BLOCKS` | `100000` | Blocks to generate before the run ends — set high so a run lasts until you stop it. `BLOCKS=20` for a quick smoke test. The application's own default is 20, roughly fifteen seconds. | +| `VENV` | `./.venv` | Environment to activate. | + +`LIGHT` reduces what the model generates, not just what is encoded: fewer +pixels cost less end to end but look worse. The page scales whatever is +generated up to the window, so a smaller stream is softer, not smaller. There +is no encoder to choose — the v2 server hands raw frames to aiortc's software +encoder. + ## Programmatic pipeline access ```python diff --git a/integrations_v2/lingbot/SCENE_PRESETS.md b/integrations_v2/lingbot/SCENE_PRESETS.md new file mode 100644 index 000000000..f88b2fb41 --- /dev/null +++ b/integrations_v2/lingbot/SCENE_PRESETS.md @@ -0,0 +1,253 @@ +# LingBot Scene Presets + +## Overview +Scene presets allow users to quickly load predefined scene configurations (prompt + events) into the LingBot initial scene panel. + +## Features +- **Built-in presets**: 5 default scene presets (Dragon, Jet Ski Cruise, Noir Alley Combat, Water Blaster, Circuit Racer) +- **Default on load**: "Dragon" auto-applies when the page opens (no manual selection needed) +- **Save custom presets**: Save current scene configuration as a new preset +- **Persistent storage**: Presets saved in browser localStorage +- **Quick access**: Dropdown selector in "Quick Start" section +- **Images**: every preset's start image is committed under `apps/cam2v/web/assets/` and referenced by relative path, so the picker renders with no network access + +## Usage + +### Loading a Preset +1. Open LingBot WebRTC interface (the "Dragon" preset is pre-selected by default) +2. Find "Quick Start" dropdown in Initial Scene panel +3. Select a different preset from the dropdown +4. Preset prompt + events + start image auto-populate the form; the dropdown stays on the selected preset name + +### In-Game Event Hotkeys +Once connected, each preset's events are playable via keyboard — +**Player Controls events use digit-key shortcuts (1-9)**, **Director +Controls events use letter-key shortcuts** from a fixed pool (`b, f, g, +h, m, n, o, p, r, t, u, v, x, y, z`) that deliberately excludes the +movement keys (w/a/s/d/q/e/i/j/k/l) so hotkeys never collide with driving +input. **Jump** always gets **Space** and **Crouch** always gets **Ctrl** +instead of a digit, matching common game convention — both also render as +their own row right next to the movement key grid instead of the general +event button list, since they're movement actions, not narrative +triggers. Every other event button shows its assigned digit/letter hotkey +(e.g. "Portal (1)", "Storm Rolls In (B)"). Press **c** to Clear the active +event — present and wired the same way on every game, since Clear isn't +part of any preset's catalog. Ignored while typing in a text field. Player +events beyond the digit pool or director events beyond the 15-letter pool +still work by click, just without a shown hotkey. + +### Director Controls +Each preset's events are split into two categories, matching the original +REACTOR case files' `actor: "character"` (player-triggered) vs. +`actor: "environment"` (narrative/pacing) events. Both live in the *same* +panel, switched with a single **toggle switch** at the top — not two +separate panels or tab buttons. The panel's own heading also swaps between +"Player Controls" / "Director Controls" to match: +- **Off (Player)** — the regular action buttons + a "Custom Prompt" box + + the movement key grid (w/a/s/d/q/e/i/j/k/l). +- **On (Director)** — the environment/pacing events (weather, hazards, + wildlife, etc.) + its own separate "Director Prompt" box, so a director + can send free-form direction text independently of the player's prompt. + The movement key grid hides — a director doesn't drive movement. + +The toggle only appears once director mode is on, reached either by adding +`?director` to the page URL (e.g. `?manual&director`) — which starts the +toggle already on — or by clicking **"Enable Director Mode"** in Player +Controls for any preset that has director events (no URL edit needed). +Player events get digit hotkeys, director events get letter hotkeys, so +the two never collide even though only one side's buttons are visible at +once. The health bar stays visible in both Player and Director Controls. + +Both tabs' events are always uploaded to the server together regardless +of `?director` — the shared WebRTC protocol has no player/director +distinction, so this split is purely a client-side UI/visibility choice. + +Hand-added events (via "Add" in the Initial Scene panel's Text Events +list, not from a built-in preset) default to Player and can be flipped to +Director with the **Director** checkbox on that event's own row — the live +Player/Director Controls buttons update immediately when toggled. + +### Sharing a Preset via URL +Add `?preset=` to the page URL to land directly on a specific built-in +preset instead of the "Dragon" default — the slug is the preset name, +lowercased with spaces replaced by hyphens (e.g. `Water Blaster` → +`water-blaster`). Example: `http://:8089/request_session?preset=circuit-racer`. +Unknown/missing slugs fall back to the default preset. This only shares +*which game loads*, not a live/running session — WebRTC still allows only +one active session per server process. + +### Saving a Preset +1. Edit prompt and text events in the Initial Scene panel +2. Click "Save" button next to Quick Start dropdown +3. Enter a name for the preset (e.g., "My Custom Scene") +4. Preset is saved to browser localStorage +5. New preset appears in dropdown for future use + +## Data Format + +Presets are stored as JSON array in `localStorage["lingbot-presets"]`: + +```json +[ + { + "name": "Preset Name", + "prompt": "Scene prompt text", + "events": [ + { + "event_id": "unique-id", + "label": "Event Label", + "prompt": "Event prompt text", + "health": -10 + } + ], + "directorEvents": [], + "hud": { "maxHealth": 100 } + } +] +``` + +`health` is optional (omit for no health effect); `directorEvents` uses the +same shape as `events`. + +## Adding a New Built-in Preset (Game) + +Built-in presets live in +`integrations_v2/lingbot/apps/cam2v/web/scene_presets.json` — a plain JSON +array, fetched at page load by `loadScenePresets()` in `adapter.js` (not +inlined in the JS, so it can be hand-edited without touching code). To add +one: + +1. **Write the base prompt** (1-3 sentences): subject + environment + style, + third person (or first person for cockpit/POV scenes like Circuit + Racer/Water Blaster). No camera-motion or input language — this app + drives movement via the `w/a/s/d/q/e/i/j/k/l` keys and text events, not + prose. +2. **Write events**: each a short one-sentence imperative/descriptive + clause (`{ event_id, label, prompt, health? }`). `event_id` is a short + lowercase token, unique within that preset's own `events`/`directorEvents` + arrays combined (ids can repeat *across* presets — each preset's list is + independent). Mix character-triggered actions (tricks, attacks) — put + these in `events`, **at least 5 of them** — with environment beats + (weather, other characters/vehicles appearing) — put these in + `directorEvents` (see "Director Controls" above). Add an optional numeric + `health` field where it makes narrative sense — negative for a hit/risk + (e.g. a hazard or a combat move), positive for a recovery/reward beat, + omit it entirely for a purely cosmetic trick with no stakes. **`events.length + + directorEvents.length` must not exceed 20** — that's a hard server-side + cap (`MAX_TEXT_EVENTS` in `apps/cam2v/scene.py`) applied to the *combined* total, + not separately per category, since the server has no player/director + concept at all (only a generic `category` string tag) — both arrays + upload together as one flat list; going over it makes every connect + attempt fail with "At most 20 text events are supported." `applyPreset()` + also logs a client-side warning at selection time if a preset is over + budget, so this should be caught before it reaches a failed connect. + - If you have access to `REACTOR_js-sdk`'s `lib/lingbot-cases/*.json` + (a richer, layered `base`/`camera`/`movement`/`events` scene format + used by a different app), you can mine its `scene.base.default` and + `scene.events[].detail` text for content and compress it down to this + flatter prompt+events shape — drop the camera/movement layers and any + `EXACTLY ONE ...` frame-count guard clauses, since this app doesn't use + that layering. Reference copies of a few are kept in + `apps/cam2v/web/assets/sources/` for exactly this purpose. +3. **Pick a start image**: commit it under `apps/cam2v/web/assets/` and + reference it by relative path (`assets/.jpg`), the way the built-in + presets do — it ships with the package and the page needs no network + access. A public `https://` URL still works if you would rather not commit + a binary. Note the v1 server's remote-URL fetch, with its SSRF guard + against private hosts, has no v2 equivalent yet: a URL is handed to the + browser to load, not fetched server-side. +4. **Add the object** to the array in `scene_presets.json` (strict JSON — + double-quoted keys, no trailing commas, no comments): + ```json + { + "name": "My Game", + "image": "assets/my-game.jpg", + "prompt": "...", + "events": [ + { "event_id": "thing1", "label": "Thing One", "prompt": "..." } + ], + "directorEvents": [], + "hud": { "maxHealth": 100 } + } + ``` +5. **(Optional) Make it the default**: the preset at index `0` is + auto-applied on page load via `presetSelect.value = "0"; applyPreset(0)` + in `mount()` — reorder the array (or edit those two lines) to change + which preset that is. +6. **Reload the page** — `adapter.js` is served straight off disk on every + request (the v2 server serves the application's `web_root()`), so a + browser refresh picks up the change with no server restart needed, as + long as you're running an editable (`pip install -e`) install. +7. Update the **Built-in Presets** list below and the preset count in + **Features** to keep this doc in sync. + +## Storage Location +- **Browser**: localStorage under key `lingbot-presets` +- **Persistence**: Survives page refresh, tab close +- **Scope**: Browser/domain specific +- **Cleared when**: Browser cache is cleared, incognito mode + +## Built-in Presets + +Event counts below are `player + director = total` (against the 20-event +combined cap — see step 2 under "Adding a New Built-in Preset"). Every +built-in preset has at least 5 player events. + +### 1. Dragon (default) +- **Prompt**: "A soaring journey through a fantasy jungle on the back of a flying creature. The wind whips past the rider's blue hands gripping the reins, causing the leather straps to vibrate, as the aerial voyage carries them toward an ancient gothic castle, its stonework growing clearer as it nears. Floating landmasses and cascading waterfalls fill the fantastical landscape below." +- **Player events (4)**: Jump, Portal, Storm, Fireworks. +- **Director events (6)**: Rival Dragon Appears, Wind Gust Rocks Mount, Castle Guards Fire Arrows, Meteor Shower, Aurora Lights the Sky, Griffin Gives Chase. +- 4 + 6 = 10 total. Portal/Storm/Fireworks are `DEFAULT_TEXT_EVENTS` from `apps/cam2v/scene.py` (also on `main`), not invented for this preset — Jump and all director events are additions specific to this preset (no source JSON exists for Dragon; the app's own example-00 default). Auto-selects on load. + +### 2. Jet Ski Cruise +- **Prompt**: "Turquoise water near a sandy beach lined with palm trees. A man in a red life vest riding a white and red jet ski, keeping it on top of the water at all times." +- **Player events (4)**: Jump, One-Hand Wave, Jump Off, Jump Back On. +- **Director events (9)**: Dolphins Leap, Storm Rolls In, Rogue Wave, Shark Lunges, Waterspout Forms, Fuel Runs Low, Thrown from the Jet Ski, Fuel Cache Spotted, Calm Water Break. +- 4 + 9 = 13 total. Uses "Fuel" as its HUD label (`hud.healthLabel`) instead of "Health". Jump Off/Jump Back On are a matched risk/recovery pair (-5/+8); One-Hand Wave awards a small `+3` trick bonus; Fuel Cache Spotted (+10) and Calm Water Break (+5) are dedicated recovery beats so a full playthrough always has a way to regain fuel, not just drain it. + +### 3. Noir Alley Combat +- **Prompt**: "A narrow urban alley at night, dark brick walls and heavy rain, shiny puddles on wet asphalt, yellow police tape, blue and red ambient light. A lone uniformed police officer in dark blue tactical gear holding a flashlight." +- **Player events (7)**: Jump, Draw Pistol (fires exactly one shot, health -8), Crouch, Punch Combo, Roundhouse Kick, Baton Strike, Dodge Roll. +- **Director events (5)**: Player Falls to Ground, Enemy Appears, Enemy Attacks, Chicken Walks In, Drone Appears. +- 7 + 5 = 12 total. Enemy Appears/Attacks were changed from plural to singular ("a single figure... no second figure, no group") to keep the model from generating a crowd when only one enemy is intended. + +### 4. Water Blaster +- **Prompt**: "First-person point of view aiming out across a colourful floating inflatable aqua park on a calm green quarry lake under bright summer sun. A bare hand grips a blue and red toy water blaster at the lower right of the frame." +- **Player events (6)**: Jump, Crouch, Splash Blast, Raise Float Shield, Green Slime Blast, Dive. +- **Director events (4)**: Rival Blaster Ambush, Bathers Get Super Soakers, Crocodile Lunges, Giant Balloon Drops. +- 6 + 5 = 11 total. + +### 5. Circuit Racer +- **Prompt**: "First-person cockpit view from inside a Formula 1 race car, gloved hands on the wheel and the glowing dash ahead, speeding down a sunlit asphalt racing circuit lined with red-and-white kerbs." +- **Player events (5)**: Jump, Kick Up Sparks, Lock-Up Smoke, Drift, DRS Boost. +- **Director events (7)**: Rain Sweeps In, Sun Glare, Tunnel Section, Road Fire, Checkered Flag, Puddle on the Track, Oil Slick Ahead. +- 5 + 7 = 12 total. + +Noir Alley Combat, Water Blaster, Jet Ski Cruise, and Circuit Racer prompts/events are adapted from the richer layered scene definitions in `REACTOR_js-sdk`'s `lib/lingbot-cases/*.json` (kept as reference copies under `apps/cam2v/web/assets/sources/` in this repo) down to this app's flatter prompt+events format. Their start images are committed under `apps/cam2v/web/assets/` and referenced by relative path. + +## Browser Console Access + +View all saved presets: +```javascript +JSON.parse(localStorage.getItem("lingbot-presets")) +``` + +Clear all presets: +```javascript +localStorage.removeItem("lingbot-presets") +``` + +## Implementation Files +- **UI**: `integrations_v2/lingbot/apps/cam2v/web/adapter.js` + - Top of file: Preset data definitions (`scenePresets`) + - `makeSceneCard()`: Scene card HTML with dropdown + Save button + - `saveCurrentPreset()` / `updatePresetDropdown()` / `loadSavedPresets()` / `applyPreset()`: Load/Save preset functions + - `mount()`: selects + applies preset index 0 ("Dragon") on load, before `loadInitialScene()` runs + - `presetSelect.addEventListener` / `savePresetButton.addEventListener`: Event listeners + +## Future Enhancements +1. **Server-side storage**: Save presets to backend database +2. **Export/Import**: Download presets as JSON file +3. **Sharing**: Share presets via link or code +4. **Categories**: Organize presets by category +5. **Versioning**: Track preset changes over time diff --git a/integrations_v2/lingbot/apps/cam2v/adapter.py b/integrations_v2/lingbot/apps/cam2v/adapter.py index 2d4794f22..7023b24c0 100644 --- a/integrations_v2/lingbot/apps/cam2v/adapter.py +++ b/integrations_v2/lingbot/apps/cam2v/adapter.py @@ -6,13 +6,28 @@ from __future__ import annotations import dataclasses +import mimetypes +import shutil +import tempfile +import threading +from collections.abc import Mapping +from pathlib import Path from typing import Any import torch -from cam2v import Cam2VApplication, Cam2VApplicationDefaults +from cam2v import ( + Cam2VApplication, + Cam2VApplicationDefaults, + Cam2VSlangPyUILoop, + generate_camera_step, +) +from loguru import logger from flashdreams.api_v2.application import IApplication +from flashdreams.api_v2.session import ISession from flashdreams.infra.config import derive_config +from flashdreams.runtime_v2.session_desc import SessionDesc +from lingbot.apps.cam2v.scene import SceneState from lingbot.config import ( PIPELINE_LINGBOT_WORLD_FAST, PIPELINE_LINGBOT_WORLD_FAST_TAEHV_WINDOW15_SINK3, @@ -40,8 +55,32 @@ """Lingbot defaults for the reusable Cam2V application.""" +class _SilentCam2VUILoop(Cam2VSlangPyUILoop): + """Cam2V UI loop that presents frames without drawing the overlay. + + The camera-controls panel is drawn into the generated frames before they + are encoded, so it is part of the video and cannot be dismissed from the + browser. ``--no-ui`` removes it by registering no UI loop at all, but a UI + loop is the only thing able to ask the runtime for a replacement session, + which is how the page switches scenes. This keeps the loop and drops only + the drawing: no widgets are built, so nothing is composited over the + frame, and the state the overlay would have displayed goes unmaintained. + """ + + def step_ui(self, ui: Any, step_index: int, events: Any) -> Any: + """Return the current model frame, building no widgets.""" + del ui, step_index, events + return self.presented_model_frame() + + class LingbotCam2VApplication(Cam2VApplication): - """Lingbot World specialization of the shared Cam2V application.""" + """Lingbot World specialization of the shared Cam2V application. + + Also serves the browser UI under ``web/``: a scene picker whose presets + carry a prompt, a first frame, and a catalog of text events. Implementing + :class:`IWebUiProvider` is what makes the v2 WebRTC server route + ``/request_session`` and the ``/api/session`` endpoints here. + """ def __init__(self, pipeline_config: Any | None = None) -> None: """Select the pipeline config used by this Cam2V application. @@ -58,7 +97,318 @@ def __init__(self, pipeline_config: Any | None = None) -> None: pipeline_config, enable_sync_and_profile=False ), ) + # Wrap the generation step so a requested prompt swap is applied on + # the model thread between chunks, where the rollout cache is idle. + defaults = dataclasses.replace(defaults, generate_step=self._generate_step) super().__init__(defaults=defaults) + self._scene: SceneState | None = None + self._pending_prompt: str | None = None + self._active_prompt: str | None = None + self._prompt_lock = threading.Lock() + self._prompt_embeddings: dict[str, Any] = {} + self._active_cache: Any | None = None + self._ui_loop: Any | None = None + self._draw_overlay: bool | None = None + self._scene_dir: Path | None = None + + def _configure_argument_parser(self, parser: Any) -> None: + """Default the overlay off, since it is drawn into the video itself. + + The shared application defaults ``--ui`` on, which composites the + camera-controls panel into the generated frames -- part of the video, + not something the browser can dismiss. ``--ui`` still turns it on for + the timing readout. + """ + super()._configure_argument_parser(parser) + parser.set_defaults(ui=False) + + def create_session(self, session_desc: SessionDesc) -> ISession: + """Create the rollout and describe it for the browser UI.""" + # --ui selects which UI loop runs, not whether one runs at all. A UI + # loop is the only thing that can ask the runtime for a replacement + # session, so registering none -- what --no-ui does -- would silently + # disable switching scenes from the page. The flag keeps the meaning + # its name implies: draw the overlay, or do not. + # + # Recorded once: forcing _use_ui on below would otherwise be read back + # as "the overlay was asked for" by the next session, so a scene + # switch brought it back. + if self._draw_overlay is None: + self._draw_overlay = self._use_ui + draw_overlay = self._draw_overlay + self._use_ui = True + session = super().create_session(session_desc) + # The shared session registers its loops without keeping one, so the + # bound method is wrapped to capture what it registers. + register_ui_loop = session.register_ui_loop + + def capture_ui_loop(loop_type: Any, **kwargs: Any) -> Any: + if loop_type is Cam2VSlangPyUILoop and not draw_overlay: + loop_type = _SilentCam2VUILoop + loop = register_ui_loop(loop_type, **kwargs) + self._ui_loop = loop + return loop + + session.register_ui_loop = capture_ui_loop # type: ignore[method-assign] + self._ui_loop = None + scene = self._scene + if scene is None: + self._scene = self._build_scene(session_desc) + else: + # A page may have built the scene already, before the runtime got + # this far; take the resolution the session actually resolved to. + scene.video_width = session_desc.video_width + scene.video_height = session_desc.video_height + # A new rollout re-encodes from its own prompt, so nothing carries + # over from the previous one. + with self._prompt_lock: + self._pending_prompt = None + self._active_prompt = None + return session + + def _generate_step( + self, + pipeline: Any, + autoregressive_index: int, + cache: Any, + camera_input: Any, + ) -> torch.Tensor: + """Apply any pending text swap, then generate the chunk as usual.""" + if cache is not self._active_cache: + # A reset discards the cache, and the next step re-seeds it from + # the session's own conditioning -- which restores the prompt the + # rollout started with. Re-apply whatever the page has chosen + # since, so a reset clears the drifted image without also + # reverting the scene. + self._active_cache = cache + self._active_prompt = None + scene = self._scene + if scene is not None and scene.active_prompt() != "": + with self._prompt_lock: + self._pending_prompt = scene.active_prompt() + with self._prompt_lock: + prompt = self._pending_prompt + self._pending_prompt = None + if prompt is not None and prompt != self._active_prompt: + self._swap_text_context(pipeline, cache, prompt) + self._active_prompt = prompt + return generate_camera_step( + pipeline, autoregressive_index, cache, camera_input + ) + + def _swap_text_context(self, pipeline: Any, cache: Any, prompt: str) -> None: + """Replace the rollout's cross-attention text context with ``prompt``. + + Only the static text context changes: the self-attention KV cache + stays intact, so the rollout keeps its horizon and the swap shows up + from this chunk on. + + Raises: + RuntimeError: This pipeline's transformer cannot swap text. + """ + transformer = pipeline.diffusion_model.transformer + replace_text_embeddings = getattr(transformer, "replace_text_embeddings", None) + if not callable(replace_text_embeddings): + raise RuntimeError( + "Lingbot text events need a pipeline whose transformer supports " + "replace_text_embeddings; this pipeline does not." + ) + embeddings = self._prompt_embeddings.get(prompt) + if embeddings is None: + # initialize_cache releases the one-shot encoders once the rollout + # starts, so the text encoder is reloaded before encoding here. + pipeline._ensure_oneshot_encoders_loaded() + embeddings = pipeline.text_encoder([prompt]).to( + device=torch.device(self._device) + ) + self._prompt_embeddings[prompt] = embeddings + replace_text_embeddings(cache.transformer_cache, embeddings) + logger.info("Lingbot text context updated: {}", prompt) + + def _build_scene(self, session_desc: SessionDesc | None = None) -> SceneState: + """Describe the session this application runs, or is about to. + + Resolves the conditioning the same way :meth:`create_session` does, so + the page shows the prompt and first frame the rollout actually starts + from rather than only what was passed on the command line. Example + data, in particular, supplies both and neither appears in the raw + arguments. + """ + input_values = dict(self._input_values or {}) + desc = session_desc or self.session_desc() + prompt = str(input_values.get("prompt", "")) + image_path = str(input_values.get("image_path") or "") + try: + conditioning = self.defaults.input_resolver( + { + **input_values, + "pixel_height": desc.video_height, + "pixel_width": desc.video_width, + "fps": desc.frames_per_second_for_step, + } + ) + except Exception as error: # noqa: BLE001 - the page still needs a scene + # Resolving can download example data, so it is allowed to fail + # without taking the browser UI with it. + logger.debug("Lingbot scene falling back to raw inputs: {}", error) + else: + prompt = str(getattr(conditioning, "prompt", "") or prompt) + image_path = str(getattr(conditioning, "first_frame_path", "") or image_path) + return SceneState( + prompt=prompt, + model=getattr(self._pipeline_config, "name", type(self).__name__), + video_width=desc.video_width, + video_height=desc.video_height, + first_frame_path=image_path, + ) + + def _require_scene(self) -> SceneState: + """Return the scene, building it if no session has started yet. + + The HTTP server is serving before the runtime creates a session, so a + browser that connects while the model is still loading would otherwise + be told the session has not started -- which is exactly when its page + needs the scene. + """ + scene = self._scene + if scene is None: + scene = self._build_scene() + self._scene = scene + return scene + + def close(self) -> None: + """Release the pipeline, and the scratch directory for uploads.""" + scene_dir = self._scene_dir + self._scene_dir = None + if scene_dir is not None: + shutil.rmtree(scene_dir, ignore_errors=True) + super().close() + + # --- IWebUiProvider --------------------------------------------------- + def web_root(self) -> Path: + """Return the directory holding this application's page and assets.""" + return Path(__file__).parent / "web" + + def initial_scene(self) -> Mapping[str, Any]: + """Return the current scene for the page to render.""" + return self._require_scene().as_dict() + + def first_frame(self) -> tuple[bytes, str] | None: + """Return the frame the session starts from, uploaded or resolved. + + A resolved first frame is a path on the server, so it is read here + rather than handed to the page as a URL it could not load. + """ + scene = self._require_scene() + if scene.image_bytes is not None: + return scene.image_bytes, scene.image_content_type + if not scene.first_frame_path: + return None + path = Path(scene.first_frame_path) + try: + data = path.read_bytes() + except OSError as error: + logger.debug("Lingbot first frame unreadable: {}", error) + return None + content_type, _ = mimetypes.guess_type(path.name) + return data, content_type or "application/octet-stream" + + def apply_session_input(self, payload: Mapping[str, Any]) -> Mapping[str, Any]: + """Apply one page submission, steering the rollout when it can. + + A triggered text event swaps the rollout's text conditioning in place + so it takes effect without restarting. Prompt, first-frame, and + catalog changes are recorded for the next session, since the frame a + rollout was initialized from cannot be replaced mid-flight. + + Raises: + ValueError: The submission is malformed or names an unknown event. + """ + scene = self._require_scene() + before = (scene.image_bytes, scene.image_url) + prompt = scene.apply(payload) + if (scene.image_bytes, scene.image_url) != before: + # A different first frame is a different scene, and a rollout + # cannot swap the frame it was initialized from -- so ask for a + # new session rather than steering the current one, which would + # only blend the new prompt into the old world. + self._restart_on(scene) + elif prompt is not None: + # Handed to the model thread rather than applied here: this runs + # on the HTTP thread, where the rollout cache is in use. + with self._prompt_lock: + self._pending_prompt = prompt + return scene.as_dict() + + def _restart_on(self, scene: SceneState) -> None: + """Ask the runtime for a session that starts from ``scene``. + + Does nothing when the scene names no image, or when no UI loop has + registered yet -- the only thing able to make the request. The scene + is recorded either way, so the next session starts from it. + + Raises: + ValueError: The scene names an image that cannot seed a rollout. + """ + if not scene.image_url and scene.image_bytes is None: + return + first_frame = self._materialize_first_frame(scene) + if first_frame is None: + # The scene asked for an image and none could be produced. Failing + # here surfaces it as a 400 on the page rather than leaving the + # rollout quietly generating from the frame it already had. + raise ValueError( + f"No usable start image for this scene: {scene.image_url!r} " + "could not be resolved. Preset images are paths under the " + "application's web/ directory; a remote URL is loaded by the " + "browser and cannot seed a rollout." + ) + if str(first_frame) == scene.first_frame_path: + # The page posts its scene on every connect, so without this a + # reconnect rebuilt the session -- and paid the warmup again -- + # for a frame the rollout had already started from. + return + scene.first_frame_path = str(first_frame) + # Only the frame and prompt are overridden. The resolver takes an + # explicit image_path over the example's own ("image_path or + # example_dir / image.jpg"), while example data still supplies the + # intrinsics and poses it requires and nothing else provides -- + # turning it off here made every replacement session fail with + # "Lingbot Cam2V requires intrinsic_path". + self._input_values = { + **(self._input_values or {}), + "prompt": scene.prompt, + "image_path": str(first_frame), + } + ui_loop = self._ui_loop + if ui_loop is None: + logger.info("Lingbot scene recorded; it starts on the next session.") + return + ui_loop.request_new_session(self.session_desc()) + logger.info("Lingbot restarting on a new scene: {}", first_frame.name) + + def _materialize_first_frame(self, scene: SceneState) -> Path | None: + """Return a readable path for the scene's first frame. + + Uploads are written out, and a page-supplied URL is resolved inside + the web root, which is where the built-in presets keep their images. + A URL pointing anywhere else is not fetched -- the server does not + make outbound requests on a page's behalf. + """ + if scene.image_bytes is not None: + if self._scene_dir is None: + self._scene_dir = Path(tempfile.mkdtemp(prefix="lingbot-scene-")) + suffix = mimetypes.guess_extension(scene.image_content_type) or ".jpg" + path = self._scene_dir / f"first_frame{suffix}" + path.write_bytes(scene.image_bytes) + return path + if scene.image_url.startswith(("http://", "https://")): + return None + root = self.web_root().resolve() + candidate = (root / scene.image_url).resolve() + if not candidate.is_file() or not candidate.is_relative_to(root): + return None + return candidate def create_app() -> IApplication: diff --git a/integrations_v2/lingbot/apps/cam2v/scene.py b/integrations_v2/lingbot/apps/cam2v/scene.py new file mode 100644 index 000000000..b39034108 --- /dev/null +++ b/integrations_v2/lingbot/apps/cam2v/scene.py @@ -0,0 +1,453 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +"""Scene state behind the Lingbot browser UI: prompt, first frame, events. + +The browser page picks a scene -- a prompt, a first frame, and a catalog of +text events it can trigger during the rollout -- and this module holds what it +picked. The serving layer stays generic: it copies :meth:`SceneState.as_dict` +into a JSON response and hands :meth:`SceneState.apply` the decoded request +body, without knowing what any of it means. + +Text events are the model-facing half. Each carries a prompt that replaces the +rollout's text conditioning while the event is active, so triggering "Storm" +mid-rollout steers generation without restarting the session. The reserved +``user_prompt`` id carries free-form text supplied at request time instead of a +catalog entry. +""" + +from __future__ import annotations + +import json +import re +from collections.abc import Mapping +from dataclasses import dataclass, field +from typing import Any + +MAX_TEXT_EVENTS = 20 +"""Ceiling on a client-supplied catalog, matching the page's own limit.""" + +MAX_TEXT_EVENT_LABEL_CHARS = 64 +"""Ceiling on one event's button label.""" + +MAX_TEXT_EVENT_PROMPT_CHARS = 1_000 +"""Ceiling on one event's prompt, well above any written for the presets.""" + +MAX_PROMPT_CHARS = 2_000 +"""Ceiling on the scene prompt itself.""" + +MAX_IMAGE_BYTES = 15 * 1024 * 1024 +"""Ceiling on an uploaded first frame.""" + +USER_PROMPT_EVENT_ID = "user_prompt" +"""Reserved id for free-form text supplied at request time. + +Not a catalog entry, so it deliberately bypasses the membership check in +:meth:`SceneState.resolve_event_prompt`. Must match the literal in +``web/adapter.js`` and ``lingbot/impl/input_mapping.py``. +""" + +_TEXT_EVENT_ID_RE = re.compile(r"^[A-Za-z0-9_.:-]{1,64}$") + +_CLEAR_STATES = frozenset({"clear", "release", "off", "none"}) +_TRIGGER_STATES = frozenset({"trigger", "hold", "on"}) + + +def normalize_prompt_text(prompt: str) -> str: + """Collapse prompt whitespace into a single line.""" + return " ".join(prompt.split()) + + +def _normalize_field(value: object) -> str: + return normalize_prompt_text(str(value)) if value is not None else "" + + +def _slugify_event_id(label: str, index: int) -> str: + slug = re.sub(r"[^a-z0-9]+", "-", label.lower()).strip("-") + return (slug or f"event-{index + 1}")[:64] + + +@dataclass(frozen=True, slots=True) +class TextEventSpec: + """One text event the page can trigger, addressed by stable id.""" + + event_id: str + """Stable identifier the page sends back to trigger this event.""" + + label: str + """Short client-facing button label.""" + + prompt: str + """Text conditioning activated while this event is active.""" + + category: str = "environment" + """Client-facing group used to organize the event controls.""" + + def as_public_dict(self) -> dict[str, str]: + """Return the client-facing event payload.""" + return { + "event_id": self.event_id, + "label": self.label, + "prompt": self.prompt, + "category": self.category, + } + + +DEFAULT_TEXT_EVENTS: tuple[TextEventSpec, ...] = ( + TextEventSpec( + event_id="portal", + label="Portal", + prompt=( + "A luminous magical portal opens in the scene, casting colored light " + "and swirling particles into the environment." + ), + ), + TextEventSpec( + event_id="storm", + label="Storm", + prompt=( + "A dramatic storm rolls in with dark clouds, wind, rain, and flashes " + "of lightning reshaping the atmosphere." + ), + ), + TextEventSpec( + event_id="fireworks", + label="Fireworks", + prompt=( + "Bright fireworks burst overhead, filling the sky with colorful sparks " + "and reflections across the scene." + ), + ), +) +"""Events advertised when the page supplies no catalog of its own.""" + + +def normalize_text_events(raw_events: object) -> tuple[TextEventSpec, ...]: + """Validate and normalize a client-supplied text-event catalog. + + Args: + raw_events: Decoded ``text_events`` value from the page. + + Returns: + The catalog, with ids filled in from labels where the page omitted + them. + + Raises: + ValueError: The catalog is malformed, over a size limit, or contains + a duplicate id. + """ + if not isinstance(raw_events, (list, tuple)): + raise ValueError("Text events must be a list.") + + text_events: list[TextEventSpec] = [] + seen_ids: set[str] = set() + for index, raw_event in enumerate(raw_events): + if isinstance(raw_event, TextEventSpec): + event_id = raw_event.event_id.strip() + label = normalize_prompt_text(raw_event.label) + prompt = normalize_prompt_text(raw_event.prompt) + category = normalize_prompt_text(raw_event.category) or "custom" + elif isinstance(raw_event, Mapping): + label = _normalize_field(raw_event.get("label")) + prompt = _normalize_field(raw_event.get("prompt")) + # Left unslugified until after the blank-row check below, so a + # row with nothing in it does not acquire an id and become an + # event with a missing prompt. + event_id = _normalize_field( + raw_event.get("event_id", raw_event.get("id")) + ) + category = _normalize_field(raw_event.get("category")) + else: + raise ValueError("Each text event must be an object.") + + # A wholly empty entry is a trailing blank row in the page's editor, + # not an error. + if not event_id and not label and not prompt: + continue + if not event_id: + event_id = _slugify_event_id(label, index) + if not prompt: + raise ValueError("Text event prompt is required.") + if not label: + label = event_id + if len(label) > MAX_TEXT_EVENT_LABEL_CHARS: + raise ValueError( + f"Text event labels must be <= {MAX_TEXT_EVENT_LABEL_CHARS} characters." + ) + if len(prompt) > MAX_TEXT_EVENT_PROMPT_CHARS: + raise ValueError( + "Text event prompts must be " + f"<= {MAX_TEXT_EVENT_PROMPT_CHARS} characters." + ) + if not _TEXT_EVENT_ID_RE.fullmatch(event_id): + raise ValueError( + "Text event ids must be 1-64 characters using only letters, " + "numbers, '_', '.', ':', or '-'." + ) + if event_id in seen_ids: + raise ValueError(f"Duplicate text event id={event_id!r}.") + seen_ids.add(event_id) + text_events.append( + TextEventSpec( + event_id=event_id, + label=label, + prompt=prompt, + category=category or "custom", + ) + ) + + if len(text_events) > MAX_TEXT_EVENTS: + raise ValueError(f"At most {MAX_TEXT_EVENTS} text events are supported.") + return tuple(text_events) + + +def normalize_event_state(state: object) -> str: + """Return a trigger or clear state, defaulting anything else to trigger. + + Raises: + ValueError: The state is a word this does not recognize. + """ + normalized = str(state or "trigger").strip().lower() or "trigger" + if normalized in _CLEAR_STATES or normalized in _TRIGGER_STATES: + return normalized + raise ValueError( + "Event state must be one of trigger, hold, on, clear, release, off, none." + ) + + +def is_clear_state(state: str) -> bool: + """Return whether ``state`` asks to restore the scene's base prompt.""" + return state in _CLEAR_STATES + + +@dataclass +class SceneState: + """What the page has chosen for the session, and what it may change. + + Holds no model objects: the application owns those and reads this for the + prompt and events to apply. Kept separate so the catalog rules are + testable without a pipeline. + """ + + prompt: str + """Base prompt, restored whenever an active event is cleared.""" + + model: str + """Model variant name, shown by the page.""" + + video_width: int + """Generated frame width, shown by the page.""" + + video_height: int + """Generated frame height, shown by the page.""" + + default_image_url: str = "" + """First frame the application starts with, absent a page upload.""" + + image_url: str = "" + """First frame the page selected, by URL.""" + + image_bytes: bytes | None = None + """First frame the page uploaded, which wins over :attr:`image_url`.""" + + image_content_type: str = "image/jpeg" + """Content type reported for :attr:`image_bytes`.""" + + first_frame_path: str = "" + """File the session starts from, served through the first-frame endpoint. + + A resolved first frame is a path on the server, which a browser cannot + load, so it is read and served rather than handed over as a URL. + """ + + text_events: tuple[TextEventSpec, ...] = DEFAULT_TEXT_EVENTS + """Catalog the page may trigger from.""" + + active_event_id: str | None = None + """Event currently steering generation, or ``None`` for the base prompt.""" + + input_source: str = "default" + """``"default"`` until the page submits a change, then ``"uploaded"``.""" + + _event_prompts: dict[str, str] = field(default_factory=dict, repr=False) + """Prompt by event id, rebuilt whenever the catalog changes.""" + + def __post_init__(self) -> None: + self.prompt = normalize_prompt_text(self.prompt) + self._reindex_events() + + def _reindex_events(self) -> None: + self._event_prompts = { + event.event_id: event.prompt for event in self.text_events + } + # A catalog change can retire the active event; fall back to the base + # prompt rather than leaving a dangling id the page cannot clear. + if self.active_event_id is not None: + if self.active_event_id not in self._event_prompts: + if self.active_event_id != USER_PROMPT_EVENT_ID: + self.active_event_id = None + + def as_dict(self) -> dict[str, Any]: + """Return the scene payload the page renders itself from.""" + return { + "first_frame_url": "/api/session/first_frame", + "image_url": self.image_url or self.default_image_url, + "default_image_url": self.default_image_url, + # True only when /api/session/first_frame has something to + # answer with: uploaded bytes, or a file the session starts from. + # A URL is not fetched server-side -- the page loads it directly + # from ``image_url`` -- so reporting one here would send the page + # to an endpoint that can only 404, once per action. + "has_first_frame": bool(self.image_bytes or self.first_frame_path), + "prompt": self.prompt, + "input_source": self.input_source, + "model": self.model, + "capabilities": {"text_events": bool(self.text_events)}, + "event_catalog": [event.as_public_dict() for event in self.text_events], + "active_event_id": self.active_event_id, + "resolution": {"width": self.video_width, "height": self.video_height}, + } + + def active_prompt(self) -> str: + """Return the text the rollout should currently be conditioned on. + + The active event's prompt while one is active, otherwise the scene's + base prompt. Used to restore conditioning after a reset re-seeds the + rollout from the session's own prompt. + """ + if self.active_event_id is None: + return self.prompt + return self._event_prompts.get(self.active_event_id, self.prompt) + + def resolve_event_prompt( + self, *, event_id: str, state: str, prompt: str = "" + ) -> str | None: + """Return the prompt an event asks for, and record it as active. + + Returns: + The text to condition on, or ``None`` when nothing changes. + + Raises: + ValueError: The event is not in the catalog, or a free-form + request carried no text. + """ + state = normalize_event_state(state) + event_id = event_id.strip() + if is_clear_state(state) or not event_id: + self.active_event_id = None + return self.prompt + + if event_id == USER_PROMPT_EVENT_ID: + free_form = normalize_prompt_text(prompt) + if not free_form: + raise ValueError("A free-form prompt requires prompt text.") + if len(free_form) > MAX_PROMPT_CHARS: + raise ValueError(f"Prompt must be <= {MAX_PROMPT_CHARS} characters.") + self.active_event_id = event_id + return free_form + + event_prompt = self._event_prompts.get(event_id) + if event_prompt is None: + supported = ", ".join(sorted(self._event_prompts)) or "none" + raise ValueError(f"Unknown event_id={event_id!r}. Supported: {supported}") + self.active_event_id = event_id + return event_prompt + + def apply(self, payload: Mapping[str, Any]) -> str | None: + """Apply one page submission and return any prompt to condition on. + + Args: + payload: Decoded request body. ``prompt``, ``image``/``image_url``, + and ``text_events`` set the scene; ``event_id``/``state`` + trigger one event from the catalog. + + Returns: + Text to condition the rollout on now, or ``None`` when the change + only takes effect for the next session. + + Raises: + ValueError: The submission is malformed or names an unknown event. + """ + changed = False + + raw_events = payload.get("text_events", payload.get("events")) + if isinstance(raw_events, str) and raw_events.strip(): + try: + raw_events = json.loads(raw_events) + except json.JSONDecodeError as error: + raise ValueError("Text events must be valid JSON.") from error + if raw_events is not None and not isinstance(raw_events, str): + self.text_events = normalize_text_events(raw_events) + self._reindex_events() + changed = True + + prompt_changed = False + raw_prompt = payload.get("prompt") + if isinstance(raw_prompt, str) and raw_prompt.strip(): + prompt = normalize_prompt_text(raw_prompt) + if len(prompt) > MAX_PROMPT_CHARS: + raise ValueError(f"Prompt must be <= {MAX_PROMPT_CHARS} characters.") + prompt_changed = prompt != self.prompt + self.prompt = prompt + changed = True + + image = payload.get("image") + if isinstance(image, bytes) and image: + if len(image) > MAX_IMAGE_BYTES: + raise ValueError( + f"First-frame image must be <= {MAX_IMAGE_BYTES} bytes." + ) + content_type = str(payload.get("image_content_type", "image/jpeg")) + if not content_type.startswith("image/"): + raise ValueError("Uploaded first frame must be an image.") + self.image_bytes = image + self.image_content_type = content_type + # An upload supersedes any previously chosen URL. + self.image_url = "" + changed = True + else: + raw_url = payload.get("image_url") + if isinstance(raw_url, str) and raw_url.strip(): + self.image_url = raw_url.strip() + self.image_bytes = None + changed = True + + event_id = payload.get("event_id") + if isinstance(event_id, str) and event_id.strip(): + return self.resolve_event_prompt( + event_id=event_id, + state=str(payload.get("state", "trigger")), + prompt=str(payload.get("prompt", "")), + ) + + if not changed: + raise ValueError( + "Submit a prompt, an image, an image URL, text events, or an event." + ) + self.input_source = "uploaded" + if prompt_changed: + # Steer the running rollout rather than waiting for a session that + # may never come: the runtime builds one session per process, so a + # prompt recorded for "next time" would never be seen. Switching + # scenes mid-rollout is exactly what the text-context swap is for. + # Any active event is superseded by the new base prompt. + self.active_event_id = None + return self.prompt + return None + + +__all__ = [ + "DEFAULT_TEXT_EVENTS", + "MAX_IMAGE_BYTES", + "MAX_PROMPT_CHARS", + "MAX_TEXT_EVENTS", + "MAX_TEXT_EVENT_LABEL_CHARS", + "MAX_TEXT_EVENT_PROMPT_CHARS", + "USER_PROMPT_EVENT_ID", + "SceneState", + "TextEventSpec", + "is_clear_state", + "normalize_event_state", + "normalize_prompt_text", + "normalize_text_events", +] diff --git a/integrations_v2/lingbot/apps/cam2v/web/adapter.css b/integrations_v2/lingbot/apps/cam2v/web/adapter.css index 0070e2933..5ab147aa9 100644 --- a/integrations_v2/lingbot/apps/cam2v/web/adapter.css +++ b/integrations_v2/lingbot/apps/cam2v/web/adapter.css @@ -10,7 +10,16 @@ .stageVideo, .firstFramePreview { - inset: 50% auto auto 50%; + /* One rule for both, so the preview standing in for the video cannot + change size or framing on connect. Shown centred at the stream's own + pixel size -- taken from the session resolution reported by + /api/session/initial_scene (see applyVideoSizing) -- never upscaled, so + what reaches the browser is what the model generated. It only shrinks + when the window is smaller than the stream. */ + /* Anchored near the top rather than centred: the Player Controls panel + occupies the lower left, and a centred frame put the model's output + behind it. Clears the header, then stays put. */ + inset: clamp(84px, 11vh, 148px) auto auto 50%; width: min( 100vw, var(--lingbot-video-width, 832px), @@ -19,8 +28,8 @@ height: auto; max-height: min(100vh, var(--lingbot-video-height, 464px)); aspect-ratio: var(--lingbot-video-aspect, 832 / 464); - transform: translate(-50%, -50%); - object-fit: contain; + transform: translateX(-50%); + object-fit: cover; object-position: center; } diff --git a/integrations_v2/lingbot/apps/cam2v/web/adapter.js b/integrations_v2/lingbot/apps/cam2v/web/adapter.js index 0bd71ce82..53e8b372b 100644 --- a/integrations_v2/lingbot/apps/cam2v/web/adapter.js +++ b/integrations_v2/lingbot/apps/cam2v/web/adapter.js @@ -11,10 +11,11 @@ let directorMode = new URLSearchParams(window.location.search).has("director") // Letter hotkeys for event buttons, in assignment order. Excludes the // reserved movement keys (w/a/s/d/q/e/i/j/k/l) and "c" (Clear's own -// hotkey) so they never collide with driving input or each other. Letters +// hotkey) and "r" (Restart's) so they never collide with driving input +// or each other. Letters // run out before director-heavy presets do -- events past the pool size // simply render without a hotkey, same as the old 9-key digit cap. -const EVENT_HOTKEY_LETTERS = ["b", "f", "g", "h", "m", "n", "o", "p", "r", "t", "u", "v", "x", "y", "z"] +const EVENT_HOTKEY_LETTERS = ["b", "f", "g", "h", "m", "n", "o", "p", "t", "u", "v", "x", "y", "z"] // Jump/Crouch are player movement actions, not narrative/pacing triggers -- // rendered in their own row next to the movement key grid instead of the @@ -88,6 +89,10 @@ let initialScene = null let initialSceneLocked = false let promptEdited = false let textEventsEdited = false +// The upload that carries the current catalog to the server, if one is +// still in flight. An event triggered before it lands would be rejected +// with "Unknown event_id", since the server only knows what it was told. +let pendingCatalogUpload = null let firstFrameUrlEdited = false let firstFrameInputMode = "url" let selectedFirstFrameFile = null @@ -117,6 +122,7 @@ let eventControls = null let eventButtons = null let actionButtons = null let clearEventButton = null +let restartButton = null let livePromptInput = null let livePromptSubmitButton = null let directorButtons = null @@ -148,6 +154,12 @@ let directorPromptSubmitButton = null // explicit toggle click. let showingDirectorControls = false let currentPreset = null +// The image the selected preset asks for. Held separately because the +// firstFrameUrlEdited guard is cleared once an upload completes, after +// which a scene arriving from the server would overwrite the field with +// whatever the session happens to be running -- showing dragon.jpg while +// every other control said Jet Ski Cruise. +let presetImageUrl = null function makeSceneCard() { const panel = document.createElement("section") @@ -223,6 +235,7 @@ function makeEventControls() {

      +
      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 T$8xqAPt*!}0y!U*AV2@vBCFJ9 literal 0 HcmV?d00001 diff --git a/integrations_v2/lingbot/apps/cam2v/web/assets/horizontal-dark.svg b/integrations_v2/lingbot/apps/cam2v/web/assets/horizontal-dark.svg new file mode 100644 index 000000000..89b68f9d1 --- /dev/null +++ b/integrations_v2/lingbot/apps/cam2v/web/assets/horizontal-dark.svg @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/integrations_v2/lingbot/apps/cam2v/web/assets/horizontal-light.svg b/integrations_v2/lingbot/apps/cam2v/web/assets/horizontal-light.svg new file mode 100644 index 000000000..a491910db --- /dev/null +++ b/integrations_v2/lingbot/apps/cam2v/web/assets/horizontal-light.svg @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/integrations_v2/lingbot/apps/cam2v/web/index.html b/integrations_v2/lingbot/apps/cam2v/web/index.html new file mode 100644 index 000000000..c550212b6 --- /dev/null +++ b/integrations_v2/lingbot/apps/cam2v/web/index.html @@ -0,0 +1,92 @@ + + + + + + + + FlashDreams WebRTC Drive + + + +

      +
      +

      FlashDreams WebRTC Drive

      + + + +
      + + +
      + +
      + +
      + Status +
      + + Idle +
      + + +
      +
      + Flow + waiting +
      +
      + +
      + +
      +

      Player Controls

      +
      +
      +
      + +
      +

      Client Logs

      +
      +
      + + Waiting +
      +
      + +
      +
      + FPS + -- +
      +
      + Latency + -- +
      +
      + Resolution + -- +
      +
      + Step + -- +
      +
      + World Model + World Model +
      +
      +
      +
      + + + + diff --git a/integrations_v2/lingbot/apps/cam2v/web/request_session.css b/integrations_v2/lingbot/apps/cam2v/web/request_session.css new file mode 100644 index 000000000..f38783e62 --- /dev/null +++ b/integrations_v2/lingbot/apps/cam2v/web/request_session.css @@ -0,0 +1,605 @@ +/* +SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +SPDX-License-Identifier: Apache-2.0 +*/ + +:root { + color-scheme: dark; + font-family: Inter, ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, sans-serif; + --panel-bg: rgba(16, 17, 18, 0.70); + --panel-border: rgba(255, 255, 255, 0.15); + --panel-shadow: 0 20px 60px rgba(0, 0, 0, 0.35); + --text: #f3f7f0; + --muted: #b9c0bf; + --accent: #8ef01c; + --accent-strong: #a9ff2f; + --danger: #ff685f; + --warning: #ffbf4f; + --cyan: #63d8ff; +} + +* { + box-sizing: border-box; +} + +html, +body { + min-height: 100%; +} + +body { + margin: 0; + overflow: hidden; + background: #050607; + color: var(--text); +} + +button { + font: inherit; +} + +select { + font: inherit; +} + +.appShell { + min-height: 100vh; +} + +.stage { + position: relative; + min-height: 100vh; + overflow: hidden; + background: #050607; + isolation: isolate; +} + +.stageBackdrop, +.idleCanvas, +.stageVideo, +.stageVignette { + position: absolute; + inset: 0; + width: 100%; + height: 100%; +} + +.stageBackdrop { + z-index: 0; + background: + linear-gradient(180deg, #14181c 0%, #0b1013 48%, #050607 100%), + linear-gradient(115deg, rgba(99, 216, 255, 0.18), rgba(142, 240, 28, 0.10) 42%, rgba(255, 191, 79, 0.12)); +} + +.idleCanvas { + z-index: 1; + display: block; + background: transparent; + opacity: 1; + transition: opacity 220ms ease; +} + +.stageVideo { + z-index: 2; + display: block; + object-fit: cover; + opacity: 0; + background: #050607; + transition: opacity 220ms ease; +} + +.modelStageSlot { + position: absolute; + z-index: 2; + inset: 0; + pointer-events: none; +} + +.modelPanelSlot { + display: contents; +} + +.modelStatusSlot:empty, +.modelControlSlot:empty { + display: none; +} + +body.has-video .stageVideo { + opacity: 1; +} + +body.has-video .idleCanvas, +body.has-video .stageBackdrop { + opacity: 0; +} + +.stageVignette { + z-index: 3; + pointer-events: none; + background: none; +} + +.srOnly { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; +} + +.overlayPanel { + z-index: 4; + border: 1px solid var(--panel-border); + border-radius: 8px; + background: var(--panel-bg); + box-shadow: var(--panel-shadow); + backdrop-filter: blur(18px) saturate(1.15); +} + +.brandOverlay { + position: absolute; + z-index: 4; + top: clamp(18px, 3vw, 42px); + left: clamp(18px, 3vw, 52px); + width: clamp(260px, 25vw, 390px); + filter: drop-shadow(0 4px 18px rgba(0, 0, 0, 0.55)); +} + +.brandLogo { + display: block; + width: 100%; + height: auto; +} + +.statusLine strong, +.metric strong, +.logEntry time { + color: var(--accent-strong); +} + +.statusCard { + position: absolute; + top: clamp(18px, 3vw, 42px); + right: clamp(18px, 3vw, 42px); + width: min(240px, calc(100vw - 36px)); + padding: 16px 18px; + display: grid; + gap: 10px; +} + +.panelLabel { + color: var(--muted); + font-size: 0.72rem; + font-weight: 700; + letter-spacing: 0.12em; + text-transform: uppercase; +} + +.statusLine { + display: flex; + align-items: center; + gap: 10px; + min-height: 30px; + font-size: clamp(1.1rem, 2vw, 1.35rem); +} + +.statusDot, +.liveDot { + display: inline-block; + width: 10px; + height: 10px; + flex: 0 0 auto; + border-radius: 999px; + background: var(--muted); + box-shadow: 0 0 0 rgba(255, 255, 255, 0); +} + +body[data-status="connected"] .statusDot, +body[data-status="waiting"] .statusDot, +body[data-status="generating"] .statusDot, +.liveDot { + background: #47d65a; + box-shadow: 0 0 16px rgba(71, 214, 90, 0.62); +} + +body[data-status="connecting"] .statusDot { + background: var(--warning); + box-shadow: 0 0 16px rgba(255, 191, 79, 0.54); +} + +body[data-status="error"] .statusDot { + background: var(--danger); + box-shadow: 0 0 16px rgba(255, 104, 95, 0.54); +} + +.connectButton { + width: 100%; + min-height: 36px; + border: 1px solid rgba(142, 240, 28, 0.45); + border-radius: 6px; + background: rgba(142, 240, 28, 0.12); + color: var(--text); + cursor: pointer; + font-weight: 700; +} + +.connectButton:hover { + background: rgba(142, 240, 28, 0.20); +} + +.connectButton:disabled { + cursor: not-allowed; + opacity: 0.52; +} + +.postprocessField { + display: grid; + gap: 6px; + color: var(--muted); + font-size: 0.72rem; + font-weight: 700; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.postprocessField[hidden] { + display: none; +} + +.postprocessField select { + width: 100%; + min-height: 34px; + border: 1px solid rgba(255, 255, 255, 0.22); + border-radius: 6px; + background: rgba(12, 14, 15, 0.86); + color: var(--text); + padding: 0 9px; + text-transform: none; +} + +.postprocessField select:disabled { + cursor: not-allowed; + opacity: 0.52; +} + +.flowLine { + display: grid; + grid-template-columns: auto 1fr; + gap: 8px; + align-items: center; + min-width: 0; + color: var(--muted); + font-size: 0.78rem; +} + +.flowLine strong { + min-width: 0; + overflow: hidden; + color: var(--text); + text-overflow: ellipsis; + white-space: nowrap; +} + +.controlCard { + position: absolute; + left: clamp(18px, 3vw, 48px); + bottom: clamp(96px, 12vh, 132px); + width: min(380px, calc(100vw - 36px)); + padding: 18px 20px 20px; +} + +.controlCard h2, +.logCard h2 { + display: flex; + align-items: center; + gap: 10px; + margin: 0 0 18px; + font-size: 1.08rem; + font-weight: 740; + letter-spacing: 0; + white-space: nowrap; +} + +.controlCard h2 .panelAccentBar, +.logCard h2 span { + width: 3px; + height: 22px; + border-radius: 999px; + background: var(--accent); + box-shadow: 0 0 14px rgba(142, 240, 28, 0.42); +} + +.controlRows { + display: grid; + gap: 12px; +} + +.controlRows[hidden] { + display: none; +} + +.controlRow { + display: grid; + grid-template-columns: 176px 1fr; + gap: 18px; + align-items: center; + min-height: 38px; + color: var(--text); + font-size: 0.95rem; +} + +.keyCluster { + display: grid; + grid-auto-flow: column; + grid-auto-columns: 38px; + gap: 8px; + justify-content: start; +} + +.keyClusterWide { + grid-auto-columns: 38px; +} + +.controlKey { + width: 38px; + height: 38px; + border: 1px solid rgba(255, 255, 255, 0.22); + border-bottom-color: rgba(255, 255, 255, 0.34); + border-radius: 6px; + background: rgba(12, 14, 15, 0.62); + color: #f9fbff; + cursor: pointer; + font-weight: 750; + line-height: 1; + box-shadow: inset 0 -2px 0 rgba(0, 0, 0, 0.30); + touch-action: none; + user-select: none; +} + +.controlKey:hover { + border-color: rgba(255, 255, 255, 0.42); + background: rgba(255, 255, 255, 0.09); +} + +.controlKey.is-active { + border-color: rgba(142, 240, 28, 0.78); + background: rgba(142, 240, 28, 0.26); + color: var(--accent-strong); + box-shadow: + 0 0 18px rgba(142, 240, 28, 0.32), + inset 0 0 0 1px rgba(142, 240, 28, 0.18); + transform: translateY(1px); +} + +.logCard { + position: absolute; + right: clamp(18px, 3vw, 42px); + bottom: clamp(78px, 9vh, 98px); + width: min(400px, calc(100vw - 36px)); + padding: 18px 20px 16px; +} + +.logList { + display: grid; + align-content: start; + gap: 6px; + min-height: 150px; + max-height: 230px; + overflow: hidden; + padding-bottom: 12px; + border-bottom: 1px solid rgba(255, 255, 255, 0.16); + font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; + font-size: 0.82rem; + line-height: 1.35; +} + +.logEntry { + display: grid; + grid-template-columns: 76px 1fr; + gap: 8px; + min-width: 0; + color: #f3f6f7; +} + +.logEntry span { + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.logEntry.is-error span { + color: #ffb0aa; +} + +.logEntry.is-client time { + color: var(--cyan); +} + +.logFooter { + display: flex; + align-items: center; + gap: 8px; + padding-top: 12px; + color: var(--muted); + font-size: 0.86rem; +} + +.metricsBar { + position: absolute; + z-index: 4; + left: 50%; + bottom: clamp(20px, 4vh, 40px); + display: grid; + grid-template-columns: + minmax(max-content, 0.7fr) + minmax(max-content, 1fr) + minmax(max-content, 1.15fr) + minmax(max-content, 0.7fr) + minmax(max-content, 1.45fr); + width: min(960px, calc(100vw - 36px)); + overflow: hidden; + border: 1px solid rgba(255, 255, 255, 0.14); + border-radius: 8px; + background: rgba(18, 20, 22, 0.74); + box-shadow: 0 12px 38px rgba(0, 0, 0, 0.32); + backdrop-filter: blur(16px) saturate(1.12); + transform: translateX(-50%); +} + +.metric { + display: grid; + grid-template-columns: max-content max-content; + align-items: center; + justify-content: center; + gap: 10px; + min-width: max-content; + min-height: 42px; + padding: 0 16px; + border-right: 1px solid rgba(255, 255, 255, 0.11); + font-size: 0.88rem; + text-align: center; +} + +.metric:last-child { + border-right: 0; +} + +.metric span { + color: var(--muted); + white-space: nowrap; +} + +.metric strong { + text-align: left; + white-space: nowrap; + font-weight: 760; +} + +body[data-status="generating"] .statusLine strong { + animation: statusPulse 1.2s ease-in-out infinite; +} + +@keyframes statusPulse { + 0%, + 100% { + opacity: 1; + } + 50% { + opacity: 0.62; + } +} + +@media (max-width: 900px) { + body { + overflow: auto; + } + + .stage { + min-height: max(100svh, 980px); + } + + .brandOverlay { + top: 18px; + left: 18px; + width: min(310px, calc(100vw - 36px)); + } + + .statusCard { + top: 88px; + left: 18px; + right: auto; + } + + .controlCard, + .logCard { + left: 18px; + right: 18px; + width: auto; + } + + .controlCard { + bottom: 440px; + } + + .logCard { + bottom: 164px; + } + + .metricsBar { + left: 18px; + right: 18px; + bottom: 18px; + grid-template-columns: repeat(2, minmax(0, 1fr)); + width: auto; + transform: none; + } + + .metric { + padding: 0 14px; + } + + .metric:nth-child(2n) { + border-right: 0; + } + + .metric:last-child { + grid-column: 1 / -1; + } +} + +@media (max-width: 520px) { + .controlRow { + grid-template-columns: 1fr; + gap: 8px; + } + + .keyCluster { + grid-auto-columns: minmax(34px, 1fr); + } + + .controlKey { + width: 100%; + } + + .logList { + min-height: 112px; + max-height: 150px; + } + + .metricsBar { + grid-template-columns: 1fr; + } + + .metric { + min-height: 36px; + border-right: 0; + border-bottom: 1px solid rgba(255, 255, 255, 0.11); + } + + .metric:last-child { + grid-column: auto; + border-bottom: 0; + } +} + +.promptGenerationPanel { + position: absolute; + z-index: 4; + left: clamp(18px, 3vw, 52px); + bottom: clamp(92px, 13vw, 150px); + width: min(430px, calc(100vw - 36px)); + padding: 16px 18px; +} +.promptGenerationField { display: grid; gap: 7px; color: var(--muted); font-size: .72rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; } +.promptGenerationField textarea { width: 100%; resize: vertical; min-height: 92px; border: 1px solid rgba(255,255,255,.22); border-radius: 6px; background: rgba(12,14,15,.86); color: var(--text); padding: 9px; font: inherit; text-transform: none; letter-spacing: normal; } +.promptGenerationActions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; } +.promptGenerationActions button { min-height: 34px; border: 1px solid rgba(142,240,28,.45); border-radius: 6px; background: rgba(142,240,28,.12); color: var(--text); cursor: pointer; font-weight: 700; padding: 0 10px; } +.promptGenerationActions button:disabled { cursor: not-allowed; opacity: .5; } +.promptGenerationHint { margin: 10px 0 0; color: var(--muted); font-size: .78rem; line-height: 1.35; } +.controlCard[hidden] { display: none; } +.promptDurationInput { width: 8rem; min-height: 34px; margin-top: 12px; border: 1px solid rgba(255,255,255,.22); border-radius: 6px; background: rgba(12,14,15,.86); color: var(--text); padding: 0 9px; } diff --git a/integrations_v2/lingbot/apps/cam2v/web/request_session.js b/integrations_v2/lingbot/apps/cam2v/web/request_session.js new file mode 100644 index 000000000..2a43aae11 --- /dev/null +++ b/integrations_v2/lingbot/apps/cam2v/web/request_session.js @@ -0,0 +1,1430 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +const mockMode = new URLSearchParams(window.location.search).has("mock") +// ?manual skips the automatic connect-on-load attempt (still available via +// the Connect button) -- avoids a stray/restored tab silently racing into +// the single active WebRTC session and locking out the tab you meant to use. +const manualConnectMode = new URLSearchParams(window.location.search).has("manual") + +/** + * @typedef {Object} WebRTCModelAdapter + * @property {string=} modelName + * @property {string=} stylesheet + * @property {Array<{label: string, keys: Array}>=} controls + * @property {{postprocess?: boolean}=} capabilities + * @property {{endpoint: string, label?: string, placeholder?: string, generateLabel?: string}=} promptGeneration + * @property {(context: Object) => (void|Promise)=} mount + * @property {(context: Object) => (void|Promise)=} beforeConnect + * @property {(action: Object, context: Object) => void=} onActionSent + * @property {(payload: Object, context: Object) => boolean=} onControlMessage + * @property {(visible: boolean, context: Object) => void=} onVideoVisibilityChanged + * @property {(context: Object) => void=} onDisconnect + */ + +const connectButton = document.getElementById("connectButton") +const statusText = document.getElementById("statusText") +const flowText = document.getElementById("flowText") +const eventLog = document.getElementById("eventLog") +const logState = document.getElementById("logState") +const remoteVideo = document.getElementById("remoteVideo") +const idleCanvas = document.getElementById("idleCanvas") +const fpsValue = document.getElementById("fpsValue") +const latencyValue = document.getElementById("latencyValue") +const resolutionValue = document.getElementById("resolutionValue") +const stepValue = document.getElementById("stepValue") +const modelValue = document.getElementById("modelValue") +const postprocessField = document.getElementById("postprocessField") +const postprocessSelect = document.getElementById("postprocessSelect") +const modelStageSlot = document.getElementById("modelStageSlot") +const modelStatusSlot = document.getElementById("modelStatusSlot") +const modelPanelSlot = document.getElementById("modelPanelSlot") +const modelControlSlot = document.getElementById("modelControlSlot") +const controlRows = document.getElementById("controlRows") + +const keyAliases = new Map([ + ["arrowup", "w"], + ["arrowleft", "a"], + ["arrowdown", "s"], + ["arrowright", "d"], +]) +const keySources = new Map() +const heldKeyOrder = new Map() +const activeKeys = new Set() +const frameTimes = [] +const pendingActions = [] +const maxPendingActions = 32 +const heartbeatIntervalMs = 2000 +const autoConnectMaxAttempts = 3 +const autoConnectRetryDelayMs = 750 + +let allowedKeys = new Set() +let controlButtons = [] +/** @type {WebRTCModelAdapter|null} */ +let modelAdapter = null + +let peerConnection = null +let controlChannel = null +let statsTimer = null +let videoMetricsTimer = null +let heartbeatTimer = null +let inferenceInFlight = false +let connected = false +let disconnecting = false +let heldKeySequence = 0 +let postprocessAvailable = false +let liveVideoStream = null + +const metrics = { + fps: null, + targetFps: null, + latencyMs: null, + rttMs: null, + resolution: null, + step: null, + model: "World Model", +} + +function normalizeKey(rawKey) { + const key = String(rawKey || "").toLowerCase() + return keyAliases.get(key) || key +} + +function isEditableControlTarget(target) { + if (!target || typeof target !== "object") { + return false + } + if (target.isContentEditable === true) { + return true + } + const tagName = typeof target.tagName === "string" ? target.tagName.toLowerCase() : "" + if (["input", "textarea", "select"].includes(tagName)) { + return true + } + return typeof target.closest === "function" + && target.closest("input, textarea, select, [contenteditable]") !== null +} + +function formatTime() { + return new Date().toLocaleTimeString([], { hour12: false }) +} + +function firstFinite(...values) { + for (const value of values) { + const number = Number(value) + if (Number.isFinite(number)) { + return number + } + } + return null +} + +function formatMs(value) { + if (!Number.isFinite(value)) { + return "--" + } + if (value >= 1000) { + return `${(value / 1000).toFixed(1)} s` + } + return `${Math.round(value)} ms` +} + +function logEvent(message, { source = "server", level = "info" } = {}) { + const consoleMessage = `[FlashDreams WebRTC][${source}] ${message}` + if (level === "error") { + console.error(consoleMessage) + } else { + console.info(consoleMessage) + } + + const entry = document.createElement("div") + entry.className = `logEntry is-${source}` + if (level === "error") { + entry.classList.add("is-error") + } + + const time = document.createElement("time") + time.textContent = `[${formatTime()}]` + const body = document.createElement("span") + body.textContent = message + entry.append(time, body) + eventLog.prepend(entry) + + while (eventLog.children.length > 36) { + eventLog.lastElementChild.remove() + } +} + +function setStatus(message, state = message.toLowerCase()) { + statusText.textContent = message + document.body.dataset.status = state + logState.textContent = state === "idle" ? "Waiting" : message +} + +function setFlow(message) { + flowText.textContent = message +} + +function setVideoVisible(visible) { + document.body.classList.toggle("has-video", visible) + modelAdapter?.onVideoVisibilityChanged?.(visible, modelContext) +} + +function renderControls(groups) { + controlRows.replaceChildren() + allowedKeys = new Set() + for (const group of groups) { + if (!group || !Array.isArray(group.keys) || group.keys.length === 0) { + continue + } + const row = document.createElement("div") + row.className = "controlRow" + const cluster = document.createElement("div") + cluster.className = group.keys.length > 2 ? "keyCluster keyClusterWide" : "keyCluster" + for (const item of group.keys) { + const key = normalizeKey(typeof item === "string" ? item : item?.key) + if (!key) { + continue + } + allowedKeys.add(key) + const button = document.createElement("button") + button.className = "controlKey" + button.type = "button" + button.dataset.controlKey = key + button.textContent = key.toUpperCase() + button.setAttribute("aria-label", typeof item === "string" ? key : (item.label || key)) + cluster.append(button) + } + const label = document.createElement("span") + label.textContent = String(group.label || "Controls") + row.append(cluster, label) + controlRows.append(row) + } + controlButtons = Array.from(controlRows.querySelectorAll("[data-control-key]")) +} + +function setPostprocessDisabled(disabled) { + postprocessSelect.disabled = disabled || !postprocessAvailable +} + +async function loadPostprocessOptions() { + const payload = mockMode + ? { default_preset: "rtx-super-resolution", presets: ["rtx-super-resolution"] } + : await fetch("/api/postprocess/options").then(async (response) => { + if (!response.ok) { + throw new Error(`post-process options failed (${response.status})`) + } + return response.json() + }) + const presets = Array.isArray(payload.presets) ? payload.presets : [] + const defaultPreset = typeof payload.default_preset === "string" + ? payload.default_preset + : "" + postprocessAvailable = Boolean(defaultPreset && presets.includes(defaultPreset)) + postprocessField.hidden = !postprocessAvailable + postprocessSelect.replaceChildren(new Option("Off", "")) + for (const preset of presets) { + if (typeof preset === "string" && preset) { + postprocessSelect.append(new Option(preset, preset)) + } + } + postprocessSelect.value = postprocessAvailable ? defaultPreset : "" + setPostprocessDisabled(false) + if (postprocessAvailable) { + logEvent(`post-process=${postprocessSelect.value}`, { source: "client" }) + } +} + +async function configurePostprocessSession() { + if (!postprocessAvailable || mockMode) { + return + } + const postprocessPreset = postprocessSelect.value + const response = await fetch("/api/session/input", { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify({ postprocess_preset: postprocessPreset }), + }) + if (!response.ok) { + const text = await response.text() + throw new Error(`session configuration failed (${response.status}): ${text}`) + } + logEvent(`post-process=${postprocessPreset || "off"}`, { source: "client" }) +} + +// This page was written for the v1 server's control protocol, which carried +// key presses, text events, heartbeats, and disconnects over the data channel +// as one message family. The v2 runtime's channel takes device events only +// (keyboard, mouse, focus, touch, ...) and rejects anything else with +// "Unsupported browser event type", so messages are translated here rather +// than in the shared server, where a page's protocol does not belong. +function toRuntimeEvent(payload) { + const type = payload?.type + if (type === "action") { + const action = payload.action || {} + if (action.event === "keydown" || action.event === "keyup") { + return { type: "keyboard", key: action.key, pressed: action.event === "keydown" } + } + // "step" asked the v1 server to generate one chunk; the v2 runtime + // generates continuously, so there is nothing to ask for. + return null + } + if (type === "disconnect") { + // Deliberately dropped rather than translated to the runtime's "close". + // On v1 this released the peer connection; on v2 a close event ends the + // whole application run, so refreshing the tab killed the server. The + // server keeps the session for a reconnect on its own. + return null + } + // The v2 runtime holds the peer connection open without a keepalive. + if (type === "heartbeat") { + return null + } + return payload +} + +// Text events are session state rather than device input, so they travel over +// the session endpoint the application serves, not the data channel. +function postSessionEvent(payload) { + const body = { event_id: payload.event_id, state: payload.state } + if (typeof payload.prompt === "string") { + body.prompt = payload.prompt + } + fetch("/api/session/input", { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify(body), + }) + .then(async (response) => { + if (!response.ok) { + const detail = await response.text() + throw new Error(`${response.status}: ${detail.slice(0, 200)}`) + } + return response.json() + }) + .then((scene) => { + modelAdapter?.onInitialScene?.(scene, modelContext) + }) + .catch((error) => { + logEvent(`event failed: ${error.message}`, { source: "client", level: "error" }) + }) + return true +} + +function sendModelMessage(payload) { + if (payload?.type === "event") { + return postSessionEvent(payload) + } + if (!connected || !controlChannel || controlChannel.readyState !== "open") { + return false + } + const event = toRuntimeEvent(payload) + if (event === null) { + return true + } + controlChannel.send(JSON.stringify(event)) + return true +} + +function sendModelCommand(payload, label = "model command") { + if (!sendModelMessage(payload)) { + setFlow("connect session first") + return false + } + inferenceInFlight = true + if (promptGenerationControls) promptGenerationControls.generate.disabled = true + setStatus("Generating", "generating") + setFlow(`sent ${label}`) + logEvent(label, { source: "client" }) + return true +} + +const modelContext = { + slots: { + stage: modelStageSlot, + status: modelStatusSlot, + panel: modelPanelSlot, + controls: modelControlSlot, + }, + isVideoVisible: () => document.body.classList.contains("has-video"), + logEvent, + releaseControls: releaseAllKeys, + sendCommand: sendModelCommand, + setModelName(name) { + if (typeof name === "string" && name) { + metrics.model = name + renderMetrics() + } + }, + setResolution(width, height) { + if (Number.isFinite(Number(width)) && Number.isFinite(Number(height))) { + metrics.resolution = `${Number(width)}x${Number(height)}` + renderMetrics() + } + }, +} + +async function loadModelAdapter() { + let adapter = {} + let serverAcceptedKeys = [] + const stylesheetHrefs = new Set() + // The v2 runtime serves this page out of the application's own web root, so + // the adapter sits beside it and needs no discovery endpoint. /api/ui/config + // still wins where a server provides one, keeping the v1 behaviour intact. + let adapterModule = "/adapter.js?v=lingbot-v2-protocol-v4" + stylesheetHrefs.add("/adapter.css") + try { + const response = await fetch("/api/ui/config") + if (response.ok) { + const config = await response.json() + if (typeof config.model_stylesheet === "string" && config.model_stylesheet) { + stylesheetHrefs.add(config.model_stylesheet) + } + if (Array.isArray(config.accepted_keys)) { + serverAcceptedKeys = config.accepted_keys + } + if (typeof config.adapter_module === "string" && config.adapter_module) { + adapterModule = config.adapter_module + } + } + } catch (error) { + logEvent(`model UI config unavailable, using bundled adapter: ${error.message}`, { source: "client", level: "info" }) + } + try { + const module = await import(adapterModule) + if (module.default && typeof module.default === "object") { + adapter = module.default + } + } catch (error) { + logEvent(`model UI unavailable: ${error.message}`, { source: "client", level: "error" }) + } + + modelAdapter = adapter + if (typeof adapter.stylesheet === "string" && adapter.stylesheet) { + stylesheetHrefs.add(adapter.stylesheet) + } + for (const href of stylesheetHrefs) { + const stylesheet = document.createElement("link") + stylesheet.rel = "stylesheet" + stylesheet.href = href + document.head.append(stylesheet) + } + const genericControls = serverAcceptedKeys.length > 0 + ? [{ label: "Controls", keys: serverAcceptedKeys }] + : [] + const modelControls = Array.isArray(adapter.controls) + ? adapter.controls + : genericControls + renderControls(modelControls) + if (typeof adapter.modelName === "string") { + modelContext.setModelName(adapter.modelName) + } + if (adapter.capabilities?.postprocess === true) { + try { + await loadPostprocessOptions() + } catch (error) { + postprocessAvailable = false + postprocessField.hidden = true + setPostprocessDisabled(false) + logEvent(`post-process unavailable: ${error.message}`, { + source: "client", + level: "error", + }) + } + } + configurePromptGeneration(adapter.promptGeneration) + document.querySelector(".controlCard")?.toggleAttribute("hidden", adapter.promptGeneration?.hideControls === true) + await adapter.mount?.(modelContext) +} + +function renderMetrics() { + const fps = firstFinite(metrics.fps, metrics.targetFps) + const latency = firstFinite(metrics.latencyMs, metrics.rttMs) + fpsValue.textContent = Number.isFinite(fps) ? String(Math.round(fps)) : "--" + latencyValue.textContent = formatMs(latency) + resolutionValue.textContent = metrics.resolution || "--" + stepValue.textContent = metrics.step === null ? "--" : String(metrics.step) + modelValue.textContent = metrics.model || "World Model" +} + +function recordActionSent(action) { + pendingActions.push({ + sentAt: performance.now(), + label: actionLabel(action), + }) + while (pendingActions.length > maxPendingActions) { + pendingActions.shift() + } +} + +function takeObservedActionLatency(now = performance.now()) { + if (pendingActions.length === 0) { + return null + } + const oldest = pendingActions[0] + pendingActions.length = 0 + return Math.max(0, now - oldest.sentAt) +} + +function updateMetricsFromChunk(payload) { + const observedLatencyMs = takeObservedActionLatency() + metrics.targetFps = firstFinite(payload.fps, payload.target_fps, metrics.targetFps) + metrics.latencyMs = firstFinite( + payload.latency_ms, + payload.control_latency_ms, + observedLatencyMs, + payload.lag_ms, + payload.gen_ms, + metrics.latencyMs + ) + metrics.step = Number.isFinite(Number(payload.chunk_index)) + ? Number(payload.chunk_index) + : metrics.step + metrics.model = typeof payload.model === "string" && payload.model ? payload.model : metrics.model + + if (typeof payload.resolution === "string") { + metrics.resolution = payload.resolution + } else if (payload.resolution && typeof payload.resolution === "object") { + const width = Number(payload.resolution.width) + const height = Number(payload.resolution.height) + if (Number.isFinite(width) && Number.isFinite(height)) { + metrics.resolution = `${width}x${height}` + } + } + renderMetrics() +} + +function updateMetricsFromVideo() { + if (remoteVideo.videoWidth > 0 && remoteVideo.videoHeight > 0) { + metrics.resolution = `${remoteVideo.videoWidth}x${remoteVideo.videoHeight}` + renderMetrics() + } +} + +function resizeIdleCanvas(ctx) { + const rect = idleCanvas.getBoundingClientRect() + const dpr = Math.min(window.devicePixelRatio || 1, 2) + const width = Math.max(1, Math.floor(rect.width * dpr)) + const height = Math.max(1, Math.floor(rect.height * dpr)) + if (idleCanvas.width !== width || idleCanvas.height !== height) { + idleCanvas.width = width + idleCanvas.height = height + } + ctx.setTransform(dpr, 0, 0, dpr, 0, 0) + return { width: rect.width, height: rect.height } +} + +function drawRouteRibbon(ctx, width, height, t) { + const xBase = width * 0.74 + const yBase = height * 0.28 + ctx.save() + ctx.globalAlpha = 0.62 + ctx.lineWidth = 2 + ctx.strokeStyle = "rgba(99, 216, 255, 0.72)" + ctx.setLineDash([10, 14]) + ctx.lineDashOffset = -t * 24 + ctx.beginPath() + ctx.moveTo(xBase - 92, yBase + 132) + ctx.bezierCurveTo(xBase - 36, yBase + 36, xBase + 42, yBase + 76, xBase + 86, yBase - 16) + ctx.bezierCurveTo(xBase + 116, yBase - 76, xBase + 8, yBase - 92, xBase - 20, yBase - 34) + ctx.stroke() + + ctx.setLineDash([]) + for (let i = 0; i < 8; i += 1) { + const phase = (i / 8 + t * 0.08) % 1 + const angle = phase * Math.PI * 2 + const x = xBase + Math.cos(angle) * 84 + const y = yBase + Math.sin(angle * 1.7) * 72 + ctx.fillStyle = i % 2 === 0 ? "rgba(142, 240, 28, 0.72)" : "rgba(99, 216, 255, 0.62)" + ctx.beginPath() + ctx.arc(x, y, 3.5, 0, Math.PI * 2) + ctx.fill() + } + ctx.restore() +} + +function drawIdleScene(now) { + const ctx = idleCanvas.getContext("2d") + if (!ctx) { + return + } + + const { width, height } = resizeIdleCanvas(ctx) + const t = now * 0.001 + const horizon = height * 0.46 + + const sky = ctx.createLinearGradient(0, 0, 0, height) + sky.addColorStop(0, "#314553") + sky.addColorStop(0.42, "#76919c") + sky.addColorStop(0.66, "#152024") + sky.addColorStop(1, "#060707") + ctx.fillStyle = sky + ctx.fillRect(0, 0, width, height) + + const sunGlow = ctx.createRadialGradient(width * 0.22, height * 0.22, 8, width * 0.22, height * 0.22, width * 0.42) + sunGlow.addColorStop(0, "rgba(255, 204, 112, 0.62)") + sunGlow.addColorStop(0.36, "rgba(255, 204, 112, 0.20)") + sunGlow.addColorStop(1, "rgba(255, 204, 112, 0)") + ctx.fillStyle = sunGlow + ctx.fillRect(0, 0, width, height) + + ctx.fillStyle = "rgba(24, 39, 42, 0.82)" + for (let i = 0; i < 12; i += 1) { + const x = width * (0.02 + i * 0.075) + const buildingWidth = width * (0.035 + (i % 3) * 0.012) + const buildingHeight = height * (0.11 + ((i * 7) % 5) * 0.018) + ctx.fillRect(x, horizon - buildingHeight, buildingWidth, buildingHeight) + } + + const ground = ctx.createLinearGradient(0, horizon, 0, height) + ground.addColorStop(0, "#273331") + ground.addColorStop(1, "#0a0c0c") + ctx.fillStyle = ground + ctx.fillRect(0, horizon, width, height - horizon) + + const road = ctx.createLinearGradient(width * 0.5, horizon, width * 0.5, height) + road.addColorStop(0, "#424c4f") + road.addColorStop(1, "#121516") + ctx.fillStyle = road + ctx.beginPath() + ctx.moveTo(width * 0.42, horizon + 8) + ctx.lineTo(width * 0.58, horizon + 8) + ctx.lineTo(width * 0.80, height) + ctx.lineTo(width * 0.20, height) + ctx.closePath() + ctx.fill() + + ctx.strokeStyle = "rgba(255, 255, 255, 0.42)" + ctx.lineWidth = 2 + ctx.beginPath() + ctx.moveTo(width * 0.42, horizon + 8) + ctx.lineTo(width * 0.20, height) + ctx.moveTo(width * 0.58, horizon + 8) + ctx.lineTo(width * 0.80, height) + ctx.stroke() + + const dashOffset = (t * 92) % 58 + for (let i = -2; i < 14; i += 1) { + const y = horizon + 20 + i * 58 + dashOffset + const scale = Math.max(0, Math.min(1, (y - horizon) / (height - horizon))) + const dashHeight = 18 + scale * 38 + const wobble = Math.sin(t * 0.8 + scale * 3.2) * width * 0.012 + ctx.strokeStyle = "rgba(255, 222, 114, 0.74)" + ctx.lineWidth = 2 + scale * 3 + ctx.beginPath() + ctx.moveTo(width * 0.50 + wobble, y) + ctx.lineTo(width * 0.50 + wobble * 1.3, y + dashHeight) + ctx.stroke() + } + + ctx.save() + ctx.translate(width * 0.5, height * 0.78 + Math.sin(t * 2.1) * 4) + ctx.fillStyle = "rgba(142, 240, 28, 0.74)" + ctx.beginPath() + ctx.moveTo(0, -34) + ctx.lineTo(22, 24) + ctx.lineTo(0, 12) + ctx.lineTo(-22, 24) + ctx.closePath() + ctx.fill() + ctx.strokeStyle = "rgba(255, 255, 255, 0.52)" + ctx.lineWidth = 2 + ctx.stroke() + ctx.restore() + + drawRouteRibbon(ctx, width, height, t) + + ctx.fillStyle = `rgba(255, 255, 255, ${0.06 + Math.sin(t * 1.4) * 0.018})` + ctx.fillRect(0, 0, width, height) + + if (!document.body.classList.contains("has-video")) { + recordFrame(now) + } + window.requestAnimationFrame(drawIdleScene) +} + +function recordFrame(timestamp) { + const now = Number.isFinite(timestamp) ? timestamp : performance.now() + frameTimes.push(now) + while (frameTimes.length > 0 && now - frameTimes[0] > 1200) { + frameTimes.shift() + } + if (frameTimes.length >= 2) { + const elapsed = frameTimes[frameTimes.length - 1] - frameTimes[0] + metrics.fps = elapsed > 0 ? ((frameTimes.length - 1) * 1000) / elapsed : metrics.fps + renderMetrics() + } +} + +function updateControlHighlights() { + activeKeys.clear() + for (const [key, sources] of keySources.entries()) { + if (sources.size > 0) { + activeKeys.add(key) + } + } + for (const button of controlButtons) { + const key = button.dataset.controlKey + button.classList.toggle("is-active", activeKeys.has(key)) + button.setAttribute("aria-pressed", activeKeys.has(key) ? "true" : "false") + } +} + +function actionLabel(action) { + return `${action.event}${action.key ? `:${action.key}` : ""}` +} + +function sendControlAction(action) { + if (!connected || !controlChannel || controlChannel.readyState !== "open") { + return false + } + + const event = toRuntimeEvent({ type: "action", action }) + if (event === null) { + return false + } + inferenceInFlight = true + controlChannel.send(JSON.stringify(event)) + modelAdapter?.onActionSent?.(action, modelContext) + recordActionSent(action) + setStatus("Generating", "generating") + setFlow(`sent ${actionLabel(action)}, waiting=${inferenceInFlight}`) + logEvent(`control ${actionLabel(action)}`, { source: "client" }) + return true +} + +function enqueueAction(action) { + const sent = sendControlAction(action) + if (!sent) { + setFlow(connected ? `not_sent ${actionLabel(action)}` : "connect session first") + } +} + +function setKeyHeld(key, source, held) { + const normalized = normalizeKey(key) + if (!allowedKeys.has(normalized)) { + return + } + + let sources = keySources.get(normalized) + if (!sources) { + sources = new Set() + keySources.set(normalized, sources) + } + + const wasActive = sources.size > 0 + if (held) { + sources.add(source) + } else { + sources.delete(source) + } + const isActive = sources.size > 0 + updateControlHighlights() + + if (held && !wasActive && isActive) { + heldKeySequence += 1 + heldKeyOrder.set(normalized, heldKeySequence) + enqueueAction({ event: "keydown", key: normalized }) + } + if (!held && wasActive && !isActive) { + heldKeyOrder.delete(normalized) + enqueueAction({ event: "keyup", key: normalized }) + } +} + +function releaseAllKeys() { + for (const key of Array.from(keySources.keys())) { + const sources = keySources.get(key) + if (sources && sources.size > 0) { + sources.clear() + heldKeyOrder.delete(key) + updateControlHighlights() + enqueueAction({ event: "keyup", key }) + } + } +} + +function handleControlMessage(rawMessage) { + let payload + try { + payload = JSON.parse(rawMessage) + } catch { + logEvent(`invalid control payload: ${rawMessage}`, { level: "error" }) + return + } + + if (payload.type === "chunk_done") { + inferenceInFlight = false + updateMetricsFromChunk(payload) + const genMs = firstFinite(payload.gen_ms) + const lagMs = firstFinite(payload.lag_ms) + const queueDepth = firstFinite(payload.queue_depth) + const parts = [ + `chunk_done index=${payload.chunk_index}`, + `frames=${payload.num_frames}`, + ] + if (Number.isFinite(Number(payload.enqueued_frames))) { + parts.push(`enqueued=${payload.enqueued_frames}`) + } + if (genMs !== null) { + parts.push(`gen=${Math.round(genMs)}ms`) + } + if (lagMs !== null) { + parts.push(`lag=${Math.round(lagMs)}ms`) + } + if (metrics.latencyMs !== null) { + parts.push(`latency=${Math.round(metrics.latencyMs)}ms`) + } + if (queueDepth !== null) { + parts.push(`queue=${queueDepth}`) + } + logEvent(parts.join(", ")) + const isGenerating = activeKeys.size > 0 + setStatus( + isGenerating ? "Generating" : "Connected", + isGenerating ? "generating" : "connected" + ) + setFlow(`chunk ${payload.chunk_index} complete`) + modelAdapter?.onControlMessage?.(payload, modelContext) + return + } + + if (modelAdapter?.onControlMessage?.(payload, modelContext)) { + return + } + + if (payload.type === "generation_complete") { + inferenceInFlight = false + if (promptGenerationControls) { + promptGenerationControls.generate.disabled = false + promptGenerationControls.download.disabled = false + } + setStatus("Connected", "connected") + setFlow("generation complete; ready for another prompt") + logEvent("generation complete", { source: "server" }) + stopPromptRecording() + const playbackEndpoint = promptGenerationControls?.config.playbackEndpoint + if (playbackEndpoint) { + remoteVideo.pause() + remoteVideo.srcObject = null + remoteVideo.src = `${playbackEndpoint}?generation=${Date.now()}` + remoteVideo.loop = true + remoteVideo.playbackRate = 1 + void remoteVideo.play() + } + return + } + + if (payload.type === "server_log") { + logEvent(payload.message || "server log") + return + } + + if (payload.type === "busy") { + logEvent(`server busy: ${payload.message}`, { level: "error" }) + setStatus("Connected", "connected") + return + } + + if (payload.type === "error") { + inferenceInFlight = false + if (promptGenerationControls) promptGenerationControls.generate.disabled = false + logEvent(`server error: ${payload.message}`, { level: "error" }) + setStatus("Error", "error") + setFlow("server error") + return + } + + logEvent(`server message: ${rawMessage}`) +} + +async function waitForIceGatheringComplete(pc) { + if (pc.iceGatheringState === "complete") { + return + } + await new Promise((resolve) => { + const onStateChange = () => { + if (pc.iceGatheringState === "complete") { + pc.removeEventListener("icegatheringstatechange", onStateChange) + resolve() + } + } + pc.addEventListener("icegatheringstatechange", onStateChange) + }) +} + +async function pollWebRtcStats() { + if (!peerConnection) { + return + } + try { + const stats = await peerConnection.getStats() + for (const report of stats.values()) { + if ( + report.type === "candidate-pair" && + report.state === "succeeded" && + Number.isFinite(report.currentRoundTripTime) + ) { + metrics.rttMs = report.currentRoundTripTime * 1000 + } + if ( + report.type === "inbound-rtp" && + (report.kind === "video" || report.mediaType === "video") && + Number.isFinite(report.framesPerSecond) + ) { + metrics.fps = report.framesPerSecond + } + } + renderMetrics() + } catch (error) { + logEvent(`stats unavailable: ${error.message}`, { source: "client" }) + } +} + +function startStatsPolling() { + if (statsTimer !== null) { + return + } + statsTimer = window.setInterval(() => { + void pollWebRtcStats() + }, 1000) +} + +function stopStatsPolling() { + if (statsTimer !== null) { + window.clearInterval(statsTimer) + statsTimer = null + } +} + +function resetPeerHandles(pc = peerConnection, channel = controlChannel) { + if (peerConnection === pc) { + peerConnection = null + } + if (controlChannel === channel) { + controlChannel = null + } +} + +async function dumpPeerStats(reason) { + if (!peerConnection) { + return + } + try { + const stats = await peerConnection.getStats() + const reports = new Map() + for (const report of stats.values()) { + reports.set(report.id, report) + } + console.group(`[FlashDreams WebRTC] peer stats: ${reason}`) + for (const report of stats.values()) { + if (report.type !== "candidate-pair") { + continue + } + const local = reports.get(report.localCandidateId) + const remote = reports.get(report.remoteCandidateId) + console.info({ + id: report.id, + state: report.state, + nominated: report.nominated, + writable: report.writable, + local: local + ? `${local.candidateType} ${local.protocol} ${local.address || local.ip}:${local.port}` + : report.localCandidateId, + remote: remote + ? `${remote.candidateType} ${remote.protocol} ${remote.address || remote.ip}:${remote.port}` + : report.remoteCandidateId, + }) + } + console.groupEnd() + } catch (error) { + console.warn("[FlashDreams WebRTC] getStats failed", error) + } +} + +function sendHeartbeat() { + if (!controlChannel || controlChannel.readyState !== "open") { + return + } + // The v2 runtime keeps the peer connection open on its own and rejects a + // heartbeat as an unknown event type, so nothing is sent. + +} + +function startHeartbeat() { + if (heartbeatTimer !== null) { + return + } + sendHeartbeat() + heartbeatTimer = window.setInterval(sendHeartbeat, heartbeatIntervalMs) +} + +function stopHeartbeat() { + if (heartbeatTimer !== null) { + window.clearInterval(heartbeatTimer) + heartbeatTimer = null + } +} + +function wait(delayMs) { + return new Promise((resolve) => window.setTimeout(resolve, delayMs)) +} + +function isTransientFetchError(error) { + return ( + error instanceof TypeError + && /fetch|network|load failed/i.test(String(error.message || "")) + ) +} + +function markSessionConnected(pc, channel) { + if ( + connected || + peerConnection !== pc || + controlChannel !== channel || + pc.connectionState !== "connected" || + channel.readyState !== "open" + ) { + return + } + connected = true + connectButton.disabled = false + connectButton.textContent = "Disconnect" + setStatus("Connected", "connected") + setFlow("waiting for input") + startHeartbeat() + startStatsPolling() + if (pendingPromptGeneration) { + pendingPromptGeneration = false + triggerPromptGeneration() + } +} + +function disconnectSession({ notify = true } = {}) { + if (disconnecting) { + return + } + disconnecting = true + releaseAllKeys() + stopHeartbeat() + stopStatsPolling() + connected = false + connectButton.disabled = false + connectButton.textContent = "Connect Session" + setPostprocessDisabled(false) + stopPromptRecording() + modelAdapter?.onDisconnect?.(modelContext) + if (notify && controlChannel && controlChannel.readyState === "open") { + try { + controlChannel.send(JSON.stringify({ type: "disconnect" })) + } catch { + // The browser may already be tearing the page down. + } + } + if (controlChannel && controlChannel.readyState !== "closed") { + controlChannel.close() + } + if (peerConnection) { + peerConnection.close() + } + resetPeerHandles() + // pc.close() stops incoming frames but doesn't reset the