From da5964d8a0c4c78751a61dd3bc4da22556ec6d33 Mon Sep 17 00:00:00 2001 From: keanu77 Date: Sun, 18 Oct 2026 21:34:33 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E8=A7=80=E7=9C=BE=E6=89=8B?= =?UTF-8?q?=E6=A9=9F=E5=8D=B3=E6=99=82=E6=8A=95=E7=A5=A8=E3=80=81=E4=BA=92?= =?UTF-8?q?=E5=8B=95=E9=A0=81=E5=8F=83=E8=80=83=E8=88=87=E8=A6=8F=E5=8A=83?= =?UTF-8?q?=E8=A8=AD=E8=A8=88=E5=8E=9F=E5=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - references/live-poll/:Cloudflare Worker+Durable Object 投票後端、投影片端 live-poll.js/css、150 支手機壓測腳本 - scripts/poll-slides.mjs:占位 section → 加入頁與投票頁(QR 帶 data-url),注入講者端程式 - references/interactive-pages.md:互動地圖、製作技巧頁、PPTX 轉 HTML 插入互動頁 - references/design-principles.md:X 簡報技巧整理的原則與工具清單併入 skill,SKILL.md 第 1 步引用 - TECHNIQUES 4.5–4.7、README、pitfalls、CHANGELOG、CI 語法檢查同步 Co-Authored-By: Claude Opus 5.5 --- .github/workflows/ci.yml | 2 + .gitignore | 2 + CHANGELOG.md | 4 + README.md | 41 +++- docs/TECHNIQUES.md | 30 ++- docs/html-slides-tips-from-x-2026-10-17.md | 2 + skills/html-slide-deck/SKILL.md | 8 +- .../references/design-principles.md | 25 +++ .../references/interactive-pages.md | 92 +++++++++ .../references/live-poll/README.md | 115 +++++++++++ .../references/live-poll/load-test.mjs | 56 +++++ .../references/live-poll/screen/live-poll.css | 53 +++++ .../references/live-poll/screen/live-poll.js | 160 ++++++++++++++ .../references/live-poll/worker/.gitignore | 3 + .../references/live-poll/worker/package.json | 12 ++ .../references/live-poll/worker/src/index.js | 195 ++++++++++++++++++ .../references/live-poll/worker/src/phone.js | 162 +++++++++++++++ .../live-poll/worker/src/polls.json | 35 ++++ .../live-poll/worker/wrangler.jsonc | 12 ++ skills/html-slide-deck/references/pitfalls.md | 8 + .../html-slide-deck/scripts/poll-slides.mjs | 87 ++++++++ 21 files changed, 1097 insertions(+), 7 deletions(-) create mode 100644 skills/html-slide-deck/references/design-principles.md create mode 100644 skills/html-slide-deck/references/interactive-pages.md create mode 100644 skills/html-slide-deck/references/live-poll/README.md create mode 100644 skills/html-slide-deck/references/live-poll/load-test.mjs create mode 100644 skills/html-slide-deck/references/live-poll/screen/live-poll.css create mode 100644 skills/html-slide-deck/references/live-poll/screen/live-poll.js create mode 100644 skills/html-slide-deck/references/live-poll/worker/.gitignore create mode 100644 skills/html-slide-deck/references/live-poll/worker/package.json create mode 100644 skills/html-slide-deck/references/live-poll/worker/src/index.js create mode 100644 skills/html-slide-deck/references/live-poll/worker/src/phone.js create mode 100644 skills/html-slide-deck/references/live-poll/worker/src/polls.json create mode 100644 skills/html-slide-deck/references/live-poll/worker/wrangler.jsonc create mode 100644 skills/html-slide-deck/scripts/poll-slides.mjs diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 681addb..6a03bbe 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,6 +13,8 @@ jobs: run: | for f in skills/html-slide-deck/scripts/*.mjs skills/html-slide-deck/references/*.mjs skills/html-slide-deck/references/offline-build-template/scripts/*.mjs; do node --check "$f"; done node --check skills/html-slide-deck/references/offline-build-template/build.js + for f in skills/html-slide-deck/references/live-poll/*.mjs skills/html-slide-deck/references/live-poll/screen/*.js skills/html-slide-deck/references/live-poll/worker/src/*.js; do node --check "$f"; done + node -e "JSON.parse(require('fs').readFileSync('skills/html-slide-deck/references/live-poll/worker/src/polls.json','utf8'))" python -m py_compile skills/html-slide-deck/scripts/montage.py examples/pptx-edits-back-to-html.py bash -n install.sh skills/html-slide-deck/scripts/*.sh pip install ruff && ruff check skills/html-slide-deck/scripts/montage.py examples/pptx-edits-back-to-html.py diff --git a/.gitignore b/.gitignore index 2e68810..1cc798a 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ node_modules/ __pycache__/ .DS_Store .rt-frame.md +.dev.vars +.wrangler/ diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e71e10..7137895 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +- 新增觀眾手機即時投票 `skills/html-slide-deck/references/live-poll/`:Cloudflare Worker+Durable Object 後端(手機頁、題目 JSON、WebSocket 推播、斷線輪詢)、投影片端 `screen/live-poll.js`/`.css`、`load-test.mjs`(150 支手機壓測);新腳本 `scripts/poll-slides.mjs` 把占位 section 換成加入頁與投票頁並注入講者端程式。源自 2026-10 一場約 150 人講座的實際做法。 +- 新增 `references/interactive-pages.md`:互動地圖(經緯度投影 SVG、距離圈)、製作技巧頁(格式比較表+AI 協作清單)、PPTX 轉 HTML 插入互動頁與頁碼重編。`docs/TECHNIQUES.md` 補 4.5–4.7,README 同步。 +- X 簡報技巧整理的「流程與設計原則」「現成 Skill 與工具」併入 skill:`references/design-principles.md`,SKILL.md 第 1 步要求規劃前先讀;原 docs 檔標註兩處一起改。 + - 新增 `docs/html-slides-tips-from-x-2026-10-17.md`:整理自 X 使用者分享的 HTML 簡報流程原則、現成 Skill/工具與本專案固定規則(含來源連結);README 目錄樹補連結。 - 修正:固定規則原本只在 `docs/`,`install.sh` 不會安裝、skill 也沒引用。改為在兩個 skill 各附 `references/fixed-rules.md`(規則文字照抄),並在各自 `SKILL.md` 要求先讀並遵守;README 開頭簡介補上這兩點。 diff --git a/README.md b/README.md index 0774744..daca089 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ reveal.js 簡報製作流程,包成兩個 Agent Skill。
Claude Code・Codex CLI・Gemini CLI・Grok Build 都能裝。
-安裝後的 skill 內建作者的固定規則(`references/fixed-rules.md`);X 上分享的簡報技巧整理見 [docs/html-slides-tips-from-x-2026-10-17.md](docs/html-slides-tips-from-x-2026-10-17.md)。 +安裝後的 skill 內建作者的固定規則(`references/fixed-rules.md`)與規劃設計原則(`references/design-principles.md`);X 上分享的簡報技巧整理見 [docs/html-slides-tips-from-x-2026-10-17.md](docs/html-slides-tips-from-x-2026-10-17.md)。 [![CI](https://github.com/keanu77/htmlpptskill/actions/workflows/ci.yml/badge.svg)](https://github.com/keanu77/htmlpptskill/actions) [![License: MIT](https://img.shields.io/badge/License-MIT-teal.svg)](LICENSE) @@ -35,12 +35,13 @@ Claude Code・Codex CLI・Gemini CLI・Grok Build 都能裝。
| 主辦單位要 PPTX,你只有 HTML | `render-slides` → `build-handout`:一頁一圖的 PPTX,講者備註進備忘稿;PDF 一行指令 | | 想要「炫一點」但怕翻車 | 效果 skill 分穩重/中間/驚豔三檔,內建減少動態效果與 QA 靜態模式 | | 講者在 PPTX 上手改了字,改動回不去 HTML | 附完整實例:從 PPTX 抽文字、解 QR 圖、回灌 HTML | +| 想讓台下一起作答,又不想把觀眾導去別的平台 | 內附手機即時投票:掃 QR 作答、投影片即時統計、按 `A` 揭曉同步到手機;150 支手機實測,斷網照樣能揭曉 | ## 兩個 skill | Skill | 一句話 | 什麼時候會被觸發 | |---|---|---| -| **`html-slide-deck`** | 從大綱到交付的主流程:版型、圖片、QR、互動頁、逐頁 QA、講義 PPTX/PDF、原生可編輯 PPTX | 「做一份 HTML 簡報」「reveal.js」「簡報加截圖/QR」「轉 PPT/講義」「離線簡報」 | +| **`html-slide-deck`** | 從大綱到交付的主流程:版型、圖片、QR、互動頁、觀眾手機即時投票、逐頁 QA、講義 PPTX/PDF、原生可編輯 PPTX | 「做一份 HTML 簡報」「reveal.js」「簡報加截圖/QR」「現場投票」「轉 PPT/講義」「離線簡報」 | | **`html-slide-effects`** | 加在其上的效果:逐步出現、Auto-Animate、3D 翻卡、GSAP 逐字、計時條、點圖放大、手機捲動 | 「加動畫」「卡片翻面」「讓簡報更生動」「有什麼效果可以加」 | ## 30 秒安裝 @@ -472,6 +473,33 @@ show(); +
+4.5 觀眾手機即時投票 + +頁內測驗只有台上一個人點;要全場一起作答,用 `references/live-poll/`。觀眾掃 QR 用手機作答,投影片即時顯示百分比(選擇題)或直方圖與中位數(猜數字),講者按 `A` 揭曉、答案同步推到每支手機,`Shift+R` 清空本題。後端是 Cloudflare Worker+Durable Object(免費方案即可),150 支手機壓測通過。 + +```html +
+
+``` +```bash +node $SKILL/scripts/poll-slides.mjs index.html index-live.html --worker my-poll --url https://slide-poll.<子網域>.workers.dev +``` + +產出的 `index-live.html` 內含講者控制用的 ADMIN_KEY,只放講者電腦。部署、題目格式、API、壓測見 [`live-poll/README.md`](skills/html-slide-deck/references/live-poll/README.md)。 + +
+ +
+4.6 互動地圖、4.7 製作技巧頁 + +- **互動地圖**:點場館顯示項目、最近據點與直線距離,按鈕切換範圍圈;經緯度線性投影的 SVG,離線可用。 +- **製作技巧頁**:Q&A 前一頁放 PowerPoint/PDF/HTML 優缺點比較表與 AI 協作清單。 + +程式碼與內容範例:[`references/interactive-pages.md`](skills/html-slide-deck/references/interactive-pages.md)。 + +
+ ### 🧪 讓動畫不妨礙 QA、PDF 與無障礙
@@ -537,7 +565,7 @@ html.static .flip .inner, html.static .reveal .fragment, html.static .wall .subs ### 🕳️ 常見的坑
-十個踩過的雷與解法 +十二個踩過的雷與解法 | 現象 | 原因與解法 | |---|---| @@ -551,6 +579,8 @@ html.static .flip .inner, html.static .reveal .fragment, html.static .wall .subs | 外掛鍵位沒反應或行為怪 | 撞到內建鍵(`B` 黑屏、`S` 講者、`O` 總覽);換鍵 | | 插入 script 後講者視窗壞掉(`RevealNotes is not defined`) | notes.js 原始碼裡也有 ``;程式插入時找**最後一個** `` | | 3D 粒子頁卡頓 | 降 `count`、`setPixelRatio` 上限 1.5、離開封面就 `stop()` | +| 投票頁截圖被判溢出 | 隱藏的答案框用 `translateY` 往下推會撐出捲動範圍;改用 `scale` | +| 手機投票票數一直是 0 | 測試用的 voter 代號太短被格式檢查擋掉(需 8–64 字元) |
@@ -569,13 +599,16 @@ html.static .flip .inner, html.static .reveal .fragment, html.static .wall .subs skills/ html-slide-deck/ SKILL.md 主流程(給 agent 讀) - scripts/ qa-screenshots、render-slides、build-handout、print-pdf、inline-assets、 + scripts/ qa-screenshots、render-slides、build-handout、print-pdf、inline-assets、poll-slides、 resolve、montage.py、pptx-to-pdf.sh(macOS)、gen-image.sh(可換生圖工具) references/ reveal-template.html 深色版型:chip/card/grid/steps/mock/qrcard/viz/互動頁(reveal.js 5.2) offline-build-template/ 做法 B:content.js+build.js+check.mjs+PLAN.md+角色檔 pptxgenjs-helpers.mjs 原生 PPTX 的 theme 與 helper(+ native-pptx-example.mjs) pitfalls.md 踩過的雷與可複用片段 + design-principles.md 規劃與設計原則、現成工具(整理自 X 分享,SKILL.md 第 1 步引用) + interactive-pages.md 互動地圖、製作技巧頁、PPTX 轉 HTML 插入互動頁 + live-poll/ 手機即時投票:worker/(Cloudflare Worker+Durable Object)、screen/(投影片端)、load-test.mjs fixed-rules.md Keanu 的固定規則(SKILL.md 要求遵守) html-slide-effects/ SKILL.md diff --git a/docs/TECHNIQUES.md b/docs/TECHNIQUES.md index 2fd24a8..0fbc206 100644 --- a/docs/TECHNIQUES.md +++ b/docs/TECHNIQUES.md @@ -7,7 +7,7 @@ 1. [播放快捷鍵](#1-播放快捷鍵) 2. [換場(Transitions)](#2-換場transitions) 3. [動畫技巧](#3-動畫技巧):逐步出現、Auto-Animate、3D 翻卡、卡片牆飛入、GSAP 逐字、Three.js 粒子 -4. [講者工具](#4-講者工具):Spotlight 聚光燈、計時條、點圖放大、頁內測驗 +4. [講者工具](#4-講者工具):Spotlight 聚光燈、計時條、點圖放大、頁內測驗、手機即時投票、互動地圖、製作技巧頁 5. [讓動畫不妨礙 QA、PDF 與無障礙](#5-讓動畫不妨礙-qapdf-與無障礙) 6. [怎麼挑:穩重、中間、驚豔](#6-怎麼挑穩重中間驚豔) 7. [常見的坑](#7-常見的坑) @@ -337,6 +337,32 @@ show(); 醫療或專業題目:題目與解釋要自己審過,參考文獻不確定就標「待查證」。 +### 4.5 觀眾手機即時投票 + +頁內測驗(4.4)只有台上一個人點;要全場一起作答,用 `skills/html-slide-deck/references/live-poll/`:觀眾掃 QR 用手機作答,投影片即時顯示百分比或直方圖,講者按 `A` 揭曉、答案同步推到手機,`Shift+R` 清空本題。後端是 Cloudflare Worker+Durable Object,150 支手機實測通過。 + +```html +
+
+``` +```bash +node $SKILL/scripts/poll-slides.mjs index.html index-live.html --worker my-poll --url https://slide-poll.<子網域>.workers.dev +``` + +- 產出的 `index-live.html` 內含講者控制用的 ADMIN_KEY,只放講者電腦。 +- 斷網照樣能播、能揭曉;自動化瀏覽器與 `?print-pdf` 不連線,QA 不受影響。 +- 部署、題目格式、API、壓測:[`live-poll/README.md`](../skills/html-slide-deck/references/live-poll/README.md)。 + +### 4.6 互動地圖 + +場館、據點、距離這類空間論點,做成可點的 SVG 地圖:點場館顯示項目、最近據點與直線距離,按鈕切換「20 km 圈」與「標出 20 km 外」。經緯度線性投影、純前端、離線可用。完整程式碼:[`interactive-pages.md`](../skills/html-slide-deck/references/interactive-pages.md#互動地圖點據點看離中繼站多遠)。 + +最容易踩的坑:據點標記蓋住旁邊的場館點,點不到。據點先畫、場館後畫,並給據點 `pointer-events:none`。 + +### 4.7 製作技巧頁 + +在 Q&A 前一頁分享「這份簡報怎麼做的」:左邊 PowerPoint/PDF/HTML 的優缺點比較表,右邊 AI 協作清單。實際內容見 [`interactive-pages.md`](../skills/html-slide-deck/references/interactive-pages.md#製作技巧頁結尾前分享這份簡報怎麼做的)。 + --- ## 5. 讓動畫不妨礙 QA、PDF 與無障礙 @@ -411,3 +437,5 @@ html.static .flip .inner, html.static .reveal .fragment, html.static .wall .subs | 外掛鍵位沒反應或行為怪 | 撞到內建鍵(`B` 黑屏、`S` 講者、`O` 總覽);換鍵 | | 插入 script 後講者視窗壞掉(`RevealNotes is not defined`) | notes.js 原始碼裡也有 ``;程式插入時找**最後一個** `` | | 3D 粒子頁卡頓 | 降 `count`、`setPixelRatio` 上限 1.5、離開封面就 `stop()` | +| 投票頁截圖被判溢出 | 隱藏的答案框用 `translateY` 往下推會撐出捲動範圍;改用 `scale` | +| 手機投票票數一直是 0 | 測試用的 voter 代號太短被格式檢查擋掉(需 8–64 字元) | diff --git a/docs/html-slides-tips-from-x-2026-10-17.md b/docs/html-slides-tips-from-x-2026-10-17.md index c237157..7407a90 100644 --- a/docs/html-slides-tips-from-x-2026-10-17.md +++ b/docs/html-slides-tips-from-x-2026-10-17.md @@ -1,6 +1,8 @@ # HTML 簡報技巧整理(來源:X 使用者分享,2026-10-17 整理) > 以下為 X 上的使用者分享,非官方文件;工具未經實測,GitHub 星數為貼文所述。 +> +> 前兩節已整理進 skill:`skills/html-slide-deck/references/design-principles.md`(安裝時一起裝,SKILL.md 第 1 步引用);修改時兩處一起改。 ## 流程與設計原則 - 先規劃受眾、結論與敘事結構,再生成頁面;依內容選用圖表、表格、時間線、轉場,輸出可離線分享的單檔 HTML。來源:https://x.com/leowu_love/status/2082124253437247863 diff --git a/skills/html-slide-deck/SKILL.md b/skills/html-slide-deck/SKILL.md index d133d0f..4f270e0 100644 --- a/skills/html-slide-deck/SKILL.md +++ b/skills/html-slide-deck/SKILL.md @@ -1,6 +1,6 @@ --- name: html-slide-deck -description: 用 reveal.js 製作或修改 HTML 簡報(單檔、可離線、深色專業版型、真實截圖、QR、互動頁),逐頁截圖 QA 並驗證 QR,再輸出講義 PPTX/PDF 或原生可編輯 PPTX。當使用者說「做一份 HTML 簡報」「reveal.js 簡報」「簡報加底圖/截圖/QR」「HTML 簡報轉 PPT/講義/PDF」「離線簡報」時使用。要加動畫特效時搭配 html-slide-effects。 +description: 用 reveal.js 製作或修改 HTML 簡報(單檔、可離線、深色專業版型、真實截圖、QR、互動頁、觀眾手機即時投票),逐頁截圖 QA 並驗證 QR,再輸出講義 PPTX/PDF 或原生可編輯 PPTX。當使用者說「做一份 HTML 簡報」「reveal.js 簡報」「簡報加底圖/截圖/QR」「簡報加互動/現場投票/觀眾用手機作答」「HTML 簡報轉 PPT/講義/PDF」「離線簡報」時使用。要加動畫特效時搭配 html-slide-effects。 --- # HTML 簡報(reveal.js)完整流程 @@ -19,7 +19,8 @@ description: 用 reveal.js 製作或修改 HTML 簡報(單檔、可離線、 ## 1. 大綱 → 確認 → 生成 -- 先輸出大綱表(頁碼|標題|內容摘要|標記 [BG]/[SHOT]/[INTERACT]/[VIZ]),**等使用者確認再寫 HTML**。 +- 規劃前讀 `references/design-principles.md`(受眾→結論→敘事結構、統一設計系統、一份來源多種輸出、互動區塊怎麼挑;附現成工具清單)。 +- 先輸出大綱表(頁碼|標題|內容摘要|標記 [BG]/[SHOT]/[INTERACT]/[POLL]/[VIZ]),**等使用者確認再寫 HTML**。 - **兩種做法,先選一種**: - **A 單檔手寫**(≤25 頁、一次交付):複製 `references/reveal-template.html`,直接寫 `
`。範本預設從 CDN 載 reveal.js 5.2;交付前跑 `node $SKILL/scripts/inline-assets.mjs in.html out.html` 內嵌 reveal.js 與圖片(執行目錄要有 `reveal.js` 套件:`npm i reveal.js@5`)。 - **B 內容/版型分離**(>25 頁、多輪改稿、要離線、要 QR 驗證):複製 `references/offline-build-template/` 成新專案,填 `PLAN.md`,`content.js` 一頁一個物件(`type` 決定版型、`notes` 為備註),`npm install && npm run all` 產出 `dist/index.html`(reveal.js、CSS、圖片、QR 全內嵌)。範本是 8 頁中性起手;50 頁完整實例在 repo `examples/workshop-2026/`。 @@ -44,6 +45,9 @@ description: 用 reveal.js 製作或修改 HTML 簡報(單檔、可離線、 ## 3. 互動 - **課堂互動平台**(多數不能 iframe):互動頁=掃碼加入 QR+場次代碼(`.cl-code` 以 localStorage 跨頁同步,範本「範例 8」含完整頁面與腳本;`.cl-code-input` 要 `stopPropagation` 否則 reveal 吃掉按鍵)+「開啟主持畫面」新分頁按鈕+學生端截圖。範本以 `example.com` 占位,換成你的平台網址。 +- **觀眾手機即時投票**(現場有穩定網路時):`references/live-poll/`。Cloudflare Worker+Durable Object 收票、WebSocket 推到投影片;選擇題顯示百分比、猜數字顯示直方圖與中位數;講者 `A` 揭曉(手機同步顯示答案)、`Shift+R` 清空本題;斷網照樣能揭曉。HTML 寫占位 `
`、`
`,再跑 `node $SKILL/scripts/poll-slides.mjs in.html out-live.html --worker --url `。部署、建帳號前先問;**講者版 HTML 內含 ADMIN_KEY,不可外流**。完整步驟與壓測見 `references/live-poll/README.md`。 +- **互動地圖**(場館、據點、距離):座標存 JSON,SVG 以經緯度線性投影畫點,點擊顯示名稱與到最近據點的距離、按鈕切換範圍圈;做法見 `references/interactive-pages.md`。 +- **製作技巧頁**(結尾前分享怎麼做的):格式比較表+AI 協作清單,內容範例見 `references/interactive-pages.md`。 - **滑桿對比**(`viz`):適合「沒有版本控制 vs 有」這類前後對比。 - 頁面裡放**真的能用的東西**(可作答的小測驗、可拉的滑桿)比截圖更有說服力;純 JS、離線可用。 diff --git a/skills/html-slide-deck/references/design-principles.md b/skills/html-slide-deck/references/design-principles.md new file mode 100644 index 0000000..fb6abf9 --- /dev/null +++ b/skills/html-slide-deck/references/design-principles.md @@ -0,0 +1,25 @@ +# 規劃與設計原則、現成工具(整理自 X 使用者分享,2026-10-17) + +> 來源是 X 上的使用者分享,非官方文件;工具未經實測,看需求再自行評估。原始整理與來源連結:repo `docs/html-slides-tips-from-x-2026-10-17.md`(修改時兩處一起改)。 + +## 規劃與設計原則(第 1 步「大綱」時套用) + +- **先想受眾、結論、敘事結構,再生成頁面**;依內容選圖表、表格、時間線、轉場,輸出可離線分享的單檔 HTML。 +- **固定畫布、自包含單檔**(本 skill 是 1280×720);大字、留白、統一設計系統;在瀏覽器預覽中改,必要時才加動畫。 +- **字型、留白、線條、配色、動效要像同一套設計**,不要拼湊模板:只用範本的 tokens 與 class。 +- **一份來源輸出多種格式**(簡報、PDF、網站),避免同一內容改三次:本 skill 以 HTML(或 content.js)為源頭,講義 PPTX/PDF 由腳本產生。 +- **互動區塊依結構挑**:點擊深挖、滑桿重算、現場投票;整份依「結論與依據/分類/比較/因果/解決方案/順序」其中一種組織。互動頁做法見 SKILL.md 第 3 節。 + +## 現成 Skill 與工具(需要時參考) + +| 名稱 | 用途 | +|---|---| +| guizang-ppt-skill | 文章或大綱轉瀏覽器 HTML 簡報,雜誌風/瑞士風,講稿備註、排練計時、獨立觀眾螢幕 | +| ppt-master | 原生可編輯 PPTX | +| frontend-slides | 高完成度 HTML 簡報 | +| ppt-director | 先導演再生成,HTML 預覽審查後轉 PPTX | +| html-to-ppt | 先寫 HTML 簡報再匯出原生 PPTX,文字、表格、圖表可編輯 | +| Slide Studio | 像 PowerPoint 一樣編輯 AI 生成的 HTML 簡報,匯出仍是乾淨 HTML、保留動畫 | +| DeckFlow | PPTX 轉 HTML 簡報,輸出分頁 HTML 與素材 | +| Quarkdown | 一份 Markdown 同時輸出簡報、PDF、網站 | +| Lieflat Charts | 貼文所述:字型、留白、線條、配色、動效一致的設計 Skill,支援 SKILL.md 的 Agent | diff --git a/skills/html-slide-deck/references/interactive-pages.md b/skills/html-slide-deck/references/interactive-pages.md new file mode 100644 index 0000000..4a18cb5 --- /dev/null +++ b/skills/html-slide-deck/references/interactive-pages.md @@ -0,0 +1,92 @@ +# 互動頁:互動地圖、製作技巧頁(2026-10 講座實例) + +手機即時投票另見 `live-poll/README.md`。以下兩種頁面都是純前端、離線可用。 + +## 互動地圖:點據點,看離中繼站多遠 + +適合「場館分散、據點涵蓋不到」這類論點:觀眾自己點,比一張靜態地圖有說服力。 + +資料(`data-map` 屬性或內嵌 JSON;距離先用 Python 以 haversine 算好): +```json +{ "hubs": [{ "name": "〈據點 A〉", "lng": 136.90, "lat": 35.17 }], + "venues": [{ "name": "〈場館〉", "tags": ["〈項目〉"], "lng": 137.10, "lat": 35.05, "hub": "〈據點 A〉", "km": 24.3 }] } +``` +```html +
+ +
點地圖上的場館
+ +
+``` +```js +// 範圍內用等距圓柱投影即可:經度乘 cos(緯度) 校正,誤差在幾十公里尺度可以忽略 +const LNG0 = 136.45, LNG1 = 138.05, LAT0 = 34.56, LAT1 = 35.48, W = 800, FAR_KM = 20; +const KX = W / (LNG1 - LNG0), KY = KX / Math.cos((LAT0 + LAT1) / 2 * Math.PI / 180), H = (LAT1 - LAT0) * KY; +const P = (lng, lat) => [(lng - LNG0) * KX, (LAT1 - lat) * KY]; +const NS = 'http://www.w3.org/2000/svg'; +const el = (tag, attrs, parent) => { const n = document.createElementNS(NS, tag); + Object.entries(attrs).forEach(([k, v]) => n.setAttribute(k, v)); parent && parent.appendChild(n); return n; }; + +function initMap(sec) { + if (sec.dataset.ready) return; sec.dataset.ready = '1'; + const data = JSON.parse(sec.dataset.map), svg = sec.querySelector('.map'), info = sec.querySelector('.info'); + svg.setAttribute('viewBox', `0 0 ${W} ${H.toFixed(0)}`); + data.hubs.forEach(h => { const [x, y] = P(h.lng, h.lat); el('circle', { class: 'ring', cx: x, cy: y, r: FAR_KM / 111.32 * KY }, svg); }); + const link = el('line', { class: 'link', opacity: 0 }, svg); + data.hubs.forEach(h => { // 據點先畫、場館點後畫,場館才在上層 + const [x, y] = P(h.lng, h.lat), g = el('g', { class: 'hub' }, svg); + el('circle', { cx: x, cy: y, r: 15 }, g); + el('text', { x: x + 22, y: y + 7 }, g).textContent = h.name; + }); + data.venues.forEach(v => { + const [x, y] = P(v.lng, v.lat); + const c = el('circle', { class: 'v' + (v.km >= FAR_KM ? ' is-far' : ''), cx: x, cy: y, r: 8 }, svg); + c.addEventListener('click', () => { + info.innerHTML = `${v.name}
${v.tags.join('、')}
最近:${v.hub} ${v.km.toFixed(1)} km 直線`; + const hub = data.hubs.find(h => h.name === v.hub), [x2, y2] = P(hub.lng, hub.lat); + Object.entries({ x1: x, y1: y, x2, y2, opacity: 1 }).forEach(([k, val]) => link.setAttribute(k, val)); + }); + }); + sec.querySelectorAll('[data-act]').forEach(b => b.addEventListener('click', () => + b.classList.toggle('on', svg.classList.toggle(b.dataset.act === 'ring' ? 'rings' : 'far')))); +} +Reveal.on('slidechanged', e => e.currentSlide.classList.contains('mapslide') && initMap(e.currentSlide)); +``` +```css +.map .ring { fill: rgba(232,132,107,.08); stroke: var(--coral); stroke-dasharray: 8 7; opacity: 0; transition: opacity .4s } +.map.rings .ring { opacity: 1 } +.map .v { fill: var(--teal); stroke: #fff; stroke-width: 2; cursor: pointer } +.map.far .v.is-far { fill: var(--coral) } .map.far .v:not(.is-far) { opacity: .35 } +.map .hub { pointer-events: none } /* 不然據點標記會蓋住旁邊的場館、點不到 */ +.map .link { stroke: var(--amber); stroke-width: 3; stroke-dasharray: 6 5 } +``` +- 海岸線:Natural Earth `ne_10m_land` 裁到範圍內,存成 `[[lng, lat], …]` 折線陣列,用同一個 `P()` 畫 `polyline`。 +- 範圍外的點(例如離主圖 100 km 的場館)不要硬塞進地圖,放在側欄文字,點一下一樣顯示資訊。 +- 「幾個場館在 N km 外」要和備註的數字同一條規則算(`>=` 還是 `>`),剛好 20.0 km 的點會讓兩邊對不上。 +- 同一份座標可以用 Pillow 輸出靜態圖給 PPTX 版;標籤擺放要檢查引線交叉與引線穿過別的標籤。 + +## 製作技巧頁:結尾前分享「這份簡報怎麼做的」 + +左邊格式比較表、右邊 AI 協作清單;放在 Q&A 前一頁。以下是講座實際使用的內容,換成你的。 + +| | PowerPoint/Keynote | PDF | HTML(reveal.js) | +|---|---|---|---| +| 修改 | 最直覺,誰都能改 | 只能回原檔改 | 改 PPT 或來源後一鍵重轉 | +| 動畫與互動 | 內建動畫;無法連網互動 | 無 | 程式動畫、地圖、手機即時投票 | +| 播放 | 需要軟體與字型 | 任何裝置 | 瀏覽器即可,單檔離線 | +| 影片/分享 | 檔案大、版本混亂 | 不能放影片 | 內嵌影片;可放網路分享 | +| 風險 | 跨電腦跑版 | 沒有講者備註 | 需測瀏覽器;投票需要網路 | + +AI 協作清單(每項一行標題+一行說明): +- **程式產生投影片**:python-pptx/pptxgenjs 逐頁產生,字級、配色、版型一致 +- **資料變圖表**:座標算距離、畫地圖;紀錄去識別後彙總 +- **PPT → HTML**:講者在 PowerPoint 定稿,程式轉成 reveal.js 單檔 +- **現場互動**:Cloudflare Worker 收手機作答,WebSocket 即時推到投影片 +- **查核**:文獻逐條核對年份與數字 +- 結語一句:「人負責內容與判斷,AI 負責把重複的工作寫成程式」 + +表格字級 ≥ 20px;1280×720 下左表約 700px、右欄約 440px 寬。 + +## 從 PPTX 轉出的 HTML 插入互動頁 + +講者在 PowerPoint 定稿、再轉 HTML 時,互動頁用「原 PPTX 第幾頁之後」描述插入位置(`after`),同一個 `after` 依清單順序排列,轉檔程式最後統一插入。插頁後投影片上印的頁碼會錯位:用 JS 在載入時依實際順序重編(找右下角、內容只有數字的文字框)。 diff --git a/skills/html-slide-deck/references/live-poll/README.md b/skills/html-slide-deck/references/live-poll/README.md new file mode 100644 index 0000000..ab52cca --- /dev/null +++ b/skills/html-slide-deck/references/live-poll/README.md @@ -0,0 +1,115 @@ +# 手機即時投票(live-poll) + +觀眾用手機掃 QR 作答,投影片即時顯示百分比或直方圖,講者按 `A` 揭曉,答案同步推到每支手機。 +後端是一個 Cloudflare Worker+Durable Object(SQLite),WebSocket 用 hibernation API,閒置不計費。 +2026-10 一場約 150 人的講座實際使用;本機與正式站都以 150 支假手機壓測過,150 票約 0.2–1.2 秒內寫入並推到投影片。 + +``` +live-poll/ + worker/ Cloudflare Worker(部署一次,之後只改 polls.json) + src/index.js 路由、Durable Object、API、WebSocket 推播 + src/phone.js 觀眾手機頁(不含答案,揭曉後才由伺服器送出) + src/polls.json 題目、選項、答案、解釋 + wrangler.jsonc + screen/ 投影片端:由 scripts/poll-slides.mjs 注入 + live-poll.js 開題、即時更新、A 揭曉、Shift+R 清空、斷線改輪詢 + live-poll.css 沿用 reveal-template.html 的色彩 tokens + load-test.mjs N 支假手機壓測 +``` + +## 什麼時候用 + +- 現場有穩定網路、想讓全場一起作答:用這個。 +- 現場網路不確定:用頁內測驗(`docs/TECHNIQUES.md` 4.4,純前端、離線可用),或課堂互動平台。 +- 這套沒有網路照樣能播:投票頁按 `A` 一樣顯示答案,只是沒有全場統計。 + +## 1. 部署(一次) + +需要 Cloudflare 帳號(免費方案即可)與 Node 18+。部署前先問使用者。 + +```bash +cp -R $SKILL/references/live-poll/worker my-poll && cd my-poll +npm install # 裝 wrangler 4 +npx wrangler login +openssl rand -hex 24 | tee /dev/stderr | npx wrangler secret put ADMIN_KEY +printf 'ADMIN_KEY=%s\n' '<上一行印出的 key>' > .dev.vars && chmod 600 .dev.vars +npx wrangler deploy # 印出 https://slide-poll.<子網域>.workers.dev +``` + +- `.dev.vars` 已在 `.gitignore`,**不要 commit**;`wrangler dev` 本機測試也讀它。 +- `wrangler.jsonc` 的 `name` 改成你的;`compatibility_date` 不能晚於本機 wrangler 支援的日期,否則 `wrangler dev` 起不來。 +- 同一個 Worker 給不同場次用:在 `wrangler.jsonc` 加 `"vars": { "ROOM_NAME": "場次名稱" }`,不同房間的票互不相干。 + +## 2. 寫題目 + +`src/polls.json`:`event` 是手機頁標題;每題一個 id。 + +| 欄位 | 選擇題 `choice` | 猜數字 `number` | +|---|---|---| +| `kicker`、`title`、`stem` | 小標、題目、題幹 | 同左 | +| `options` | 選項陣列 | — | +| `min`、`max`、`unit` | — | 允許範圍與單位 | +| `bins` | — | 直方圖分組 `[[lo, hi], …]`,最後一組 `hi` 等於 `max` 顯示「以上」 | +| `answer` | 正解的索引(0 起) | 正解數字;揭曉時另算「猜在 ±20% 內」人數 | +| `explain` | 揭曉後的說明 | 同左 | + +改完 `npx wrangler deploy`。專業或醫療題目:題目與解釋要自己審過。 + +## 3. 放進簡報 + +在 HTML 裡要放投票的位置寫占位 section,然後產生講者版: + +```html +
+
+
+``` +```bash +node $SKILL/scripts/poll-slides.mjs index.html index-live.html --worker my-poll --url https://slide-poll.<子網域>.workers.dev +``` + +- 腳本把占位換成完整投票頁(每頁右側 QR 都有 `data-url`,QA 會解碼比對),並在**最後一個** `` 前注入樣式、設定與 `live-poll.js`。需要 npm `qrcode`。 +- ADMIN_KEY 取環境變數 `ADMIN_KEY` 或 `my-poll/.dev.vars`,**會寫進 `index-live.html`**:這份只放講者電腦,不上傳、不寄出、不 commit。要分享給觀眾的版本用沒跑過這支腳本的 `index.html`。 +- 做法 B(content.js):讓 build.js 對某個 type 輸出同樣的占位 section,build 完再跑這支。 +- 從 PPTX 轉出的 HTML 也一樣:在轉檔程式插頁時插入占位 section。插頁後若投影片上印有頁碼,要重編。 + +## 4. 現場操作 + +| 動作 | 做法 | +|---|---| +| 開題 | 翻到投票頁就自動開題,手機出現題目 | +| 揭曉 | `A`:投影片標出正解與說明,手機同步顯示答案 | +| 清空本題 | `Shift+R`(彩排後逐題按一次;或用下面的 curl) | +| 下一題 | 翻頁;離開投票頁時手機回到「等下一題」 | +| 回到已揭曉的題 | 手機會再顯示一次答案,不會重開 | +| 斷網 | 投影片顯示紅字提示、每 2.5 秒輪詢;`A` 照樣揭曉 | +| 不連線播放 | 網址加 `?offline` | + +- 彩排後清空一題:`curl -X POST /api/control -H "authorization: Bearer $ADMIN_KEY" -d '{"poll":"warmup","phase":"closed","reset":true}'` +- 演講前用自己的手機在會場網路實測一輪,再逐題 `Shift+R`。 +- 手機頁匿名:用 localStorage 的隨機代號辨識同一支手機(可改答案、不重複計票),不收集個人資料。 + +## 5. 壓測 + +```bash +ADMIN_KEY=… node load-test.mjs https://slide-poll.<子網域>.workers.dev warmup 150 # Node 22+ +``` +開 N 支 WebSocket 假手機、開題、同時投票、揭曉,檢查講者畫面與每支手機都收到;最後清空那題的票。 + +## API + +| 方法 | 路徑 | 說明 | +|---|---|---| +| GET | `/` | 手機頁 | +| GET | `/ws?role=phone\|screen` | WebSocket;收 `state`(目前題目、階段、在線手機數、揭曉後的答案)與 `results` | +| GET | `/api/state` | 同 WebSocket 的 `state`(斷線輪詢用) | +| GET | `/api/results?poll=id` | 該題統計 | +| POST | `/api/vote` | `{poll, voter, value}`;voter 須 8–64 字元英數或 `-`;題目未開放回 409;同一 voter 重投覆蓋 | +| POST | `/api/control` | 需 `Authorization: Bearer ADMIN_KEY`;`{poll \| null, phase: closed\|open\|revealed, reset}` | + +## 踩過的雷 + +- 測試腳本的 voter 代號太短(`e2e-1`)會被格式檢查擋掉,看起來像「票數一直是 0」。 +- 投影片端預設在自動化瀏覽器(`navigator.webdriver`)與 `?print-pdf` 不連線,QA 截圖才不會打 API、`QA_OFFLINE=1` 才會過;自己寫 E2E 要在網址加 `?live`。 +- 未揭曉的答案框若用 `translateY` 藏在下方,QA 會判成溢出;改用 `scale`。 +- 答案只在 `revealed` 時由伺服器送出;手機頁本身與 `/api/state` 在揭曉前都不含答案。 diff --git a/skills/html-slide-deck/references/live-poll/load-test.mjs b/skills/html-slide-deck/references/live-poll/load-test.mjs new file mode 100644 index 0000000..0a02120 --- /dev/null +++ b/skills/html-slide-deck/references/live-poll/load-test.mjs @@ -0,0 +1,56 @@ +// 壓力測試:N 支假手機連 WebSocket、同時投一題,檢查講者畫面與手機都收到。Node 22+(內建 WebSocket)。 +// 用法:ADMIN_KEY=… node load-test.mjs <題目 id> [N=150] +// 跑完會清空該題的票並關題;正式場次前不要對真的場次跑(會清掉那題的票)。 +const [BASE, POLL, N = 150] = process.argv.slice(2); +const KEY = process.env.ADMIN_KEY; +if (!BASE || !POLL || !KEY) { console.error('usage: ADMIN_KEY=… node load-test.mjs [N]'); process.exit(1); } +const WSB = BASE.replace(/^http/, 'ws'); +const sleep = ms => new Promise(r => setTimeout(r, ms)); +const ctl = body => fetch(BASE + '/api/control', { method: 'POST', + headers: { 'content-type': 'application/json', authorization: 'Bearer ' + KEY }, body: JSON.stringify(body) }) + .then(r => { if (!r.ok) throw new Error('control HTTP ' + r.status); return r.json(); }); + +const screen = new WebSocket(WSB + '/ws?role=screen'); +let results = {}, state = {}; +screen.onmessage = e => { if (e.data === 'pong') return; const m = JSON.parse(e.data); if (m.type === 'results') results = m; else state = m; }; +await new Promise((ok, bad) => { screen.onopen = ok; screen.onerror = bad; }); + +const seen = Array(+N).fill(null); +const socks = await Promise.all(Array.from({ length: +N }, (_, i) => new Promise((ok, bad) => { + const ws = new WebSocket(WSB + '/ws?role=phone'); + ws.onmessage = e => { if (e.data !== 'pong') seen[i] = JSON.parse(e.data); }; + ws.onopen = () => ok(ws); ws.onerror = bad; +}))); +await sleep(1000); +const phones = state.phones; +console.log('講者畫面看到手機數:', phones, '/', N); + +const openedN = () => seen.filter(s => s && s.active === POLL && s.phase === 'open').length; +const opened = await ctl({ poll: POLL, phase: 'open', reset: true }); +const def = opened.results; +await sleep(1000); +const gotOpen = openedN(); +console.log('手機收到開題:', gotOpen, '/', N); + +const value = i => (def.median !== undefined ? 50 + (i * 37) % 900 : i % def.counts.length); +const t0 = Date.now(); +const codes = await Promise.all(Array.from({ length: +N }, (_, i) => fetch(BASE + '/api/vote', { method: 'POST', + headers: { 'content-type': 'application/json' }, + body: JSON.stringify({ poll: POLL, voter: 'loadtest-' + String(i).padStart(4, '0'), value: value(i) }) }).then(r => r.status))); +const okVotes = codes.filter(c => c === 200).length; +console.log('投票成功:', okVotes, '/', N, '耗時', Date.now() - t0, 'ms'); +await sleep(1000); +const total = results.total; +console.log('講者畫面統計總數:', total); + +await ctl({ poll: POLL, phase: 'revealed' }); +await sleep(1000); +const gotReveal = seen.filter(s => s && s.phase === 'revealed' && s.reveal).length; +console.log('手機收到揭曉:', gotReveal, '/', N); + +await ctl({ poll: POLL, phase: 'closed', reset: true }); +await ctl({ poll: null }); +socks.forEach(s => s.close()); screen.close(); +const ok = [phones, gotOpen, okVotes, total, gotReveal].every(n => n === +N); +console.log(ok ? '✓ 通過(測試票已清空)' : '✗ 有數字對不上,見上方'); +setTimeout(() => process.exit(ok ? 0 : 1), 300); diff --git a/skills/html-slide-deck/references/live-poll/screen/live-poll.css b/skills/html-slide-deck/references/live-poll/screen/live-poll.css new file mode 100644 index 0000000..471a407 --- /dev/null +++ b/skills/html-slide-deck/references/live-poll/screen/live-poll.css @@ -0,0 +1,53 @@ +/* 手機即時投票:投影片端。沿用 reveal-template.html 的 tokens(--card --line --text --muted --amber --teal --green --coral) */ +.reveal section.lp{text-align:left} +.lp-wrap{display:grid;grid-template-columns:1fr 250px;gap:36px;align-items:start;font-size:22px;color:var(--text)} +.lp-kicker{font-size:18px;font-weight:700;color:var(--amber);letter-spacing:.04em} +.reveal .lp h2{font-size:38px;line-height:1.25;margin:4px 0 14px} +.lp-stem{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:14px 20px;line-height:1.55;margin-bottom:16px} +.lp-opts{display:flex;flex-direction:column;gap:12px} +.lp-opt{position:relative;display:grid;grid-template-columns:40px 1fr 80px;align-items:center;column-gap:14px; + padding:10px 16px;border-radius:14px;background:var(--card);border:2px solid var(--line);overflow:hidden;transition:border-color .4s,opacity .4s} +.lp-opt>i{position:relative;z-index:1;width:40px;height:40px;border-radius:50%;background:var(--amber);color:var(--bg); + font-style:normal;font-weight:800;display:grid;place-items:center} +.lp-opt-t{position:relative;z-index:1;line-height:1.35} +.lp-pct{position:relative;z-index:1;text-align:right;font-size:28px;font-variant-numeric:tabular-nums} +.lp-bar{position:absolute;inset:0;pointer-events:none} +.lp-bar span{display:block;height:100%;width:0;background:rgba(63,193,183,.22);transition:width .6s ease} +.lp-revealed .lp-opt.ok{border-color:var(--green)} +.lp-revealed .lp-opt.ok>i{background:var(--green)} +.lp-revealed .lp-opt.ok .lp-bar span{background:rgba(111,207,151,.3)} +.lp-revealed .lp-opt:not(.ok){opacity:.5} +.lp-side{display:flex;flex-direction:column;align-items:center;gap:6px;text-align:center} +.lp-side .qrcard{width:220px} +.lp-count{font-size:22px;margin-top:8px} +.lp-count b{display:block;font-size:68px;color:var(--amber);line-height:1;font-variant-numeric:tabular-nums} +.lp-phones-line{font-size:18px;color:var(--muted)} +.lp-net{font-size:15px;color:var(--coral);min-height:1.4em} +.lp-hint{font-size:15px;color:var(--dim);margin-top:6px} +.lp-revealed .lp-hint{visibility:hidden} +.lp-answer{margin-top:14px;padding:14px 20px;border-radius:14px;background:var(--card2);border-left:6px solid var(--green); + opacity:0;transform:scale(.97);transform-origin:left top;transition:opacity .5s,transform .5s} +.lp-answer-h{font-size:22px;font-weight:700;color:var(--green)} +.lp-answer-b{font-size:19px;line-height:1.5;margin-top:4px;color:var(--muted)} +.lp-revealed .lp-answer{opacity:1;transform:none} +/* 猜數字:直方圖 */ +.lp-hist{height:230px;display:flex;align-items:flex-end;gap:14px} +.lp-bin{flex:1;display:flex;flex-direction:column;align-items:center;gap:8px;height:100%} +.lp-bin-bar{flex:1;width:100%;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;position:relative} +.lp-bin-bar span{display:block;width:100%;height:0;background:var(--teal);border-radius:8px 8px 0 0;transition:height .6s ease} +.lp-bin-bar b{position:absolute;bottom:6px;font-size:20px;color:var(--bg);font-variant-numeric:tabular-nums} +.lp-bin-l{font-size:17px;color:var(--muted)} +.lp-bin.ok .lp-bin-bar span{background:var(--green)} +.lp-median{font-size:22px;margin-top:10px} +.lp-median b{font-size:32px;color:var(--amber);margin-left:8px} +/* 加入頁 */ +.lp-join{display:grid;grid-template-columns:420px 1fr;gap:56px;align-items:center;font-size:24px} +.lp-join .qrcard{width:420px} +.lp-join-url{font-size:30px;font-weight:700;color:var(--amber);overflow-wrap:anywhere;margin:8px 0 18px} +.lp-join-n{font-size:28px} +.lp-join-n b{font-size:92px;color:var(--amber);margin:0 10px;font-variant-numeric:tabular-nums} +.lp-join-s{font-size:20px;color:var(--muted);line-height:1.6;margin-top:18px} +.lp-dot{display:inline-block;width:14px;height:14px;border-radius:50%;background:var(--dim);vertical-align:middle} +.lp-live .lp-dot{background:var(--green);animation:lpPulse 1.6s infinite} +@keyframes lpPulse{70%{box-shadow:0 0 0 12px rgba(111,207,151,0)}0%{box-shadow:0 0 0 0 rgba(111,207,151,.6)}} +@media (prefers-reduced-motion:reduce){.lp-bar span,.lp-bin-bar span,.lp-answer{transition:none}.lp-live .lp-dot{animation:none}} diff --git a/skills/html-slide-deck/references/live-poll/screen/live-poll.js b/skills/html-slide-deck/references/live-poll/screen/live-poll.js new file mode 100644 index 0000000..5a9ed1d --- /dev/null +++ b/skills/html-slide-deck/references/live-poll/screen/live-poll.js @@ -0,0 +1,160 @@ +/* 手機即時投票:投影片端(講者電腦)。需要 window.POLL_CFG = { url, key, polls },由 scripts/poll-slides.mjs 注入。 + 進到投票頁自動開題;離開投票頁手機回到「等下一題」。 + 講者鍵:A 揭曉、Shift+R 清空本題(彩排後用)。網路斷了照樣能按 A 顯示答案。 + 網址加 ?offline 完全不連線;自動化瀏覽器(QA 截圖)與 ?print-pdf 也不連線,跟 STATIC 開關同一套判斷,要測連線加 ?live。 */ +(() => { + const CFG = window.POLL_CFG; + const Q = location.search; + const OFFLINE = /[?&]offline/.test(Q) || (!/[?&]live/.test(Q) && (navigator.webdriver || Q.includes('print-pdf'))); + const L = 'ABCDEFG'; + const $$ = (sel, root = document) => [...root.querySelectorAll(sel)]; + const pollSec = id => document.querySelector(`section[data-poll="${id}"]`); + const results = {}; + let current = null, ws = null, wsRetry = 0, poller = null; + + /* ---------------------------------------------------------------- 網路 */ + async function api(path, opts = {}) { + if (OFFLINE) throw new Error('offline'); + const ctl = new AbortController(), timer = setTimeout(() => ctl.abort(), 5000); + try { + const r = await fetch(CFG.url + path, { ...opts, signal: ctl.signal, cache: 'no-store' }); + if (!r.ok) throw new Error('HTTP ' + r.status); + return await r.json(); + } finally { clearTimeout(timer); } + } + const control = body => api('/api/control', { + method: 'POST', headers: { 'content-type': 'application/json', authorization: 'Bearer ' + CFG.key }, + body: JSON.stringify(body), + }); + + function setNet(ok, msg) { + document.documentElement.classList.toggle('lp-live', ok); + $$('.lp-net').forEach(el => { el.textContent = ok ? '' : msg; }); + } + + function onMessage(m) { + if (m.type === 'state') $$('.lp-phones').forEach(el => { el.textContent = m.phones; }); + if (m.type === 'results') { results[m.poll] = m; render(m.poll); } + } + + function connect() { + if (OFFLINE) return setNet(false, '離線模式:按 A 仍可揭曉'); + try { ws = new WebSocket(CFG.url.replace(/^http/, 'ws') + '/ws?role=screen'); } + catch (e) { return startPolling(); } + ws.onopen = () => { wsRetry = 0; setNet(true); stopPolling(); }; + ws.onmessage = e => { if (e.data !== 'pong') onMessage(JSON.parse(e.data)); }; + ws.onclose = () => { + setNet(false, '連線中斷,重試中…(按 A 仍可揭曉)'); + startPolling(); + setTimeout(connect, Math.min(15000, 1000 * 2 ** wsRetry++)); + }; + } + setInterval(() => { if (ws && ws.readyState === 1) ws.send('ping'); }, 25000); + + function startPolling() { + if (poller || OFFLINE) return; + poller = setInterval(async () => { + try { + onMessage(await api('/api/state')); + if (current) onMessage(await api('/api/results?poll=' + current)); + } catch (e) { /* 下一輪再試;畫面已顯示斷線提示 */ } + }, 2500); + } + function stopPolling() { clearInterval(poller); poller = null; } + + /* ---------------------------------------------------------------- 投票頁 */ + function render(id) { + const sec = pollSec(id), res = results[id], def = CFG.polls[id]; + if (!sec || !res || !def) return; + sec.querySelector('.lp-total').textContent = res.total; + if (def.type === 'choice') { + $$('.lp-opt', sec).forEach((el, i) => { + const pct = res.total ? Math.round(res.counts[i] / res.total * 100) : 0; + el.querySelector('.lp-bar span').style.width = pct + '%'; + el.querySelector('.lp-pct').textContent = pct + '%'; + }); + } else { + const max = Math.max(1, ...res.counts); + $$('.lp-bin', sec).forEach((el, i) => { + el.querySelector('span').style.height = (res.counts[i] / max * 100) + '%'; + el.querySelector('b').textContent = res.counts[i] || ''; + }); + sec.querySelector('.lp-med').textContent = res.median == null ? '—' : res.median + ' ' + (def.unit || ''); + } + if (res.phase === 'revealed') showAnswer(id); + } + + function showAnswer(id) { + const sec = pollSec(id), def = CFG.polls[id], res = results[id]; + sec.classList.add('lp-revealed'); + if (def.type === 'choice') { + $$('.lp-opt', sec).forEach((el, i) => el.classList.toggle('ok', i === def.answer)); + sec.querySelector('.lp-answer-h').textContent = `答案:${L[def.answer]} ${def.options[def.answer]}`; + } else { + $$('.lp-bin', sec).forEach((el, i) => { + const [lo, hi] = def.bins[i]; + el.classList.toggle('ok', def.answer >= lo && def.answer <= hi); + }); + const lo = Math.round(def.answer * 0.8), hi = Math.round(def.answer * 1.2); + const close = res && res.total ? `;猜在 ${lo}–${hi} 之間的有 ${res.close} 人` : ''; + sec.querySelector('.lp-answer-h').textContent = `答案:${def.answer} ${def.unit || ''}${close}`; + } + sec.querySelector('.lp-answer-b').textContent = def.explain; + } + + function clearAnswer(id) { + const sec = pollSec(id); + sec.classList.remove('lp-revealed'); + $$('.ok', sec).forEach(el => el.classList.remove('ok')); + } + + async function enterPoll(id) { + current = id; + try { + const res = await api('/api/results?poll=' + id); + results[id] = res; + if (res.phase !== 'revealed') { + const r = await control({ poll: id, phase: 'open' }); + results[id] = r.results; + } else { + await control({ poll: id, phase: 'revealed' }); // 回到已揭曉的題:讓手機也顯示答案 + } + render(id); + } catch (e) { + setNet(false, '連不到投票伺服器(按 A 仍可揭曉)'); + } + } + + async function reveal(id) { + if (results[id]) results[id].phase = 'revealed'; + showAnswer(id); + try { const r = await control({ poll: id, phase: 'revealed' }); results[id] = r.results; render(id); } + catch (e) { setNet(false, '揭曉沒送到手機(網路)'); } + } + + async function resetPoll(id) { + clearAnswer(id); + try { const r = await control({ poll: id, phase: 'open', reset: true }); results[id] = r.results; render(id); } + catch (e) { setNet(false, '清空失敗(網路)'); } + } + + function onShow(sec) { + const id = sec && sec.dataset.poll; + if (id) return enterPoll(id); + if (current) { current = null; control({ poll: null }).catch(() => {}); } + } + + // capture 階段攔截,避免和 reveal.js 內建鍵衝突;只在投票頁生效 + document.addEventListener('keydown', e => { + if (!current || e.metaKey || e.ctrlKey || e.altKey) return; + if ((e.key === 'a' || e.key === 'A') && !e.shiftKey) { e.preventDefault(); reveal(current); } + if (e.key === 'R' && e.shiftKey) { e.preventDefault(); resetPoll(current); } + }, true); + + function start() { + if ($$('section[data-poll], .lp-joinslide').length) connect(); + Reveal.on('slidechanged', e => onShow(e.currentSlide)); + onShow(Reveal.getCurrentSlide()); + } + if (Reveal.isReady()) start(); else Reveal.on('ready', start); +})(); diff --git a/skills/html-slide-deck/references/live-poll/worker/.gitignore b/skills/html-slide-deck/references/live-poll/worker/.gitignore new file mode 100644 index 0000000..a934447 --- /dev/null +++ b/skills/html-slide-deck/references/live-poll/worker/.gitignore @@ -0,0 +1,3 @@ +.wrangler/ +.dev.vars +node_modules/ diff --git a/skills/html-slide-deck/references/live-poll/worker/package.json b/skills/html-slide-deck/references/live-poll/worker/package.json new file mode 100644 index 0000000..ffb4d48 --- /dev/null +++ b/skills/html-slide-deck/references/live-poll/worker/package.json @@ -0,0 +1,12 @@ +{ + "name": "slide-poll", + "private": true, + "type": "module", + "scripts": { + "dev": "wrangler dev", + "deploy": "wrangler deploy" + }, + "devDependencies": { + "wrangler": "^4" + } +} diff --git a/skills/html-slide-deck/references/live-poll/worker/src/index.js b/skills/html-slide-deck/references/live-poll/worker/src/index.js new file mode 100644 index 0000000..1c154af --- /dev/null +++ b/skills/html-slide-deck/references/live-poll/worker/src/index.js @@ -0,0 +1,195 @@ +// 現場互動投票:手機作答、投影片即時顯示。 +// 一場演講一個 Durable Object(SQLite),WebSocket 用 hibernation API 推播。 +// 題目在 polls.json;講者控制用 ADMIN_KEY(wrangler secret put ADMIN_KEY)。 +import { DurableObject } from "cloudflare:workers"; +import POLLS from "./polls.json"; +import { phonePage } from "./phone.js"; + +const DEFAULT_ROOM = "default"; // 同一個 Worker 要給不同場次用,設 vars.ROOM_NAME +const PHASES = ["closed", "open", "revealed"]; +const MAX_BODY = 2048; +const json = (data, status = 200) => + new Response(JSON.stringify(data), { + status, + headers: { "content-type": "application/json; charset=utf-8", "access-control-allow-origin": "*", + "cache-control": "no-store" }, + }); + +export default { + async fetch(req, env) { + const url = new URL(req.url); + if (req.method === "OPTIONS") { + return new Response(null, { headers: { + "access-control-allow-origin": "*", "access-control-allow-methods": "GET,POST", + "access-control-allow-headers": "content-type,authorization" } }); + } + if (url.pathname === "/" || url.pathname === "/index.html") { + return new Response(phonePage(POLLS), { headers: { + "content-type": "text/html; charset=utf-8", "cache-control": "no-store" } }); + } + if (url.pathname === "/ws" || url.pathname.startsWith("/api/")) { + const room = env.ROOM.get(env.ROOM.idFromName(env.ROOM_NAME || DEFAULT_ROOM)); + return room.fetch(req); + } + return new Response("Not found", { status: 404 }); + }, +}; + +export class Room extends DurableObject { + constructor(ctx, env) { + super(ctx, env); + this.env = env; + this.sql = ctx.storage.sql; + this.sql.exec(`CREATE TABLE IF NOT EXISTS votes( + poll TEXT NOT NULL, voter TEXT NOT NULL, value TEXT NOT NULL, ts INTEGER NOT NULL, + PRIMARY KEY (poll, voter))`); + this.sql.exec(`CREATE TABLE IF NOT EXISTS phase(poll TEXT PRIMARY KEY, phase TEXT NOT NULL)`); + this.sql.exec(`CREATE TABLE IF NOT EXISTS kv(k TEXT PRIMARY KEY, v TEXT)`); + } + + // ---------------------------------------------------------------- 狀態 + active() { + const row = this.sql.exec(`SELECT v FROM kv WHERE k = 'active'`).toArray()[0]; + return row && POLLS.polls[row.v] ? row.v : null; + } + + phaseOf(poll) { + const row = this.sql.exec(`SELECT phase FROM phase WHERE poll = ?`, poll).toArray()[0]; + return row ? row.phase : "closed"; + } + + state() { + const active = this.active(); + const phase = active ? this.phaseOf(active) : "closed"; + const def = active && POLLS.polls[active]; + // 答案只在揭曉後才送到手機,手機頁本身不帶答案 + const reveal = phase === "revealed" ? { answer: def.answer, explain: def.explain } : null; + return { type: "state", active, phase, reveal, phones: this.ctx.getWebSockets("phone").length }; + } + + results(poll) { + const def = POLLS.polls[poll]; + const rows = this.sql.exec(`SELECT value FROM votes WHERE poll = ?`, poll).toArray(); + const out = { type: "results", poll, phase: this.phaseOf(poll), total: rows.length }; + if (def.type === "choice") { + out.counts = def.options.map(() => 0); + for (const r of rows) out.counts[Number(r.value)] += 1; + } else { + const vals = rows.map(r => Number(r.value)).sort((a, b) => a - b); + out.counts = def.bins.map(([lo, hi]) => vals.filter(v => v >= lo && v <= hi).length); + out.median = vals.length ? vals[Math.floor((vals.length - 1) / 2)] : null; + const tol = def.answer * 0.2; + out.close = vals.filter(v => Math.abs(v - def.answer) <= tol).length; + } + return out; + } + + broadcast(tag, msg) { + const s = JSON.stringify(msg); + for (const ws of this.ctx.getWebSockets(tag)) { + try { ws.send(s); } catch { /* 斷線的 socket 由 webSocketClose 收尾 */ } + } + } + + pushAll(poll) { + const st = this.state(); + this.broadcast("phone", st); + this.broadcast("screen", st); + if (poll) this.broadcast("screen", this.results(poll)); + } + + // ---------------------------------------------------------------- HTTP + async fetch(req) { + const url = new URL(req.url); + if (url.pathname === "/ws") return this.upgrade(req, url); + try { + if (url.pathname === "/api/state" && req.method === "GET") return json(this.state()); + if (url.pathname === "/api/results" && req.method === "GET") { + const poll = url.searchParams.get("poll"); + if (!POLLS.polls[poll]) return json({ error: "unknown poll" }, 404); + return json(this.results(poll)); + } + if (url.pathname === "/api/vote" && req.method === "POST") return this.vote(await this.body(req)); + if (url.pathname === "/api/control" && req.method === "POST") { + if (!this.authorized(req)) return json({ error: "unauthorized" }, 401); + return this.control(await this.body(req)); + } + return json({ error: "not found" }, 404); + } catch (err) { + console.error("room error", url.pathname, err && err.stack || err); + return json({ error: err.message || "bad request" }, err.status || 500); + } + } + + async body(req) { + const text = await req.text(); + if (text.length > MAX_BODY) throw Object.assign(new Error("body too large"), { status: 413 }); + try { return JSON.parse(text || "{}"); } + catch { throw Object.assign(new Error("invalid json"), { status: 400 }); } + } + + authorized(req) { + const key = this.env.ADMIN_KEY; + return Boolean(key) && req.headers.get("authorization") === `Bearer ${key}`; + } + + vote({ poll, voter, value }) { + const def = POLLS.polls[poll]; + if (!def) return json({ error: "unknown poll" }, 404); + if (typeof voter !== "string" || !/^[a-z0-9-]{8,64}$/i.test(voter)) return json({ error: "bad voter" }, 400); + if (this.active() !== poll || this.phaseOf(poll) !== "open") return json({ error: "closed" }, 409); + let v; + if (def.type === "choice") { + v = Number(value); + if (!Number.isInteger(v) || v < 0 || v >= def.options.length) return json({ error: "bad option" }, 400); + } else { + v = Math.round(Number(value)); + if (!Number.isFinite(v) || v < def.min || v > def.max) return json({ error: "out of range" }, 400); + } + this.sql.exec(`INSERT INTO votes(poll, voter, value, ts) VALUES (?, ?, ?, ?) + ON CONFLICT(poll, voter) DO UPDATE SET value = excluded.value, ts = excluded.ts`, + poll, voter, String(v), Date.now()); + this.broadcast("screen", this.results(poll)); + return json({ ok: true }); + } + + control({ poll, phase, reset }) { + if (poll !== null && !POLLS.polls[poll]) return json({ error: "unknown poll" }, 404); + if (phase !== undefined && !PHASES.includes(phase)) return json({ error: "bad phase" }, 400); + if (poll && reset) this.sql.exec(`DELETE FROM votes WHERE poll = ?`, poll); + this.sql.exec(`INSERT INTO kv(k, v) VALUES ('active', ?) ON CONFLICT(k) DO UPDATE SET v = excluded.v`, + poll || ""); + if (poll && phase) { + this.sql.exec(`INSERT INTO phase(poll, phase) VALUES (?, ?) + ON CONFLICT(poll) DO UPDATE SET phase = excluded.phase`, poll, phase); + } + this.pushAll(poll); + return json({ ok: true, ...this.state(), results: poll ? this.results(poll) : null }); + } + + // ---------------------------------------------------------------- WebSocket + upgrade(req, url) { + if (req.headers.get("upgrade") !== "websocket") return new Response("expected websocket", { status: 426 }); + const role = url.searchParams.get("role") === "screen" ? "screen" : "phone"; + const pair = new WebSocketPair(); + this.ctx.acceptWebSocket(pair[1], [role]); + pair[1].send(JSON.stringify(this.state())); + const active = this.active(); + if (role === "screen" && active) pair[1].send(JSON.stringify(this.results(active))); + if (role === "phone") this.broadcast("screen", this.state()); + return new Response(null, { status: 101, webSocket: pair[0] }); + } + + webSocketMessage(ws, msg) { + if (msg === "ping") ws.send("pong"); + } + + webSocketClose(ws, code) { + try { ws.close(code, "bye"); } catch { /* 已關閉 */ } + this.broadcast("screen", this.state()); + } + + webSocketError() { + this.broadcast("screen", this.state()); + } +} diff --git a/skills/html-slide-deck/references/live-poll/worker/src/phone.js b/skills/html-slide-deck/references/live-poll/worker/src/phone.js new file mode 100644 index 0000000..f6d3bd8 --- /dev/null +++ b/skills/html-slide-deck/references/live-poll/worker/src/phone.js @@ -0,0 +1,162 @@ +// 觀眾手機頁:等講者開題 → 作答(可改選)→ 揭曉後顯示答案。題目定義不含答案。 +const PUBLIC_KEYS = ["type", "kicker", "title", "stem", "options", "min", "max", "unit"]; + +function publicPolls(polls) { + return Object.fromEntries(Object.entries(polls.polls).map(([id, p]) => + [id, Object.fromEntries(PUBLIC_KEYS.filter(k => k in p).map(k => [k, p[k]]))])); +} + +const esc = s => String(s).replace(/[&<>"]/g, c => ({ "&": "&", "<": "<", ">": ">", '"': """ }[c])); + +export function phonePage(polls) { + const defs = JSON.stringify(publicPolls(polls)).replace(/ + + + +${esc(polls.event || "現場互動")} + +
${esc(polls.event || "現場互動")}連線中…
+
連線中…
+`; +} diff --git a/skills/html-slide-deck/references/live-poll/worker/src/polls.json b/skills/html-slide-deck/references/live-poll/worker/src/polls.json new file mode 100644 index 0000000..b4a329a --- /dev/null +++ b/skills/html-slide-deck/references/live-poll/worker/src/polls.json @@ -0,0 +1,35 @@ +{ + "event": "〈講座名稱〉|現場互動", + "polls": { + "warmup": { + "type": "choice", + "kicker": "暖身", + "title": "你平常用什麼做簡報?", + "stem": "選最常用的一個。", + "options": ["PowerPoint/Keynote", "Google 簡報", "HTML(reveal.js 等)", "其他"], + "answer": 2, + "explain": "這題沒有標準答案;揭曉時會把「HTML」標成綠色,示範揭曉效果。換成你自己的題目。" + }, + "case-1": { + "type": "choice", + "kicker": "情境 1/1", + "title": "〈情境題標題〉", + "stem": "〈題幹:一段情境描述,最後問「你會怎麼做?」〉", + "options": ["〈選項 A〉", "〈選項 B〉", "〈選項 C〉"], + "answer": 1, + "explain": "〈解釋:為什麼是 B;專業題目要自己審過〉" + }, + "guess": { + "type": "number", + "kicker": "猜數字", + "title": "〈猜一個數字的題目〉", + "stem": "〈例:這次活動一共服務了多少人次?〉", + "min": 0, + "max": 5000, + "unit": "人次", + "answer": 218, + "bins": [[0, 99], [100, 199], [200, 299], [300, 499], [500, 999], [1000, 5000]], + "explain": "〈揭曉後的說明〉" + } + } +} diff --git a/skills/html-slide-deck/references/live-poll/worker/wrangler.jsonc b/skills/html-slide-deck/references/live-poll/worker/wrangler.jsonc new file mode 100644 index 0000000..e4efd5d --- /dev/null +++ b/skills/html-slide-deck/references/live-poll/worker/wrangler.jsonc @@ -0,0 +1,12 @@ +{ + "$schema": "node_modules/wrangler/config-schema.json", + // 部署後網址是 https://.<你的 workers 子網域>.workers.dev + "name": "slide-poll", + "main": "src/index.js", + // 不能晚於你本機 wrangler 內建 workerd 支援的日期,否則 wrangler dev 起不來 + "compatibility_date": "2026-08-20", + "workers_dev": true, + "observability": { "enabled": true }, + "durable_objects": { "bindings": [{ "name": "ROOM", "class_name": "Room" }] }, + "migrations": [{ "tag": "v1", "new_sqlite_classes": ["Room"] }] +} diff --git a/skills/html-slide-deck/references/pitfalls.md b/skills/html-slide-deck/references/pitfalls.md index f69e537..c2f9ad5 100644 --- a/skills/html-slide-deck/references/pitfalls.md +++ b/skills/html-slide-deck/references/pitfalls.md @@ -82,3 +82,11 @@ prs.save('out.pptx') - `render-slides.mjs` 預設直接輸出 JPEG(1280×720 ×1.5),不必再轉檔。 - `?print-pdf` 預設 `pdfSeparateFragments:true`,54 頁會印成 79 頁;在 initialize 設 false。 - 用 python-pptx 抓 PPTX 裡的 QR 圖片、再用 jsqr 解碼,可還原使用者手動加的 QR 網址(`skill 目錄自帶的 node_modules` 有 jsqr/pngjs)。 + +## 互動頁與手機投票(2026-10 講座) +- 手機投票全套在 `live-poll/`(README 有部署、API、壓測與踩雷);地圖、製作技巧頁、PPTX 轉 HTML 插頁在 `interactive-pages.md`。 +- 講者版 HTML 內嵌 ADMIN_KEY:commit 前 `grep -c ` 確認 staged 內容為 0;`.dev.vars` 一律 gitignore。 +- `wrangler.jsonc` 的 `compatibility_date` 晚於本機 wrangler 內建 workerd 支援範圍時 `wrangler dev` 直接起不來,往前調即可。 +- 插頁後投影片上印的頁碼會錯位:載入時依實際順序重編,不要回頭改 PPTX。 +- 互動頁的進場動畫不要套到「未揭曉時隱藏」的元素上(例如答案框),否則動畫結束後它會被顯示出來。 +- SVG 地圖上大標記(據點)會攔截點擊:先畫、`pointer-events:none`。 diff --git a/skills/html-slide-deck/scripts/poll-slides.mjs b/skills/html-slide-deck/scripts/poll-slides.mjs new file mode 100644 index 0000000..0dd9526 --- /dev/null +++ b/skills/html-slide-deck/scripts/poll-slides.mjs @@ -0,0 +1,87 @@ +// 用法:node poll-slides.mjs --worker --url +// 把 HTML 裡的占位 section 換成手機即時投票頁,並在最後一個 前注入樣式、設定與投影片端程式。 +//
→ 加入頁(大 QR+在線手機數) +//
→ 投票頁(題目取自 /src/polls.json) +// ADMIN_KEY 依序取環境變數 ADMIN_KEY、/.dev.vars。產出的 HTML 內含這把 key,只給講者電腦用,不要外流。 +import { readFileSync, writeFileSync, existsSync } from 'node:fs'; +import { dirname, join } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { requirePkg } from './resolve.mjs'; + +const HERE = dirname(fileURLToPath(import.meta.url)); +const SCREEN = join(HERE, '..', 'references', 'live-poll', 'screen'); +const args = process.argv.slice(2); +const opt = k => { const i = args.indexOf(k); return i >= 0 ? args[i + 1] : null; }; +const [input, output] = args.filter((a, i) => !a.startsWith('--') && !['--worker', '--url'].includes(args[i - 1])); +const worker = opt('--worker'), url = (opt('--url') || '').replace(/\/$/, ''); +if (!input || !output || !worker || !/^(https:\/\/|http:\/\/(localhost|127\.0\.0\.1)[:/])/.test(url + '/')) { + console.error('usage: poll-slides.mjs --worker --url (本機測試可用 http://localhost:8787)'); process.exit(1); +} + +function adminKey() { + if (process.env.ADMIN_KEY) return process.env.ADMIN_KEY; + const f = join(worker, '.dev.vars'); + const line = existsSync(f) && readFileSync(f, 'utf8').split('\n').find(l => l.startsWith('ADMIN_KEY=')); + if (!line) { console.error(`找不到 ADMIN_KEY:設環境變數,或在 ${f} 寫 ADMIN_KEY=…`); process.exit(2); } + return line.slice('ADMIN_KEY='.length).trim(); +} + +const { event, polls } = JSON.parse(readFileSync(join(worker, 'src', 'polls.json'), 'utf8')); +const QR = requirePkg('qrcode'); +const esc = s => String(s).replace(/[&<>"]/g, c => ({ '&': '&', '<': '<', '>': '>', '"': '"' }[c])); +const host = url.replace(/^https?:\/\//, ''); +const L = 'ABCDEFG'; + +const qrCard = async () => { + const svg = await QR.toString(url, { type: 'svg', margin: 1, errorCorrectionLevel: 'M', color: { dark: '#0B1F2A', light: '#FFFFFF' } }); + return `
${svg.replace('${esc(host)}
`; +}; + +async function joinSlide() { + return `
現場互動

拿出手機,一起作答

+
${await qrCard()}
用手機相機掃 QR,或輸入網址
${esc(host)}
+
0 支手機已加入
+
匿名作答,不收集個人資料;揭曉前可以改答案。
+
`; +} + +async function pollSlide(id) { + const p = polls[id]; + if (!p) { console.error(`polls.json 沒有題目 ${id}`); process.exit(2); } + let body, notes; + if (p.type === 'choice') { + body = `
${p.options.map((o, i) => `
${L[i]}
${esc(o)}
` + + `
0%
`).join('')}
`; + notes = `給 30–40 秒作答,作答數穩定後按 A 揭曉。答案:${L[p.answer]} ${p.options[p.answer]}。${p.explain}`; + } else { + body = `
${p.bins.map(([lo, hi]) => `
` + + `
${hi < p.max ? lo + '–' + hi : lo + ' 以上'}
`).join('')}
` + + `
全場中位數 —
`; + notes = `請大家猜一個數字,看分布與中位數後按 A 揭曉。答案 ${p.answer} ${p.unit || ''}。${p.explain}`; + } + return `
+
${esc(p.kicker || '')}

${esc(p.title)}

${esc(p.stem)}
${body} +
+
${await qrCard()}
0 人作答
+
0 支手機在線
+
按 A 揭曉
+
`; +} + +let s = readFileSync(input, 'utf8'); +const used = []; +for (const m of [...s.matchAll(/
<\/section>|
<\/section>/g)]) { + const html = m[1] ? await pollSlide(m[1]) : await joinSlide(); + if (m[1]) used.push(m[1]); + s = s.replace(m[0], () => html); +} +if (!used.length && !s.includes('lp-joinslide')) { console.error('沒有找到占位
'); process.exit(1); } + +const cfg = JSON.stringify({ url, key: adminKey(), polls, event }).replace(/${readFileSync(join(SCREEN, 'live-poll.css'), 'utf8')}\n` + + `\n\n`; +const at = s.lastIndexOf(''); // notes.js 原始碼裡也有 ,一定要找最後一個 +if (at < 0) { console.error('找不到 '); process.exit(1); } +writeFileSync(output, s.slice(0, at) + inject + s.slice(at)); +console.log('wrote', output, '投票頁', used.length, '題:', used.join(', ')); +console.log('⚠ 產出檔內含 ADMIN_KEY:只放講者電腦,不要上傳或寄出。'); From b4b596b7dd28468df18a74c57e11fb00c6924447 Mon Sep 17 00:00:00 2001 From: keanu77 Date: Sun, 18 Oct 2026 21:52:12 +0800 Subject: [PATCH 2/2] =?UTF-8?q?docs:=20README=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E7=8D=A8=E7=AB=8B=E7=9A=84=E3=80=8C=E7=8F=BE=E5=A0=B4=E4=BA=92?= =?UTF-8?q?=E5=8B=95=E3=80=8D=E7=AB=A0=E7=AF=80=E8=88=87=E6=88=AA=E5=9C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 互動內容原本收在「講者工具」的收合區塊裡,首頁看不到;改成不收合的章節並加入導覽列與流程圖。 Co-Authored-By: Claude Opus 5.5 --- README.md | 73 ++++++++++++++++++++++++++++----------------- docs/live-poll.png | Bin 0 -> 154891 bytes 2 files changed, 45 insertions(+), 28 deletions(-) create mode 100644 docs/live-poll.png diff --git a/README.md b/README.md index daca089..928cc24 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ Claude Code・Codex CLI・Gemini CLI・Grok Build 都能裝。
實際講座成品:封面 GSAP 逐字浮現、七張卡片一次翻面、頁內真的能作答的測驗、網站+repo 雙 QR。54 頁、3 MB、拔掉網路照樣播。

-安裝 · 10 分鐘上手 · 快捷鍵、換場與動畫技巧 · 疑難排解 +安裝 · 10 分鐘上手 · 現場互動 · 快捷鍵、換場與動畫技巧 · 疑難排解

@@ -108,6 +108,7 @@ node $SKILL/scripts/print-pdf.mjs index.html handout.pdf # PDF 講 QA:qa-screenshots.mjs ─ 截圖、溢出、JS 錯誤、對外請求、QR 逐張解碼比對、montage.png ─ 有問題 exit 1 交付:index.html(單檔)+ 講義 PPTX + PDF(+ 原生可編輯 PPTX) 效果:html-slide-effects → 加完回頭重跑 QA +互動:手機投票 poll-slides.mjs(講者版另存)、互動地圖、頁內測驗 ```
@@ -119,6 +120,47 @@ QA:qa-screenshots.mjs ─ 截圖、溢出、JS 錯誤、對外請求、QR 逐 - `PLAN.md`+`ROLE-AUTHOR.md`/`ROLE-REVIEWER.md`:想讓兩個 agent 一個主筆一個稽核,角色由你指定。
+## 📱 現場互動:手機投票、互動地圖 + +左:投影片即時顯示全場作答比例並揭曉答案;右:觀眾手機同步顯示答案 + +左:投影片即時顯示全場作答比例,講者按 A 揭曉;右:觀眾手機同步顯示答案。2026-10 一場約 150 人的講座實際使用。 + +### 觀眾用手機即時作答 + +頁內測驗只有台上一個人點;要全場一起作答,用 [`references/live-poll/`](skills/html-slide-deck/references/live-poll/README.md)。 + +| 你要的 | 做法 | +|---|---| +| 觀眾不用裝 App、不用登入 | 掃 QR 開網頁作答,匿名、可改答案、不重複計票 | +| 投影片上即時看到全場答案 | 選擇題顯示百分比,猜數字顯示直方圖與中位數,加入頁顯示在線手機數 | +| 揭曉時台下也看得到 | 講者按 `A`,投影片標出正解與說明,答案同步推到每支手機;揭曉前手機拿不到答案 | +| 彩排完要清掉測試票 | 在該題按 `Shift+R` | +| 會場網路斷了 | 投影片顯示提示並改輪詢;`A` 照樣揭曉 | +| 人多會不會塞車 | 150 支手機壓測:150 票約 0.2–1.2 秒寫入並推到投影片 | + +後端是 Cloudflare Worker+Durable Object(免費方案即可),部署一次之後只改題目檔。 + +```html +
+
+``` +```bash +cp -R $SKILL/references/live-poll/worker my-poll && cd my-poll && npm install +npx wrangler login && npx wrangler secret put ADMIN_KEY && npx wrangler deploy # 同一把 key 也寫進 .dev.vars +node $SKILL/scripts/poll-slides.mjs index.html index-live.html --worker my-poll --url https://slide-poll.<子網域>.workers.dev +``` + +產出的 `index-live.html` 內含講者控制用的 ADMIN_KEY,**只放講者電腦**;要分享的版本用原本的 `index.html`。 + +### 互動地圖與製作技巧頁 + +- **互動地圖**:點場館顯示項目、最近據點與直線距離,按鈕切換「20 km 圈」「標出 20 km 外」;經緯度投影的 SVG,離線可用。 +- **製作技巧頁**:Q&A 前一頁放 PowerPoint/PDF/HTML 優缺點比較表與 AI 協作清單。 +- **PPTX 轉 HTML 插入互動頁**:以「原 PPTX 第幾頁之後」指定位置,插頁後自動重編頁碼。 + +程式碼與內容範例:[`references/interactive-pages.md`](skills/html-slide-deck/references/interactive-pages.md)。 + ## 🎬 快捷鍵、換場與動畫技巧 以下是作者 55 頁工作坊簡報實際用過、驗證過的做法,適用 reveal.js 5.2。點開每一項看可直接複製的程式碼。同一份內容也在 [docs/TECHNIQUES.md](docs/TECHNIQUES.md)。 @@ -473,32 +515,7 @@ show();
-
-4.5 觀眾手機即時投票 - -頁內測驗只有台上一個人點;要全場一起作答,用 `references/live-poll/`。觀眾掃 QR 用手機作答,投影片即時顯示百分比(選擇題)或直方圖與中位數(猜數字),講者按 `A` 揭曉、答案同步推到每支手機,`Shift+R` 清空本題。後端是 Cloudflare Worker+Durable Object(免費方案即可),150 支手機壓測通過。 - -```html -
-
-``` -```bash -node $SKILL/scripts/poll-slides.mjs index.html index-live.html --worker my-poll --url https://slide-poll.<子網域>.workers.dev -``` - -產出的 `index-live.html` 內含講者控制用的 ADMIN_KEY,只放講者電腦。部署、題目格式、API、壓測見 [`live-poll/README.md`](skills/html-slide-deck/references/live-poll/README.md)。 - -
- -
-4.6 互動地圖、4.7 製作技巧頁 - -- **互動地圖**:點場館顯示項目、最近據點與直線距離,按鈕切換範圍圈;經緯度線性投影的 SVG,離線可用。 -- **製作技巧頁**:Q&A 前一頁放 PowerPoint/PDF/HTML 優缺點比較表與 AI 協作清單。 - -程式碼與內容範例:[`references/interactive-pages.md`](skills/html-slide-deck/references/interactive-pages.md)。 - -
+> 全場用手機作答、互動地圖、製作技巧頁:見上方 [📱 現場互動](#-現場互動手機投票互動地圖)。 ### 🧪 讓動畫不妨礙 QA、PDF 與無障礙 @@ -650,7 +667,7 @@ AGENTS.md、CLAUDE.md 給在本 repo 工作的 agent Two Agent Skills (open `SKILL.md` format) for building **reveal.js HTML slide decks** with an AI coding agent, plus the scripts that make them trustworthy: -- **html-slide-deck**: outline-first workflow, dark professional template, real screenshots, QR codes, interactive pages, per-slide screenshot QA (overflow, JS errors, external requests, **QR decoded and compared with `data-url`**), export to handout PPTX (notes included), PDF, and native editable PPTX. +- **html-slide-deck**: outline-first workflow, dark professional template, real screenshots, QR codes, interactive pages, live audience polling from phones (Cloudflare Worker), per-slide screenshot QA (overflow, JS errors, external requests, **QR decoded and compared with `data-url`**), export to handout PPTX (notes included), PDF, and native editable PPTX. - **html-slide-effects**: fragments, Auto-Animate, 3D flip cards, GSAP, timer bar, lightbox, scroll view, with reduced-motion and a STATIC switch so QA screenshots and PDFs capture the final state. Works with Claude Code, OpenAI Codex CLI, Gemini CLI and Grok Build (`./install.sh` detects them). Docs are in Traditional Chinese; the scripts and templates are language-neutral. diff --git a/docs/live-poll.png b/docs/live-poll.png new file mode 100644 index 0000000000000000000000000000000000000000..9a993951cfc4b26254743ba19524d11af7384478 GIT binary patch literal 154891 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

q2hoCwR?qP+)!F!>qrKLr@ z^unIrodq8hbqbJE8N#+5OOu%m985zxB)@B0QU6O$jXnQi?T{sG?+KqY5eagH3-SW7 z%=1YnM->2zH@7M~qOLI`ZD6D-!(Z6YX?rxqty${uqgUfLj5+?gcjn*lk1?HKzKs*J6Q5|ba12f(-`S}HWl-ov))d%#aKa0a*JY%6m-*$Zbe8rr5 zQYt&uCmrTsX4iuOk;=)II;L=jvF&Eq*LhJnanY0R_Uk5`3%`fbGm5!DLh-+j0*Um{ z`o(fzm}GYAz@Z0tUcP3(b_0z?4p0ql*nH zP(Jz0a&`0;Xd~iIyCV7R6^rr^Y@efp0U^pMeK5+n(B2Ca(!HzxL4-v%4S>w%n}@Sl zx9$gh9*viYTDT8rJs*tVSY7Q|Yk5%$d&BZDhdsuF;oSUW0QQ%~d? zUxMcf>&OEtowpy^R{cd+upKY$fD=aYYxcDY$-Q9!M)$FgR{&SK9K&f&5wjv39#3T!^to`xt_LG0>TH$L4i&QA(7WX7c zyTdp}H~nFJe4SmM{E~RY%DeSG@xLj2xq}9gi|qmE_+eWO84nateaqr#1B1Rxfo$ z-QKM`|FV`{bUQ1)+2L?#Jj44?hOlfHVXk$xen~02cld}PgJJP-L*zlEr%;%L^d7E^ zE^$JvdNCJUe?>*fdkXEm@tSMK(|RKBl9D60-F0?z)lc2;oo5`lB9+`54w(N#4Y>a6 zeGjV5F|HqB+TRsEaday3^;R^Z7T*GxbAzdb^;+k1FK)28Ujni3N9yV1%(#)q6_MJu zl4Dk%L*5rxnCb18y(VUKr&KK&+w{loh&oc%Eh#0(V}`o`BK}5M(c>@J+He1bvdj?svKaF40LbTA;dT`b~;`If$(X0<_cf@wCsss`dR_HPGLpAv&>=MKQh5J_VP<~TDZ7f*OcYqxYZl*JRuNjy zeD(bCG!Qm8tYU~7zkET{NbRrt)VMyl$K`|YJjmb%WU>#bHa-~x>Nhq<;m-7=dmH}qv8L)3V1PcsRE*{BF*9lq4eVq8_jS#S+(rs zA6x1r8ti6-h0OE({eTM&!&H~;H;6woN``@QT zSkqatZ{-m;M}YAKzvb3d1H@(pSRMcp-td|lSXS4B$XB;o9AeTa;E;6RAt{<~`uV_j z0A_vs^}~y~1OPb_oBFG~SVL?tzV=1P>5w%EE>_VcPEGZPKay;!|6vFGS2N#*uuj?+ zQn#kk9UdV)eYq1I@%#5*P*8 zf0-bE#K~L$Fe)B`c6VZca`4}a0ypoxR*FhtcN=gDDnB#Z&tg$ogY$w38Cam+iyzHf zx%Kx>7V3ZuRL0||nh;e9rUt4;quF^v$~#$%<@BS9@3O+2Ml^V zK)Cg&tb@s$6HDrACR~L(C+JpiW=5eJ+fEp-^OowK|{DR=fuwcZ~x0SN3>|3?-vOV$!V$$UC;M;g7UI`-Udtz1 zmJAos`y33qm`7AO>_nK%-Gs^+XPh6FdEIb}h}@Y2G7=J69XpeO zBHZ|x?&J@r2gLZNhliPH6#aaHh@5QLrw~wE|M@z^1Y@YKVP0HTLML!qvBZF(X89`S z!)tx<%dffl9ZiovKyyF8#|)_@fB1h7lvAqqpHy(&8rTr0KW4nQ#P(5LttP5$-{b_@6AALk#<^k;6(-W;5*Kqiw1vDdxtDk0>C ziI@KPb#>#n|6cNL5p59>DEQ7NYjtVqVCR~=KzW8J>sq)oXm@K(a()Ll#G<11ZTy@K zEoIRZk0g@?suloFz<0R8nP~6a;ls~2j$B8X9o0Q8s*%i;%~ zW`zMZa)O>$oKZU1w<4_S_u5jA^j_~8DGiYxX(d2e(-DrCPpL$CYdfy!IqD_HG1>NH zhBlmc(e#{o`Vg*rTbf#chxfN3mF35d!VSx!9gPXHm&a zeRUahcz6hs25??ZDLi%;qtJmg4Emc?007dw!|-S=A3#7CRaAQW`FQS;7OECYCI_2J zCCAVR$7duU4h=P5+jx5m{Q-Khbv{|$pcjo>bH{V3jI&EB$sM7g9{o%rRQ>AfQx=xX z-@P;thOo%{UEQy-Ob1h^Lq~=?adxM@4i2psHu2$2kjubMK4b-(4 z$`!BNRK$UKav4M$+^t+!euqGL_8w@QKiO7ep91WP3!1KUoAjd(c=0K>cQZ$=^n+*Q zfEDI&2fbsN*bfi~#4r3SMwivuAB8Z?`LCqRIyHQ>e0yz_WU0#PT`oJy|I#@ANA6#B zh@!L5y>e}`C$pbTDHxo0y&r>$O8_Xp=O|j@dR$msBwua>AKC&{XOAG3Cwmh|a&X9- z&&0AIZYymjO`!UKoBNhsW~q>2yk`mm;W6}*-ebqUw<{D&^6M9sbXo0tz)v6v5#Tcx z>ja<{sC4OK)zU|HHGl&H6)=Z0gjGyHU@~&mMqF_#RGvb4wex!|Af1|D zi9Y2M;^bV-AZ~q1;B#4HEd~Y)epondC2lFpQsyPlQ2i!>f+5Jr%;@WpK(h4`EddwL zLb<6!&i3aU`To!YFgyUWktRb9@S)i96V>J8U#nT*K9eUkr2tV;ETKnGDw>+9qCGud zTRk^9fC02-Hu|o0gZ6?JVnA1XIy!v?)04&*q4$q7z2`TRl}A6`767MhzdrZ+n8_MN z+RpjU-WSd1X(qo04mf1Kn?nn)Mz(nL6^&CVXW>~p0pR$uvy~=Vd=8Ds$>f9sbdqRF zV4}_+i_8swm=b^~jLgFP@?MioQg~pkB%r9!$Ic`lVxv8~*8MNmY3YMb zVdHjrlF|1&zZTMu?9|{8)B7DxN0R*|1O31P5Cp`Am`f8y`ep$ALR}ki_k7X)+9sip z8#L!P`Fjy#TxAMy!Pv9<`vOkFdqh0GV14U07Trb$>ClO}Ht$RMWFn?&^Xlu5%XP9& z(I*9o%JrU`CYUl^n5P@M;=z!OnMt7{>kDWi6C3Lgw-~1oPg|XaMM^{CeGsR1+T|Zz z56vt5l}c-SrGx88dn+}^O_?ufVV6daMU#y8mU48cy@q`GgLqZRw$Ny z^F`%fZYifUX370+NcNbGPm;pQ)`u6|T>?_L?OJD+vek>aJYff7rJC%z5pkC6pZl_ks*4@Z z4B_}$(nykx$D!^=SP-PVyo?V3z`qHLOc4tRZVV>LP^P9P)6&;g(^P-{#cbou283ln zNnxpJG1aTl;33+{`%c+0XOvm&3dcmSx_qLq`_9$xJYud3>(9eW zj2gbY9D>D)&Bjn#eut%tXoJ@C8$qv93(Kq{K1u-d-}=2SJID@U7nPqo(qGwM^9-t2 z?dVqbTSy_t-i!vSnMHT@&x@SVh8l#+a%iyMh5&%#b3ci<>~$>G-VyW8SO35>J&*(> z-f~L677m9pztfQU$}5m|eMpHM#Mp=H=db!WcCVntum2c5tJq3wv4o7WjSak(VmslZ z)Qzz9bobFaJw3!D!qYuKSG~-OWKXioh>RTU1hpN}6sjNbCc$8U7eEW|BO)TidWzL{ zm{4f(ol5LDP<-Lu8)kthy*v~M1Q`WrETd2_R~u&lfFz2h!HxZN=e~uWko#&_=W-cG zTte~g%387N(PGevqhv65J_G#db3!5DU?>HR=&&FA4gix00{q2R%tZk#c7o0~h>nnh zb5Mr%im{x#9uD!Y-#}Xn<*a8bY8iqMKM&T=gAWdRHiRY8$wxhg-YnvnOwq=K)hh?X z&Toyy=}$2vog6XQzc3;vrp>gb2uuLLuG~fLM#7Bf6#)ljEocbv?4LA5{$rBzq|Lr{ zYnn7PFdACst6Phbc=)6-{JB??*6H0EH@*Um&At3^Udk*BYOd3QM(j|MqpkK zV21^ zzE)H_L<|AICW#;%oJ^a^pUvrgw#TXL4$MkqG(+N#g15^hvmNK>!$Ccal~c8Ghe|)4)(&Urj4uzW(8%%S#d1 z4M4x~TiHX<`5%WbWe4|%%5_MG(xv%6fxF05Y_$ra{*+BGzA$NMXa0mkMC*4H=jVI6 z+sAXIhyY&RX@qoFY!!pyn6_MemRL6+VS;7npIB6(!xaopNiIad4)@} z)f?_AOgMVcNPK_sGoO4siyV{1F_i_> zbc?;o8_V(RUt_?;ma{YOP|oe+M(ct_iENWTpu>`;LKik#SwUX;DZ#VG-SzElTMb75 zu*N0zDf)BZc{Ex}A)FKb;BdHl;imQ5l4N!V*lR8&g`^s@q*gfUfg+qNINk0(G+Y4^ zMa7(O&^xqa1_yg7z~aJX8nE34#WEr0a+EQZU#4;iWwaNe6{n!_mha#9A!^BJ_4YJwQlDE)f=%lprT z_Z~G%mv;lrqWhc-2b}Hkf5&!@)9+9)u<6>vyhVo4^`+}C7 z8!KoRBp9DpFF^H3rX&H z(d7?!ve#1WRbq&fos6<^TjNGYcWG(q)-gK#$6Ol4iIS}Eg>P%dGlNp>S|A2%Sl5vEKWZ;Tsyc@V=<2cXF1T_R)Qi7$Qp^ zn=Lwa@A&9zk9Q`v9^NrJ0F_h-kY9a>ibzOSF$dUQB+`=IZ;1g9;sY-H5Cmbj6D%&O zi=ax>1iC|DDYP>_j3VpX`!Ut`_6%sserq@1$W0_Le_j)k#?3z)1e~#x=Eg1eR7hqE zdIHC|q@+ZRRe8f#EGQFk7SE)ifNbz^Xf-zC_E!Jo*7`-j%RY3iYOdUVV=?H;eKrR6 zIEo)|d~{+f^kEg##%&w^sNmS9>&1jO>YRRj`UW+`}?FN)Fq6iybNDL>=-7^4cPZ|tT z%~oG|TcI_xaRonw)7@$lA8VaU<1)#Nxp@;J!M+zhbIy4*j)|9dJ2Rhps=SPPLUSt+ zLyvrAKAk)PWT8(QES-`DrO#34zzFU{&VQHli7Az6{Sd0>lA+AlhOqC;Afsyu%8iWd z*@{C}kn45JTRj8>jEf~g5<~KG7#(8b`%CN?Kkjeyno@&tWgV7B2`U-ImWS)PeOiv*} zbzTK+T(|uCS@ad4k~8i*@v;I=y;|Zgs*^J{?1FhebLi?I0o-UANa6yIZ)7Y^CBh_q ztd2p)OK|hkK6z%fS}lrSY4M*dU3*ud)t(D+8a#7maM^GKY?~BacdZf2MgRRy9DqkN z@jlx3bEIxE`_SE}1k6qoGX}iF&sDvv52+u`)ai_D<^<%4hHrWJf)2l&04+QKsnn4! ziWDnJ_){YrZDjZD$J$l|jf2mv7QbDEA-vEYHK}%#X^s?n@#XTqL61WGJ4-yt2aNm0 zPM`gxAE5baaDj{qv=es>Zl3$5;3UFS{y2&4(^ksPzf}ZYLMFbPGJ%$KlUKHbrhZ5+ z$M?VfNYXgs>|ci(V%t3UGx6?tF5Z7_|3(+}Uyy|~E|*lB4w^XaUqh5oDhhVnbH%E) zmUi`TbgeI>{@vNXm*9CP1C1y2Y;)cZ-0H;JM?z#$N^6Z4?uSYhg0(a`6?C;f10^AI zQ%V6o*0#l-SsAFCh*AEdM*xnIU)$bor&OzC2;laZI01kt^U7o`ZL5vdrr%aLPG%Ic z`I6R&_a6LeY!0NR``TU+lXp{_34VTwZQ{Lq42(|pBGUlhx9t3 z5_s!5NaDS#?6Sy0U0^J*%&O+O6~uV>#0zUm?MMNh3mgtZ!F)6Fw5$iw`zv4v;d)8{1;#S(k1h)q<2-S0xR+hoQ zOEx!JhG@OC1amX&=2uu1)|ivO9ypy1zHi(YQuLt6Sh!5v$*6A$AICH@v0?)ULua%=0rOd5Ghzvk*JX zzLgJ&Rw|6Lr>~11*u=9779XTMOENdLv~&#YJsgupjdam~(2+nIFc?C|JO?utv`{t5 zk!579D1AZK+dZbKvyM1eO`oGP)7cQes0h72b$L)#vt00B8sYZ$d5hKQJeMWH$o!WV zF1!ys8S`{ZJMTP}%{bI}5h;;% z*Bwk%hwdYeNs5c)PkHNp+Dl?TShB^N z=#Ei2cB72vE7mWsk3%5V86JS(2 zF9y{7c>-ES3c&6t0I?67Qc@P2$>>iMYkdtyvdLdD?9Nw}Lb+u2Zgaojhh{k~R41pN z1CFB5@XPB?)w5B2KINDm511 zDP&V9FC6vR#FlBUEofNED=T>M`KAU3`2Mo07K$Br@}H;ldy^!s?M0(LKV!s?tLzG` zjbHt}IDg;1g+4sLbN)VfN37gdtmTK5!F8Xl`WS{RbBiMIssp2Ds;T`9-VPl>_Y0_! z^LB0%+B+sYy!yKyAg|3PXDsRmyBT$OCl?cglf?mn__sEFw~uY`XUNxR-oBQv2-z3X zkU&SvX2{L%meXU-m9)L27kk4(DO$5vT&%yw-mNZWH&m*63eiUYg6L3<@`CbTKkNSMU+0Hkhso%e~-9#HYXsvIM|3?ZuMcZkyKCZ ztYYwY^*&4KmPf}W9bqkYz@pIuds2ur?Twg$Oo=zzpPA2Rrpy&mfaHNdr(J;zatt-| z(>KwwSAEYYoB@G-AdNSBjG@YU((AjF0S*pxQ9Uyh)xf0OetqNY`Tk;^XW*D)eyoiD zo~|!2e``~3q9*u4sFSmlRzV~qW1lXEp(&8)ZDr<7B%nDuiUsxtn+MU6t+=o+B(7R& z_j0xRg(rua*0n6qUtQuw6LN|DX0`ey%)1_#s@rB<*6tDKoHtw%K1vt4<3>Hu^#u)O zK#P_lhHvFLO7oNr@?M4DnX@?Se6;bX08*t|1#(c|HVH`e_;ziSh9A)9H#X!*Bw7Tj zBt>fbcK4XU%8d=wj5PE#fN0_t6Qs_``og3#lwWE^IDA}%wW zt3axHMn-DpZ#RD~pmzS+HxmB&WAFyIp?MEP-MX?$1QZ+f@TB#?2F{r(xF2QFbyAtC zS&+j}uDtLiN^ES%*xH9JXt9!r2=(;!+&49qE#suY#WML8L|t^zY~lp8M{~{J67kSL zzWO}=Xx$w3IFu!D8!5Fkn2-Hx6rWdos*n%uuxlbM;kRUsAdrfR3T{GguI!Leb!kyf z2VFEqhDvq&Dmz{Ai5cGNcJRsWU z7H>EH6=NBt$5aLeQN5KCM-RJk!iaB>`jN6@<6Tr}%I=Y=7ePGL3N_9}3Mvhe01+)f z>AS0NAUg;`=&mwEFrW$85ObAzt3CUMnc-wT0^C^!>R%E(=VfkNl>-eH_&Gn!mkWdN zc2_$&u#(qv0q5!b99cUokljM29`?0AQbD4Nb)7 z!zR@Pb3M_d=R^As%yNI{==#$`mPFWB(M~lOld}Wbfb)S*T$63#dr%LblM`ZjtmddI z3p8{J0Y$~(O@4p7QARJv3An6?^sAHCK}Oh@km_pKq+{5OoWwpEcgO4}H%BrP zJm6^G`2k%+hZnKo#P?uaRZ#SE%h^1)L$abcoow}VHm~{^2Ck@spI5m@bsT9lrgump zWtj}GiS*8Izsbcf%5k`g>lo_7)9Rvg3E%f1JsT(kR!?2=rbU7)*Ge6 zB*{8B?2;KaW^$$G`J)>Tl;$-tYJp4Wc7CD+4&*!BDho1;;jPFk!2n6z`5~Elcky@%pn`H(*yk#b%GGET zDJUpN27{CItc~yiLCpA83Cl~|GMV-ht(P%sQ0x;y;SM7RFq_O!Qkn-UHWI*>0MtiD z6=AG}4S9Lhf8iGLzhccSJi4>%`wY-})&h`vJjaQI zk1eb)O+6O(C<+kS;9v|UCic^PUMBxZ&{^}vBAwGdX9B$d$yq1- z9@?*>iqGsTtJ2Tykm$yuP=#CrI+ly~ySFzhmb&d|_FUts^T)|R0odbcdhDt22Umdi z>6=2z#99jn_#5m3?4zufcuQ1_L|i= zX@A)HNl<3+*?2lzy=$Zo$cbZkf?j5#dha$;$3yzAT~k`Fj-T8BmrUSCDjLX`fJ)lC=Ud3Kr5==aFA|#G@kzbr!lTml8`1*-WhTl~7SSdV1=!;|hbwhVA)&T;3!>RTomjM%+RPZ5y*r_W&)wH!+CD0t<^hzw($Wpj&pT=v$8IJAMiE19ksQs zGVc^nSJ=daQ|GC;=v-hhkMS~lwXux?jps)=omWP4z<4Elz%8K)HZV1+l#aB=Z)XgteroSpE#(wN0E!;`+pPd4nQLP2o)*;q^OK7DC&sImq{X}DQ?fBWFH&sK z(u-6gp`m4$Z7v%XTwG9(&{ub*g#G3F`yDe!DN_*0B15QH3o0NR)*T+c@$wZjA%-4! z9(mhZOCB^*q?u0BLFzb}yWj>*=H`YtWTwhV4>L(sKtDCB0+kGz{Azx(Gx{t(w3gmy&8fM2Qg?ljDN#YMYsuQ-888_u(4-{j zA-*?7;;E9hL~+Q*_iJ%@7TQqS(%#3@JU<^ZIq&Lm9EU&Gd3d%n+R8TW+Rx53#LiR> zvk*HVh+hSnJ}l=dLu}u}#+#%LPP}2;KYujSD}y97Si*0CCf8)BucizB-z3=H|hH^$~M%W;s+22=Mj0CErAaar9cSXKB z=>VI80ZYGZe(R^8Q3`$a#XTk1{Y!BuiIo{#l zmgnOMWMs&!_eD+&g5AP=Mk$Tgi-W}GH)n6R-Qd_HhlnQZLfn!9R8SGi!-683uID~j zM}NbqQ4>QNQq%*avLJ@y5*LgQn4X>cF2!0*2{Ur2%ew-3SbW^9Zm$G`Ai z8c|80yK|X|2WQC8fErNX!8P=;iI(2e*Gl-^u}%*p#3bs5+8KEBy+#oxYFh40u&n#* ziI@Gs=H2+KA3#B7#G%HH4jY1^Ak{-Zbw4c7`^29CJ2;@jlXI6vO>I58-o(a&E&!q_ zh=@SBG%xzsZ3Rk)+=ahA?g5Srn^iJ82yf+2zD(xC;N(V5jHe#bl2|#EF59>`&U*fi z9maGfSqv336Iqy;{k*xtm%E~Go5N!jj!Z(sv2oo)40 zb*Tpu#OJLVV8?kJ(1bRrsytDIy8g%V@>lg+UFQch@BiM;OpD@JSYCXN+nQlihpHos z-K97UL#vy*#yV-3_?&LCJFPtFaL|HCnp+zMU+QQ+3DVAIJ@rV)Qd> zJ1hoQpaPRN&TdMdW3aG29{kp%wC_rsKnxXpV~pZu>QBV<<*W6}o`9M=kJeRS+*3b% zB@B4u^xflC9d-3hJdKRI%3Fc6GN1r+sC=F}zl?K+$v$}8pa)O8^3hQ&~@aZIb8h*Bk zy|10n=T+Ic$EQc4`VD^t!WkdJGBDKZtu8gr{Yu;D5cGH|dy;RA8rqy&ZqNWTG1M(m z&J_WtdQP8TiGHDdW)m50tBmMDk1&g7X8Q9W038o5-AxC6N33uuDCye z8xlK)xUp@uC+MQIAy#(Hwx{pQ^xZGMe+7bKBJIXH6vFpcF{MqUT&ES(u9Os++b5m#|uM@8G%xfriskaZX~~%{i}e;bU&X#o*DbN}Pg*t#1!3w!_lp0&yUyEyi{x|Fup)&`B~2}mswqpxp%FyQnFzIx3cAF7+jV{!0&vqwA@ zds*r6>EYo!;@~g0f2*(GO@VcEZhj~xMc@=y&DK#0`LVDE&hHC%`kcjL;$k13v#?Yg zz9kV77DA^^o|vFNehWdl^@5*<-P+3*or4AD*Z^+^NH46)V{T_fQN-{UU6&Ah|7M|bQ2;S8oz1SD^og(+yI!{q=JSzA>aaXp`ao4TV6&b$8 zWs_@+3nIPXHqiBs0aCZmc`pulwPsRUS(53w@dS^p^klExkG zAIj~8qF1_m=lR65B;Qc>`F&V=x=9)AUH0eSBvd&pHyQZ?+3~f<)~-E=7b({M?0F_% zquFp9YRYPn2ynP~w{;dQve12eoUpO+EQhZ}MIZ)U@h01i`&?@Aa6R0~hK zRl6UaT3|g`P&O!>Q(wr)_X`(f!vgN4uigeb0z4)b20W0EThrIjzkq7XSKU{B3o!0J zRGiQQMp_LPl7RUTVCLJQrKLCgmCb)Z!8l05|Hy;ifR(q@wH+Tr3aaScwB<}rg~l*5ttoJ%cjQkYTuJ}Z@Usb> zifNw%i_11DSws+xXF?facC66Pq7>)KTdFhs{mW8yNePg@-wY?LtS>)b+SAh4(+V`~ z03VLnNcj2Ns0pJ%#!+!Z}SV`0~hI4fj5BHH>Du7hh;tltIBnji8{;Wpf z$93;d%H803QufV*yOAE~QjBQMOjro;0PRBHZa`|x*dL1RqKqZW2Zj7D2gJrudbXYy z+RA2#oV?@reZP&`|D!i;s96F{waIbfX`nWJ81?TBm;F9r@K^UGU2Eff?8Pve@oPmA zqn|2HHd2VSFQ4KhfP{+jP28y*2?nrj7JQqP`^Y%cZQC4(PF?QbYkD+y(Zne5u7`Vo?_qa*Re1%0h#m-5)xvO$x zS}zDLTl6Zq65RyOIr~x-r8(8&Ko$p7^1n_(Wf7aoO!*;CruO1vg>TNyQYe5foawVw zg787T6ca~dzfxM0US^^Q>Y#id^xC!$3KQ))X^S3ZG3VG#6$jtjo*R85V^6?+Ratjjt$Kl zzcCL=s28uO;7C1*i5}zze{8FDVbgDnu+$BtWEZ7;?DrXJ8>?#Ci7uLGMUFKJp5TFY ztv?Q30PrY4*=Yxf`+RVKXIzEORsdtQtuttwxg5rw)xPxh!r4j_pemOw4Gb$B3W|Hw z^i_UOAh5LOYjM5ly-T>i?@e!wP}vfl%$k&|er#vkdVIC(S(cHCf_zw|XHF6R!@}cY zzz>JyCmrxN6mId&_%TufrwkMb?+i1vhz0s-%M>S(W&IUo&7^1K=O4@UKeb72kC!*| z{IrC;PH*SsZJq0U&=iH|DJg`Aj1@WAqF5N`GF)}mYTV~EPI;el-aK%j$~*Pt;C$2E z8v#n##v9z^rajRuj&Z>RK*;_!bB}zy56M0yu5<{1VWwA^?)hY_mXz`QYfqxj$Xet7 z(H7I~iPVRcG5Tdz*|nFSNeW(gTTGSR%QzM;b%4du+16jBSkyqH*$kKnx039tK230dAeDZAd@Z2A;)8E91pvtHTB81Jn4 zJmt0+eLl4N8|axop3y3^o>8|%sLi|8v#IF@e3Dg`K3cn9^~W~;;7jxuGaDMkpwNa| z(RkQ-}KBWE|zsbhr0Jh9WnCrUm zI3Ol(;b7(dljy(nLU;vGKmqli`f&3{WhNleicwj&QmUH>cgXAASq|X|nOTW+jo{bQ zZ{U6K8t!3p7FXl+SP|cp|6<9{#!zBq0cpMJc4d-(?f(Qtu0y^RDy~gPYf!)^338XVzdmn^pI(iL{Nh5dCZm zq9=SA6cRe`W)7VI=yQ6eLN50UdAG;~z6>JiC%i1^s!t z^5bLd7Aw+%GI#e>&Yla2fB`ie-6&Z=rU>B_q&$o#(}nTz-@m~*`>2zR0&2H@R8bnu z6LnN#?ckB|Ksp&4r1V_aHJw`Yv&Wgn#l*fH;=cv-qT)Bu@g$Vsb#I{h5n`hHPd4iQ z<*l=>adF-^3?2jDX~bi^U7uF~Y(TCYcK;pFwS(44$Ep zum>TTiS;|H2cgif@0L}i&sR?O;4ZG$rbQ*F+7Sv zeOG>te^Sg~F|))wD*bOx3rUj*&Uw(!J)*Gx7n9S^; zboYdw>tvy!oNtibTMf^g(lnRsy#x-C9Zp!7z%?7vN4q8vd}N)j7h$CJu)7fV&uxZ! z<3?q(zW>#VTz)d@8@(qAr^(Az1h@rDS)b7b zT#C>@97$BtXq(YPq@)ug zAH@({8qUV|>OjxRb%v5SAhmvIynN>jof_a|ukuBh%{abMK!5)?#Vv#b3#mxdNRV0z z4@Ev0!QZl>hOeX6&9A8kwo6{Grme#2M~*T7Z)nBHAHB2ar;lg1fr4}jZ3A1=33dB@ zbP-Mb-^uG?g7NFB$pZ6cm~p+>m%Og14BxI<)Jz|}2(`-FnNWkksfH0o0b-Z?nyzZQ z)$v#}BCzE%YJd!>1XP{y{u-`yafGcZJAxm-e=nJ%^Tosu0PRzXg3l=T1CG2uXrQ?x zp*@b5Ts1px1Rmb&>>H|pEmH^Yw-pZVZdXk(p0Y>hP<^guVNQ;YBdr_s`uI^zjj_AR zYl3F8GT8@2^(-X6RLcHzEm{7l8LeKTSivP6?QxSVx--{}*J0q#kH-6gGU`x{XT;V( zAh`$#86$U^kKJvO!P}HP_pH5~z8+3*`Vy(0F)0@>5#Y2_zfTNVCF&TT|7z99jaGji zuP7h0N3F2ZNJ%FO`?AVMNm+6I%nYy&>Zc>Zx?afv*sap&j}_V z^OK9C!x3Hv;TrutI=Xe4(1lN&-@stNn`3WJuIH&Cwa_r@ZNG%AEpitMAS}}d zoUICSy9~!#Wk0CHFDcthzEpW5&UoXym?_0&an3+uU|L)6V)a6u?NgS{>R$lPKox`F zrif;|;|02QZs$iappH;ba`N4$mR4CIu64#Qr3S-~CW^yX5`wSrUDTs=fQ{Mi%Vwh# z^{>q&JR-uCEy_=)gKYi7Y|K-cf#WNcM=Uxz8rtUd_pPq(5~}n`ldELuPW_~@*o|9QJ?1ud;qv**`g{M2GFqM=ja6LTLQa@GA+{yx$#;!1HGxzv=P}r@8-Q zE-Nt|hAUqf=v{}0VS$cWnX%_5+t3^id22thaeSJCZOU{*nA1U|5++RPp{7q;0|GiG zgV7^Ks#bQ5zeXXVuz*oAk~P$Cmc$X%)Y-wqBD_Ev1=4NuQtAR5sR-X>jhcS3=p7qt zFz+^QRc>||+;|JeiHpSmtiwQn-xDL7NvjPFXq_+qi6#HJglvokQ!-Si5USbt%~rv0`163 ztmI-U^bo2^ci|21cmT45Ck^Q9l_3JhhIin?Z=6`EGrW3uD8OyaC+j{E>aL8Xl|Q3A zQcTI1t`1!Minu@c8Wy&xcQBmdbk`FEf}NfLz7waqc7F8v>M3*YoOgScKl;`_PHSV4 zj9V?6^e0dbE6Z&Gy88~*gH!xr%i4z0mmokV#zCb1Z+EWk?+KExrj3I5+x&XtDvpIY zs`V0P_6Gj43ajSbjadF4!-vxz&B?-d z$kSN}CzeW3!!T6gMSc1doRuryyz$`+zMA}mO|q;P$5Rl7h)4!gGUw~p<754_Q7=02 z^m0Vnj4dq*XY2NGurXa;?Jy?yt@lsLC+2A~-OtA4H?ufA+;$5ZLQxj=syc)z#(5|7O-x zZMjoSi%l^D%gM3nU748HYs|K^UVS#*3-;;4LXcepT zG%ApFM?^d|DAP_i?&lZ?9-skmgoC}k3Gq?8WA(DCs$zGd*x%I4fN?C{nIBrD@Um$; z9-RkZ&$YBnE>vD;*Kbg~C+(B(gWT5mAkJHHMSa*i@#GREJ3?Yn@2Ya?ea{s;b|`_; z3HJLObgD;H`(ybK3xU@mAoOX+-*H;4A+4vMj?Vcdrvz5sRG|C#0#UIsS z09P)ALGDF&RSrXV_*1}Df#u3`aKy~|P1099z#gP7z^IEGeyVqSu>GLz+{K}&rR8oJ z-e@&kPS*Wg!Z4)L=d24kMb=%QHX%VrPfps*tatXE6{WDtYi@3SL1xcC$7dIFyw<1R z+hgvHzxpx-UMFer#SacL-rmoeM8*-R>g(SRBvlx&)ET!nlk@xeot2!*7A^|9O$E`& z#=|aP!wg^Y@-A<0J1!QkUh~!;-lI9#yYvXjB?619X>82x_5R^(hf^fwOi5GGOZCe` z!D$)kq%wyyi9-Q3!3I#}iQfr4 z+io7Y?lw!iDjN>{Q^Fs{xiRuT7I0XJmBE zH=nc>%@Y>ki~>0YUDwlq zht!b~^Kg0JZvxVxeu{*RiP|5g`xs>PeJ z&ur4PV;s0j z)aa3@C%;Y?1OI8Ejwz0}il5W$p>%nYkS`gDUF4xzq1RgM>+(U@tJ3ee#w2H$8G147 zsT$r5?j||utFpgE%*-V?ltTNIOQ{e8U48X-=Th3S-QAW|+3K!X(&|s6(PhNVsK#Sf zJCpOhy-`R=0XuNV^P}@Vkrda{o@WteLU9ox9V?+|@i?S!D-B#AtKBs?x9(D4%jQnA z8h$$-Usu=JCQKq}@!he)?v1!v69DDecBkItuHbb&jTR>(8Okvv4D0TIfvrALe6&fL z%o2mCh+YlZl^2(A-CTN!JOn0q-T1_Wcr}exb$Vxq;=ca>bOn}ve)H&sa})U-ua#{V(Ktzw-pIg#bY$G5R2AtzBi zPT&4;#5^N%hL1^uz4dExdS4wIOi(**o|SfTacMOpG#T&p`wtSPyZAKpknhYN%Wm6x z47K6NkdWQ73k#x%Ix1Owz;-UbNws4AYZ`5Il$^6s({I0Ws(-U;Ws_Y_#sr)WIOwt{TyQGKmXfx#^ zM*o6OuWV^IO-w*W6}=L+BNK2tS|7-wTY519%$iyebOgoZ6g}ti_;DEvi&G8=pJm9d6xLeeTK#_B$M3VvEs8-^HNdu1YXB@!uD%_39oY(g6lb- z?z7qYeI*l^eNW{*aBjE`Chz=md>lP+7kRPA-{5%A?(d7cKkrY)4x}A3hO#;lX1=G2 zbFc?hcXw?5o4+}n6I-?ZH-%&aLf7!jehf^7I*0kYjUCD|!z%H7RaFee)@I-hqlB?4 z?~l^4aJ>iTlRA<#+wbfHx5iLk9b9DzhgSGi`XU0dH1VF+>i=;zw6vU1IeAFCnXiyf z&I!n&k6uv`W%+*9)&0>`X@1EQtN&ZFcFWBPJCkUua=E8Theh=ueMn*fW=C^ZuyGdp^R=qjvP~v3tmS%lnD6Z%!a)nuj8!uus!eD_CjrY0S>wF z{opVx`CIZLprva~YQA4Ipd=gaySEscW1aQ9U&K!U{kk4B;E&&fL+JtdEj-8ZV=JrN z-+I_>zyoY-&OB`UX9=eVc@b33(~-DIm1_ZBgqeetKexP z^}Fv|rtMKCoG%v>1vakUUM!A!rcpJuxV;Gsy#VqDlX})FzCHPPQP%~_M%zy;!_J7k zA-SGEX(q4xT|TJ$NqmTE{sOr6v1^nq%?-jYoCqm#7WA0Q^*obOy|$8fVzUoUs>k9u!*#S&j{MLALi zo?3<{9uNRWtF^3o!E=1j1zRKK?q$^Os%(w4no!LNn;8)Bfj$YP-(mjJ3tJnT+dF^9 zHp>?I{8DDeJOVBfcgSzP4D)`4ev#|LR3Ml|;OwyXSIZao4Kj{=8b3Np@92;OApf+z zVPAlQ`kyZ8aM>`^MFXI6{of9ZQugAZQC3$#@D5s3y1lgLa$&A=b91dKPwBNCE`74$ zcQRH1Agb?95|qj~b&!MRm(#e+c4w3fG6K%Zv@iqg{4Q3f3jv@iugIm_XbV3!&soR7 zg^*HL^CMuDFMbCO?S_jECB($bE6ckrUL;k(bPiht$9=BT*B5j zKyS4#o|Gg2R6gRp+mubJlob7A)Qm{!`duJPo9LNK11;uu_GwZb?1#G5e#UM&v(0!CX}}B8M(Jc_5mdQ;&_04>^b5cW4=x8Olt=_%zucPFS3*0 zea7fwArLcp2SOGi(S9PdXc$BXcrdIvpX52i22Hpe=A3F}&aMZn=F`6dvF=H?Gw&j& z!}zA{@ktC9iIP}W0$>>t85Q=05qE*-DkD{sDR~Ugn}mmC`W+0emXoS!YOZ9%udZ&G zk}=xp-1fkSTZnfjE*P35$q*A`i4jgzg3;fm}wJxxbo9ejgDl zU*>Zgb;J77Ks?~9eA)5E#i$K8wg8KU{8I=O#>x`4HNEnhh28Ymx!nHad|MSu#KE-d zukLQ3hE_NR5D|x6BXP-R8~qo@W#8+LvRZoaYu*9w?FryydGSf%(|U(~9M=H)_`JB{D&|2i~&XW1q%BBUC0pX#o2r z69FI*DT0NqHUJJc^7$o!uga8H?}3z(Nvp3b!FNBAOB_!&jyMrwp!&sxfE>SAJG0jL z!Yf23sr?ft*8<6KW-?Ke&iVQI>G`=`Wwm_%E&;w;y(~%D55Up*r$C%9c`aa(%{>85 z7rfY;YPoYEIlKH|2 zyn;SM;p-Xd`6l{X#I!Wt()a(-xR!~`Sq(DnW*ZB0xpka^9stCJv>K<^X6TdKb8^0) z2TRMJM@(Cl;kB-}@xnKyJU3r~{uC3m?e-qgnAvi(l9bRSi-a8Xd1NUU=tYZM9FrmT z`zO6L;BgerA8xKMzbmuD1p8a7f%+aG$!|W`#!j7d9C8ZOUub<;IRJm@eyG>DJ#R*-ktrWO!GAqZc(7vb02BQly|Af^`Z0M(%TxASPf&nq#9 zP|rHC%=o~}#cYdT)Aj6YDzRp>9!fQwq`lCLX8p62v&%D|@sJ8}_vMkW=MnrcENg5Y zzmrdOUT6g%IVz&O+yZaZ!RxNO78=bnf0Idf)$Yjfwx5PfPdA>lnT*s}{rz4gX~dR& zB%aQmDNNpvMf%nW$ZaXoe5@dBRls)d(x|T9H1E1d+iIMUP4NT}(8aEMgIAw*u29nb zYaX2QKhI-{3E6ZJHz?Ym0TF1I&vLk_>PHG-;&&$m92UQdO;6-uH9nlFQ4zYho&_B) zK;MCu+GZUBEV`Hjo(TgCNMMds(Bbz;Z-UU?s%1&@0nLR{z}6marr(tkpo+Uj_IfTs zVz+(t%4D|9H*Dpqi3p$6x5U#H&x>xS1+E6WI7R{^iZzrZ_)oF-gO1|#D|n8{I{oWmL?Yr zmc$$90jtW%uPB)KidP8Z&^pYY&0famuy}uRt3Pk$nG;m~66P`g#6792gK!UHo>5>W z{o;POdzh5LQ1L=njX>PaWn7{79;F#Q{Y()aLFYC=V?~G&uHO%xz<%=t=q>}xws(r0 zu~gY?$1}S1Nj$D!@4?aGsn23u!L&RVih^5;PDoo^fS=5XBiMu04n_c z#llOdR^h~by^>Z6l$)eB1YzJ}0-?f_@QSxR)lwxb{Z{Ob=LYL3^>zO_}kmONQ}_;B2hyy_!>0{1r80-NCyrrnxO&jFUp>}^!f)!gsB z(0oaY{S@fH2@yqTc@q(k3~s@>#lHa1wBtZht*8GsNuy<4O{_<1(Gft}$(}^ViOlU{ zdDdZBF-?=l1Mg>Nxxa@j9yD2gh!kdwlkIy)BD5Xg;GF~a(m1PkHO8)ny_5+i@4kTD zW|-*uX{$yO`ix}wEXixeW5(XXj&O%&8yN03l_3l-TqZRu3t=8vV!gTG>haIVo^(+N62*a?ql!m>0QS#IoNW*chu!qq# zm`7qaouNO`w7$OU_7!W(MG8d& z=QHm< zaE1m$9L3Ye>j=xDar;9^26%I73J4oY**~{d(^m_mQ2o2qbwlavGx^G7l~~;VcPgdd z?bHdo_-dnF>W;4hfKLQKvA(F)f#qru>)0g!z<}y~sl;TJ(21pzBh;?ZE>=5|&*CdsAQXL{j{%Zu4~M*YTmU?` zQsoA=aQQ)IEoB94E`G5EeydhK_%Ck+u~x->EODU@Ad0Oe>FZ$)tfxFho&*vok;;?LCtA5No=Fy%y>PQc@% zNN*?~x$m#Djq@kc0^F=ZOg?=cm9?9FH|+LVHNi|zp3#2KYodty>w;Zn)TK9vJ{`Yr zA2mZw&r_}AVi*2q!!E0*kLx*-{JQ@|zjK(SfjQ1xjgGxpm9a+Sf?l$pl?%9QG(!-O zk@seBy;?V0aN&;heMN>ye>d8E$SE8Wy5F9k-k^Pc#&H(6*>YvE5j~)kH1@_cmC8-p zI7r9Bp`=>-B5rec$IK<_3BV`|S9#Xi<6`^9R!ziCor82^V)t_x3vvKOY$n>6FaZlr zlc>o|5;MQ_?T>$(>SlE=0f?yMJ(ZEycen)={P;sFX5X2OjuYDJpN*yw>I13*pZYu( z1lnTWpXv+!Sa>?*8v}V`xCFsF?zuGX$8ku_tYYaBZE5%Yd_7q_vN zMo(VLbY0lYGdy$3iDe#I3~g*{{$QtbPZnj2EI_!0|7U*IjyJP$T+){6i-T1&3v*$Q*(U`ryfSv}e8-G1W1xX^>xgL44Io2tRWZ7EW) z(?lkPxhW7#cwE<|9q8%OcHmn%A&qGm-e=V9cHN2p0j2t-%1%tZ+Y0h@ZF11C!(U>{ z$PSl(&5d)&Ly%Eb7~2~u)H`MSq9al?@M|k5>R4MTtv&KxWnAI{`4M(QR@zi+Aq73Z z2o7U`__-uu6AmUD@bX;ui=gk7tyuzknR(d&rD3*u`I(=@(x0}72p>+~LI&{uD;H+xtp5nQpOD)zTBm%u z-zLa(n#dVBz}-X*K~#f^QQ|`=u4k*yee{lL#$}Lyx#EV&4vl(4#NIup_(_G|V%JW$ zwB+;mdzfar#NB#VVB72=VzGHL@6Vg=>&VofsE?R)qx=cKJO;tLo^p8wEyS-LwCe=& zsbc7qvQL|NzHv;f+)A$hv^E)h{b0UagYbXQigv=Xalwm$nnA5?ZasV1)CQg0vthRJ z+>w=O2Lny-$fw>;gs%?2f=?+0FP!|8Xnpej&>V5MthXfleBW#jEFX7W)hll(_%PkR zm#XrSg0+{G1EQDiVJ8P**R_jrxV*YABTnOXIXS8Ss2ni9UkP_WVLqEFH+xo=vf23X z(s(xc!M<75=KrQ3X8cBt_v~5q3a{ke4QZaHUr}-2iF4H3U4DI0^VdMk(Kh7FFSiT{P<8I66K@ERQCNFucztb8{?3bR(QANMJ}~=$9*O{ED};n7TB?B!2enUu z`K`Uggm_{+*Ww>NI>T6>H+abKtI|`~5PMqc#^R)BVrqv%{nZ|kt1Si`#6sgtT558| zidF0wkHNY3>c&e}HjL3rM6iO2nO6loJV6s|MwF~>UBf$@9E)gpj(meJ0hkqdQ1YSZ z1X#4bEFH@+tmvga{}FXgLd(vIeTnDRLxuZ;>9_4iyjJiVp9g;NuES^g?w^JA5~~tk zNdU)!W{zSth=)h^8prNX_IC~>t3vW2>LtM zu>ueaKDD^~eyH(;9H|)^kp&Ht>p`Zvgn>Z0zrX);Zq!|sM~{xBCS%A zA|MS)_eD}bx?8%t8%aR{rMr>l(nwrV^3rhWlJ4$&2Y=u9-W!8|7~_n4&e?mPz1Et0 zt~o^m

4U3zQ!Lxnox4H)rQb!L{4sm}El~yf1)WdWOG>bjkMgReVaOuwRa_(HC{% z4Lhx`vSDl}?`8V>Lo#%}w@{mM7}O?Wc`(VH5V?#}60ZIW=dPRI4h)w*SyfWA5NTJW z>ibW#={%MwXNVr88$&-iN5^8HB8|uzIeKg3de3#`B3O8ZReW#79mdP6xPfwq$2!ESLt74RDoyDHs`R-mac$86q<*^>Mp})=_ z_%A^VF4ebkG>*)La;g(EtJzTvb)S7zbU{;LCqC$STF%ENR+){M(C{cZ3kx+2e`_AXvc9=n$CkS8QaGO*u1ZAc;*`xL9Oo7(lYmn`Dt4M{nihM?-j_N zKmG7P^fINSVE$#3rDpB=d)CHRk9_}B(l34g`=Mc6sV4gU{O9d;Z+Q)4o&*o4l@=e2 zb~_R-gU<^bTCQWIocb3y`(&K^)2`2g+?f{6zSohllZ2rIIeRVBoue?vh}Cy?U(Sfp zIPYGXH|3d1zYyS`0hc1EqhdM6ABt_!l&qWm_~)A1*GoJD-5~Co(l1eY*|!x{8FX6_4ZrgZ=|IfOO*_fB zZtEY@)$b-OooM&Whv#37z}VCp#q8?Nw)qSzBs52}E9*of+3QTfyFR$2(7g3CzwCt> z#_F`i$}731#A)O*Nu>IJ#9sgHDas%dY|_?B__C6r2yb5|Z}=0bz$4Ux3UvaO`>stF z&v>@L?>(SKtckYTkXDe-46+~yG!kqXgauN=p0VF0&jwxE%YLze>^=5lEgG}RCouXv#&7ST z>5Wc8_n^dDKoEQ=1{K?11 zB9;}JpHTC=(8@0zs$100!1#i?V3VUCe_PJ?#(ToqF`PHm^+z!yyh%JeJu;FCPUCnS zjJ;twWWHGdeM}Tv=-Bl;tHQxHf8CoRzaXg#S;)yPAI>z^!1(_1vOkeE?SY&3Wn||@ zn13B4&Ss8p&A=>om&5s7CcNou%ewdMEI2HH4Z@eJn5QveNy!Edl|J+=YSW8+7+lx|F?H5N@*#)evYgt)mh2#x& z@G_td5hV;zI<>C702lN=lo-@t!+N|mxEUFzs}udqLWOBMQc})=LCa~&jAN^8@im}c zZSI-PU^QQTKF#p!lJF$($Mlf(?9hi)zD|TLvnPKV-Zs}dZc3a{wNWZ)Jx}GlwV@ND zs41_Vq$SUt?;4rnpJiM$!Exo&iAg+LCt|g0qr-e&f!LPnWyrW>_B_iivN)T1|JK1S z-4|{^!k4JSXL>f|0|On3&iuaWSD(UANV|tw~nKe~KJ$A&~tShhsN2%OTijg5Vo% zcVO&j%0D5{OxsQsG@l29Q>R+N1ajdW5pHDzoMDM_J-cf*k#{i_9JaX=X7#?;O7v(p z@uPoTcm({l;;60g0|)p(?Y$sHux1@2icov!T!9O!lZ77*r`(cL#fOmfx}C^3Zf0#RMfDNl&FM!d1mU!WT8#DoZZ5 ztGGtJ8_U-As?lB#F~n@MH<&bHR9s$Dmj~f z|7oz>8Tz2J#D}px!FTFbPbc2T`xu+L(#O1?R2Pp1Za;qGe9bgDF%?^K$k>Nlf0kn?$9p{>o)M@|UZ(f&hSFp7Zngo7AHl zFK{w`rFDZrou5q3n&+p|oMoa#12UitgX+$BXyz73gElC~t}{(SityK7ZMb zu(5RPEw~iU)VR?vvR0I{Hu$~7-;`B7jRnk`=iS3{OcLwM!P1@uFjKYw6)&i&=Y1TG z(D^z#9w**t{f-#UK=$jK)i%RPcizK6H_ac}W^#P*anMo^rco1*ZPG0yjN1P0d;vV{o4bZF7_F{$iHViY z)l=qW*qJrY!x~)Zm>If8|J!O6qHr0Jf$({)RmsMEI!Ud%yoskQkkOuR~*`FDgY&R#l71`|FEDR0^;uO2Fo4FKz-pc>|7Kjb%>7 zUKH7I@8Gy5s1lhu6eT~1SQ@FNUR?z;Cd{^&Z!C8^>ml>Lqt(@>WbLfL=klqo-7bTo zCqRJgM4K}%KQ`bZar??KMRwxVAX6NQ-wz?Bj~NAjE9cu>Wb$3ORjsEB7cUuT!YMJ3 z0Z>e@xS{P=swY~QG#L3(+&uD4%cmL_kWMt2+TVdmtSz2Se8XA^*ai zn-)z?Ci%L*4c=_$RrO0PF05eB|CnZ}(jgk#fb80ug4A+$_SqGcC5MGZ9Pu33jY<)iWa7#T zyItK5r#L{vIN;+@l40}ygv-BB;>iCXgy4QI2%w@JgeW06sWd7kt(ZR?U=4($KD&bo z!+7qw>gJN!;xN>8_t@?FOukK$<~1H|y0jo-G`*>GcwydPJwEpQqOrW%LYATxT~&4i;S3pMdFo zuyJV`=X1aT{o6s{1O71JUsq`I7Bg)ffq7T)^y(7fvSH}~F$}>vI)l$RFM=2%kfBht zt=fSCbQQEBiNo%eoJ!s>X(x`|e_^l3GT$6PEx3G|1M;~wLjU%P*mgDA#TIOeViREu zq|U1~ub(D_^`LGV@!& zqrsx;C*-ZW_+o?9WLx@juueSH;fN1RI#X*g(uEd#XlO5DG;>Z2GTYuF2?hEdGg;Xy z78T*$>qBSDE<2~#z}k{)Ao22g!E(z5YDj1z1bQP6)_F@PhG1`uW=pq~_eEE~l*Zni zkrPv;?FaAs+zXd-&OtYP2=OOCC&u3NcQRNh^kUb-IuwtTJ{v~k|B?4zn{4uTD)|u zSx6&%6e)Y2J}J$0xY{V~#?JiZzDnA7`Sze&qnT{Y%`WqsomAF_LP0e~`)3W3K;{>{ z??Bc^NllWmWE;=vbWRFd!D_hUYqMUBp|M@%(avB@>Egq(l! zClvn&Di=MX5J?pDi@c2Mz_r+h;eU(Zi%m5Qxk#Z^^Tf01$0q zbmM2z?xGB1;Id9+cSvZ44u(6LJjxY9%{?))@o8^s(DjVWagy7~8MUxYVPnh7_=wv9 zQV;f95`8&s%n=f$#T8alFz8v=UTCVp8zSG~s*^rHB})JHfB^S2I1^)(>@C^2%eWG) zn*y#z9O%skMT{kH{A+4rYJ6MpPVMsg3J_9OHxt(W?wX_tQ{{8n$e7MFYQQG5F`xl! z3nXFS^YVazd>(586g-BTM}Gn2?>U|hA^D~ zipG6@OC?5o@6Kzm#BgbC6bHM1$Hm{pjlB%JUzzNwpptw8m4DR!*&8E}nJD-#o|NPZ zV-4OSH~=2{yeV=TdQ?fW24|n*t3O;tiy-9qWQDUJplCkC4r$?m3w8?`>jicxQmplH*ma~yO0mx647IQ9D*=9H);IiAsIO50DoIV4vFF^SnP!Eo zxXWIaUOeXR1mDm?4`E=e4*3;Fs z897xd>1t2}R;d!TNFHLWj@oltf3j&`XxDH*#pB*;R+BGp{!~pCY~dzP=TUllz)vI1 z+Rj=@6RFo=ZMqeT!N2>j7M=z%uM_+1j9-=WLttI$!A~ZWs(buus%|N9-{I-SWpK!2 zB)^jSdYidIfsiOrQVXdiV-&|P=S?GKf2v@pegb{bX&&T`Y#Qo15qME9^3+_p zaGC-FZoxPfnZ=Dam@}@CL}P=VwbAQ5Y4_(xtbEO%jicv|X(I9yDc$+7!)Eg`#p@e zSLc%!3F?I)TqMM0ZL(KgiRXqW!*W++rPWGuV@emA;HuW-Lq&XXaIlXK#Bf1$RL9@5 zZ}AHnik_(^Ee{i=<6KRuj1?gs{uXJymah2#1AXcFPL%IB#_mLebQjixY5;d?sZK}) zNgemxNyblY?14AamdtaO7U?-Ma&Z$?gEp9J10-WTxcJsp#R3M9B$gO;QQ+OH$q0%t zhO6y$toQ8C4`8fZi-qTCe;u|dM!bv(9BlScUc#iw+BwfS^d8acGwB3QlV^oXS)G%Q z(6DRA8HaStPGc^A+8Nus3Gy_2l{*qfnN~CMy;j>hNVW)1>^(G}sy1UNW5RiN?B_Cf z^4uMQMS9?vf{jp{xmKDxPwS8be#EcGcZLtv!h;SV^knma+q;pUa``(RI1WQ~3Uo1~ zhHnt`h|ppZTb8?DC@2>+e>xtuWL6nshCEM^ut){linYu`sXPYcRQS2OsKRSD>fp;W zu8M&UbCrKhJzRF5cLglO#LW;jqwhgYAutXzbyMf;!7$eF-^(k;&kd@oMA>-Oou0ph zRjRod>7W-buwpe-H&)T|^L{Wqus%)kz`$;aiNQ_n?qgtNuAJVfV6J5JXD4H{E;H1v7*#X&&)OeXN@w1xJ}uU^sjPRP`J> zRw5;bqv;ImvdQ@qn+9*%EY`b=iYso)J#O87OX9p<`r%{Dm2ibdzV^r{FLM9KPRMjz ze=!RxTx&J?NV0!tX;Yk^g|oTNS~`6 zO-W6_Clw2ojAl7yQM>)URGLU~R+9@M;F+}D>&M(TXRPIa6KI4aguMsuU(Y(5XLU@) zm4dj zCmy?rM`#@!kig#+yDB`IXPgoD-Doj;b zf}m$!choap!u$$vsyoKbD!CB<`uZ2Wp0ce^8t?CH&qui^bU~H!g-gtCtmiI`L$z{p zQ1&lB*T5+i(=3e;c9001V#HU{lML^{3^fgXpPSrBUyXXO@hQR>LBDF=6^RpPtPz(B zbWr2z`J8v1>4ZQ$uMc$vqJ?bwf4>*@d-qxzb8SD`QfhKcOLo;a?|^UA0tBe;AwY75 z1}E3;@(+0vKHFMWPV#e-KD=`Mf6tdOXGFW=l}o;YaX+0&HY~+0V*i~9lW2#eX}+^%}hWf5VYR>1icE%)-0i*nh* z|5``(kk=36xN;iK0 zDvPwf>8e%u z?rtHWimycr7GtHv=43c55WjY>3GVCm;w(+%d_EqsZ%;bG99qH|u6~Wg5rOLIl1V(J6 z$J1CQI5cK!g52T=Ir-!t-HR~j^6()9}G^lC!-uLTc_5tl}!e7$dZD^$ov)*7l5rDIHP_L%)Ilm)vt`L1D zvg0D*A+Bm>C$AXq7NEP2iSr>&wRrlS(?>ms-ZB)f`UEAB*Lkb2LiCq|iOJeo>UCS2 zzeFVA_!z?*(D@g3b^lz!;qFebj^D{M_&0;n4sKs(QUa=;cn??8@r$Aq9cI&*USkB| z`omnI>J%UNgDSH}9Xr(_oAW5gCwM-l9`w}MBCxnT7sB-qGh4sn(|%Ul&-euEZ~N@3 z6va52%H-GX?QAYzoopNpbS>1)J#w@-;tTSZ<8g6-m$o~aqHtX5Xf_#);{q;o^_V^8 zU7qJV251NIRG{~wW2|%kRf(YlW*Ubfksn6IQ^M6XCav22>3c*MlnxiIM10ky;hdaX zT|?vakYK_0xcx;#JCEzx*f6Dp0oddR9zHmLiU=eUsF^2?I+BvOBVjpJZ=L~O9DgK4 z*wNbFzgDvQ_Stbb%!2--+uz`a>2oRX?Vv%x8Zy-*s7PrR|6$J+1w}TYSK-+z7 zFg)1NVGNYHw1bw&DFk}gLxY1L9h}p2ZDp$RtvC3h(akJm{0~#8`jek5ZkaG5o}XaF zBz5XTKUO3Azir-M8p?+bfA@XkP&?;!NskjYlzi|@7!9`UAeAlp?$iM<&5B(iEIsy6-KeFC|6vB=5WDbE+KMr|3MoNaU57rt_xy;s(@$`Q^y zJR`4Cx2|&!0$&4|48nh~kip|;rtxFRlYb_=?#q$-K>G;9slRZ`JsLy2)@J>HZY|d5 zuTS0*yxx{L{zpFYR{ri5pW(CH(}dM(Q>>5%>PqS7kFsc|Ntt~i0a69|4bLe4{Iye% zN~WKXLB%2SE5ooH+V(vCbaeRMpAorTS*z%rl)G*G#=(I%_3Y|W4Qw)Jy3!97FERne zH|XKj4Y@Y8i`$0mDE|~T!B2u-Ic^St06kSR6&q4r__zM;!*&`}9u~pI0$>LXYP``4 zkwK1-*6w{L{1C7EtPw;Asa;~Hi=W2)sz|nKO%4%NZi{`fYBoJ1vt#{i&H$BHjAFRB z*hi(%w9&t_^@c@@&(Fy}t*OVYbLR?wFb;k9J$e112k9IKD*rwZi*!uQ^x$x>zi2Ow zN;2Xrs`p;cwg02r!xYhn(|RV?>hK9Ow^*qc0&lR|{$m&JtH&u>umg*QH8nq5f(^7C z$Bodiz13>mLNJq2Aos>^Sosr{)jfijnc&KC#*$I7QXPvv0^AYOveM9e_6gNyP_%BO zyX

@!*9oHd4rFwav22Hv~PLot4!J++r}=e(D@(`+E)mQ$HAMSsq zMJ`f+K=vCosrysE*{Wgu{sK{3M=85la)|^pjIm|n(j%+f)OT=AjP`U2zds#xCW}N3 zWdEJpdUdsNd+XIE{0MBj>Lp&61D#H*$%gWwOZGDJ|-aZdD!qXUEIFF8DfZ-^a*R{ z_G+d;cYAKaOC;ccq|PNle-G!jKOIDsmRcsUsx3#lTVbb~GC@s(Cyg?2s>U%r(iX@B-4&iG$;&t13-$Un z2_SK2*zkuvaI$%Ak}+xXF~xIL;YW>Kt1(p1NLaOj zXYZ8KpmFA#6U4z@o~{R4@c#YM{I&(u$GfgnnqFNAe*-*k?9lUrJ# z+rTTVs;4Gwrcb*Th}nrav`lwOUc0^E>%br$LMFstVe_SX+ehwOa_5QY%nZ2J;c_)` z6Q$~Y)D7wzRQ{4nd}lHVs=za9HPtsZ9tD|_KLUa&#Iw_k)k{?QET=E@;usgouZ8+W zeQ*imUa@DW-TMf9k#fU$&I?fkrt|;6ci9~2V>NA!K-i8-A%>q!N8d(3apUj#h+C+ zp{XZNka6;9p-#N19F7M_2mGK)25JjC9_5?I@qc85|G$!L2>&}imoqW)q|$yfMZGp> zymSGAj$JcuT_d8M4gVn>$tV3mEonD7hv1Ytbg{nvi<_^M9}39E-SBaol?`mEtzUJa zaFFc^xaKaf@D=Xbq|~BU&kT6XHN2hm9>qh~z5V2A@rz&hYiow3i&Drahy6)Lk;(VJ z?pQ{0qXE}4Z(jmPQ*&-XM0VF#*Y5ZCC{i3m{fl1$0RGo-;1482w?qp~`AHZErh^2U zI)|B}xigEnb)KN8ziz?$L<8@_9@2?GW^d&z_p9|1@Df_9-tUpV{zv;l5a#K zN;cR(b-z1jrf&}x-o1b{&p^}N->{v}bTA<3sm)u@HKYo(4xFTS4%(J$uP(2-qBlPD z&qb*g3vD(>uPTJKTmAEYqwQJ#$*=y5;9rWC$+=k{DTUSeTwk7xb#wl^k0!{SuG${( z5GPOPN`r+cs^4_+CQ6aO)99wNfhgMNk0hU!r#ByqLdkSAV>ZACw#MK@`WLf=^TR6| zR-ZOAg|OlFqYhP0islPMi`@eYk@IdV;imhN8#pp_&ULd{w1@#hIl5S?o?U!?f12(U z*U=kuU!Qx`bX^@gRlY#L^M9M*hcpg`S$(F(UvP!ICQz%k>7K7y9$*tdFiDkDbcB|K zXXu5!=F7Vop4b3;RER=Z<{wz*u%NjugQD>twk#rjmmF-_Y-~{#lCOK*h2G)od)*%Z`q~4%hEb7Kx#*UmiC3f3pZKHe*@bXW`5f z^sfSv%6YXWqPwl)1H6eg&+}A2)A2h^{Q%u8UXT#JAelbk$yjQp2K{*a9RJ^Y^F%SE zY!-Y8SE;nt%qTysI}R%>yLemQ*Zrb<@5w#C5M2!>xQxjD8+X*y?6F3+V2=R40`vj42JYjU1jk=)2i3^5I!VF)oiy?oSU7_frHn}m$KR5& z;8sWpy#L~rJva{;HZ{QBWlE3FA#f)WEL!PdP`e%^&$2bRCoie^OqpGC+We~P5G{Aa zrsU|E9i56MN$@uu?e9+A%l1XpSwqoLe}@G6@tFxhF8=3$Dhk&-s1?G0h)sZ)yv^2K& z4vco~B@iJHr`8RAO81(%Z14u@FD$DOB1P6?Zoed;`(HHj zvT3QwwSJXcTt#Gr3UI8urjz|V^Lhhqd#it(B`rGj)0t@>s-~i`<}`VW-2UCCHIPE+ z@Eg7GeLpoyCTq1azFG`^K8GebL;fw)C#Q8Z)v#9U0D?=Yk7 zb_T))^*J%=#daEpgD-`daG=66gS^-IRsMVCuVQ)ON zr{)L^7`bC=ccU?D6d7uIatAX^YMOD$G9ZxSp9?n{o4o-pRw|FJ*~X5298cY5RULz7 zcE>inPQ)R(QedjmQZ^Zdn(AAz@_g1Ne$J%8Nm-39)*=838D!8>ImZ`)-M4jzbar5F zEBjR3Ox7=FjRxc~gCEm_zKNOdDrI78EoRsjfr=ZI?;J4$N(1rC%E&s@)Ytnp_j_%7 zX1;Rnm8pF^>h&dM57cS5{HK99!<3V|oDKbGxG@%(T?~W|ttx<##tQ-enN8r4ChS8I z!m%-{T4__K7zDuRV}_3lo90DXPWRdA;ciR+aGUB;zP+PyxmtxpaqO>qu5%gI={A2j z>rPZAbB0;)W_boKP8cD$k#;y(8E?TjS z%j`cV?o~VGa;@HOogFTYiOf_KdbmBXHF3`#Z>WLsc$aB{Qphbg zN{!aZBT>-|@mUB|;>@yS#AyR4gy^i5j@5LTGj-E1k%7gF;Fn|sXPy6Y;(A7si_^sf z2?^}q=BS{D?AJM_=7y}TIXso}4>ucBr$djOt#F`fY(yvu4x%xwdvQ!yb${Mi3v6k7 zPuf=jEc?%^_N}l1RDIOe8ljEm3uj9$=5O+YEWEF?T&t=lRqZQC2LB;2nQ&2iP5Zmd zn**}H?*n*^cDq}im}|+#xq*L8+L5`k;NF?p`98iqN-eYEf=01*19NXYrGrD!@4Zg5dz8$%wO58vY7 z_cT%OBs3XIKCvLL7B2eC9o(zz^o_X)uB%^*uaSyRlVu^-%={KmA>{a5fGJ z_azAHf$D`Kuo}_bYk{7gv4dLAqgyUox&?poMwe1EY=7cSl_cP!<-GswGmu6S2@hER z&ve#TGR_G2tX@n4+KT>bmt)NxW8lNuC&VGJ!=DL0$H3kqiK(NmyfAxT^Y4xim;K|H z-yz=(-#uG?;l|-R?zyPq)%N?bcZQ(1BX14Ozf1o2I_CV0z>I-qzVvvVpi@*OGrR%@ zrE-;j zzV(0m?;#%U0E8^0xgJt3KXd$Gkt=omjeE5AQa|1$FQ2hjC9ptMNE+=Yu zVo`%^ItACDgl;>OiJMa+RoyR(hbbwLp41@Q8gZ7j6oqf|;sx%8T|J{}(RtT!dq_?WDFdD5-Ie=nw?0tj1Lu^C+7@sg zy(t>Eo{vk`^OJZCz5`fkM}UvU9!SVMd$%0?M?YU}kYhQ|O>}VSw5XiU!g+tFV8o<{ zp+Jv|hpGjan5c<{X^Juov-XIMaQ!<`e3G-n_TSsdVDNPZ+Co?aIgI;Ig=HHW5>xf; z?j50|vV3c|_WjuR%a?0Vn)SKsjR^0jut*8az597bIl@y9;D>P%SY9G@uvJtwwyckO z4Y5Cw@ZbU?BW#E2RoLPIKJc&w^lwrg;VF}CGWgynvbD^q`#vX|#=cNA^k;X6$Jj<1 zSaMr5aEDQ1pSlB?T*YDEow1b0(Y6L2wqH$Geap2Ab~5+nN{3%Tg*Y%(nr6`LkT{QQ z%3#SnQ;;}|=$lLbR(YeL~S{x$mjr6()m<-V$bDSyNx6{x zUZdK=E}Z7_;+XGE*L54QA5wb}*x8#ZPulisgMkl{KNy2dhMBfLc~nDx&0FuXJ==dZ zKmEXO4aQN3BJz#H3D$2MbYPs>ncpgP|K&Yihs$Tp5v&hnOl=p&HSG7g0|%|Pkm^u2 zqr2Zdt8s;hhFZNLwL~tL7lZaOBa!4jg)W)Wb_<8&(sO)&kX!oxX6Ip$>0ZZ7nZPcq z*MXKz7i);aXS4J9^TD+Hak+&>TXt}hi}Sn>La7c-o7?2Kqe4t{B@9uFds4R?&tj7| z@?32ZBehV5F>MyCJJi9jb=@w=_5;4}%t8rR+zOy zcdoCQpsFYJg|_RVbKJ&kOvOX=kN8mH$XKi|iDwR4@44er&n~=URi)ca2?S0ZwAC+Y zqzSZk5OTVnj+LItwh@7JwXtROmP$Gkho|(0{p|> zQ5HV!QhV%qto4HAwC3TwS;gvgv))`^k9UEyJdP2xlBQ^!$sO4eTv8 z(b=6X#K82SPGQPXrOS(Wwdt)bug&UpcABMrO!L-#PLHS>4KSc=k3|d8!g(Pf!!zo0 zcXw9Fd`JpTumkx=Nn}6S^5G|`SQbxK1Qj)Prx@rCdwZ6VKA-&fQcc_`CI%io69Zrp z1omY-jr`c~9G4IPY(ALv^h)I#%;xI@2Y=9^AaQ3xul<-G(B^QQR$ncI2@i5IYuGTC;bTzfLeEwwcbkgXR{ji)OqrXp$x7=^OHWav__ zXASj#Wdxl=)(*eEB(E!)U-8IY>m4iZ%bCPF*WuaUO>gd4uzZ-1!=Vx`H_x8XD0Z89 zrlkT1a};Cq)$lqC!~+802)~UaYdT4NNUwL@ zJh~>$($+y3Nz=CMYYE876=rZ$yUKvz3ar)f3&G@IPov!b-`*aSBjs<~bGWO~mr)RNR}j1W@>0UH!?nqB9I=0Y zB?3$Jf*DLToD1+)xI+Hb+tovjucBetH9OO4u4#P0h5qIdc^tECk1YP|v8}`%7v#G4 zxER75_ zZ}^1{%BfwOHNtNVWkO#@tHLhS{{Flv-hCC3yh{YJetE5rS3HnY#9Y*bD|mri33b27 zt|ewpXY;s0@t%`J4tXTxVz2*l^zw9ngozSTn^TeHlBrp+g(z^ekyOb3U?lw~NbK>| z)h;B><=1dQCep8jA-g0DRtd#IrXCsoVIOeY8P2X&aK#7Do)u;+&C^oRw%+Th0tz~VA>^T}S!@6E;e zA3*e!MZvY;If=|qIt~kG&DiNZhb1T{7->w*LB}_C2;(&aGyPKV6q~2B3ZlLq_7IZ_kPX$1#iylDNAY^AwO^v)GzE;?G-jZ(Ww$Azas4;y;zxnlmLo z7yNx+rv@e|Y=`#c^96h2n50$u+YxLf_(o_KE4xWk(o_mkTeF*2b(Khq)#rj1?A=90 zStI;=VV8M2QP%T!*R|;(k5TI9{M$E4*bFv?b%<@6&WB}YTy-70Zr$X;=ndxfy9W+6 zJ%j@c&K>&u0e4(j1u`cVrN%rp=d(y>N6vt}M;5n-koIW9$b|*7M}EAX>I)mRt>lCp z)xwm$(azTxQd>4-TiX6WOkqqf`r#IGy%Q)JRv@v(+~~7ZrS)rIIy&x6&xl{n9tH*Q z&ayQC+*Q$5M9Us>KZYto^L_)VkX8d`rHt zugY|P1f>Sb7VEX%Vi2~a6q*{8t3hu5&U86cSWKkzSdFE!K}YiMNP|+f6i*I9Yzb6i zYFA#)al3cQM4Rq>;<=fm0VSZ48odYGy-$u- zbZP3r{+L)Z%t`acW1_eSSR6HOzWcqlUk{h2?-hCUiPH1jk_+}4%&m2}f9l^4(2)?~ zUUU$%jJqJt&riXbbM45nPxo%V2$#E`_#^kpY4fLbG znqyHCk30~JP1QpMMmrP$E(r6SA z@5|>DIc51P-)!$oa?k$Ux=QC^H+!E)vjmOqH&-wokBOYm+b@G$QK~%BhNY{S9jq?X z{YFmbwn@FFtBZ7J;(hm>R}Jl7x*nt!z$_yTCz!S>%tWoIoB1hF(#%}!DcWutz#Gzc zw=#|21d6^lZlq6JRVpTmKSo*LyzTYK=H5@>c?#T3Ra+a}w-Rh1Zo|cakNvzF&`*yk za@6t$_`7;yG;;gy9v&R}8eeO@yiMOqs`7 zcR2;pFPwY7X@HrYn`&qR8@QXSKmwZFcBcL$a7&pV^*B``l5p@|Zfu{gE)NQT^F7Z> z8vPX0({1k*_*_s!3h%)>I*&v{3&lXYT!?1*Dee``_BNFfR>kPLyiEgq7QzBH1m zL_3D}tzC4}>cRd7OOAeHU`Xno-jQ9ep?sQIjuB%xC7v!Nn5b(j`N7@%qaPhT?PK3+ zaE>_`D41)`4y7Y!)jV0Y7T{FEdyRV*@iX8l$U?d~O>KYrviG80y=w7{^7;OBq0G$N z2of|Pa={(mUOV5C+G~^MzKsmH9scx0@>9HOIffz$xqUnUdu}|asl%eG&gG9l%BO}E zC%?G$*oowF6;XIyZ`QAPsLea8 zYsYl@`8srUKt_*}n6XU0>CkqX=T0kFj2wW{CASCP#K>>=wS);%RnNOCp~drMmoT-o zWNs6qt0pE(E^F_r*xDmBv_sH?>0h<-RCPG3XSp~?1z7YHH2Gs$^U+3xod4kW`j{8H zbI?Wdz?HSv;Y3ut4a{>ZL*H2hW~U@?W%m2irYYP9W|x^JUhu?kDU8)D=j5rHMQP(% z2TFCe#Qpi7V+@Lrk;u8@J3(bZ4_jrZHw(wrs7% zl(IuGOPRVppw@vI6>+fNd|qcHk)Y4m0cC*%LE}kh6X-AY?tin>M>$i@Mv^X?DL}>< zLN|u%73m9?`SZHNmNbj?aNcT@=^xL1t!Gwr+!l7+0lR~XVRT-~WdCI#V`RMB6||UVw+^2)vsyZ79z0BIS-_k zsBlZ9#c^=zTFPg49{SYguQroIk%I#-o{FM`tl$#dmU)Q%NWbS|xG&bpEbiUuM~gP# zO%cnd347C3fgD|bUu_*-E53WI=k0Nt5W3bW=m0~$ZAFfp(8^aSKw5-y3Fg;&9bO?$ zJLezyA#9!k0pcOe(;#G!)ZA9^GDcoXLdVQ`ivg_&*%j_12Nb)9x;ms%hPeV_njYP!)6{HsKZ;Hx(`~YWm!F|+u z-}|Up96o?W!Ufxl+~?pNzpf4nAB0YDyw~6PnhBKc5B;Rkb=$q0u?-7DwLM{aMm8Ak z3b{E_ij*aT)N92LU@tgc&uZ;;Qa(5?f*gTu(a6aiUJUqwMNk*r@4|uhPb5(i7Q1iH zS-i3f>wi9{wVgc`D${GxXpW{%9@l}`Ph&>^@)Qw>6@LG^fDimoW+Dly`scDFa+Q<3 zykK*^Tl9srpq=Q%-6YJA1^^L&6ouuj(ly(6kA!}tLx7tK9|Y5A>5yer>YMDybraWZ z9H>G8m4;@8y8!T*&>QA_PL}LDEua-iMeo++86wNmA=YfIjSh%3oD(IC2{68v&sMF( z$eu6*TJrglopu^j;I`mW@nfDF_dRHyjmqkOdd@W0cy|o(wY;1CK^?BB(p(4HJT$_2 zB9_%bUSp(0F(2}0CUO`VP`Jab`-~z`{+PAG(URPD!F4Ek1L3iBdJgt=bb&>By>o=^ z?>ewGakt-e@1fw}lejV+%XSTt=SyeMy_ zA_>&+lvDLtepIss^ePi)pi7yV@Upp9H&olQ7UgG*SeT!bF4uXT{U4^@Ix31b?jK%C z5J8ackZuI&Zdtm!OS(IyLqJLCa_R0y1YBSRq`SMj>m9wH=XrnUaP}YO%$b=hzHxoR zQS-@r=w{$kXF$|DXKS4_9;LKCK-6B>rI!6UxUr=Na8h(PDg4n2VazRz(YIJ6??DIw z1#LH5OGv+8h*zw*;ug2jl%Af6(BjpS?IBNdN?B_zoeU$;KPlblWV4qh7^FzJ48>&3kwkHC`KodgOiG zAl);o>rK;VM%Ij;Uf%C~o|MMq=}>l@uM|Jd;blzVLq4K$E0lHS6?U!R0c~o#K zuuVDEi+wyT%}~T|t$lq}%S~-dYPEiIxO!qb3?Q83RH4hhh(8~?8q+@!EI-ygRJ4)r z&9^XtF7_q}L7loal|W1EKUi1qA%1 zXYHI&R;x$CYf`z6U7+!mt0bNZj5XT+r~p6p0d(6i<6%cAwz6vF7KooeIEH?o%uou# zgYMkGepkN)axF2BO4nOv8<->!0eXV87}=BIzW^AZa@v*3FB~4uyzgTEP#ek>~);TM&5B9r?ecv#nW}N@-=Dd=xUCyZjVK$!NE){tB&W-hU3|F zQBt((I)bS-;4}m@#n8z9o-_a+SpsG(joie0?%6YkH?8kMGv|j_&Poaudfl2hy^G5e z`u)-v(EtZdy>JpTnL2Fsd~%&5eQ_{OL+dbHd`gr&c;v#3HaFa6FZ251v(nCd%WeO` z$17P7%E{>veSewWdwU?_O)Gv&&rEw-%O3$5TMe2N%|kRx$+CTgMw~UgyNlkYu+K6*E`VT7k76h$&4xqTf*1ci?6zGB6sTU-GCa@^Vqlk zd+pj&m?P*%r&-B;90a(M#e37BK#|-5b&!q8x>+MPez_M;LiYv>$c4WIr4unQ&~e&G z2*p_dMJlNJc18H1LmCkLzyhQvMpsQh?0{U6j}o96qE({oMNa-fvF!Q);O@NNOOK*R zsnA^>6EXQzC`%Oq7u08Ye{pZLqK+SMj1ZWUzW=U5_t4+CW-S!U{#Wuitq_oAfKGPv zkEiVxRIf`sg`Z3}{)qYexZR&eJfo9{6gZGgV<~l=rBLUjOxZ7w_d|xyH1-{Qt54rF z^9<*l&v7cPy!)S3BeLb^DtR1PIQ=q`Qwk#zwv?>nQoj=)fq&iFnq!pIB@QGlC4v|8 zOSKnRpdJ2>qQVw1Q8HihWjKbuK20+2?rjTc57lvp3oD3uvHnTKYgD7nbHR7Bon4JW zB67jp_CQh2qgkIQdGFNL!RN3oJt`4M_$0K9pfv|jxqwOo*YR$DY-F@FK06#xc}e0j z%Y6IlaGI-SJjwO_uLelb3y5&QkOB~}V5PrjrI3I%3kMPpGMk-KK8ENWzxz1iMc=@9 zx$h|~`bik5G8#Pd@)W*?%an#v?k4BSn{WAfHQpAC5)sAv9JkQ52V&;< z-}ms7zK}Deq5?#2Y6}NHbr~rTUYn)qczvD=Ray$Lm`aKQos1s`wx9g+Mc4YqeOy=( z_)Lb6-C;YF(O7w zjJ9YHTEv?yF}q(+@2VnrNBd{`xG8mcDJx|SFLWsjtK-w6tC2ro@;$C<4%P`bcv#aT z#yHsIbC4Vnmd;w5zpNVdbf4Tg60@f4Yjjiv2$9&-cT znC(kHK>jX1aoa{awyO646%PIfZsIS1`bJG9F#Yk5Ojy{|aB35f83NRb@siqO|J2tMw}LBVSYBGY!o22Z0rBCq$Ck^d_F;0r&Sn`=h~Z+9fRJT%+! zkrl}4e_>cT?pqFz2nYQb!+jRKxQMZ8ogm~|-^(g{LPLLfx3%sW_+UTVGt%xBusjgd z+0pr2e#$gie8MiM3e2rJ{udc5^3mhz)m!Ko8X40$91W=ci^;Kqwc6)Pj&0GNM`5~l1dwTL+nrVh`+Nx zUFv!BD?SEfd^8h<&UORr*iD|(>p84$EsLv#xj<{~SC|xgD797LGEn9@`OGflN4tRf zSsAM{4L`5#ZIjJ=GACQih{-O>TV%Ip=NteXfrFcSY?#b1o&eWyV*JxIpHA!79UKZNK{+J}6E zK%`YmHUIjw2~frT*^Fr*nUV60M@IA(c81N?KIP`G*QB>2V0ji^ApkOdI!JRA>{@x~ zO#A_QuAvI&zGLf@U?%%(K5tJ7U||~XF}z{qfXvTJ6zQW!mFF+>1+-q4Xk_j%IT9NGm?f$57l>$+IpWx1OQ z6lkVml43icGIC{bp1HQCnZ3Ft_Q&hGNdf0I9}eM<*Kz=f2EkvUvzZDBnFiI%$!Loh zB5F@^;Tv<{{#DOU>-)H{lLPVMAqEkh)!No-(m#FqE4N0%-bFH|R)xc)V3h>n+pBG9 z&bH4LWxR0+K{jnv*1zjh+I#;z`F9%K@PkMcMl!t?57D)}&a&sX&Pp|&gmW0 z#9whfJC%A}dhHuE+lJi|;ZFz_GE*j06ccf2t+8-umn*8MmmmrcCp+_;{#Vz(1Qkar z9X(`&L%TqRLj1IT7k?6gAf_dFsjT%*(pyFzTH5&dOro`y{M(EzRsi~lJT@nwB3OgPb>~HS z=6UmW<;zpfU-2)390Q-JnsRr3`Xd5o%x??2SGLW5v(OjgFNGl@aiEPS{3HtK6!wVd zIm8?GLHZ91s6UoRHe52DR8Fb`=L|<=G=wx4xYZ~xf3XKFsDst`B~2&4j3*q=kyf7% zP1(Q>4m#=C!`*fsac{#myuF|TXCs4}D6|h^)s-6g4n_hWtvysI|A`(COX>Pp>iTSj z&A6V`U=KhQjb9Z=>y&H8Gg8Fa_Aa zEH(r6{;3&@B?I=4RG$wPd1lytth(3>wTlReT#Fm*W(&(1OOUDPcRBK8s{nWS5ApzL z$`W#HrzzR-z7b)3YCpcZXdE1m3EVj|B@ z4{Z(Q!o#bSLwqmviY}4G!)>vMHFOTad9Dv-aacjSXHU z0GI4w8E9&`OEom~>n0n8(GmW=(I2Vr9L1m?7Op1$eIuZGp!fSWnbP1V4nIWsP`Jw% zXbCCCU@QI2x={eO31u&VjhjxU!{3uA`!kVuD?p1w$5@8~kr*-WJYMw+^(a+T!Uu+M zpVaJx`us1fCc=5Y#;_q?t^cqq2EyWP;T+6rnVOLbfOD{`R~!;Nl=JL0#BysRRok9d zNMX5~yJunM+EEn5vE@1)rr0V4E&&i&ocBx@TA@4R>w)FtVZk$Fqp! z`RngEscAzR+^Kp$0A1&HH3r;H;XC8R zjp^~VKw+ncMZ_xU>jxLnloQ2&kSpc;X;%*=5O2Gih%&RkuQ2eWeV%*8Dz*UU((`!9 ztVUb6lclFtp^Dw?*G0hN-5F~3w)bCNsRcpdl}^*VfuZ5o^z=fWo&9hh_xqt(LQbFQ z%0*dO*?@omkSGd3yc_)5Bh%`kP^)Xt$H#Zcy_@t$wnV*Buc>pF$C8~OAt8ZdjI&)N zJS;*XTks{&xY=ifoeecDY#4L~EZ+T=KOl@=A;IoY0{V@~VIlx`u7@3r6c6YTAw5FO zbbi*NLF(&&Kit5K0JX*A)&PFWjj@qS)>P%HjgO;WEs$G>4kk^!pxDGGnk;|Ug0jH0 zm0`|G?@E5sLsHjk6WjVsrDjJb)8b!B`_4X$iYd6X+tdDX z&GD@Z1|v%dHM{Ze-%8&}UBne~C@g2j@z??9AAs=uBdyO%GXdbSE6DACOnsz`&GGo5 zAYm5aR^C?4Smm-D-&X5s;S<=tK0F^162btXQ?g7>N%1&dQYaYxoyK|p<0(W#wQ&U3}Tex~QHpX!rvayi_{Ix0#W&2x5O5Q|a(-Ha4*HwO-rFr)TBppvi zibL?;*fXmAaGv+;IsG)m^2^IL2QE02^0?kL$lBvzeqYPetgty z5oeC)f~x1@TFtT~R6ESjCtqfmx=xwM-CaDKKi0b0Po#Kci4HmVH?I+T z|6Epo*YJwo=xwHd6Uujue0|x~V`ODm>~)>lVHs0-AD&%e%1P8o#?6CUMOP&t{i!5B zciY8M!t~meWV*!_9#pP>I|7V2C@4ODWZ$tJ6_h1Fcd!7UGaB(?HVZIBN}5it1RVC4 zI`n!r-8&U(P{Z;Kp)?@nvPmah)15a`Z$Rdr`K)DWfbh4_8SlA&i&@%&v+QaX?9ajb11NCbj9372XM4oQ2 zQRKg|3)ApjP8$V|@4ItaDvtdA-F`Nx!}R-|lJNc*%2By=>T5OMdYuKT$n(HetmAJwh4GE!h>U_;t zL}vh=;(Bd$-DTpWEUv69jtSD1vr~*oG==+{pQPes(!=Ma=zDWYmT29E5`6-Jcz<8@ z$Xyjx@_uF+cR4M-b^)RL!Ke9Y(t~gVKCTqx#7H>N$=%8 zPxImt;O`6g*7{#BVl*@eNPi}wgx%1gz5mW_J%>ox zPutDS?bogaO=)Qb7Om3DT}{P z@A0ZAC*WwJL@kKH__CBM3mdy#FDxuf_^H<{^vf~eqEa?_cSEqMPJQDM&~!;DZ?cY`C=8Y3k`%>qto<0ZH!g z6`qtg1XBDxxaW=l#lVia2PauQNlO<+0<=BR_I~qdXmBwD36zsRWV#SGtn;xiQar73t^q^NlC_L{)=rUFQ_DsxUXuwX zB_!M}{qzJPvTm!n&f!^PWaQ4y&hOue_g6wn{X)a?q85ErLwf(_N$sjE+Xr5d1B1A#7fW+keofy^OoXe;x81cdSm!}n|e z+QGI_EwDA*QL3~o?0)_5yH3fMyji~z`6#eokMjBn`G|>`ncr>a7i$i z_ZHu=O-{hoX`}so;In;{Zbi1R*<7AP#Qtk~X%t<-jgd{fOvNU#s=i;MJ8SVj+*=JC z-~c3js^BP#W~%8Z+TXN|5;1lAb0~{W?51`y81QYQKw;8)s&m;CVNBlZ2sGsCY-=ECq22LkM2Ir5N=@Af-j?Xrt73#g=X6hu=R_yE*z=7TUJ92d;9+V#sE@$Og;fI z{{6(bQg~=6=*OOhEhsne`3V_=r2Y8G*E@T;!PV2lgFE|gQ}O>8Uw^{XG>oTixRyDK zZPil=J(UoGBFKFv9GVb>p|c$c zKwSB9Yo0r!;>c#%@4TWb@X;Xz0U7;Zfp2xc3U5-+P(|e>sLk_u79grNOdBA8%CrD? zU!S3$*ULlw{U>-c{`-eKgM))h0sD(qz`^g|bfrrBB?y-Cq@u20u36HaXXvcr?5tAb znS)KIpiG|>v5zx;!e9Lif}YEa$B_y7ycZNSy*bH4eocaghL$O8mfrLs(y+?+qDBVD zL-9MW#Vjmnvep0JcgECTk+lX24W16g-Kez=fve$f9Oxj+;mp(Zco9I0a9zNMvpL00 z{(d8I#G&JI>z$c&JR#@Y`f2;a7*kl7)aBH`Z^1P0I~-pSCNAz|i|fy9A>UOr*Q@T` zK96Lug{tZpkbT@-jE{I6EpT}pd=ofo7ow)7=AoNzi}Up9Bok_FYL5bZxn(|+9Idar zUJH4~O3*8dPmNeUzV{k4)~93#0^s1whS*(?<(BDES|UXdAUY z>BfNifVEeg!}ULboVvEr3iQJ&Cm>*ai0A5HHe}m7dmAn{H}@oFq>EQA84VN}i9*i% zaplJ+gbAAl$l%$nm65rH#YmQ?drqhS-Nj*Inzzfykq|JYtW7b%$+cnR)b#XDTjhi) zjId=UO^3N=?Ej<_9MsOEgt3INgM$O0 z1Y28M8>{6A6L;SDa8_dm#b@>sPuVmIxNW#9JNbDn>;>eEz{l+NTncD136uyOW|J)> zleI)qar&K>^8O5_*uD9NFJ)EdV0m0nC4~VAfT~;1OK}M$Fb}AAzeA&3+8Cw+%&_Q-?JQKTRB6&r&)X; zkcNjd;`kXF24I`$17D!B!=qER1ThHs=tcpC?Y`G!$7(qNXK4fG>F=#gM+}9whTD9O z+RHjL*!BR;z1V5b!*pudgl=Oe{;Z(@M0oRVH6<64>ppxV_#YA&A_RDNx+*HCms&BE z*}ln5xrZYnkE)JkJKuJ6>MW=9yv7xHCWM83E@tjuiLj^1GYph$T37&zQ4Mnqwo@Lh z*GH*FK9IoY0E8E>DMA7MbxhycSWK1R^#f-Xwt!i21S@^on3IwHGr{=iTB-l+CK@Fg zLZ0y4o6~MOaJc}doOTKvDmczW=hxv^Nu4W);;j}wf3q@@pLY!?IDz<_8r7?W1%^ND#S+RcpKd=qNfBtWfjQo%R1G9yQLxzAfyKJN!qs$3b9Jq1 ztAq_9A;MpjS}(qZl^M))fDc$PFn`vejc~~3bv~NPwblOKWRZAOKSXe9v z+%GmQ2jF943z=?2{tW)%+3osjcgA3&lz1mFL%pfhm5-)ggOOR(!CXYQ!E<;XA(p}a` zR6V?62cTXKDs%p|@9Td5YOEDWmr2M9E>=6Ge4!AwXyNQLff{GKsYsp1FO)A|VhEvd z$Kw}#3#WXZxp-*J+?|gKNJx>%nxYh}&H6Yl?S7S1fe+tFZl@S<5L0L1MS}go!;na} z@VSp1_EbD{AM$0w*wlQ2`cD&x=RaI>B)=-lEOIYQED5%t&P|ZlOURF|wNth2>s6v=P=Pq`uS50+NfnSstJ^Q;Dm@M~a9!-EBEFa_RI4^F@agMV$A0@LhDjP+yfGtK zC)As(S?ZN*?D>*J0tfY|gvK{;A*<%*Y7~JV5dlFIC6XiA;%Ci|cN8iVAdUusg^{P4 z=MeM~A|x$GA1;*yox)RAFGaCE+|9uAFN%4cx*`qvgNFn3jea$o+CC*31MgVkk+6gP z9f+r73s%T({p01npuou%o{IfKhPu5I2$Py0$Cuv~qpuK|C5An;h{RZYV-PBEf!XCa z3a1-w77t+?knI-cofag%9sGSomwH4z%V7T0KO8d!DOX}rKeLlt`UayyKf=6NAEFw} z`Wfn}rK?YNC4$ys4wi^bAE_cWb@koyYs~WyY>>CUc6zp|+-W=ZT7_oB=@^LD9fJ!m zT0fDBbOzA(;{bCN^g%I?kFg)Ll$ijcZw~aZl)rW2g0gol3ETKoeVffGzo+Ah?>KN3 zDjRxQj8M`Su*w`?webMxzwd&C{+A98BwAJk3Jhv@{ml-itDOSzxH?%!r~amz2Lta* zaYjFdFYfjsyD%MP&Ir*IY{X0O=_%rHhTd2wK~Wivbe*fK2Zigje)|_-;UCLCf0Rhq z?N$XBdBnF`spH2c6rjJDBvOC)?(kLSjBzY_ALG|WmbpB$WD3W2z$RwQ?SLYYG3^|?nmXJeS9rr_a}FHPmkx*ZN|Kp3f~J;fn{^6MH%2lLqU;gYp6f_tFY77gW}k)<%X})qp6_OV zul;~`nJQ`$3v2?1L_qkRAobXDTKtqY30cbJR&)~Rv@;}qVE5w?@mpn1imA5m+%F)Y zBvqHvvOM``(lh;xZz_(i)6B@?D3Dyu>PIv9vP|(q+NFwwpMKEmD0Eeqt|M5bOEY2k zL?_%wcG^@`qSYdQZ_AuaEIH@og219LMvY|84qCsg&XMW1ld8Z2T_(yhAdX{LY@cS4 zbho$U?L6tO8GnTEyPEmv4gD0F8)9VMhkxbMzqR5deCM>A)E=*E(#Y$0erXI00@(M)UeZ+k@zOReJ)wtbFg2t55ddB!U>#~U@Ncg?yfD{M-^yph> zG!w$LA`Q*9umcyp4hNk{htq*5A+nsgy5jcM`xrT)1hnV4o$sribNE&laj55ymi~MD zWpOk5+4KOHSnGmxj_GbHFDv`WtZSUA(J5LeO*MjoQCnJA!zUR&lB3~OzWi=wB4iZf z@dJt%wfA-6xEteBCAp^^zv1_lZ#GTar!N<~H{r5LvoNo=^A;E*esD-8ZRC-LU>6|# zIPyTr_e5cA7R;wk#EVCXIB4sJXD)|jxwx)vw^`cI*A`HhYQ~N@%ab6z1 zjRL2VKk0x0Q7_x@PN``T1Yl3W!DjDKhgrai@rX%8lc*_}s4I97o2LGEl7&e$k_8)l zDJ5;>;BFSMgG%uDo#Gfe6m?m@{oKhx$|EcmGk?Vj}4kF^UocEZ+(dm8+2 zd@o#u{`SSC3BuLr3FFKN@J`(R>!O4dQ_CgLzjV+^sOAFn;|O4wP4tTohj?5gj9%Om zGKs3%T&1o%QEy$NCQqjq&5R7acUFx&x79WENP?rykW>t_Qj}13vG&IKW-!e88mhrx zz7qsy#T#a&>(#In^zPv(rp)iT!%PVi3`_)c)ZOcgOC7Adh{*|$DArDOb4u>lMl5#v~|2; zXEv$9W>5ZVWY#t#JC2@(z+^5;iaHw~+9On;&y;f^GF89+{H{V_n5mJs11XF=nA?uF1^|$dMe2D#z zX03uk4buoBhuZa2{tjKusa99-Zg+oBRVWM@RofYXKj{>0R1wdtUah`7?H0~8u0t)$ zes+BZ7QhZ+dVjIz0uT2tOhM*ZaUlL;Qjo9YzPIuXt&xGZ#U*)!>yn}W_uN61jQux3 zHr;i%UaNKEzVV+i;DSPp$+<>2LKk@HpVFU5+q;)bk!ct178?Uq&%9E;n(JD+B8A<4 z2BYwO)9Zf6{4@p}`=!zvLNq_tw}Zpz{%MXV-&3GEbgyEPcmNb^x7Yvr?83(tYPeTETx9n~yyTpA!>|tUWo4JX_bb3uQvd zK?lQ(L(FwV6R03%re=dQh{Te1H)j5ZcAOBK|dxk)HSToINK<<3_HK7Mu>e|wqWUw ziWp?}O*Dj&SCssqNRI9Ow)zbGSNIB*v=PJI5T6`PW>2Ch4^_)3Hb(WP8fsgmC zYcW8)V59Id+S^nkTt2o(VmS=aRt=zcoCi$Jp zjhXv^B^{nn2q;4dC$Q@=RB>PchyF+P>+aRgRw|@q>oCg{%Fr+HbwUk)4k`eiDK);j zNBqgF>q*(9HAfQQtn#I)x1q(!YBCt0AnTlYnah5!{cMHsw_%J~KU9Mc=!}qzFeGJ) zmrU$sYR2q%n7}AP=LmHQ`Ek39P2& zRsa%&;pveGLNR&m`Q$!C#^X^lg6kb()x#;(nH1{dcMc+fec^xs^PGM2}z-puLF(*`1NI_<~j)WrCVPO`vq);lovY%k!P->a%@ZR8}i%;XDgui105{N!z{pIfC#xLLJNg5P{3 z>LFcnnRpvgOmDBi<{ju?TBSS6wNNFIYvQpy)6!Y8g z4GBu;))&+PH_**FJ!{) zi&&Pr7DSasULi_pg_g_Tj z8Dn`{QM_l~68n(h@k!oVC7D$FXC0#ArZ5iuNcG}RKX=9_QNLKSI2d2fT3|D}~<{Ll!$nXW!C2X<@QRrcJ|#2U zazOIsp)}!_$5>C-*@-1#ma_21wqp~#iEro|S`fom&@BF1wMpfT+W7gwi8}Ekreb4= z{C5uXHj1odu7^n-T%l>tj`g$I4iB)9Qf?DN=}!u%JuQ~Wk8vd5ty1IqZ9tv<=x0Az zk1?&in5`UQ*`1UvO@r^COovFkm``G=POKi?CgZ_c*Wv~iRxW!_8w#XV_m3jS7n<>x zE+}IN1&L%?V^meW+y@o7rdeO@^Qp;)%Melh^A((FCB%}m%m|BQ(x-$D)@>t_H2Ew8 z8#{9cyBlcVoP9VGDY>0gjBlcqP9A6Z;PQ%-=I0L)hFczd^(D?$In{3%RO9x9eY2a~ zaTa@1*SSf992ElZFXi)aDOavOs5USO_d~S`>RUq7m6cLRgZtS-Eg~lm;o^icjaoKD z@gSlgdeLMF`bw8_`QeNSmbIm?QCJY~mSp5}Mnsi-9K`tc1LNVmcGNhUT6qi9G>fT> zh+dIEjpv8AFs=DGa+bygVP+FARmArMuITk&XK|Z~Qh(pM8B~i26}ry2hwxwQPe2?$ zTTciCzQUp@x)Vru+aq@*8?Hf9gx`h8Ox9D4Ch@xwkN87VW37N z7OKrOFpSMJ%=n=%OrES(+8&h+GmHgv!+;G@*?04ezG6nQYU$WMt}Y8Vig@v(`;@Cs zZ@_5b(drXNveLd`(S|QH0+DD!O5-&M)7)E2`g99hYID+oJhrxYa2JzWwlGZNb!@QO z+3%^(2`tt~v$&I&mfcjMLJ7V76D+cqZ)s4S>WlYIPV;Lz@^jM1IJrfS3smAFF?85# zWIj|oKaK{Ywq?*%kRGAhWNR?-9*fXSN0S!wdIb8Me#&%-m3~)ZJMjsNrO;GFQxK$g% z=X&q%KqDmQr@|X}|l|qPTY>UN*qE=`>3pj&3 zqjvY}zzg)}qt*?p=LI7}lVd#GA75H2F*MHQBPh(u2ma9fZqia0{hq_RpoG6#6mvFB zIDwj5+oeco#vyrQLkN#koM86QFlbX`^*Ab?ZE-Smf|D-0OPim6>LX`=y_5BbRRh?Izj^wR~1^kL;L`w!3dn&({0`$)2Tq_`)C2-x(H zADAhabv=(i&qC_%f5jbQ4WBQ_5UW)k5esm?I~Z4xL3T%JwN_89AcQzp@Mjv@Owud9 zLaqlt6~xMDL2z(%NyyR?#_uBE-CEwe1|B^dFXa-;xOF<4=O5q^G+-e*Pged0qRuK# zZ_2h98YK}@kw*4ZO+2M!*~Y?{^=XP{Lu+?Ru!ZOV6JH9}+4#}#0Rt*rpUdonGi;=- zqc=~wG<1<1pc7^U9K#%eoy!&kCI1(V-)CGV@%KF~Q>NmdLA>DuCB=rx3Cmr2=EwBU zk1d-xq60O#Ykc8(AT&zruw)TOVSdLCMegy6@8~H}Nxx3zPDT_j^O$&H-6ZG$+g`m;j z`O_#UfjsriV=o&x&fin<*&9J%;kKtSdEhpmIYx2hRo%Uiug0@L=giG^9!WT63Z;We z_B7j+R@p+TT0r@C@PNs#9#Da(=8f&@#9<>fAs5L5uvkDi3+)4$m=iy)O@nHc=QpMr zF`x)J4CDi^!^isOq#Nq>2g6$szUWQ=RF)wB=w8~_6u-AbBgj+qP#25bRER%vOb)I4 z+(XsbdiI5RTu+)NZlA>GF@I=(3>CL1HQAUjLC1jxed`w$hy+$HKfrWv+S7o*|AKHb zfXE_Q?E_Qs!*U}wu;8U)U~1LO47L1$OIdj;XW42(Yue(`6~m4m-vtn(D%38nwuSz# zSL4cE^$(yc^W?|++nuY=ScZKSV3r$mwe%d#%f2bI_JonD`oJzui6rwhahHHirHnW% zmD2fL=o%*T>%7s~{dTiVE!yp&5qfW9@oNiYS3A~`lnc|ZX0?MAf)d){>gsJdx2}PP z5Fv&!BWRt4%&RBigr*D8#&jzNNRA`lR)I>2Hffpaxdv(+W-U+AL5gFOzCd+>Y!RM0 zU)@BjlR+tr%D;^&%j}!On}Aw0+i}#mWcABKOuzizwTsB*qYs{5)Y)dhhkI^iwb1i% zPFBODo}DLRjPpMlL3rIX!L=|gQ^Big$58IVte^Te(xt~%vX6qNpowyyN5H2v!w zq`vCjTuB0l>8>}_~`&ldSRT)}Cd!nF(fRjEC`0odTjo3Ff++ znA+iywyNsjIIC}ZUGrd+cg46s3(S#M_XEKPl&iF9p4ap<`ebbswP@aZ@f|)i$7LFG zi`l4cdIL4+J-p&5NO!=SaX|^VP*w8l?tA6QX5Nq-J<7a_OVtL^gWd?9-F!dE{`w?$ zWqHW2Gx&}-@4x=&;gba81Q8&}OW$m8Wh1!p-#B7~fh&}4^|{MnmVHyAC`(v_<% zPPgFhX_{+#@xE1T`N2Fl>1WW4XgoD(e?{@31Ff2kGLw(Y9XV6uhQ^#ucz+V3wr2M` zV62jZ%~0IX-lt!b7D#DqPO`%HQVn!VyMOIl9V#7$hft^uVp1HIRR&Y5B^oBR*QmZ#>jWN(3r z_Nj0=Se`*HvWKdamvztx-*!xnV~A(Ij;WLZvNS@xTNH!A0Th9-QUiirxS&bP=c69F z$}G;|-H!piMgKWn;8#k%07V7|(b4?PH2zpf;UI?T_AqGt)0v#pAY2%ti$;OVw%Fi@ zkT8}l29gh~^G(fIo}0hH3sd7xI(B2A6HngQ5+<$F*uKp@14qSW@{RQ^+DHBSNfpqGl+ zE!pWNY*_@?*N-|Nioqlrt8tcEk3^sCACOz`H^#-+$IqrDG8SN^Dm4G2w|;5b*w{y~ zZx^w>SFb7_SGc{<(ap_ zMQcRe;!nOn1GO$WBBWi+eh(CLs9Sgv{H}4Ox=HG3=s!&DU6l$dD3l%aKLAevs4L%> zHq%YYD`LN&fBK!Bo8j|f4wZu(e$B}L3V{OQ<}bRIlWOgj?5mZ?&vs87{KJuQ5k@@S zYS{mC5x*}Qx0u`sbK0nyGiy|KYFAv^xYj5G%69hukG-ugdC5W#5oK5*kOXW{?5)Va z-$p|)&V?M|c6uuXDV@p*tla;hZGjJrSb?r7nBVWJzerR}7EdpmpbDWz*G#d{)dNkp zy@b?zaG{C@v7>#pNK+lGeZCTVg9vmHOY91Rn(3qSshPa8`CQSFQ|E_jNT4+d)DmV< zU#{J0WE0HOw!OrIRQK=%Nnk!k;w9=6Ww(s5TA3u?6pPt($NdEAnEZZc{lf%lJpk55#MIbbjZ?yZmD8Uh!KhO2$UbpI<(0j$14Bw0*#>*s_ z$5{|BQbH(D;9)g@#;yG-1DFBni>*=y?Hu9Xep95Z!H8A zq4NPl^3|X_^=5QBDVHzI6PW1$*UOdTI`{2vpIcHG2Y*Ghst;r6nKC#TRm$FoNj#E1 z+Chwc$6atFB_*xn>lX?ypX(3mWk~|pWF@niAXs$~vaKisz=!@N8BR++#I7|=UbhjMs= zWbmPw6rsvs|Ic@D{%yyzIr`fAzc>K5OWMF?VIgb`65u37eUJkUM2{org{`D>)%iuS zEREOaBr1^)s%SnPZiGe&SQoLqw`)YfhQ33%cVnw69~@#c)%gX@HPe2v(}lk8)RLu$ z50us}atYV_B7k{Au*`**B+|&`-qP%m6KxR$`zO7ZB1APZpBV*Sr~x^dXYjjvg(mvm z^!iRz;ufP`PZPsH?L5oHhdmr3EH4g$=bb3#2C%cwgN%3f{&JgEfQf8?NmS2nsSr)B zVr8i&!^i|m0`v85_6%1I6^tX4GJ*O~=!*ySB`?&Z93Z9|w7%$bt|@%Qq3dDy_IaGO zJ1m*=-`N-N)9{%hk}BfL_r4DqKj3P8J0?J@EEyz;192{RA$-4cm{{3rbzd1m0#yYQ zhEs;39Zj##l@$VCN8+1J1QjRKa_+cvcm%Hjt85COwG3mw$0+LPJlUr^YAcbMzTpwM zvD{uVhp3vc?}+$XeFB$ca$E<4x;mFvgyCM}z#?=6j3tmT7SAqV zuGW+NWZR}zeTQVQcPR!H`pJ0U`DsiJ%boqGQs5H1XS!jP1qu}y z3(i_n6XZlrUBrj zu;TJE7+Rppu;?I`LM$stAg;~`>De{akp@gx?489US5A4e9K<6P%kXFhcHPP}z<}ER zH}SVOgc-l=fK&R`v_j83C`slbydDgJKPU1W9U^k0Y3qW%MmM)##Y0z@!R2S#{Tm zf21CM#2N7UqYT}^$0e5+ivFv4sXU$)JutxXdyv8FI9UeG$3D4_+hTzoT+)>jAH3b^ zb)1$|?-p(m^bL;405|HQ@Y8vh^S#opC=5;^v50>#; zjcU8Qlm|)}RmSLqp51f~hndK3e`=k#q68_jB58me%<<8TfAOlenQQ_vsW~IyZ3JD% zLTu7=nj!7}1g9lW`ZzQac({~PzQR`_?f;xLos^^*P_yHiy=~-oc2pTfY7PK6Dmyo$ zzDnH3k-ozO!2?R<(vOQx`U*i0?QWaVTzdD{yLYR^@%s(B;!%H)l=9k{1N9Uc^nFjLyOv@Wuit>tK3@C7X!|U7m;TLx(X-uy z-RLn8MpWo|klx&Ud#KB1uvsM}J8-?O_6&Ti8BC#=#qPHd3Ag-E>vwhGEcPh? zQ8Wc094;*-fs7kxIv;PV<}17Mi<=*YFuL-RrYuVwn*P-3{Zu$F63F^lcKpc3O1l>B zJ>Ge5ak~^!;y%LqS3#gRsQJ~ruz~ojnUrewEi>}!)oymu%sYqaPd#m~$-?hG8T|E* zg$-@})p2_Or++CcR7|qCEpQAhZS&ik`3m^828uiz9y+bO{Ht-Em$I|i0Q=I}VN=!L zM%#-3@s^^Id(s(q+WZ!I^0Eh+2{>BFO-g4;S$;BHcWc?J;I=sldOi9Tq^zkE#qt?b z{5c?Ed!~Lpt!d%;=RBM6M48?;4Qx8CtUMU1rmos~tehUa?FBeVpg6?uym<-Nw6e;} zD)_#C8Y&vJwSiZ$*nS>HcQjTEM8E?~ViiN32Cvzd;p-_+9l`=tC(sci;;}C1Su!y+ zo~+k(p(rN6wFS@;A(^SVpLv6D!CyfQV@$3!s-gy+czqwv$|wA3Zn=#?JX7YN#n_;0 z&8=tW0ZqhM5-fJ~jFomj%w$0Pu{<)`V!Mx@Jm4+***1KYr{`taIL9Qo?_{x{AU0B^|Mi zpX4xGle69ORpRbjnH@0GS9vutC37co$M0?l$o=jP|399-I;ySpi;~yUmZHJkDORjN zad`wQP~5!~C{A#f;_d~C7k78}1_<4y}NEB*4D6EZ{fOL~c>22}+;rhQj>gRWjjvn9x7ZE0wL5L#>p)hAKK6@~hk_2t`FH7#2MWm~aNPzV3mt^{LN=zL(xM>)h~i$HRJbyYwjD!ORHqr)lw*aIWf&5&3-0N(QDW1a7e_ zUa}d1PQA<+Ti9wxlixo+NFZ#INjvg(1vDg`dJkZE@al(msxd7=zJ^6+Dm1+ui3DiS zn)B*U@WjM?{6uG8&2!}c)QC!Q=qFR9klVaq!e{L4?z!P~#1!Sn10U&wWonnlGiqmc z{zoq_+YZZFLeXdX&=*X@@uHdc_Mec}&)tCSxRFtSVbv2S`0pC{AToV~6VxnCT@*G> zJjpIiAsQCcwaT&cHG~yC(2qh3R1Q?`eae) zFZ+k=HZMPJe&T|-wgxGSKX^aRCTKSYT|#{0slR4SlGVUifvRArCZ-#Nk3D3cZcvDU zib^zITG~9Mqoqe5{{5i(E3;}NRV4AMVe$IYQ{-huI-hCJf3}5KbzfdgyAHWjfFd%*r4&T`}Czp};rR$81M%~p6`*_{nkiw{Ei zqo*v?GX(qX$#j>X<#~1A=Q?OLN@)kS=RUDn&UYCo6vDoj?(n%F^5W3_yhBvP3OMrt zI__$g9uOsAJ*}*dL#j4#c{|X+i`i*K zZ+cUQ$j`O&yO!40sxG#Z6Sg3gwqHpqItSqP{1e&sUj(kMApnPNWyQPpy!tlAkNb#C z!`+uvIIGY*(}XkSD}6%M{m!x{55V7NMa8%&`~sFJYH2v14g$6!KZ>+(nkiBcQxH_` zZ4e4Cr{jL_F+tygpDeCc5K2}zRD9y49W&>&TEgH@ai95o&1=zZq-q{B!QDU3Ed!$G zGHR$o$;LEdggHp%7T2pk0OyU1d!****Lm-%yZg+8VTEC*1(u`=LBt2f@i}u&nCbBE zjVGQHKE^kWEYP43RZ>xu1aORRK=|}dpq!x1K^XxQyo&uG<#;0 zDyzztm#uLRBqgZ=NA){!_I9~|dM-Y^g#2AhR|F;!64FmW916T|X?y!uZxa@dw!g7I zm2V#Haae3ul|Nu>Yot{2zN&PZV#G1zSM-OJg< z{)5yN9E!^qwncHmX4LINfCfVYi>t~R$$Wt7XH;fTg&w2|w0E1^cz+E4-TlpSjyN_{ zLJTA+fzwo4n=8wd3^P@cR#jANlrawRIz!;9o_a=74VY=Lu2z|@1(!cW(qCd_b!_f# zVUz7S9yvLPt8)3_`cqBM@-_6)^&U8b7Ep?;}9OZPiP3tF2hh}@&@dZIc~M0v1np>hs)l1 ztzHRCz{#~=3^WQrT&=qqq&`$uWWU!>iv;ItyhXS(;YBv+H(IS#Kg*ndc9y5~ZeH!F zVHc_YTFLv|a{cpK`O#Zw@%UIP3GMxrr_VKxAp|QB6umW8X>f6593fACxtYjLF68nI zZ|wBge&)xO!bs)wh#j=9t|}``lQVVBkjf#F{&$!em#b+g+}7)}ypEAy>AzN^3r+=3@L` zU#EZ++n!giX~g|?78j#4+mQ;90h>V*IGk!vyS{+5-pC}}$0OUnq!X)122>Ubicd}2 z{bTmdGq^)Qb0W$6-SyktkWx95FCZ{u*Bt4>Fv-y&+z&KK8kutc=6_amW0ksK?fyJ6 zMnp_&Tm(#>qm0W_p>}n&ud^d-A&^XAB?za(#(Dn=Vmq@#n22y|HYOSxVwD{kFg6e0 zdV>Z{VI}jcoz!P8v83?6$!Ik2+71~rbl(iRb)^(=zUvDbrxGQm&9#_ZRnXTlXg?iK znQd?(gR&6Jj`W`=G-jTx35wzM&#gYS6l+Ip5P?H?@3d8=B!k|4=c9*n<}iNE;wGc! zw)}Dm*rM#%&}kYGdnk>(YHsii+?|@P>sHS}0P2Wh^uaW7kV%`e{eC+qk-g(_`r<71 zXLIe}A=5~e4~kzyF|jbp%1Y#6!3 z=Bpd!hCVeXbGZx&s$34N1QFfl2&a|GEKBDY(aS%w#deO)4Ref=*zWF41$u+pEeA7` zIh>INYO-(ay>$&zX&O&N9+w)PfW7WkC*!A%$LDWzQ{Z?1`kwCNhGez7<^L(7;hyJZ z{is+vqfE#2{Yxbm;@)#^_H$ScpVK#$#wI%~UP4d7sI&-NF&xaBlFawYz>zJEO+Y5b z#rBs_KCrtO)K#R##*Nd`(s^FTg|xH^p!rkLe4?k}V-~tgX7yyxH^t@au(_RpQl{RH zjOjXi?^S%r|+`Cs-+RvIlkBKE6snp9*rVf+Ta+ zjL+m5!jIOKl=Y|F6@*<0lZ(c`wNK37(+7@^ceI1R#P0XJ9-+irQYDG9fkr6QC!GjD zC69#EHNr1AZ#B)l@1S5*T`x=sy==v#%;NL_pcNynHHwuyN)-K!jIz#1*$;HrQSvH9 zW*843aPGU?WHz#z;+5Axkg8CZWYy)cS$MRN{D5CQk^SZaoYm%-|IG&iG%Jkf#X5oL z-8b0HeEh3|-qyy(Xizj3Sc&>j(HT`LO-HCZBW7 zjB|QL+z%~sC+HF;=xc-Ot1J^Y7o-Ub%?RlVf4q6;*7-1W;3IP`ctcJ(U)T!FVT+8D zv5%!fap0#7rwQf=jGZvg{N(QTv$C-Jo3({imay}*U+%60nw-t9bT7xRL{$@>S_fh- zGsJJrEblWt2M>Fh{I61nPQfsXg^JN=pH+&_&QU@A_ykGn1Ex15*WvlKlv;efgWU=s z$s|*tCg-&u{)PrS_un(GbU&&7P)gZyI>-7Ts(ouEuiu+)k^9=Koi7tIb&x~r?|B^w z8)h0FWxBX_c>$UxqXu7EeHS;5xC7M zh1ajkQ<~3M^QWk+tj1+$JFe4qB`Ya~kP>&1mB$Ot1$p<*jlnsldBl6&JsU>RiUMwb z;badHM7dr*evcKh7Gt6kdZZTpDZkH}18q>Upu?z<@gHZE4d%B~DKG2V^Q;0iG;~#4 zhqB96U=9K9zL9=nYBhsvPwyaTWAb(6 z!xPqt@!Z^XvgX_#hLi=>*DpV_fb|00j@RtZR=!@O71z)zpRfxT!2df)pnPs@NYv2i z7JG|?G|eQfJOC$Dtqpi;&ope`-cEt7eD7%&UNH{`$VteVyeX`s3OADZ_&OOU^ZO>! z(ho&dU4GuJqAv)5iso-I)ig^OjEv>`<9Zt>?!oSPR9~<&DXtz4w#<6!Sar>V2N@61OBT~s znN6bnpAUhiw};7s@au=0-;Iy=cY9U02A*G;Q~EeqScPw+usZhF1gTl(UBA3!0_K|! zpTWE#@fEF1*j4!y2o8A6D~3xbKO&&zE-I6;r&8mSLnJ???^6EJu_Knx?bJW;m$raJuc&-U281B~ojtY+$sobNtTG`-a*rmloyv8J+O+ zbI7S2_I%eDcYE?BOVB7h%_C?aRM&ajPUGoZDW-rieD6wNb^RYW=R$0U%xs0sigC{O z9&r#@0rLiUO-fVsRLOf{s?E$^%Z47#j2IM#@HG8r1bhA&Qr_2sG5z0-7BCxUKXboD z+*747xBa#9wzhx8VCPThMkp<9@!r*DdVau9Q}^^()CV=10}09LJVSx)VZU)D&6VQ$ zIF0v>*z~~_Fp}FE!s~T${WfWfKRO};)q5)_#P`v8j$ds0FiQRN^~uTT!o4J5DM#ET z@ihlS2LkyjpFGSB(O@{p)Zsb(-@8GZ?%A5Rzo8WAw+p#)*9tL9;?)%Z@DMjp!2Kw>|*~}tIW`VWf@`6}1v!7+|F`?%XI|>IBgnl3# z9Oz+;G~DYw`H|rVEs|KBPMb&h ze+x9ia}2z1t>US`0Z$a3&+WiF@qO69A6wZ>g`)`HZIk{;fJg08-dx{+kT(z)0%i5` zjX#cebzLYcN{UZcXk7-|Re`c~3r<0a`}Y!T9$T3qg^#mWYBTo{kCT_M@V*vGn3z<# z)}(2aaF{ZjG=sIm3)z_`_l)Umx^Jix&MLf33CrDu_z=qQ}UCf1F(>zT`Ai zC>N{9hDg%q!hgJlp0@<={M~7A9NY)2*>7V$r#V3iI^64GO+)E;|pI7^h`%C*F_4&Q<0=C$wt87%<$_F%+nhE zx4^8@9*0Xgou$Qk0q+oJwgM9Z0?jY9zgX#~s{WB_WSMI9;N%(}+SgzEc z+hH4xwe*oEZ5O|kd&?j|h;uF0e+wQk;bbT@`?0+D`7$Hi%gTz8)a+X$jZVsXwMqSb$D>KXh!dK;O3&@e&=9>S{$BYgZJj!|Z_sR2dH+ z_5Q58J>XSaY3U&xb>Sk2ONHwq)Ax94^1@PV-IbE>ems65&4p~)_lit>>PM3IkC{y# zn+L(Hry?hN;LW4Om=53l!FRyyd*IZx+T6w|&OR|8|7+uItZvi3@cljJl{(`#P$Ujr zKGqXoNeGV2Kz`v#{@BH5_u0-5FVWfGO`qkl@zD53d`ciA+pyABsusT7&)uvyJ3qZx z!FzQ$V{?r5kw25cPEXqGP+$2s)+8k73wn0dw-tde4C&dIL4=W;r^G{(Mo{B{vBtT2)k zaWMs>1;19z?0lU1yHZN=o6CEXBVl6reVdaOuw(uCI)uGXGNk=sUoju9{@jrnBg}W& zHBoDs*aL-mZ#4uQdjxb{PTs8f*yA&xa7!kst7SFEHduFG;hM3XiaHczS1(vM;3cVX zbJugCv!c9`0d*KqoccaH%6ddQE7hi$zPmlHb~`b_4nv_%+QK3O@}q+$kNb9X`3de1 zG=W=0H1GGD!e}^khbh~h1N(bA5GQj4XiNN`b1e>lyUE*WAP?T-Q1um>P8cL=wVGPcDozX^wQ3RIZ{g#wVOg49+&S4Sn<7P(gE@PM zd#Sm}i*LcLRIj!9=Pf|s#Lv!lvi}|VKM|tf-=)14<+%LWhd;bIwb_@7XUcWTgN)H& z%>GZ_*kEr@x+{gy#^+has4?xF+QzS)$Wht&q_@NADNfcm09nmzby*N7Vh#kug4sigW7bho3a|E_0-JO zZJuJ^%Yk}a9v^+IN^d51*MvQ9R2(B*_8*x_lSbS(QySl5o@9VXJ5JA1F2Z$!z&pEJ z$|@Qo4tmxmp%W%8@#^b)-wfBrfyM{7{05(Gbrm-Ca}HJHZx7!zjhHPW7*JfE&lGBY zCFA;1LXIo>iIqz+Kh_v!gU`Tl?RTQ;-Fi;Ssn=tGRC$S&`B#MzpYy?YKiGV7>e?0; zCZ2akfVF1gD7cbwbfHGC6Vfw|8c+FWD|pxW=%dsGU731Ks$=n(FfN3BnD4^~*EIDX zP^~#qe<+e)&ql<2Ba(_omW;peHwD^3{eParPCF4q(OWShw-pQ4VNs}0PAh+TGkwjs z*G1$gz3=b#?zs*aS`A_sek2*wJWu?9&Svt#S>N@vw1# z8dxaLSJ4WGA=E!1pgokDE*yoLO!^1cn7vTE<#Gj2Syvq6McYq~K1Z*gS+3u~PO=^+ z&iy`f3D3Cbf zEQp0>DPDoVs5=K1#JeF_RgIo7_oM?-}AY$ z{+fQiQfSWn>?-E}Z4 z+|M24y~S^TGctW(VJS7AI}CXAf?^VXdy-w>+Fuo>x17p+QtEz(bjOa1EG9KoDcYH% zdAkRhg`8$h+dvVwzVlUwbLH>cGQ~G%EDr2mMTDbprm$8kXIth!9>@3+eXeuWbDGy> zuV7{?WvMI?cBEzxCKVNK;xvQs_L1`ecG%<0~KITgyTn6!Sntxot1u_wZ z%yzE>FG~}xaXCdcPm_go_RcjgpsN&l^eUmB6M!W)0z8iAU2|Fr;^2Ilgs&dkTA-2= zLGL)xoox(b)nKYO}~?{f#{cT!lrp+}%Go;gPuO zPADBRmt|-_RyV<<=`dUNL?it1r6a|dDcs!JR=eu^2P3L_Y z`!0Pgd?WvM?+Ss{`54sJ5gM~~hh#XGk|2HW(c0Ls59*oZyqJS5mZ~u`rhY|@DJi!4 z&OdAYgEURo-k;Cm0&Ha8{}JLHh7Ax-UT{C|RC=Gs0Y=sCz#otzDoi)-I^>l30`4DfFFrCWe9=>fQL|(iy&TFQ#SFPY zKy5jT1Nd1k>cu6Pyv|6^#YXl&xgpoiE;YO)BV5Nz^kXlU2kFLiHD z%0B9lE(7HkWC=4bfAy zPXNo{f{B7dg6^!QWy5L6kB-e#{Q-y~gz(uvYENEMv`3Be5#rsqGdqhYNWw(JcSxx$ ze0MPY`^QQ!YvVmGuOD!N=b!)nhdUtIt!R>D7QQE=mQdAyl(Ddh0A^H9HRyI)*(^GC z!B$wu=av-8D~chEj7(DpPJF@F3ZV%ad`<@}^2)OkF+6$YK`9EvJz?%by`TM&PfGuwQ>Wl=2M zP&{0vt?`@+sp&8M(O`l`5ph^6P4>!}&3)$99~>s+6B!?Ct!}=~t@Qbn!b&Hj#bUkI zcQ=>mIlgL8Ywd4)C{K?A&6M`jxDMDS1E&(FO zc#cjvp5%FMC65=-N(J)2L={_ZZLK6+$?BE{qwa9Rn#=GW@yE~1lE7)azMM;F#mey5 zoubs$SrQ2JAV`XedGCvedlU2_5vrh1XIEC1^W&t(ERK;T+Vegr@$yF$B@fm4DPX^ydV5)qFmSXWQ=$M}D5%$yiW(uh*84F8sk(Ig5 z-FRwAD#9hhXhYm;8#M*Y1{-44c^dZy8cf`}ER??W*$o}aBoQ90iXb6j{V(BF&+~sT z+ahXTk6o%@rwy7=2-l6Ju?y*`tGaGl%gWnqrPdopQqK4y^00HLWX0{TJ+>aQDn*mi zqm3JN9rKh1d=WNdyrQmarb{?2}dOovFn@W}}4^B0dK6x#fx8@WlGs zWFg6^y2xyc)aUhx>;Gamn3`5bB|FylVg$khD^?G`Oy-JSNn1Ym!}tr$YvNp4U(!=}7V1{N%;utbWERpZC!hcGpIm z2drdu^^muS7-FG6c{!HQZd#P=H(c~UX0`U%5@gyelN;P{c;y+L`O{bMAHcxI7kY?Q zxh?U*MfLIzPdmrtw#Q4f*=BlmPWJ&2pSJsgx7V`2f-&_5M}=KZHh~TcIQWN4KnNb9~i)K6#SqGfnBSv(Z!jhpgO zI_?QGe9>6%FUl)yI7sAKVA#kTr-v4W%5ijl#(crXM8UD49AvN&_IfQXEZ1GY1sQ<8 z(nkceFD?vk|3SD=zEqWY8`&=+ z$DHFg9;$ZZ{8@V2_kCW|8h zpcF#~h_-aF3Hjn68ij%FC+u$RW=R_z^5`vpsv*<5L2Dy^1=K|U*Iq|Q)B7p+1WAb` z9P<{xSj&&q3fGEQ2$HB!a#RJVQ2Ybh=~?VsmNky*DhFS@69b{0JsDj zSs71~mryz-Jq|HpO!U`Y&sjg03I$K*`BM6ibjUjZ^?C2lD7?^?Q&W}>zNlPvv}t{Y z#$>g){zb{%n4M8ztL_D<9XvVKkw`LpxMA>VB2bkbo=g3rrCe3SwL% zA+6hj<0X8IQl|5N8JR2N$qkiCh~bq7K!D+?VVba_>Yh#1aGLl2f0)8en@bK5(HRnP zp<8^C@z)sgDAfK`7pSst#Qrc2k+6R!Do`7Gqugf46p+IRtS$n?KL@Egb<_2CKnP83 z3BDL2!KMzUkxAC^nO*g@w|{DC2QCpvHz0rP935DXR&lYher;WM#ych|4Z! zYt5(;@;%UF7F#EI*Lv7tXmt%Z!~!N+)Mh&}uGC?oU~TC{U=lL`5>Nf&wn}3Rx6u)v zQJ=Yw3U=A#Tb(QscISBm{S;1T9h12GE?TkK#XJQ*EvDWK(-s(VWzBCbjoy_GY9aK4uJEIl+q zk1`?>1DPh)2lXfNMFYkMQn@YpvBdROoJedP`JR0s)I5B6m`PSJhQnEtDevb8b@H^z)~De4utNbz@i7la&>=fL*%=<@a)6$`aWf72XtY7SYu zZdOp8O@wpqM1zG(H=Z7NH6vc=Lx?qmQ75T0#Tqgt%Ob{ z)l{q4o&G2sW}9s1L*A<3xtCiBoQ&U9NETjpT8gHj@DzN{cw7 zOTx%^A}Nro-c-PrTXGDWa6PHK9D{JWjRvEsZ{uZ-YcomomIJY|Fx3G4W4+B+F&tzj z25ZWz8_((IsnG9)(p#dWn*SEf)t3-ZFF&~`o*xjb_J!w!F3N*T4F*c;h=yN*zjUt) zzfRFzZI@x#8*cP`wSz~%+t{$cc7ASmYvI+3r`5ogmoFXsRxVi@gNs=>e_|$^vtk|=(1)31r7V-h;ZkcJYA{4|E_@aAKFn|84;`x0zuW+{>G zPXo!gP3B(hHYSez8y`MoWo!+{4aRVBb(TW0m@fIa(2PRO59~D)Au`e`>Rd~K6>HxI zxnA{+73%Fj(gskWC>6W|uKg2panV_xwH)XGqfm>okDdMbxtxO&7^_oEw%Uo+!ZWZ3 zE*$i=i6Wat_K$uO2+OVEC|-4plUg@A3h2P>hobV)p@&!fC) zn3b1BKB;}_Gl2=IXU;Ue?dC@}sBV{sCr!!`3GGi^2EtxK!W`&Z?$3J*XtQUd<~%Pz zb@nrlf`VQVg?0Ci)aA9Ki__VSoj6MUp_2*~Bk-+l?83u9lSOK| zZ?79wOY_e4au|PXZ+9F0{~M5y!uP#YVqXl2zR7;s&i%!M3J`S&4o1=h#8M>`@%lGw z!k?gux)l((hU(hcQiZoeign*lk$*&1pKw}lWkVk<4l5dN*re8zH0MzK|EMr0jiq_# zN|%+D2VDLa-;pvB)zm129gV(ZNfa+u^pf%BC#nPSx@~Yp+VF7C`D|Nz39er6j6YK^ zl6itcy|fTmX|hXfbjSMNKO=#GqmagEx&BcX1@aEa+JC`JmorxLtD9#G$_JSl1)R@S zLKX#dr4lTl-MORDm|MZi`LX-Peu0l6AJDqO1(eJ;(ZqpiFSN-+qtt@6_HDM(sz-t2z z;C4t|lnI7zl@=xg~ubG@Vfm6WjrM=fMC5OF@|Br^aI zlK9q$goU04i>3GeUH0hCLlG_MPygac24|C#9|1sjP~^mZ)Z5%al3ytP>n8^$+$l>- z*F?eCd=%@4>gxJ)6};c(5Os?MwEk3#_zr?mCGw?H`xtY!J$7W`zT7$A`4vEYr1h=& zjFYJs14IDN_A__GZ&m_yBV;iS^kef%3v0_ysUt)^AeVY5Td>in0wxQr;Se1K5X4lX zwR7}c`r}bovoM6d0wQc^&X-KWykAobg9f1fzkdk=jgbB1jy)um>!ynEP~GMAXB)hPGw%53A){4DOd@tIr-sY};3!EeT&q#c!6Z+HRH0>S^=RWhyeCFx42U_}9 zAwyS~kcW$bFtp0{M%!m$T>W&iNcsdunpBz*7T7pmG;Wr6ZFNq`+g=U>P+45ogb4t~ zEv>GJ0F0GHNk@9q9lQ$d2T7|mAVZ|15sX3{bx?NR`D~S*R^)!kfv7afuXSEtE9%}* z3IuF5b(=FYGV`W>RZ*ZrdF8iNDRjBs&IKLyH6Pj7+LiI|`H zU%4Z4fDsYQ;Y~k0O1_*g8bEt?DRkSujpj*bc{4C{1{M@gUL5q_Di~aME$I>)YR;1A9=)7Jw_+dEU*7C-eDpBLQBrE=yUlKCkKWIIwxnV_6uB zQZzBrxT(wjwDaa}`&_)&L!nAbD=kBMWh?jXl`NGEuvZ|HP%Ao@F}}-Q439rr(CNra z!(bwVf(^YlX*f*?xDqj1R#906A@T;ikn%UL*x_5;NO9LAgJao-!Ygo)};)o(;!yPy4mD+}P_#D>Wkx_dOoBztsMgyG%-r}V|PmQERb!<8&nm9TXpm(k|x-clh$+8z*$juH+ zh@Sq;En`Lqbu{d_)%#g#)+km>6wIT`0%^Y*h?Jof$7RqOPPei7q2{&@aPk3w*KXK^ zGdXE)fM^j4Td}S_YwP0R7F&NKX$k-|J@#Z`MYo2I4WW)2Mt*F4h8=M6g|aZ*4V3?Z zNx+$Gk_U8q@;@RbBDb0VM;84K;rS6>O7)2vF?|nc;dZ}ORuq-}wbNrt zPN4IP4Fv&&$l_SqK*o3g?is#}VYRWEYk$1a%wbGrNy5J!PJ*SV?y7L0a}h-vOW!oA zemw1TJ$Sk-U^b~i{7riANI5vn1mw|#$hCttKtET~kztFE$9;I+Vk<oiXt>Y9LUywRvQmM;1Mzh7 z%BoN-XGce!PJ67L@zzQqo+=0ydKj`8i&iy#weHnbSg)HwRjq1-|JfxW1jN^156uQn zdLBf@%i5_Zq5W;x-Z7!(Q;j>j80cM0#^t%wOyeQY0C5L;^2z|S7hQ70(JZpv_3u0Y zIVQpN^vMEVd!dHINJ(_J9kjii7^Am*siwJz_;1ZICc&C2B^GW0?G z18m@qm(ZH*D>-;u{1`>|p14(NUH z8bcOqsPwm5FXrw`z##W+X4qA|g`=c0K(J9z80_H~UYRLYR1uO_1&|OfhN$78j}%;O zl+bgcU_h^+t?zp7P%vRmAdzj>SQNF^v10L!1*Z}tTK}oX)6lCij7}zD!J6kcP46o% zN7NCU;{k<{OEB2l#9Q1^)tigPZa?ZzEDXh;NPx=XTKqOsB&%SGR2t)0)j&BTKGUjD z*)=A{&e=uCeuoo!i7pOVb=L|P!w&R#`RvIxKe)nC+3Doa{*+=ZS&IZE_|I_yKV8RM zDI)-V^e6>n3Mo8E!xQz;S_A5st=yhSsRYLG|gwMQE5D3CfHUG=vhb}B{PjE+Orf|2h` zcJW28FGA=O+&9u?gg0sB>2ZUN$e^lt%_f6ogjrteDwY}^E*)St$Q-dppY&g7Ai0o- z0^S5AiqaQWXZoc&@=Z}Y3E)nmuIDPh@hBi&{8SE(EI}KLoBT4oS;R@?_xLE9bo}Z$2-y{qI z{8E{CWBy5#2D`~BCG6%_0erl~CjfqaM>uwM?J~yByySU@?uYvtLHC#^?&MUZTKwx!#H-ud$R1rzVPvu80R?*gid{`( z&b!sevvoCgn$=@tS;iA9qvdxhKnOqDIAFoZlyr^X1A=HGYzKWmYj6L=<8=5uN}g3w zxMuxq5Dnse_O!R*oy?woe(y>OW3~kKpuFNu8NMAQagAOij%rRIQ5_Z2U!nTmD0#39FZzyt2#(8JyyM_ggm4hRcs1 zQF2;Kw^A7>W8d1O4etOt8!XCc7_2v6-|X&cEBS_!KfzFKXJbbqep?zM%9^1GfWw4q zHkKAM4zB?3AqOkfU0i&)4QH<`dDtt(kULE)nIcXnJ3dHDB_+{uITh_bZ{s#6`Oo3@ zzBl(I5#&j_a79=-w0jd<8<1nY`~OFo+(^4Z_iJAp@s^sbq}|W4z=_vzhm_>jkFayj zKnXe$bb4RIu}`#!@&^lDb?5flgkHe$N2j;B-E86q=kRCV-Z%mLI@Zb}`LSU|g+Usb zwt|Lg{X)abK28Yx?QN&lOTXusGTp}J5z*c*{AB0iEPjCnn6!kT5OpjrsK5>z=v}!V zA=HQ_o`CFjYyq&Jsk+T;SPjtg4aPcf-f;MPK)CvuD2h&Oe$*-0*0ZFDmVrH#ET#n= z`IE#%9e3Z|`1xgJ=gSEEBfn!ol!(LTV;ZGba%v_aKE>6dZWi>fq>k3fVOE1l9(vh^h6Q$tRP3!LlpE158r0L>i` zrzjO0{k%Qv4zHN@`8CZBx7;9DjX<)}bLp=_od7d&ER4zEc0rMhA053B^6d@%7bIC$ zDuulzu z%*?f%MthFh0Qu3(brdVmvV*kWeHlt5^QV%a?CDi39~ofki46rfD0vht<|kLx z?Vf)Dh@A$zw<@*eFNW@|s}GG31M*up;bw>ItDLlvqbjj>4VH|IO#Po*cYuFOU8)1< zDDIvu_{kd4l>AB{WL`pse3cH1hi-rb+a+hyK15`0B3;#1n{ve;f?L)Uq@}< z&7@mD^&<2KheW-pF@U=MY?q$hRuddu0lCTS9D`pLoe-3Y>_`&q;|_}19`V8)E%*QepvF`Y>n zx{uQzDN7Sk1FL`@t5HDwg%9Irk`X*fOn}>O`UnyO1!Ek|(2B@f<^l1AUyz?~-m0PU zC6?+e!Aymq!c8nYHn&0m>~s=0yvqU40yk@bS;F(&&sj$o8L z-Y-u{eJ7u43!^odw>wr(0J@{5f=ykOwY$2$J>nnq-e0KqKSfqD-Oh6XmfzFaVFkd{ z6VZQAvy@sTJ@wt%Hjjy&=MteApF^V#-1se3UZ zXO;FQ7i_kU7WQ6>`|?8a&4h7Ou5CKl-4Ed6WR$VyA9rKsHltKTUWJBMpGO z0fR4WJWz0YHsLL*`J!FH95N07)Z@1dsWlGW@HZCLj+uJ=hAn8pMpCsOI*Z!!)t7|n$$IU{p!sTXK-IgU(i_`){rVqp zyP%y=R=GJg;%!3okSHhmg9EW^3(}8?|CbB@d_GI}z>psSh?;-CaEb_6-{VGA ztY#;OSG2UK!gDJCGR+JZWEV}<)#|BPE*%r$GksJN!;=A8$+CET43q|E^WwKrDK}jW z!qR}sUQ^U5E4lSBnDxQQ!`M9b6ku|9zL@Uz!-!GyAK`^bo=yDkGkz%Ix^+)YId8A8 zGK?9pv6UVu)dg)3^(t}80~xd!h|bT`y{UL+2!KY~yZh_`Z^|vn$sIMZ4bjB{7)WmJ zE$*Jt1H(*0zWlk(%{DjF6H*EHLA)Z4PIaE=VGr%XdLVH5;>~6}YWoC$0!GvtOR695 zqiF)-BZVwQpalOQvxyEKEKZ45xDm(@!wc$=u_x`+Cncu%m7$AA!6}s;>)zbD%w?md z8Zir-!WW9f*&(|f9&R8PSjy%hl~$>V8779$hPSkAE#b!W@ZDd7>Jw}w^p0{VW( zkpx&-r9UH0dRL}yyBdW1T&U6ccH(i

_dh{V;6f4zR!^&Dm7>r0m!6nO<%k3)b0R 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 K7D&8&|Nj8<_iAqd literal 0 HcmV?d00001