From 7a9eecff2f02017465e405a20cb0ab9dff81b908 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Fri, 15 Aug 2025 15:04:45 +0200 Subject: [PATCH] initial commit --- README.md | 110 +++++ icon.png | Bin 0 -> 13006 bytes murmur.png | Bin 0 -> 133957 bytes murmur.py | 1190 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 1300 insertions(+) create mode 100644 README.md create mode 100644 icon.png create mode 100644 murmur.png create mode 100644 murmur.py diff --git a/README.md b/README.md new file mode 100644 index 0000000..d2f5a26 --- /dev/null +++ b/README.md @@ -0,0 +1,110 @@ +# MurMur — Audio Bridge / Transcribe / Translate + +**MurMur** is a lightweight desktop app that **routes**, **transcribes**, **translates**, and **records** system audio in real time — all locally. + +- **ASR (Automatic Speech Recognition) engine:** [`faster-whisper`](https://github.com/SYSTRAN/faster-whisper) driven by a local Whisper model for fast, memory-efficient transcription. +- **Live client:** “nearly-live” Whisper pipeline for continuous updates. +- **Translation:** uses Whisper’s built-in `translate=True` path (**to English**) +- **Audio bridge:** pick input/output devices, loop back desktop audio, add **virtual gain**, and capture to MP3 (via `ffmpeg`). +- **Bonus use-case:** route desktop audio into **Shazam for Mac** for highly reliable song ID (no mic/room noise). + +![MurMur](murmur.png) + + +> **Note:** Earlier builds experimented with NLLB and SeamlessM4T for wider language translation; **current MurMur does _not_ use these**. Whisper **does** transcribe and translate nearly any language, but can only translate **to** English. In case you want to use other transcription or translation software (non-realtime), the recording-feature was implemented. + +--- + +## Features + +- **Two-pane UI:** Live transcript + optional live English translation. +- **Source language:** Auto-detect (Whisper) or manually set. +- **Audio routing:** Low-latency loopback with adjustable **virtual gain**. +- **Recording:** One-click capture to MP3. + +--- +## Requirements + +- **Python** 3.9+ +- **ffmpeg** on PATH (for MP3 export) — installable via Homebrew. +- **Virtual audio sink** (macOS) — install **one** of: + - **BlackHole** (open-source, zero-latency loopback). + - **Background Music** (adds a virtual device + per-app volume). + - **Soundflower** (classic virtual device). + - **Loopback** (commercial, flexible routing UI). + +These create a virtual output/input so one app’s audio can be captured by another (e.g., system output → MurMur input). + +--- + +## Install + +Create a venv and install dependencies: + +```bash +python -m venv .venv && source .venv/bin/activate +python -m pip install --upgrade pip +pip install pywebview sounddevice huggingface_hub torch whisper-live numpy +``` + +- **[Pywebview](https://pywebview.flowrl.com/)**: lightweight native window hosting HTML/JS. ([GitHub](https://github.com/r0x0r/pywebview) +- **[python-sounddevice](https://python-sounddevice.readthedocs.io/)**: PortAudio bindings for low-latency I/O. + + +--- + +## Quick Start + +1. Install and select a **virtual device** (e.g., set system output to **BlackHole 2ch**). [existential.audio](https://existential.audio/blackhole/) +2. Run the app: + ```bash + python audiobridge-gui.py + ``` +3. In **Devices**: + - **Input** → the virtual device (captures desktop audio), or your mic. + - **Output** → your speakers/headphones (or another virtual sink or no output at all). +4. Click **Transcribe** → live captions appear; toggle **Translate** to get **English** translation output via Whisper. +5. Use the **Gain** slider for loopback level. +6. Tap the square **Record** button to capture a timestamped **MP3** (requires `ffmpeg`). + +**Tip — [Shazam](https://apps.apple.com/ch/app/shazam-musikerkennung/id897118787) workflow:** set **system output = [BlackHole](https://existential.audio/blackhole/)**, **MurMur input = [BlackHole](https://existential.audio/blackhole/)**, then run **[Shazam for Mac](https://apps.apple.com/ch/app/shazam-musikerkennung/id897118787)** to ID what’s playing on your desktop with no ambient noise. + +--- + +## Engines & Model Notes + +- **Transcription:** [`faster-whisper`](https://github.com/SYSTRAN/faster-whisper) — Whisper reimplementation using CTranslate2 for speed and lower memory usage. You can swap model sizes (e.g., small/base/large-v3) as needed. [GitHub](https://github.com/SYSTRAN/faster-whisper) [Hugging Face](https://huggingface.co/Systran/faster-whisper-large-v3) +- **Live pipeline:** WhisperLive-style continuous client for “near-real-time” updates. [GitHub](https://github.com/collabora/WhisperLive) + + +--- + +## Packaging (optional) + +- macOS bundles can be built with **PyInstaller** (not included here). +- Include the provided **1024×1024 icon** and ensure `ffmpeg` is present on target systems (or ship a static build). + + +--- + +## Troubleshooting + +- **No audio into MurMur:** ensure the **virtual device** is selected as both **system output** and **MurMur input**. For some drivers, restarting CoreAudio can help after install. +- **`sounddevice` errors:** ensure PortAudio is available/installed correctly. +- **Recording fails:** confirm `ffmpeg` is installed and on PATH. + + +--- + +## Privacy + +All processing runs **locally**. Audio never leaves your machine unless you route it to cloud software yourself. + +--- + +## Acknowledgements + +- **[faster-whisper](https://github.com/SYSTRAN/faster-whisper)** by SYSTRAN. +- **[WhisperLive](https://github.com/collabora/WhisperLive)** (real-time pipeline inspiration). +- **[Pywebview](https://pywebview.flowrl.com/)** and **[python-sounddevice](https://python-sounddevice.readthedocs.io/)** communities. +- **[BlackHole](https://existential.audio/blackhole/)**, **[Background Music](https://github.com/kyleneideck/BackgroundMusic)**, **[Soundflower](https://rogueamoeba.com/freebies/soundflower/)**, **[Loopback](https://rogueamoeba.com/loopback/)** for virtual audio devices. \ No newline at end of file diff --git a/icon.png b/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3dafa224bd14934b4466d13d9b440c1c2e29f2fe GIT binary patch literal 13006 zcmch7`9D^qaa2uYTRTM^1KNu`LPO(ltx%5rVl5|t!{Nh(s2$dVXo zQP#9j#0aI5CHoTJd4GQS{sG_D>w90Xd(Lz3bI-ZwJllEBbDnsXqm2+vjs^ficD7c| z07O1W1R{Z7C9O6p;#W#6dlzdPe|tW-w6p{Wknb%0_%o`eq50@tUlu3FgYEUo(o~F( zMou_8ZUgLl#{vEW)!%kkAb_Cwe>VadH)H^qU}v@7CHTuwro*vLTd{Ko$3^6l_77d( zNx9j$m9gnj;W^@0>S@EXsSzD-k5dm_S$6?(y3{A*KeW(!JGbMLz?(bjCm-jZ>9%Mb zvYPU~qx5Y1p8I}_e+4&CmPIrEKNJdfKidnPj;lHylY9F6M@v@j!u!aYss5(-$v1o# zGm=EUFSeYUb?Py6{G~7(p7-hDmQ#N6gVx14HLiyhM5nh$nS^wDdRB&pZ0tC4m@pq3 z{s^VysiW#Ko&`q45Bj1**XP@J2%x_XptnQ+U5x?aheqPtB+LJ*&815Nhc{xOlp@Ab zG`@NcS+k70dExRJ4PL1h@vY;M-tR2D9S66brG4*&^VUlh$%KDgdxt)n2?b+2SH6W7 zYLP+KJ`S_&tVwh>+Y5AKSjkN8Xf{VqHWU7pZ!~{9?`;Dl%K0N5WT0$r&24!IV*;_p>iSVq+wx2R5@L0(K(4%A8F(j9L zNEUD;n>d?cRGm;#Zs`43*!<#t$hiCbiYsmj{Lvt|r7UO7w{m~dJS5YxBX7C3hHyjF zKbv6w7T)C0Pxv8W2v@PVIS~pC@b5>(u1hh6@YUe&Mhs3vToQNSoeDfjh&WvO2Ju5i zbqGEV!X3dYbcAptQ+6hJsl#~hb+}bDLT)sS70j;14VdG7{=Ckneb>DCou>gxP81Iq=k7$gwl1u^(%!x z8YVBEbNN8gYhlc|g9HU-6SGgGnF1zSXw?Jc@=Mj;k17}w%!O0_fNBEtF2@7EO%-6t z#>gAT6czSuSuF+((? znFyL@L(E5G%wRi@h5$xm2w<4#Xt78th5u$V%|x`F%r@#eqsl!C7NXNX6qsT-KALzE z$4|YfmOu;?@fEC-LL6Ocl`nLV&38r^AiOr$USX~gmjuW>SI(EPZ!PxY+)RT55_r&C zdB%m5Z~_1{0=M7ZNNtS|Y@t;VKK461n?&!IGLngCzJ3=R+(M zUi2~NL90*^KT@}U1pOeep{4}#;f6Em?MaYBo+Ca8?hoGH$E5L#J+JFF8KTiK>=y-5z9{1ZjzCH#x|?sR zDf}A%)8I2GRfrq+I^ww^u3Z;H!1OwlAY!Br#!r)gi!lE88Ey~3@g~501Nx#WayXXx zGTO6*pf9GT076iVur=)0!l`IaLpTaWWPI9~*d)CMpHN{4qzG{-{Dp;~wj96~vHfe5 z@`&9F=8Uk|FF4eD>bghS730|gk=O>45mDeCw_}I!z+pKc{xuN>QBO%+UE#Il&SDPrVUyF zQx?Z-{rTczpK=0xhCfX}&5&fsady`2a-inx5;ZGu0QPm^Fle!*BGANmO; zfSG_XFeUKptGmL8a1-(dJbO@lNP_u{CLzq#YF!0!Cm~c2auAj>V1{r@75G|{DFapn zW|brn9vlHaC6_}z8Jjw*3Y^=1fEmFwFe^kj`<2C{N!Y8W=dEhYY$d?5t%te1l9EE? z&h)Iv#04M)upi&2&nx(o0fj+x!^O*EV!cchUyCx%dyL%~WadvkhLkGN`>Ww#&qI$f zKU_-yUj-jTA?V-YJr0#PK4ZK%lskfMiVVb_9l@`Uo*f$rN3jE;{sK@+Sq_F;n@7v5DK<281UDhrdv0-$T3nP3F_)Vv`>yUJ3u)Q?c?Fm_^hUUk+b2|9A5B zVNc$#vEM&F&rJ=BSPPq&gBTii&Qu|6abeQV^HcTwmNkK4O*W9H3W;~kYLg>FZ|J{9 zE+Cv&B2h|$VxtF7HefvjEEHiSzjU6d3COUv0oGplP~N(%XWH~`bWF7wkM$k-FxIYu zDEt(ys}-PP#Y(hvZg`*$&k)7WI1w{L;~kbNYXUY;un~%jTj5mb`^mEAu;3Yh(rl{l zIuG}LH*CiY;btsRgoazY`P@jxnu&JvN+9gLVrIzbN5O){UFj1v5I}I}Os8FDk%={i zPSL`O_{*Y>k01N4Ci<_O%B~6Z6uwAymkJmK9VJT3#4 z_oLUZpnv}1CG=R9Z0e(gDgqv5CU?hU{O4*gSrAl-tg@^k!RehZ?my%U6dkka-Y*J8 zk1qTtJZ(AvPjoLK@EK02GB|6r@_e3P+*)CGL_OSda# z@>3%N#Tz}a$Md<%fpQ;EIf}*Icp1K~{3p5f&lGUS z9&GfZ;VZ+#uPTLWn*!XJCJ6j|mvo+7G$#xG0o)V5y*0s)kNlm!@8o)j-+Z{%S@0kC zKCe18;u@KKivoDp$K}sP!`j!(o_&IJ43ZGM?_J8nvES?J7j31%oxqyfcr!v4zcJ%B zNCe#LN++EX7};q&K!Ln{>%PeSeKR`Ul{^95f08BY8W9KDDHwlota*6(ow_5L-uUio zJv{!|=%>ek#^1F`hz`;*ykHMJmImRk5L@)?cOx-}f_V(IT19m7Rc~Z>Up<-?wCTxo z%qnnsH2g;ftFgR(Km1vHHenLDSC@^|Cm=86m-M^qVfk6U(2wlnGJ`tX-4lnu9BkgE z#5X3^owc2Rg_vIqW`dsyegM#uTYorgY+^Bpz4}(cQ?c3qkX_tL+Ie9)%C{X{jydDRGF$3yNMPZ?=mwWFc3UjTlXe$=$a@~~g z3jA=p167u3(30@_nxzr}yRsU2S{nI$LA=}Hy(}9>f5h{GW@VWJ`aXJ{mxaf)k45Zf1eqlw`v2H`fnUqHQOQ`>X4;~WrS#V(Y}_-m6ilwOL`-LgMj42 zX5CKiou45!Kb1HsZqMC&C`D8B;G=(v1m)9pPaEtJSWCor_edMA`Z|)bnqF?r0GFqZ z4SL9Gr}L)22nhGcr+?Mz?0pK--A2@>M*)JZgNhogQpOVQo;pWo6$$Cza6q_I#TSwD z$6~d~nDg?fyTCsEb(a=W_61I_*>FHPui|VZ!1c3uYdW%F8(4X3w};a0kC8Ic5t)++x8-ug zE2B{yKs z_AWXpybf29Wg31Z^LI%Ey2150zPEji*{8;x(qK0K!&-0_9X@SZf9I?`=FVHaJhR%X zd2eJ>52oEwu(b$P=Sjh=vPnx>iUqhnRn$7{x*Rb!M&2*%XgeKNkS_pFve4mFcg^o& zt^R&hm^`Oqn!kljcf-u~Nc;<*YQA&#xVm6nP3_)Z$27&#PA}P;4KYWxAKZULiP*m^ zCRu$4^J{}^PKpVV7jHLm9?-z z{(Tt@peb^HI0g|I`Q^}KRtdz9dTAPvaBkz3>*5dl(G^6R_&`=<3KSLlHBeV=_vU`P zbJ5VIVwLyjEK!uhgE%uqH(gGohgv;>Ik?jjq2LPy&XB{hh&C!qVLAEUnclWYFO*qE zW=(x#mx{ApPN4m}@rxJD_EVv698&ji4K-pSZ?5+cTdo3fZL~XH&}Ou7J&QEzG_T$s|J_4`W%7b>D9h)AaW5(c=j7Ly&@t8^TE7x&HQoyp{D!3LD)`$(HJn8MCeM6Y z291SI`)l6oC1_%-s#pW-ju)v26Z#8E1oXF>A#Ix0d3E)^Z>MIdfCAphYI}V8O>3lG$Ko-_q%d(`KB|OYY zBJhWiN7eO$x6xAPj)^eA{ty}}`1JC1TKNbAP97xu%0$Gskg@Ni5D_YLCV8#(9IJoT zcTJok^CcW*YRcYUt<+)cmb2WPc;}7|9Z4}(xHp8b=T2%y;Q5crG~j&wbM!hH7uR=q z_N?NcCIqwxz0ourk_k`xq`Yd)Pc{Qg8@4-;Iwqif6Z@@fx_wi%8ItnUL+&`-_o#c> zP;z|Pe{HT2n7@Wv69Iy-gF(AW?xxaAzFy+<`bmwjL^JNyQ^}vIp{sPsdjUXL5&{a+ z!%L3JK*VlZa@_7GQShY#yPMUdi^53J#%uU_fZQLcqqaEnE?D3}Eh zDJzorUbUs?pPEh$I7xt8D>4NM<5VhWKW}vnTDr0guN@!PtA%o9lGedw=!g)mE!nh1 z6`jalYU(PWBhuHiKl8Psl^|?+iWLzH{FL}*u^&+~E4q3c5zZncQMJ2TV)Z8Ns_M9$Qb>j7r zjXgoePOx)VqCIpZBfD2D)||y<9&ec+M?WVj0w=L?5Qn?5Da*3Ow`-xb2= zk6XU1Vj`I!1t53+iKQ)$H%;v}LG3>$c12sh3d`V!f zBv04vSZSHk`ibo``)CCDN3Lco0-$8dG8Da!Fx(*kl`mFGG{^Hj+AN;F9|_M~hnN>b zldHFE-k0<&=HvGxQk>uW_P{BApX}1U5Fl5gMTtX{d+LxK^G|P0UKVsjisfa%iSJxh zwg$?X{}kf)f^X_VAvXj<|9NtG7W2HvACslR4F?KqzlF!uoFn4-L5W$<^|r6YVxmV3 zL|P?<@LwTsdwnvF+F!rGM?XtzZ3(_1)Zru8T{Rb!h_tg6X|V1G+BxYvNGiL2O1 z&eiOiqPPx^+wB&*<0>>2`&agFl$R}}KSb_lKP`@Q@T5$O!$L(cacKMJus_0UP|Uqd z%H>+5Ag?5ihWyJn4C_6bLqIv3X&t4avDv-nmnzc90ZKbtW?M({mbcyOQr`%ah6JtY zGD5-Psc(xlcai2osR%SBb}sbFPAfGySi*2l2)CSPWEmv`AJfeUS zu>*>`K8LUB%hp z*gG>>UEx7`IM`mr@6+d+>(^h^mJ+mjGpGIT!u?kti_8Brznd+VwwcZARYK!H@)Vu8 z?CPOE^$t`K><66*M%hcAX;VD{@3M$^|A!tQDf{hY3Op6XOUKL)GQTQ#E4Ma1NqDi} z9Z*i=++K&E<0@ftBZBKKI9ErD$D+2N>@B~Ye2y$_``07iycm-!yz2MS1zrYpG|v^5 z{u9u}ubRv|F-1(8r7rkwnFRuh1@7uva@^_s_gX}@r>>xld|4VxraWe#`-_AJsyxb* zY>zz6NLl<5n@YKNL@ch!kdcf=sF!hiw;Uh(d-+>-^1i(wOg}o!_l5Hu;qG zW|z_^cO1C;46Zpc#a-xa?t;^9>v!*Q3|B0lv9pQi?Tkn)uuZ)^NkWP&Z={J68K6ut zG4_g3O*aoSy`%CXVO2jt$u5K|ebYbn8Mou=?>38EZ@EiMl$nGLUoHK#C+ArBiX$== zmx&0|jEmIAS$#NGw8+NQyaqCB%Tx$OH)|Gy#kQ?zVgNHY2$pPHzA$Vhg_&)^k?YC*XGlVa>VJ41uX-^>5!1o!;g@V!i6QD1gj!4qJh* zgXmDd`xj>eqKyT!W!OA;!!}Aggng|?f1OAWg*!W(zSA7vBBOY!W{1ED&$Ww+S|VbQ z)JnRMMqq1DQCy@RVH2@`&1@G1k`{r%Nve)M%$U{}n|~=n#s6GA_psmwvh|`$2$gGL zAsg*+(+y?MgMzm>@9IVGA=S@L^ef-0JVzS|!zfbpM|~A?OU(JafL)Ww?73sux|0s@ zfg!9^pho!k7sk6)N*bHVTnk?9a{&qWSF4bsf9g&(q)J`bJX2|0yS*+5VF$ALApAbZCGa4SUY@|M&dhtLl9;QJU~>pTjZ; zD^Vb2_>Ezw_$4B8&{gZpN2(14uUv^g|6Qg=nHf5hN1Wtjr7+OxBeNSrBV%$z+?)sunEQxj8m+WBKQ*K8>?y@( zsR_c`n3#Tzuev0=NH8YW<#x%V93^6-NslH4mk)L#D$Bmxzd`@+X80gRkXd`?rpQd( zkGfKJ8BY*lH5iQZ)^8ChSWKMMW0`vEB1H|maCj@U*H`wHzaQHkhWzOGmWV$LN8tgt zm5Uuul;Qvrg>j{(kP59YBZ_u98{=Fye0mQ=e4Pj+#RgvLeBK)RNJ%2Tgo4ZMXkg7r zrlDVVo@Ox9aw+&)VPvBK_j%ivNL*874#zB}Hi2)r>{FwDl#GZ9qq?&WTivck@wEok z-x0p?orT^=ybz~hG5NI6RwlxcWg85g-T!P4_;a&|w`d=jT$j?-N2C+mH zWp_4o?Y!`+PJNo_&inA*f-XeCGaHf3p_s)oF_W_)H11B6gEVkDg|>9C6TT6wwM((9^I{xedd@MJFp_V~8%XMX9dI~w60 z^)?`f8~ELz<| z6n-R2AtDT%l6Y6FU?Pk!0sYbkx=w>duUabRfrFvg#s$1*6mg9nY( zS6Se|Lf8XkN7C6QO1g)Pp@yefN1sZ(+ea15UypLGX1zm%umIxfF#3y+?)Z_APl5c+ zwPpPBm&Pdfo443XURb5it%(h)k(nP~7HwE^iX-M0T>B^=8+AGYkd#BM)`da8F0A_4 z`_+lR-}<|bZ`8`;Q)<#3;u#1BxUcg6w@&`^Ut-sd(5zK+w@Y)hkMQWi%dct zxAFb`RNZrZy$U)D<1?xL7X=F^vz(vY6IFo{g!LEA;wUksLoc5@K6Y~JwD_Rz7zLk0 zOq^#t9tkq`8mK)}2}itS5f%YQZ`d+Vt1^oY9zS>y841hZJ4 zzn0RU+Ck=~J^NxC`WCx>9=#!~WQ_!+M*Z-(<9SzK%>44tCQhJ?<{?7wft!pf@d4x) zBf4?@)-sL+h*glGY;L>R7sFIoR`VH~U zwL7l%m0OMU!(juX7GLpT*o9Uoty0I4mK&C|4xzdFZg5dwmW!JExQh{NTAZ z!b(kkdRZfK%{j8VsNE|P+n6scL5ENnLd%UW4KiPq*2x@duw%4QfcD*Zu1)7Xwb}w2 z#l{pmJT_g@Z#Z(Fj1^c(F;BOtTQKWx_mQA6;Hf^6LL-dbT6gfw#;R?S3m+~wV`UU2 zxe}eV78gk!PgJlbwEy6~gTZ`q`KGv_uLd*CQI0J1XL!epbnMoc+8)Z?lDpD4Jd`gS zyS##+dCaV4^NlD;LFA7rf=$0WKmJ9wmXE|_VmqiE0*m~0A=H|yaA0JD zSo^H5yzf?zLJUhRj8Zz#PQ(-w`0<{Le%oZS>0t9>xVLS+eAuWq!anb>PZuYZ>4=5f>Gb?V7aXAvOOc2GC$Cf(Gva^gXspBK_l*^(?p`Aw$ zd7I>D2`|c=m$;-L|0bLtBlv4%(<1)D)Z36z{pYdJ7W%{D&R2W3_dWc%@#I#616?)w zOWQ+@v~{A~tR--~p!Y7iw%pRlH%g3m*qeZES6SYsV;FXCWq7ai6G?n@&H4&y2v*aQ ze<)5dN*8BsXd)%KBfLBc*T_dvoV|hWqv$v_!6* za$8jfdbYkty9PCU3C(0l_xbWX8u!U|tiAAkU{xBm)sJVyJKIS0=O0y)m_uLAii53& z&+dK^a%9T^y~>E^keG4M31L!*E5jOMyOa9MsjS+|$eo-;@_jZJ$i+n^oETNq=sGS=u%}*B%P9mq@j0>-9q?+vVk#3R%De7pL5EZvV)|%!i zq%7}EzIM(!{wBngA;JupN_l!?+2xIQ-JbdAYr!{l?%AroA&H8HHC-FvL$ab934ck3 zC&CRRcNOpbbou#?7kKUcqQU)M@mr=PK#A)AQ%^NtjGu5Iw(h@N0E8iwqJl(fC>+e1 zgzT9$4_82M=f=W|sPd9M{7uxVLnw286htab)bC z#T`3OeVdRqlX60a`WQl~ma01%+YQW8c>lhpTh)uVqlU^%fy5)UxRe7p>*h$Ayl15J)(?;*KWZ)@irni0Pz|PWDrt zvDQ1+2(AkaUZUql>7pC|O-@RR0yRLVf8w!YiapnRmSwO5v_5sbuOL7tb5XvG&27RwJDSS?(ey#j8QS(=u~6IwSMyuiGS zXcU!-1z+NNhhL=j6SY9Q?!mQ#Ml;$cTgcuvMk$9=*6GjP2YqXVXDn|^_Sk#s&&K>` zHo$dk8_s#*-w|<=#yz?7by?ffpFefX71z+e#Afpjsch>UZN2MgjWEZM5Y<{&8;~2# z%n)T7a)e~w3cA3Ksh;dJXbL-mhkjDIY^-Q+=+yMD^F_GEMYQPI$7#pE#tRPkrVDEk z0gBt_Z?(4~0wQSK4K`WQaHuCx|Am1jGdxtKwQq>Gj+Gf5fJ)#MCS7p86eo8*tD&|w zx|P{BkBE&~NozB{(72a^Ead*3I{9yP#U{&<)@QEOybYeMEVsr+1>M=nVXpFs>fXA| ztV}}*X!Ms)S`16*Fkc*-Z5Ygc_mxcK9yEx2_vK|oX#1A1*Te*rO+fF~-8%Nk?55fQ z$hf7<+Z!sI^eKYd`(ssYkjL#~rp(F%d+RvTaFqd4jY~Y5+I*q13cb3mfv?X<={?Ly(J*F#QP@(p@z36y zKcuGW>=(iI{a2t})1Q0rQ+GkM?Pg!h>0fB}qRYq&$?am&K2*Ml`Y)rqw09%?U5T5Z3g=_ za0Z*}zl;{$^NW?j7k_2kY?3lC$Z>}6k%Ok{z;3DeUGq_ZyMxs8zy-3l>_z2Xv<6k2 zNn>k&Rf4_OZ)0`NH$f+}kui!2Er@)Sufy}g-KyWND_7r0?IUuwQGgd?yXnUU-=d7! zNGki%Ej*tyhm1y@T)KD}|AF`%eMcPR#BpTnhSHg@qR6~{G3&3#0 zZSC?--$c)K22YAl?{j~$BST>;0n-J>tVgq1gj-0pSej-GI_j$??kV73cdSB%RWv(} z7{v+(>~>v=Fs1p&{o`S?`d@Rz;i-fJiT4K8x^F@SdQjMwv~jNLw2U5v{{3gOsitWS z`RF!+{Ykm&vbR8?R=g@$r8e+5{`;tf*N^f2sPd{ph#pFIHxo8INa*r?M@*MNj9Di* ze6sxVxecS8WRtGp)fzmfKoVXl>{F3+EX)Rtwejz1k-BPkAJyNpN1KG3>hUxNy9Jbl zomWGE6r{;V#1dEPKP&`up?7y{b{o6)I)XAg>F4cLD9a!4iG_dj&If8sYR;bim5XB8 zWCgiTn#uu2)mI83z5SuvryZ~xsP(iN$$&$-G+qwl8|Q3yLCQ0=!njapBAY9 z+}!IR`-o2jnA?C440t5(uPo~rjeYR&AqvUI@0RNuACsb)+a~`SA$=m?B`riQV?JrK z`PPzwNw52$aQqM`;D?_M@SGmpBwg>D+0@th=bbTm8fEDOKOA}PqA*2ujZjqhL0kYdlO)!f0eH7AAwLhKd+%^ z7G&W2>?FM=(lSH{*zdvcbM=6>&o)~J(7HwDZW6}rzL?5GPsg-n2*s+J$a@d2Zj|1D zD=7Ca;8+$W;G(ty+7c;JgxS5@H{_oO(LuhR6(CVc-?&NuWSFjo#tOE$DLg!Oi;VY^ z7%P!i7YW!!>J>Un&SKwS&_Oa|<4;#aGr20bo(@6DTWM5d3 zEm&D0!AaZEV+u|s`N5c@XWy=2a18$D#O8jS~q z&U$rhb2|Mp1>3*(Dn!4&y@kl(bNjh%ItKgpMVcV~(HHekLy7zj8u%tHi@qgF+>BRC zzzo@nQB6RR@&qM#i^Ts0eP?@kCA)tAS0uRM&6lBD5m|-XbirQsF>yw1|I+MtqVu^8 z14!#m(E7(b4!JRCYqBigL1Z?aOCVsISEPvJDhFWd=maSISVd^PLV)&suiO#b5Zq-E zXb7ZVFi^~jzYGEP@Z>T-=An+grd0+5GxMUhBO2lYacb)^{c1 zVlj4LXT&rGr%8P8Tbst)`CvESvW>y}%Wu97VJ_14A-u{Q;CuDQN4&{A+f$rqK5P%?AYA-5t&!2b|{-Ef(z~z=UMPo=rn}%e0{=>fYiUhSxN0pzaUP>g&Ge= zK*`BUDJ-3svRW}AUxoSL8=2!p^2qhWZbE$^Au=AXkk|CPW3a0l*29D~ifJKJssbE- zO5C2cafgh~p+#?nI0a-?=EnCu)U!8IAFi$l4t-p@-?x z@V(dI#?UvMeNl|$r5c>C5UkW9~W*l$`prt zUJ-pAh`uwzImFm6pR|k&@gL#wZ@r8$&N~9rP;c|`>wbx}MtA5w_uj9i~2eue5q zljOEbKY;ra1nOJV@`NN*04ooS#JP*2-|jiAOKrDiA~JiJtKh_5GQLVgg#`H(OfhJC zgr>YDF@tqF{K>Tv_?4YA+XyDKZ>tZ1dpwC5qLx>(0=X22@N{DTt){?rBC0~hAFFSs zgEHU0(O;fOu8%>O9b`(T@KFB>r2kX&IRRXgn6@08fwwY-M&K$>CY%dEd2z`!jWN_1 z;#<9@y)ThcTBtTvU@ivQ!ya!4{k6RtN8W8tKh@L^e7rX{ngBK?SV$IDi zWX`c+;h;sw@}NzZen|Se`)BVWEZ8CVh}d-z;Wb*i$A@eN5>U){FIHace`j?-018I> zsN5rjoo>%P&n2>;Y7U_t;0J?(pXt{E+fscchwR!z(RU^wpD)bf*H{qkC|EYdOd&G- z?Q?YC1`C8w`5I~^QHvr(Q@R?6yc1>jYFBGZ!Ob1)yj90PIv&9tPT(wXM6UtqDLI9V z+Z!|Ghn?kkF=UD$m%J9sm6XwM7iIXnfnjfIlC3V*jq$$ew!G* zL6G!pPj2$oZfSqDj0k@sE{NABI^WYHR3$mVZ33?` zgf*P#4epJHg21Ui79Ia>5XhYw(^G;exuUH@sAcn@mg`3;t`bD;6KC~5KE73x zz3n6Dx8tR}Ybh?@E|uq9W**x97&WKj>!+jb|0wAXX}Lbk01ZPVREm!88YbK$gl%ElVSG0<9#k$$g1Gs}?_*Nj z8Ugy-cpj>w;+H;(_^4J|3<*ah)rHnZhUMPNehn6MS+7UO}F4 zzPd@eL$G`K`K4lSNZ-c2zN-x6?siu?8k2}USsuZ%c|F={cqPJiKsJ}f9Q`r2DR}qG z?KpJ}_M=#9Ns5>Ge5Tz2zRNL7akj1E=Grpl_VX<&z{@KE@ZR?Q!+{<9U zoRj?XYF28?AM@tOd^Olhi_50m`L2z#1bjx&Z^shK{r<_<+VS(NRG5Q=a)eYKDU{~mZjSbfC&C48r#?C&ysA+|DonzHC;1v;L%JRr@ z`3>DWH^zift^F5lHep?RmYs6YC44{mDtsT&YL8^^9^_M*`OTbmwFZ(@y6k2*eBx1`!mjG7`0%UcTOlrI`DL+A3&mOir-Wj(p(&~#xb zZWB9hFzfH#bGz{yokx~*ma+cngf31dE?S6KC@5t09QuJO^=Qd7FD>1W()!m#Um6c$ zhwn>pGtuhuq=o%4?`(A;~A;I0ztMs%q2S-;UBO_m*05-Odii#>#RW+g_Vyzv0pCYfS zs%xKHISRUNpA9ul!pxed7qQ>8y>pP!aRvYg=>PrTWL4?T001h0ti%^}59qOhOOO+;G=CCA4NI-qi zFfsser&2xFW({hYqJc05kN)ehtr_EpGRq1jlhJeF0|2@h>-cQa8&YpRidnuz)B98E zb#*+SV(9-G2sWImk5UK$b#MSchkre_$1&d)eiP zN2eMjCGM6YW!Zb|f53s*k3n5tCfdYtLP}dyVLdMuc6}jx&qti(cY(|OUZJNMd2mVR-CD&nPW6!we8|dMszUPW}4}pS_qS@N6kgQ+m~b6rGAQbWvpTG zLLVkMjGY=wZBnWGnp(%v%J*;*bRs9 z-8Y=r8;xnDCIzixo|`Eds9Z2#upn@P9PV_kH+Ire)d?q~APWM_W-V_|aQpq6h;}m0 zxBS1MAH-~T%%**{e9X+j59xH}c9$Ppl~^FoZe)p1m6{3?g*Cuu&DZH^_0`z2g=uqN zdo#+rRyjS_csB#96z4cI`2rC3T!#`A+R5hw25~>c+1gOj!eF29y$8q6GOIw)@rUc>uSribRlWirjRTiFYd39PM}{!I3@^1L>|nyy(H-9!$I{eU zh}j@K;289>2r}%tGksPW&`aB(+9EgX<*nf4x9@_kDM4qhX2d+#|9b}h=70zrNase~ z4bo2=a;Ez<&JzRmuqo2eF(G}BYYH!wT^V5O$HN~ky;8m`qqehBtC?ERx;2U>i2`tz zez|>QZOg{NKn5LYKOFla%b*Ob2a$!`=&B~Z{-ja0$NM)9JNEvk>Z@vozJVBVMW#mF zq#IQv4Ab9cuZ&MK1217Q1|l6+y!0cHf<_}Xm=6a>Np2C4%kQockRodtFF%O3$t8Tj znBivuUAtaLP`FcuhaN`Hi#cmyR)M`0rk;efo7>P>u}Za)DU{*e4=q`*5gLMQulFUg z%DYbDWM7!tRaDHs%1MPE6lum%qt~p1q7w_|JmQQC$O*V$0unh0RqppGtgr^Zo|7E8 z9u6)qvv`y+ZTICb*M$u5ojO3Rx77%V>sqCP$%A1nS-L_^I|v08?uPo#C?2qaUjnEx zi67z_f7;|Sxb`W~VZFKG*jf?WfW2|RCJ^kL;Di7og?wlqm8Rax#Jk1SC?n#mzF_G- z-oVHyuPGW=Oe24rM7c=pc`r+)=Mj`7j#uxd-aAM035qzBFwF>H5Rc3wKPzklSir7X zeJbGh=Eg=`edF{)7YY}M04!Yo*mod|v#`tU1y+JG#FUVlnpx?mFTVfhhY&sC4(n-C zoyB_y#t^rRGEa#tntHqaW-W5MZ(khLamygRW1Ma*7E{404*D7fFZ?{&kG)Tnb^{ z%UK@vEy?bOyhqALyDd(qXH54V(N99MuN(y{gB0J=er9{tNe50RM=XAUE+o1s=u=22ERnH*qE{Bo_?@id zZ@MV{Q#YM-Y>Ks@F<$(yP?&KkBp%X3@#ch1su}i-CQTtMVvzIFr5Q1{6l~QXt4GYk z*ZkK!$3xLe(Mp37y&x+@n&K>`^kuQduY-B0Kd6dj+@rh>v7r<)h2Vz?bp8do6mL~~ z;ro%b{YbrYT06Z;$X7dd!nBO8BqNs$knqE=I|Vx{o5@O1k&8wvA>q+=VfiF%McF zSfpRlK(_eoHaCBi$>@T|KB30fH{niJ(Ze<;SNnJqr6j+mB3cehPE%|?Tt5SU7?0^= z##A?{CB_YnKT;cj$4sc3sYXX5^RLa$!_JBEf^`b&jP#=4>4A1V6*Alt3bTva<;_*Y z!mD;N`DGo65nO1WzMFU4#m<92#3-Dfz#C>f!gD+n1sD2J^GwmnE$zu3(iOr~1$_+p z`<5lwTV-3ZDVbw548AT6NcTRFM8w{_ty*k&{%)Bdpnm4OlfieHCcC8+lYPI01v6NGQ~LA!-RPb?lD+ z*?sSn)63K=?Uxl|9;UQByLo2dV4xWSN0#+2^-F+vwnNu*U}sed_wvuIb$Va(Jlkla z*fE?))ghH}f)^Pwt!6OffzolxFIYpqGSj}S*{LiZW5@727NL4VA_l+zYhIP&MYD6v zo2!)dgw5#Od!IGryO!)ywvTpNk5G^y!mi$QJnr>3MbwE0((T%q;@~uSZrVBLXi}C) zKAbI4`?UCV@yEI0EQqxD$CvwD9XZq4PlQ{b7-G{3Mh!zTJD(a+l>t?>Fd&-fps%;8 zBJQPtxqS+7hZ`N>L14Q(vvhZaIbk_7*oa_Q40)@G(+kx|)z<6)XHe&bXK>yWO1Wi{ zYEC(}$cpHCtBe=mf2Ak!zbAkS^sj0LqrW|--^yKp81!FT=B+yZzfS*uB`YBIt@8c9 z&i}~*Farpu`zuu6Sik>&e%EWpzyJRB{T{6=DIs3o^s9!ohqn4W7gJHlfX-}Uhg!ec zMn_EVm9aL{pyQr|-yQMf$PX>%UI)N%y8{6WJlJwRYUMw-O}8|Ru6~f)xI^q-R+JwKg)w}L41;r zb+kn--_a>L<)i1rpGGe}|7hmsRo0?s?SoR-`0Oz^5rk7NyC=bVw4;1jCzWeA_0l=2 zwv1NmIlQ6|J_?rsR#D;jkPJ&wZ{j_C2Q7KsAxwZtiNq4!Zsk@(1Lx*DPo+*&ab2So zZ#6aOwnP>YrYv7&-6`vo*h8)!VG37~A+?OSsJFX&rtQu}K8&Y9u!O6cDHhI3>QWX9 zk}0rmiDY}kvo0m?Q>UnJ*u&(@R*+BsA+rNT=#g3etF}-Ay`B?kFpK}|tL5pj+&N$t zbX(cuo5YV2)+?sELvU4fiuEe0)vsaH8FV-BqA&B_b2mjP24_a~Z^#rmTwC~;J&nNrAPRscBaSN$nDQH3o_efn&HdaEbm$Aj0c#sB zs2q!quIzPnRME^N^2RlU<;#$xke^6+3cYiu%66;s99Y6TZ<(8D@BZtzIV!T-t@iBj z7ESn;eWM9N0Y6eF=8o`*XmP;mG*8XsHLW*4_WRgdKDj3kHb5YXfJWl_iy}ow!wx49 zRuy}uOclsr+Ju<-*fGGVgmhT9|7BR)I9AMO+9$xZCI;X3f6}*+-9&4$QA9RpX)~WbwF&qr1lE|f zRVBeQ;o)54pYHW!6=6wq59ayb5?%UWSF`0G7mF(g7IXQ`LR{ggJAQ9A82#siu~kp; zrGesa`R+_BDC5*H7<6@tCHFv#X+@B8XMC=OsUpLJtAK|wYQJ*b!J%Z$4^=}U=vt)~0H{DFcn^rST z3c-V~O9()O4SMm?f`(49@S0MwSha^d7BqbXoblHXin}L;Z2HLl@6QtiYl&NsU`tF6 z@AwFBKUMrg7aUMJW@*Wwi*cj;dwXNs&)GlyHnTa@?P-DteF8jIzmwpR8M1JTe%DVqL666c*S>c~j6Bd0HS8{n-b?B* z3RPnTXueWsRlaIPqJ-&W9Bm7q2wJ{|h1f4`g;1 zYytZ&4-slXWbz=!tqPChd-tebu})2P0(6=)muBvj&_47REl5Te&JGdXyavyC0@GtC zM}wOFv$2}hjNrgPh_=~CF=6NgKrP{rBb&fcilX0!T&Obi$gemr2507h-(D=FCHJ*| zCwsQBtNfNw;tl@wL7p(EDLhFeLuCiKV~4)+PeB$3lQ})_q?m-qOaAtME@27+L1psy z7~LHGUnQ{>@5m!8M)?#OQ^V79HEF+3e0)R~ac*3xm`X-GHx91@YiZ>%ISo&*sb*WE zro~o|z6`?!&H0)1m~`Qst9lre7RqXNBeH%uGYT>4UFfFxX=KoVdG)cGv(b?M(!VES z&>@H`ur!9?uDfc}_cBDR&vjl|vZ|O_D~js)M&Gj!D*L`k3m=`cX1EhsI(F+)L+yO2 z^vs8P#Nat?7#G5o$xv+=Ad?v2{1|x=j<@BhMg0k+$EGP?dZ(PXh3ct$1^TORdHzun z>Q_1%VEcG*J1o+}^6~d(G>dT!N-0CL7+^)zw5gDBH5$uAWOUA(@P|TIq*Xv#6yvYk zAAJE$-nG!AVKDKNjap@*T+P{gqxylVoCvT1Ymg)wKt#v=?qid2K78+)tp-Cn*SDm` z;53@rcf(!Js0BuH=)EhP3>Y3BD67Cx>ZnZbW-wLMm~hIH8m`;^lrqe2trd$<)UAi6 zeV4tH5Kc?2_FK1M%rI@gJ<@;X|&HnNhb zgWu`9(Aiv}xe9Z|Xg{|L&-(O>%4r%eS8=wR9izMsBQw10X?jmna6!L5Zm518X!%Ji zU%BI05*s?S!o4Ef9P!gT|I@Yjl#I=xAz1u3{(I}y+AF0I=*;fqCN(-k1Qe@c6wj#B z`>SQoXRPU~!W!CH-(&Qli1p@Y${=GzA4^F)-13m zkK-L8)Qe7;2qVzWjDsLY^f9~;DL4L9Wnv;n6v>y|MeK8<_qygRruq8o zk`evRb~e9_ERm3CUmi6notaK>8J6~Al9}_RX zqWp2-Ezg0Rj}o@()m~WwPDuk_l^Nnq5xM+;lqwT<@HkTzqjLG4Jl(#pU%mj_*TF&p zXdSBuWrf*ilPE?Q)%OgUSu5WWh1F%X0t2S2|)?6oAj$bAa}J99r{}gwnSM zj_Pr{kb`zv=r8Z7jy{nCEwV}5ko?b5#ZQRph;}V?UYY?pJ(El#6up>9$M6#VQx63v zNmyEchl|~_pBT~5m3?DNideffC6=qdrZMBa=ZVZoYVUr*r#ns%@7U;*Z>I29RVhB9i}lFmxf7x!Ce~_6hA=`$}}tE4rWXz8|%76&wb4=dlGy z4zjmx`N9wagfbRL8~ypIR7^jr{kbH*&wehbM6)2@?yGt9GPR-T7%!L17x{=ey{G>g ziFL4myd6RJ5cvSW54Yh>#xdfh zQ1Hp)qhD+mjIxiTg+q?TTs0o!%T~tqDWpVu!3S35AY);jBZgJ10fL&mCLb zRt;vgLl=+bsmER-iB}023@Gf9pO*B#(vHH-}upXeFz)m!WV7J*eg7DRRr{hld zS|&eoBO&bguikI$JybWvTLntf&f6?p$bk4)&`l zG{_Qd6vflyq)L8uuH+Z^3}eWE2!+IXq`8WJ1Z^yL>SFhzfH~92cHQ9YQ?)pfSSF`-b{d{&*&$anu(WBFOzkjXgQqrxJ?9spEO9o%)OZGkJBB|K94SPb9Jux;%>%52n#IS zVgLPs^WJ>=bZ3e8Mfn@dQW$O^L+5WGQ*Vh4;}O7nv$QgoRxCJI7Vfdxl(MZ}qDP8KDkz3B?L*%w6uW1d8e6K8J*a zrf!#BX3z|=cn6C;t9TxeTE!O2kYxNsCKH7Q!TSBDb$NFfDn`AcPs8`N`*jsKv>a!m z*BvzLnw$Tmao2tvb88HM5`Rr^D)=(Bb($>gLkGT*yzHj4)}?9tmSm0>CjE3Lx9F;) za;orgD%hM7m70TT77ki=q_nPmwd5A_6Vl^wA0G$!TqwVH{*>bjnqKPnCUlnVAu|ra zm2)qGWcz8$XrI0@fJDA+}tBDE%tz7lA54Z6ro&mr``> zK509!_t3lj7m;`b72_!mZ)eg{bd6h_>8W@$<3o4He_bn+lmV{XA?g7!*0mvm&j|1z zqpBMgT_+LgP(xW_C&O^uGPj~;T}d(BXO5ZfzRO+b5k|4Y=co|4+7@O-s86(&$JTv# za(5};RB+}&nlFk_7So3c#20b{ZZtMa272K zGEm0y)KTE03$$Mse_qMi!He*u&I(ZtilZ_{w3mwUEGS{oW8P2wL#(>#r(&mWJDDz? zccEs6S5dfdNkBi_F3XW&GL&snIG!3FwVqYS(5F@;pI#KI+>0s!0){5E!y;bU)fo?{ zi371C)uaC+ci4Ilr?&xR)(D8Iejb)G3DI)ejrUijg?%iA*XLTU6jTX$@=_u=74SV? z38g`sQ4Du62>NJk^FjO?=uyq(agul(@crjyI2{+wJdU3qHl$3i6AtjPZ_%ya746Hq zc(jzZ|2tXGVW!_?s+=?WuKbL=EJV>}k%nzaI;f@6^J&PpN$xL(X4E$fI~K(YPW#mB zjr6jQ4%zfAPht~zfN}0@@YpYA4rbxQzz~Is;?<&hRB2qnfW}`Ds`@8rvYuS~sA?GG z-0)~R$)h?w1;XqjB)q5t^u?Q#*LW5gZ7NAZ@t-|_?xkF+8XPOMFYpao?qKzws0FHG zJ(z--T!W4}4&OTJST>%Ek)&<^=4#YWVTLWjekqWspn^OLmKO3a5`pe*9aAyP0jZzE z@I5FikL%_9wZZOiCL5uOo~kAF(6re>(Po>*lFWBvSn?^nqG;jQ`^~%@;P%KX zJ~Ol=a=3LYtyuEvM1zdfhg=3H1pmB%G9-bLJ3)cdQ233^8Xo^8J4zs)wQ%CCHG&r$ zjfK$Ve;M;xx>Mm8d4oB6i=L~be}Wk=UOF289~Qu5D*J$uYbW$NfisX+m=Kg8^QVoZ z;OZ-BxGqPkQ~feFmn8h^QM~rM51^-)weQMQ_GFPL;d0yQ2~Ei@&VTo2auvt;9d*V< zDjf#hi=D+AwPR(Yc<}>u$OUEmb#pe!{SvUOIeFyo{ILv3z=Yxw;S-+-2v_8OLED+G z{=<6TFcyxbL>17~Xk+qXYHMLj;E_?{tC3EOo@5cuEOhe;oLy47Igcht#HFQOyj-EX z`J>ZDZmxH7xmQ-=2Zf~XN3|RMh~+wm0hfIhbf)DI7U;0&GQc>j6Jr~KceL|?np;Mo z!Ftu0Jns*N@XClXD%a;}tzZ-KhLCzjw)zP=kKxb5&8(vkhGffaSvU$rGOG(Eoun-( zkIxdd2(cYZ_!c7+lt>e=YJ?#yUqNgTWEz&9cXIE3$X)ZQo2FamhqC|vyTa4{4)K#O zsiY78x)*C{hvR1pN>{W%02v{~YiDV<{D5vRZ`0AxrYist%$@SH!7!$IxSPcW5hI_u zc3Koqwbwm+QP)xEoq!4=imqCWdr?4QH#QE&P*Sbbq&(C6G5)z?+I1ob?jDZbn{Gmf)6mx z&@lLfPGifJB2{3xiyjwb#wvo@micm48dM?Fn40N@K?$vxC9ez~yUjFJreCJm7!>%6 zqsDConKB)!HdD){HU7(&3nU|t-<%cphl?a6Orc>nBY2;np$*9spSC$q;!eyBG}3+z z!cpl7w*M*cw=my?L8qflLZpeYK1ptM23Sec`pF!(P4kf=E^3pP{ZtMxnGIpfUuEN! z3-s;#y4CYd@EDI?61W+S1HRlu0&M%XQem&R-rBh2~e`d4PF>?Yg!;VVZho z&YlrBAosd>daOco4G~kUt;xLphKJN7!w&w==DWihl)J8Taj!yDgK)DBbb;+y6i3yU z#dh59VGF6N%3PVKwXYV>Zzl@xg_fwm{)swYp`TmU>*{6;@CT!+c@6cw`|@bmlHuiQ z_NjJd(dfN02{;qg8jP}vb?_gAbA5ZV5EJ4RGj-07@aWdOGe@O4wtHTNN8z@~GKsXC zB=H}}Yc@?rg}bjh8pGa?eAjC<^@qNf=7qHG*^-6%plt%3sL=3j@uOpl8}zM-9?!$M z@PVJB*5tiXWjo*dBkXp&mPcJ|i2` zI|SW>lj+_8MwVfjTPpJM#Sz&kII=6E?LYIlE**d1Ud(3N*zr#dX~XY;a7;oKcu8%Dk8p1{AdSPna-O zWP-Z&aKF#R_x_rRWx>(J35x6foY{3m#rn%0Ug$FmTVMF}fWP#eLG!D^aS&7NWj%>G zT=mqXTAIQSTbp$6;hWJd*zO+EX#nY8iw&#@v<+b~)q+R5bUldhKWSy&ZU+@yp$O-5|_OfP=_? ze)tbgQW_bUR9Z{d788pQCsnFr)C&9yUeMb*rkRL!Dzk&Xzh2xj^{EJf9;q`~hUARH z!ilX8$z9nnE&p3o7v=rOG>H*@aeK}SrokRw$|C2=T0*8UX?Ltb)`fCO3J+Xfu{;-K zo{hj=I?#7~^(Q~LbJ2?n-Y(-oB~-|S*z;^iton!|HMQNOu)Z@Hb2ggRq_5AH{A${4 z+ndvJHu!-rtfLL*TOKOkz}%-*Mi+a8nPO$JaVBE>#@PFQbkqbbQ`^b7SpD4xej=p! zmerzg4$0bw40j)x;^;f%Q~&5nSHc5~)S4;e%?y?$jM74D9VCDFRFr5Rh)YZkz$Miy zZDnikM#Bkzuul_LH4R;3eiwQi{$y|8ih&S0S8~6N(R#>sLs#ill6)b|G=G<9fl`3C zEP2%ykfTb4L9wdPr{zyt@~vdaD23*`q$6zv$woijIu<6KOo+JE@80<13HU^dZbe`k zbo%DR5g**6hC0$+xZ#Y_{&TZycgq?Hl&#gdE`(5-!Kc|y2}7&-lHM#6?^plv9n;Pj z0<(stqn7^ayZ9}*7|}dWe>0}x$?7{%NmuelLGRu{o!~BEHaUj-;M`q|l)DErk1$=m zAcxJQ05S~eV28q?pswQYGYH}(Vr^0W5hfqh<<(Jn{nu}OcrI{sy*0H(S3`FRJH70N zokBa6g-HSwslQaaIH(V7hIC8I<`f+Oo&i5TuAktchLKD*71}6@wN-ukA)VlY4OIKt z`fC+3T@I(PGyNP978t7=H4LXaViv~pb0!UawBY{ALuQk!=W8gmMss9G{V#^tCsGqL zP;Q8ch2`N);LZ6QEYL2|?UVFo1I+O$o6bbxiQq^qpXNrnnr_pLrxX6U7nGm5mH*QO zDRAN)j&B{{P@F=f5H((tv*80(3p)Bq6Ih@ym~=sT?Bkf7NS2m1{86GU@Wi=SQ|Xi{ z9e3)t2Q^7$%&2lMfiy5h=|RXwJ1gI-IQ@Y2M=qG=@rxWCd=q`KxAj#5W{)Z|qgAxY z3@v-Tz^aV7Ba&Eb{yte@@n`%DoBa|v&b=g6U9#wN7bg~tG;ybhd1^N|tM(`xtQ56B zVpxUCixLN{oIb(EdAn_go(Ws6zdPjxko0Yn=ogbii>J`>lJq5?yY+X2)bF$P7g?k; zuM5sn8~C_2e~1%e4wwbUvt)X(ryhAq&pupEP=4RpTNCwdS$Td6VXXzf_O)%(%kL2Be1 zU{f)MfAiXCzxIkI`gG)XmVXpsRH^dvDB8B^$S>lB?v41EG|_pzv9*B`Crr=;T*|M6 zAumq6J{^S^ja*Ep>^1w{q)@J$Xg=USoqOq+IZQafU@=k2>8F{>S_V_APYxMAwZk*f z54K6sUMPgt3s*-1S4MuFzSEe5n~X8Jcw~4hdz3x0vr9-^Rh&R%VV6Y|&ee|yFS}I} z<8LHV+qulg?`YXkL^Ui~k%3eJuhz7C{EwVF(P_CjS_KpCn=23*tQ?N_VsN+q$H{2{ z#S5trWy=OhAFg^jK61W#{D`Z2BftHID9!sh{eMyE z_+yjr8><$(DUag3?y{P|fAha_-{v+%jEKFoNZX?>Fk~3I1k(P`!a+STa6xYN;jnTA zc1t!T0QPZnbGs2%dQ?obZGjzt`_N9dju_!E& zxvOVjxBbsVM(#~3-P(xJZdn;aCdKP=;jz2S<3C1gX2a+h!NH)kmSMt1eWA&&Ipp8; zbxZ*}hlmk`%lt&IcSh8wjrN?!ZE~`*vV3wDD)|p*Ise>l{H9#px-Ls;zOlJ`3$4&& z6&0vTqQmAQp7oW`%QAndDO%k43k{XDzw!37kz0jde7xGuyt{iwru|1AN9$G|CTFLw zakJG~so0xF(Q$9M1pmj#hSo_#L-9QH>(TE*1vi?<;ctk9b&ODU36>&Z^*|yXx^nX@ zexa0m_u@CK!ty>u$2FU6hA-iVs_5$Qpm7C}FgyUjAI`VNdNB-)G0lar2nh!UzTr_hu)U!onn<}VvMGUrqjj^^b*@tfc9FJYK=)tP2!JjF zrKS1;nQSV@y47^8Y#qbphXv5X8-!w=V~($<9E+>_G|yVu&V3zhD`Yqrb@&F5Zo({m z3@A|#&9Hv7ZI$WCN$^r?S=>c^8^cTUl$%_9ki$qz+=x%#HclbYY3acHowziJql5$a3uQGNhTye6wE(4C%XuB^EIrof-k=&8nQna0XmcU5luOs5 zu_YVpq=pegiZ>{7mQqF_pWeprAI>c#Cwq`rx55)|s)lEzw^$|2a0pl~W!99x@VtlG zM3J3oIc+EUKHD&ZPTilL005(7NX06v>g{4%>5N6uaM41!8%gW4CQYCHQZT&|peyA| z_xA`5+4l3l6SOap9Z`C&P+u?Gv~|KHp>V!(KEV3>tcDpK+YUT|XbTP67wwWTHG0~k zI-TeKGx^suVO!Gaoi~ih%&|qV>?zieJNly|3P}xD8n1WZklb{BnA;~m_EJ9bNm~FQ zlaKYfPHXxz=d7Cvv8s#K3mep!w$|kiWKa(WSbrSksnR>jlLK9H(bzGp_T=ttK~jWh zd`4XVnl+BlyRAK67WbzQ*GZgD-47W51s=DajZ7n*k7&PPwY>wU2zGVdrN(WW@ej*; zeYiEe%#GuceyW6)#nAw9u2b?-_jtYv{;*H+NP54Ql65@P*3*Fi5a|WZG|{&v@aXle zqT&iHC@t~jfC#1QvXz8pTgkX;40`#^+6!prDoZ^1_SDr_@7oxzk852FMS5H40qY2v zZun*_B;(dnR|KXB|AlVR)3;5xfFZzkPjI%Bq)~$Sjfk~V;+i<=3-KUT1Nr6ROC& zTOOZ#@AaH(Zrsjl%5!UVRCs`hSiM0-QKh(yg#a%9X-ypbDuo*9FbQY9d>*-Hk%A0L z!)`-9+GFDJxK4sc<;ZSkd~Zl1Dl_s5NOE+Hz-@7~hi)vKHFb7TA>X5{`1Owd@&*o8#!@pEyCv>CWTJ_x+Q-X(l{i7lei zDhSBqIQ3}QNrk5sf9PfCJ3`yk7=&P{={GehfftUWF@dytM?H|thKY%Aq4N>j(wEhD z`N(hp%1sDxx_vzIx^3Qmxy@kCb4Ca~ZW?GW`^U#XX<5zLu zZ}5F?#Niylr=N>2B1KYOPd-zX*S%YE5AW@%cChOl&<>95 z%eJQ?RvZKTJ2{}0x|^#Zl@HWON)y|9N?Cc_yH%&bbyUzAgk6t^&-aRc1>yCR~4EgL0)JF-IxOZGx`FbDW8eX;) zOMjM-BL$qnDJ@;wN-2kjQZHH*!^Hs|HXtLUVzTB{;}p!vf`}8E*fIZ!(cLA77tUBM zAdP5Ofy(3m@E4$XG9-!i~=nJEBMX zeaCh;<$_UWO8tVVwt%hyA`ngqb_YDO+N{NLjDY~CCS;pb{N-&kZ`**FBY?}1HkK$- z4-h&ks-Ak-F=yX!b=CV2ke-NH8V=8hoVHIEahbHIYUaFqi`L6@Td?8JSaElZBX*)41}1zPdi(eQogv!0izF+fCy`3( zq$T6QgpLt))ntAi?_cM1*Zh0Hwbn$TPl+{rsX~PcDwT7(rzbvR+Pfl7aEE`?@cE*Dg zW}YwY0Y{xtieB`V?ivMQ^JucV;41DV?~_oGDj^WwzwEeD%8t~^%0Kbr6YaLUt;K1F zZgS>tg*QZ@og1{0_4pIla2la3NaHiju4Chz;-`N`7Jw7MPdbanw3lSbqKxs2-uXip zBL0H^STn#3%`e@I)(cfOFpG%{)}j?@lsu(>+B855g5O=R!yxmV4YyfivlbZ=|JEeH zT@a+_`TZe%D`-X&#y1Vbr1y9Dm*rcn6QCC5Db{6pgSLicq|y!v2g1i6|8Y8J7z8N2 z*#2~IT=VGHqB|e-@_&7c*;`#OzG%C-B~4a^lLmq484pNiQ5gjXzJ<)6G>cE|_@v0v z>%K!fxg0rTPq&z$pz94%*%hUfp-td(rN@HiuXU0tgVernCmffBxBP7YiA1fZWpth$)+05D z10{|M@onKB#l8)xY=)yn7dfc<`9tQ#bh+-*;4bON<*GuJ2KDXh`fEd101@C7v#JOG z7t$+2AdOn%MCtk|OYgDSB^P7A(zn)gKT!%;157lh9z<#a(3hU-@OoW-h1qXubvs}# zMdzT(%+Z3Stc0>=PI_`urG!fEos2R%9;5V}pq7)X?fO5$8(#0*H}OD!2_5h$EcNX+ zp4zeGI`KiRPVoa1h=VW0abtXSS+lU?&||dJofQR^c=G*1Mq%;*&t^vc^y{7;g?*@hZ~cV5grvgi~^%@*d~T z*5R3pEzt6Vv0q1H$VevAv!Ev7)>%kEevXyyL3ElU+@pMHUux)!Dg;49 z;ir+qgN=Rb-VNc+E&9|;)(rA*J&+cww01><2K$lbTy&FhX2X6p^C_UrOM+lZX(TTB z1}eE2eRPyprBx^`vB#)2Eu7+VOqav^416q;kT`(&YnNv`j{V(d&~ zD0i31u$&U|N~bx3Gzz(DsyoDZie}OD^8aPe1vO(Zl{VCY9fWo!>u)sXyJxz2!}ZqZ z=-y%TjNkv&y4+fl){+|uW!_+-6WS*IZ^}(XI3Ye>VaTUe1{Unqa`>%cF5CV?)l0ia z+}9fc26I3SR&$YFkgh^JW+Pzk#gHOkU@p$&3({}qIeISa1ruHc(0U8~e>%ots02^>itfOGkSKYm$%Nve|2YDRxM6I8&-~ zLg0R!pN^3ZyW0+Xmcf4vI*cPg)hoBts_~Rch@30#;2QPjrQpiU5k5)hoJcpE-rLh! z()irPpF9RfNuF*^*06(HJ4dBimJS{8w5!4XXn?s%At_|}A)}tX!B{>$b4x^$&X1a` zKa$?d%OGz}e!Y=VF3Coe%^o*5H7Pz;why4!EQHjC)p3)Q8*i%j->MyImzqb+!%#)v zVFO;-c``4$Hs_Ef^lHrHm|_%?@>r}5gNvRBS}TCkJx-Z(4YILK6!U z;KbZ4MVrpL&W7n#aDUys4DXaU??)Y$!$) z58izBbHmMvhxrQxql??zDmo%24A}6J>x9H7*l3f1M`x1rbVsP;1^Z;wEqjV(pj?qe zc|`Z&oa@c1oaQGsnmo?leR#e+ogQ7@9}@1iq;;r1Gj=iw6W)k}*#)YpU|2GZ2`B7{Q}vq$B9mYr=U&1!(gHD0+}w~CtNlVOu=kw z`Kgfy^AJfx^#p;Qy}R-g$myNX!+XUP0`9)7bg>!gfnim=C-eiDcprOiN-gLh z-tZ_0zlG%rvJj<SKBkn4EDAw?$NagQ( z%WDDaOvAJx|8;(D*RJ$fKRN*cs0{9}3Us!ErQBqEAyV+j@N-KheY8+fm$(ZZ3ykWV z7+AGG-*t%jE__xsBkm2?aH5cG(ux`<<9XXiLG&}WR$8ur{Fwo%*?G6rInZ(fz;F`cOVNoO7pX8B-$HH8B{V2>$9M`5X_NDy*t)XnkUN1^qky(RoT?ytYu zPnN8lFAR{+kHWc%71_|F>G>c&P88Z|JP<9iq6qN}1~`iXRhCj#M!MbjNPb-4$0C!2 zOF3Exn>@YydDX)4Qn#T&i|rMOzQaqY0mJ-z77dInhOBFHqajNNnSM?jhYW^qYzhi9!hW3Tr*TDfG)g;B@MB6OnA> zp=AF#2d}{a>9m?s(Fo>Afmr#D+4TtBf;2Amv^#Q|OcNUZ}7L(f9r{F~r}5 z1a+-)WCllMBh`nFjbU^0GLO~9$^*_W!MW0$OY2}{O*I5Ov!a*iX+Fs$PpIVEDFD8g z;ldn$5P;wI{t*l+n8sM7jlk$=60z2z(1#?e4%A5w{ms7%B9o0td<0I2xN`dasBZJW zinefB#jPJUm*}9hh09_5mW(Y}S?Uir8QC$iwq0Y*7@)z}z+ZFN)o!RBeeSsMHE`=B z{uJygV={-}O;YoG!AdalSB<WQskvhY9o@HF9qaQ z$r2Yb!l?$xbP7{&)pEqSWZnUu0nd-%D0Hm9McPa1KtHLEyrd%YyK91l1|ju z4Jy!TPOk6xH(Ui-G*j^o<|y&u)vm0{LJ9o5=}LdTeTTQCm}@3t>rr(`P*@J#sG6Dz>&SuR-UnQ#S&j&W3u; z2{|CUwO=7-4#LXghrdNylwTSr3ZE;ZoYf7aTL-c?j|fl?jrPt(H|KL0-Mt|u{|^hW zqScsPF(Lg_x)V}H@qn-+MFCfmMLXn&*EDO#Q1=n*@*x?@Gu`J`$gX3`j9`X`818-IFh9i(Te_lgA z-U;!er3d@Xe`BVWn7^KVDB&24*CJ$xw=g52GM6*;lYFJV^PwsYp5XtFrnd}et9jmr z+d`pG+>1LDcbDSsR-6_M?k>gM-CNu>1b2$NlOV-4xa*ty_kW+SXLo0=xn|Buc6N7m zjBFJSq=FA?Z||o*;}oZSDr72SkJULEWd3sI{|(SDYT|Q+VS;tbuj${YFk!r&Tm`Wqq8Rz;P--{vnk38j$=0#~At3~+Wv#KwYSxRg zh@*WaaL4VPT^V)$AvPBMly7z7%tATo^oq4PJ+tOAx02nz)M zsPjnV`3qVI1Vz$?*s_pI(3fBw2{e;9HIEZbVk5u-`oDpbY_C*}3Zn>#_|Y2bxpcrx zknGul=Bf8j*LAsGpI{IfZG7YuZT~5nK(vMQOOgpj?rE`ImrG+Z=~cmO^mYU%)$)Q( z(HyA7hRql=&FjjgYJ6+SHvh=#*1p>L^3=T{ChfgqI)P9a8!<0VCgc3WXc8mnqYwF! zp36-HT`>Ae;UMMnX`Cv$-E=eIMW;&@V1pXxM6_}o&%oI*zs!Jl$#ri-W!n+Ut6z6) zuGD@o%WFpty0OPG;rD9f@vZ1!BB2LDW15_95Fwqjdxm)_ii3*{Q?i}Dm2`4>eD2*X z2xuRk@}K*^$@Fx6Of~>S$5C0>q}86(+G%o+raPD<{k$5*APe-%uYkGiNeevifrPSz zS>U-zd%l_|3|HFymb5ny-PR)~wo-IinO|_g9b-|oL%TpC;LQUSChT| zfxeVH#S6@EL&y$T{~lvcOVvM)M`2k32WC9jm$bhPjrRfsH>l z-2P9=h#9+Bw&%AtLb8&m1W*Fx!aeawChE+->wk*0P`?v_bc!eT_@d-a^ptOz-D#pj zu=*X$z<1)=MxqJ?Cv!QdFg z3Fc}L<~2126~A0f#_C4W*>?YDPPi7TH)D@`1+Z|mCI~Fe)?g49A2a{4lTl0AUFP=F z$fi zvzRxB-Zp(RQC}zE$}K0Ke7Z4wfR8v&yyUch_v)WMrf~OtWY<6Uy7d;ga-m_heZP^P z1rySmG@?^az{S;EQ>k7LvfmmV0Y0zV{`BeNwMAc z1WE2o$?FL#q$#2q-vmM9>&&Yhe0bDJJf_?}jxkfeHeVqW(0BWP;!+N9K3?(dIeroD zt48oY@&gi@hJyD&e{V8Xp{*VcTo^St~+ouqF#4R^y zB{_MiQj$+8ACrWFRQD*LVY7?%ak+rI(#gw)(aeR8y4E&C{P08R_~+4XrncPf!yn06 z>37q2c*e>Hd;(6+>v}t|gsYRMnL>Qc_h*-!$+3L@Px1viOL;;y2fixfdC7WC8yJa_ z(0n72liMWUFKv{MLj00sM$@CIkX}+$^&3XJE+2aD7bjf13W7*1R_qsr2=oE3K{vc& zk|Or%noBz8AGNb0t7>3g*{3+{n%Wx!zf~MsM0%)$Hn%=Sdn$x}_RbN_ilFUv{xijG zDCwk{`kbe~{G$j;*ER+&2Q&VM{wvI+QK(4(g-BnNwW3;P%~6D`*m6bv$FCZ)*H9X^c!+h{PWNoHkkJQ_9;H=SNoWjcra>6&jTl7p~N`a+1--L( ziX=MvAdvgbg0GXZ=@0O2eSr*n+n>P4zQPc@?j&!GkZ2?hj|5IoffAqquuO}+5GtX# z7K*z}9fMmM)Dgi%+9aLlfP6JD8cy5tZD-NVU1zTqu1}`+7mwbk>iu(x^TT+H+|FAV z{Y3Dw?x*@(TQ|E;%tOGJ19+B#*~uxK9@8RWXDHTsGHYuG(?g)ocb9VqPbB?stJ++3 z(eH>@sQPQU@G?1$9jL^Q`_LJiD|6^QO~;vAl0!by%xI5u+>2GHjjrppWC>fO97t@n zX16i;@}%%YTS{uui07)X?C|a+T;hP3hPD{rc7o##S{O0s@_et^%!7#4Z-;l*w;a3h ziu^>Tbag|tEW1-VL!jku4>P$`MMJy{c8z}mSBy1?oVi}fe3lA!1meV*by-&GPc&cO zESJ20y&Gv&w)7A@6!);+Q^pdVMZG_8{538Vo{=Z*;+k>d82yz$GYDvjGBSJaEh{*8 z04H_L<3u~igg3c0R~}bggkKlzg|tFG_)os$hv}1eb{-;&zqbN$vo2eeJ%yL#%hyk$ zwyVklY64IWT<2LC4hs$jY~N54iVn^abeS2sA_O-d>7-A212a^tn8$RoKD8|bC`)E2 z>_o%vwV@L$be`rG@z4EC?hq;PgQ7iacqY=^FJQY>U8I7S-8)9*^ACS z=Em?19$S0DEbaS|7A)Wz^5Sl^H+&Eeq0z!0*I;)Jnk~4=6a{hBoY`^!8`Nh+cKN6$ z^AgR;p6WGlJMi~~=a`@fdj=VgJufnye5ul#C^f?i870%&%Z=h3rmE0+FXwjVMZ?$Q z6eY0?<>0%i1u9$u_z2&RSdvzC8=xWL_lUlfT}d3gE`B?ZmmV^ncFcXC64C^_R`(Q< zTF|>v5*6GI;{w&5+{=^|a5KE@^R@-D^3>!3*+@Q)tZ#O3&hk!RF{)+8nMfFU_k&Nv z_aLALTS7le;q)*LXVCB1Fv|mf_L^KoJGR%KPl-FQZ8rMRoh)A*iNmaW<|EQW`svWB zvO9{Tk4*DNtTDGbBj5{^u+rRaoBckhtTtFP2_?=5&{;dE&lbI&{4w<6B25*i&z zY3AonzZi$1Tx#Pk{{qfLs9%p>%OXsY^b|s$+Mzi z-|`=k=AntezZ-ukKGC5$PgyU(4!N#VHs{*z)ay#pu)NW+ogZsp)Up#P>x|)DW-eN@ zngp6$4%__lxh5cn2mityMQgKv0F78lJz28cwe7?Io)ro$!YF4HR<{L6wa2J2N}tr@;`r3MTBwLrTp8Q#&|$=14}U*i;CErJoNs-ca!;&gB8*y=xuSda59a0Xwe{F!p(Gtsn+@B$Qi8LGfcfUoqWsVLEm&QchbrYp^`YdD{kh+%=Zjnk! zt{9rPry5jJ9e9`~prri0_1p~y85Ag7cNs+*PNC1}rv!9uQ*IGJDo=OwPY5EG-hL5%_Ocy~l+SvsE}lKj`fBA#np=K8cd>O7D`AE+eFDli(pl+QbizGUtBg zeZ)QT{861cIb5~e1 z{6yCPe57Pl7%x~IX1x9cJ=ypC(UvjeZ@RfyOKVV<|En$I-s1FoJe^p( zUO@NVCqc)ly)3biDZ+}MS0$+6z)whu65h!Tqm|~9ZC$h$Ln@N>8-oQzV&KrZ+mv@~ zIDkeE$rLodn@qv+Q}BS=eWN6Mn-?9Kv!HllXmILb_kCzDjq@>d5BV=t(W!kg zGUt4rX;w>%33cQRC7tWzVToD=?b{r#ibVR3bG zyhAPdYKiy=wdb_M|%0 z$)@H%Yz0Qs%Az_GGDd6LD)?h`kS!58nmSH+XW@EPL=}izrHsp5P#oh75oi!C z0M+*j2%EcUd%l2EXlOhDV)ovfZ$@T+kMzP%=%;$sE2m?eeU-TW#7rEr=m~Om#Ptk1 zvXiM)_{$(!N>U+QLrF0EyYq{XU;T?$FG|r@F(R}(Y?^yLR=L5J$FP`)Jw?Nbo|j7p zi3-fs2BuC%*=8#Fq!Y;yQl~3%&3Zy0E0tZrl_PgNU&FgNEZa{=dR`A8bmT>n6cGI`LHg2Fj2C& z9&}GA-%&@&;e%AilBY?*Qf{Q=+fML%ECus9s@%0ct>CE-vNI{bqEH2a;kU_&Acql< z(Uh|3JP#5QSrVd*T+VfglW_RNMx?;ANSO^QwbuV}@jg7_XJv#La`Q4Pyfa^7E!z*Y z!}oul$F}O&T_^sG8Hq;)j{p8Qk%z!YV1^0v8_A014=2#FPghp{pAz0#s*B>~ zfgNyvN{j>HWbLwa_HLko93n~0#MNrXc!gXqC~HGkyT{G9I; z4jo+8vvHJ~2JL*?61ZQkJ!AUG%dhtL2%#?UR+MU4Y=J5ujPxs}_fM&JcLqz!vD3f5 zL4xQf`3^3Z^iEb=5e{~4!+(8g$~Ws_3HY3U_I(-cIw^Db!_sNl2x?Qcs^b@m`s^s} z+UsitOQshy5~ClK{t@=!eyShNc4YXWkBu`KFC4S(1SQqcFPFSYWcE1wU)%p9QR!xxuKrMtv;9tVH*32P`>+Q zi@3)bbr~pnli}!EOOExo zZ|G6@0yKeOb0f)Spz*kRvj%ieSt^VMj0cf?k`cEtlN968e#&KqLVNUL(GX8^X%J zDLAdjO_x{ybf~_yrIT#;ZMHofliTsHcvLxXG};$aaiqm}NL%`r-bJt&cFV;3PNioU zQ-#!49OtDe9X%=)*~vszkmL?Cmdv_Rf+C)2Yz2AH_VC7)dh<(Jw+U@Ga%4M6tE$98t=YQfCnpL0rp5XxS*-Z0{z?JQkUnmAUZyWsDz zd|&E6nPsgck@w1pAeLPj*TYAL8LBjOs*XJAJt8j)=M%^SUxHWHEyL{MMoJC33r3Ti zVSW^lu^3u0pM^mSyo>m>o%X3+?hKRTp4J6i0aNQoTEJ6&+*o)k3vL*V*UdV#tz zQ+(WGahUZyt(%|qxcjoxK$2Vs zmCY1`4aG`buo}+7vR=1x>m@HQe4Fb_zOZB=s0JMlYk-F&6P-52fAtr%+zHzaR94!- z)h7KSv2?~%`b~Uki2_$s8A9KLlwtmh*AmI;>I65g#oQucD^ zF%7m0u?k7ZqfK`4ClC({Ii~_QwWL^qd$U=~p$DY)Z2w`0M6`;QOW((TE{-J1nHFKZ=lounDIo{3soDy@r#WrT+Mc zTshGuo(sO}iF64eO`Gl{NdZ#kNk6Tq5(E(%fN;YEdB7@`oT?@EK()YA>h}_&d>Q`@ z@z#&@M=3Zzzzt6VJ3qDvZ!xxbr6p@D_{Z=F*_7e$5sV`&;*6hHb>EREblly?& zVT|l5oADVu`vn7YkBBgsvbnjo%V`ZWK%n4kJXfc-im;cx}$6+QY zmljeuOG`Qgpiddt_H@tI#dwU%$cQ(*HBTd;!Mk1S@O?M+>9ZHASh12St%_#x{WprQ zy5FM#)>y(0A|>vQFD{s`ldCezFf%43GLv#Wa}+^<#k#V>i_;-*05y26g9DFZ$_~5( z9)P1OfcX-@0o(ePkSQvBY>)4xpVVcqyMXQ|T4;St#5=(vE)+GVN*lR9V&*s_Xa??` zU~Nfli7~ZX9-i9IIH4G5d_*))@+?u5cdw5VO=^W4ABUlA2oM7|%)ova6cOFa{OjCa zFaa_nMF))Pvb@&EloWzR;Dua>7kXRgiG%RBxjKQ-;Gx)X|AK(8$wGP5$#^J~+J(|m z(IAANbviQJv3#^ovU>;2}90It`KmzNv;t`8}yQzsimoYVZjOL)#I zVfDGH6-KA7uhPfpI(_4!pU`&G@0wWtj2tPmhkW&%t%4x_QA!%`(m46J0~O9g0?@-fO@%J5Q|xpAo5RJq}ZN%7T2TR z3QZrgfODzfmPcg_cqi7mJR}>}Q?sPPs32>hPO-iBikVI2*FHH(aGUt zxCmCU^_j4Ki4LlYv*agAId}gY=_) zGYfSTAu={+JwIJtr5N@CWi}WgNrahv*Sp72w2Q(Os8#EG*HQcL6K}D7XtH89%w(RDT)5gW zoKMILZt^~=nV^ApYry|#S}kd6x(^>WAJ|*Cgw+dzXGCKE|Mi4OiDKB$_vPEld0Xr< zw<9@I35sD1C<*yA{IH=Hs=Pwh1uLlHlxKE_-D1KBAZh~X)bn@u#sT)Ns(x5bDw>$O zl2O3S{~T6eHT3*(F2%3^oE(JMVk*N!C~!6ozsn8 zFXVlpD{q2%qicFa^trjoY?0-?uAeHs9Z>~Ikc?Y*@4rvVO)#(*eVtj zss1iwbGx9-??8-w_Q$9k1k);_wjz-kg?_waN75U_Jc8{r0hFl1va~)7c~zNkrG~NY zsbGqTE-V&F5ezqyW)(h$=*4>%t-qfmoh0IT{;xL}F@E`{l@7_-nDoz>3BTp${ zIuU*8-G&NAl9yl~y6E$H|I{hx#CYz9DOI(v64ck1$yLe06Osm=c1k|9ZUZF^d*P@7 zGD4m(aT3YyIn+LnD$R@5pOSvZ)`I>7AAsi`23EaymZ{3;l(9}-k6c|3{x%;oit=Bx z<{8$`H&4y5o+)iY=2$mU*OxzdboKh|Y?G`!>o*sN7R@k;)ZH$Z|LlzSF@1kc zO(}qyprNTPDunsaTM7s#>hb84Av4aZ@ra3pW_eoA)otSEXZ~$F+(EO)%QF8?{s~07 zvPk`JT*dl&chB2g!@5P;MsQgFY%^P1H=QPZH-MGw4A|}aLRzOdyy>M6m^1u(c{}$K zA$E}JOb)$tQb{Vz143)%?7vMpI{Po8wKvnNQrJ+ePqs_YRi@T$(CA8<+1y9iq&OY7 zBS6<)y6oECMi>)*PkdUh#WeH(xB3xf3M`?T8oKxspM&d+PhdLrxS^|jf8RUOf(ov< z`zXP|8hEX(<$Ce9aJ3LfmFDbBmfy{62&(I+EBJqV0U}dB-X`loC)!R7^jM4$tPYgS z3;CFcvs`;XijE#UqxGVFo;Rzl>Q^|<%%8Lz0%m{Q>FAy6xBKt2F!JcJ?hk9$JKp{R z(<|)b&fU`Pc3sRgc(pPvq$5&(rTx_oo8VK%jUWJH$ofU!aat&+! z)lxTbw|{cYW|x6JB8@tGDJ9lPoxk|B##`s7wu&blP**6ZdBIoPYNu@=+B zYO?M65TjBMR6Ky^>hVI{rQDvwKQ8c?GLEd1!^}0px0uvOGvQJuB~TGFl6a*~8v zD_3P-#!P;DE^m|m(vN&Iq%;5OzEGQ}rr+B_FgUvUw}b?ec#Nn2*<25Qr^N4XgK1Yi zfUlkhwCLIB-4ITmi%HnK3WSR@Ye=8{4QI(Jxqs8GJjob(*&*^9x9u;vP@!KQO5kZT>2@0oOn*hj=_NRb>Fg)U$W`QF55eC zL1AqA82#pixnD5&L|ZUAhmf2Yfo`DsR?>(UkAbS5bjd0Blhw?K)6QLEMu%tNW-e@2TlPb2UNZgUufc?NYl*zU zPERz!hqt2u2$Px47u|^#Rdj{u&2JLgAhn%?o^2&`3p0@8tlBr{kLv*QeTE59ZQPKG z^W-2Es^t^>Lw>VJd|Vg5nL3Fn}{%2-Kd#^FMzcP9?9I`J0oDIB?3l zV4WB|yUGO4QI`jM5IPSz23MgEe_&r~)VWG$C-*|5aO$YF(P1Ri8%&BFs}#$t8S}>i zR8_tQ-g__R-Kb?i_T)DQM0i7VR>B-!2L_mar~F_X?EpB~rR_%0n&&Zm2Di+v)@!i~ zev3atLF`p9E8Cxu3rf22p*nuO0jbY_c7UFgt<5#~C=7klDkch-woyHK(#JJ%`kX9k z$Y&sMEJLkTUVS7<8s&Mhq)Xtx`sL86l6|s*)5nua?OhM*M*#9DrdwLU>bdj2wSG{O zW-#uPAVW_bL$fWR1mnrJB(vE%YEwgwqdp^*LM0KQKsga%T?IWa5YdBqCbY5E-b3qq z9uGYpPy2f5pZW*2tGzGs)4Poh?~rSH{Pm?JEsdKIO4u?ib$E$YqXNV`*@|R*Lh`>n zzHb>Km+GGzHF2;?aVgOXY$IK!=N^01%vkh2v5f@`Qe*BAC`ks&+)mmEN^-E{Upq+K zYF+flz-}Uu!yG5qawCx7JlH9C6(CXk!kwHsFPVnAsD2cb0;XsO0|`2!FXx4EeqX#kglDp3 zq(XB>I{gQtuY&G_jH=+i7BD-ePBx5{KDfyoHf+iccSP5Hq;=4rn$e|^A_>%n9?%jH zcP}KKUvN$GC0oFXzrSCjvr{0_j%%Nh7gQQr55Q&h`l!Il#(6ZGKx_$HSl5MByHi`M zZQu0@nzB+G&h@Tn0@tSoupkJZ?9+`c{1f=?UQ4#0-F5!qiOff5nP{lKA71WT%sa6e zST*Dgg&0UGz4c`Eorc&4rQ}9GkcTBVab$t_bzn|fayDU3=HP`6x_2d8y$E`}BhL@S zAB1a1Jk2Aiy8Ub`fj)y|EPeS3`e;-@=6D9e@8MqVmK>oK~DFQ=W>{ZYOMcB*|?w zYp$iAy)t|G6yTe&R~{^!Qi&ztGiWYSPDMm&6C0&4t?W$jDN>#^|c-|P;AbG>dT*-HO{or|YH1$-7S55{xMxpwwi)Z|E?b3>Y;dc;>R zmhFup(~%!Npzo+8i#7pAI^<2Sz(UH0XT3Zs9?|s4?yDS&+rl!=xUJ)#(X3L=8)`Fwpe{%a_?OJ=UYA1S|(Z zW;`SPM%kxgDTPh4w!eYOIC*7CrAQ?jUJVH4+7ok2s%6uj<^_no%!F1B96|37SLMxs z^BCyeZi;3~fifciUMgwmy;;nA!W>0H1Cu`6gln~mQQb5rPSDt@E1bSn5iSW-^!)(H*^e%#4DzoLb-bC$ z$+BLaIlE%oN8~3?#}rl&|LM+*O5CNk<&G^O|9c8JjsPEnz^gYuwTEml3E&pqoW7EF zJI`%6-5%Gq(89;8F-mI;%F{>&6pf5@4f=|s(r)UPBgVEU<>Oa(rVj_*HLaE?6-2f; zYxbgHT&Bof6eP5Sqg_Ey5lZFGgp%(8>62QtCsB7Ls2q<#-SJbub10Ale@FjeULXg& zUpzGbzJ6r=v1TV)>Tejo0_loQmYRn^$w#`(S_7QG-`=0iddRWK0jc zWa#2Zrtzpno^!=W9dtF9`;}(;wVbV~MSiA&0#X~a9{DaEsYc%M@{QdPLeX21I6NBX zhHzTRlcD)eDWrbJbZOE?mL0y8D&tyig2*9GxLYP9$tnKemG5L`}Qo80m zpFfo*89cwaQRxy*wg|~DdB`_8tGhKfSMQjFPSvB@I5o21k*u*1x0SKDX`9}rebc)= ziVw-o!Rhk6`WmcFj@Jm>?w9MILw)0ovwC!6=k>I1{TEx$4Jc&#f`oK{giuM5lFKUbajrbRYhWIi=(Gy<+me$T-*i-jC&%X>c) zIkTj8kil5~qFwErx_ApM`@EIAXgOl>ZQWnUD>@*XPAwZU{wtZbxSnh9)+wn9QIK>S zKcRSjV|`r(0=Q(eFyO`x@k_y<{8q~_vWJ1IpbXh>VNU^Eg}7(us@fOfo|Oqggq=Yz zGiO1O{{DA{m)ICLh#F9zTzv&~M8Ut*70*0QjD_=v_{|jWN?LQ6T_UsKhYeHal>1hK zZ602I31xRI2PXTrep;x6`)2KMo)PZ2xujd%j4H@YnyaYo*nLFWqMknLWv_nDfv&nd zI*i=x(6IAbGPBf|WG${=dA+q6nFD$%5zn>@{xV@V1s2`B_qV0L_)Oy_l0CjkzPs7@ zqd81yQNJYur9@C;d}p$T*k6>4S&TF-M!VhVkH)!%w>ECx%=2H@qhRUmTD}*phsb6Q zOR(+GPWcBs6dzlWM-O1FtZC?becidQS20;nU&|317K^U+hYIM;n z%CCJP0VeDb>#PcQU#flocHqnu8mQDNd)cr6w1wIwq6oqcp}TqB;{}?~6fYE(4kz5YqIDvL1b zgkK*=)JM}4b$Y0|?Bbgb=M2%N3$K7=ibk!RKe4epTS04mJy)pSLA!iRyFv$xM-iMO z?-=5LlDgSg_E`TylW8&)bMiQ%{gT8miKHi8Q-IY{?*}-e`uu|`WTbW_S>9k|&e=Hx zeeTtOY|o)X?(a}nlEDUE;XYSu5-s~9Pd9+!u^^YoPWLjI#t*a=t8Y3Lz~v#%>Hi#N zs=4{Tv%RAuIJVccSD&IEt%|6D^2g#ysh)7-lyESa(=~e9;}x40U?H+R?K%<9*K0dz zQnLVK#dSWx#qyR&lbOAUZjQ3H#5-I)OvhV#@And=i)mOSU5c5UcsRL4{LBrWk&7qV zB&rbRmza?mi90@A^mIvv{>i44%x71^Wdymqpm zB%?x!!U#h+Q5H;%w)Ij_W{pK9aW9&9(^_>KmoL_+^t+YU^_E1?=XBUbLQ&inN%UTw zS$jL|hlvcAw-cG`cmc!B02=k(gXi&jaXd;)ff7gK@8 zm8+0K-gk2z3GqHnUd5!Ish#opJe6N?uI8@RMpI6fvmdhRS9thi{q3g`TbPb6O)x#Y zXa`kOV)E0tKilwhrNC2S(PR&912nr@~{O~T}?{kYZH)-?Ss(!?Z#e&2pl`O zhckNHEdbHPvsdG zMiQ3@$0NE9ZgK2HfTwp+o4<&b1jFm)K1bSI6vwYs;VW;8K&&&{OUV|^l96-L?X$1o zr_^{&kU@2KM0{8?^)*Y?fk#{{v%xIX#&4v`55prr1D}Zc*vsOKRPthPYhy2HY68gx zA|VP-w2!cCcb`wns;|z6CLsipuVL6LFI@B-^nOzk6;iMq^l#z^?H{Xu`|D1NA8R~l z*{Vs#2X01d)4gk9spj+e!`tGOxb?|XRSnmSB#f{b@4-vT@-Oz2|4D^ag`Mk0&j7)- z8okP$ytkQGVN9#~U&Cj}3^a#+jy5atiB$xi+Kv1J&v2Nq(LDk z-KJFW>u^Pp}#`Cs=w~jgLH!ivskFxw6MDCk!o!;9e`NsbI@*%VB zqAMHk?j`FzD=abVn`|>R)81^TxtuecX8 z*q_w_;!6$FA95xGJ?96OBwOV#R<{>XThH#;uVPN&!HaoD*cdmOBKF@lYX>m`tds9mxvzoP*GHswNkj0pD%KSK=o&5;a4A8X7iDxBCELLAz9ER2JQdHrNK*<$VgAE9UAry^ z|C6FR-ZdDwMjId;G$i=`)3rp6Deiy09T1@%jA6YHvQp35cq_76u|6q9eHd`D3X(N$ z_V`(%r1K%pHEqot%t!s_$*Oy+)fo(vGsOY57MqPu>@8_r(lt#j z5Jb3El_`SB?^k?6?giLld~iIB^~5iDnML1w0sW_VTQOT1WaDLrE^S@ zw^o`E3@0d*eK0(KMehf^(~m+Y>um)8)VFDl`lvO01EvDR4REa6mDT-qSDEx@i8-*W`1PKBvnGcS@#q zmmG?9t*_5TVB@uKua8edwcTVYfdRh0&(nT*@SENJKq65DiNv%8Qe%CDInT^L(~(d3 zrtYuz_p$k8qGV{0?hSQbJ&cey6xcz2zskT*$PLYEC#q43Hb`l;fBzYaic;O4iTe9p zSiar7v3k9ozL}oM16KzE$>)wxcy#f0AKu>FP}?4{{>5Cm6MHBPhGTFnCl?qT*{{jC z&bspv2V~AlOV5Y{IFan2O2M7k{Xytvk}O2}=>c@mm6;dB%Oq$+(TsLY2j5i#SAJM}+(zIr2fBz8=_J`TJfRI& z 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 literal 0 HcmV?d00001 diff --git a/murmur.py b/murmur.py new file mode 100644 index 0000000..6f7a894 --- /dev/null +++ b/murmur.py @@ -0,0 +1,1190 @@ +#!/usr/bin/env python3 +# murmur.py — Whisper-live (ASR) + NLLB-200 distilled 600M (Translation) +# - Two-pane UI (Original + Translation) with dynamic show/hide +# - Source language dropdown (Auto → whisper-live auto-detect) +# - Transcription via whisper-live (FasterWhisper backend) +# - Translation via NLLB-200 distilled 600M (no SeamlessM4T / MMS-LID) +# - Square Record button (grey ↔ red) that records input to MP3 (_record.mp3) +# - Virtual loopback Gain (dB) before the output sink (e.g., BlackHole) +# - English UI; window auto-resizes (no manual resize, no page scrollbar) + +import atexit +import json +import locale +import os +import shutil +import subprocess +import sys +import threading +import time +import wave +import queue +from multiprocessing import Process, Manager +from typing import Optional + +import numpy as np +import sounddevice as sd +import webview +import socket +import logging + +# Whisper-live +from whisper_live.server import TranscriptionServer +from whisper_live.client import TranscriptionClient, TranscriptionTeeClient # noqa: F401 + +# Translation (NLLB) +import torch # noqa: F401 +from huggingface_hub import snapshot_download, HfApi + +# Tame noisy websocket logs caused by readiness probing/forced disconnects +logging.getLogger("websockets.server").setLevel(logging.CRITICAL) +logging.getLogger("websockets.sync.server").setLevel(logging.CRITICAL) +logging.getLogger("websockets.client").setLevel(logging.CRITICAL) +logging.getLogger("websocket").setLevel(logging.ERROR) + +CONFIG_PATH = os.path.join(os.path.dirname(__file__), "config.json") + +# ----------------------------------------------------------------------------- +# Language options / mappings +# ----------------------------------------------------------------------------- +LANG_TABLE = [ + {"id":"eng", "label":"English", "whisper":"en", "nllb":"eng_Latn"}, + {"id":"deu", "label":"Deutsch", "whisper":"de", "nllb":"deu_Latn"}, + {"id":"spa", "label":"Español", "whisper":"es", "nllb":"spa_Latn"}, + {"id":"fra", "label":"Français", "whisper":"fr", "nllb":"fra_Latn"}, + {"id":"zho", "label":"中文", "whisper":"zh", "nllb":"zho_Hans"}, + {"id":"jpn", "label":"日本語", "whisper":"ja", "nllb":"jpn_Jpan"}, + {"id":"por", "label":"Português", "whisper":"pt", "nllb":"por_Latn"}, + {"id":"ind", "label":"Bahasa Indonesia", "whisper":"id", "nllb":"ind_Latn"}, + {"id":"hin", "label":"हिन्दी", "whisper":"hi", "nllb":"hin_Deva"}, + {"id":"arb", "label":"العربية", "whisper":"ar", "nllb":"arb_Arab"}, +] +LANG_BY_ID = {x["id"]: x for x in LANG_TABLE} +LANG_CHOICES_TGT = [(x["id"], x["label"]) for x in LANG_TABLE] +LANG_CHOICES_SRC = [("auto", "Auto")] + LANG_CHOICES_TGT +WL_TO_NLLB = {x["whisper"]: x["nllb"] for x in LANG_TABLE} + +SYS2ID = {"en":"eng","de":"deu","es":"spa","fr":"fra","zh":"zho","ja":"jpn","pt":"por","id":"ind","hi":"hin","ar":"arb"} + +def detect_system_lang_code(): + try: + # Avoid deprecated getdefaultlocale: prefer getlocale() + loc = (locale.getlocale()[0] or "") if locale.getlocale() else "" + if not loc: + loc = (locale.getdefaultlocale()[0] or "") # fallback for older Pythons + pref = (loc.split("_")[0] or "").lower() + return SYS2ID.get(pref, "eng") + except Exception: + return "eng" + +# ----------------------------------------------------------------------------- +# macOS system output switcher (optional) +# ----------------------------------------------------------------------------- +class SystemAudioManager: + def __init__(self): + self.exe = shutil.which("SwitchAudioSource") + self.original = None + def is_available(self): + return bool(self.exe) + def _run(self, args): + return subprocess.run([self.exe] + args, capture_output=True, text=True, check=False) + def get_current_output(self): + if not self.is_available(): + return None + res = self._run(["-t", "output", "-c"]) ; return (res.stdout or "").strip() or None + def list_outputs(self): + if not self.is_available(): + return [] + res = self._run(["-a", "-t", "output"]) ; return [ln.strip() for ln in (res.stdout or "").splitlines() if ln.strip()] + def set_output(self, name): + if not (self.is_available() and name): + return False + self._run(["-t", "output", "-s", name]) ; return True + def maybe_switch_to(self, preferred_name): + if not (self.is_available() and preferred_name): + return False + outs = self.list_outputs() + target = None + for n in outs: + if n == preferred_name: target = n ; break + if target is None: + low = preferred_name.lower() + for n in outs: + if n.lower().startswith(low): target = n ; break + if target is None: return False + cur = self.get_current_output() + self.original = cur or self.original + if cur != target: self.set_output(target) + return True + def restore(self): + if self.is_available() and self.original and self.get_current_output() != self.original: + self.set_output(self.original) + +# ----------------------------------------------------------------------------- +# Audio loopback (monitoring) with virtual gain +# ----------------------------------------------------------------------------- +class AudioRouter: + def __init__(self): + sd.default.samplerate = 44100 + sd.default.channels = 2 + sd.default.latency = 'high' + sd.default.blocksize = 512 + self.thread = None + self.running = False + + # gain (in dB and linear) + self.gain_db = 0.0 + self.gain = 1.0 + + def set_gain_db(self, db): + """Set loopback gain in dB (applied to input before sending to output).""" + try: + db = float(db) + except Exception: + db = 0.0 + db = max(-60.0, min(30.0, db)) # clamp + self.gain_db = db + self.gain = 10.0 ** (db / 20.0) + print(f"[AudioRouter] Gain set to {self.gain_db:.1f} dB (x{self.gain:.2f})", file=sys.stderr) + + def _cb(self, indata, outdata, frames, t, status): + if status: + print(f"[Stream-Status] {status}", file=sys.stderr) + if self.gain != 1.0: + out = indata * self.gain + np.clip(out, -1.0, 1.0, out=out) # hard-clip for safety + outdata[:] = out + else: + outdata[:] = indata + + def _loop(self, inp, outp, channels): + try: + with sd.Stream(device=(inp, outp), samplerate=sd.default.samplerate, channels=channels, + latency=sd.default.latency, blocksize=sd.default.blocksize, callback=self._cb): + while self.running: + time.sleep(0.1) + except Exception as e: + print(f"[AudioRouter] {e}", file=sys.stderr) + + def start(self, inp, outp): + devs = sd.query_devices() + in_ch = int(devs[inp]['max_input_channels']) + out_ch = int(devs[outp]['max_output_channels']) + common = max(1, min(in_ch, out_ch)) + if common <= 0: + print(f"[AudioRouter Error] no common channels (in={in_ch}, out={out_ch})", file=sys.stderr) + return + self.stop() + self.running = True + self.thread = threading.Thread(target=self._loop, args=(inp, outp, common), daemon=True) + self.thread.start() + print(f"[AudioRouter] Loopback: {inp} → {outp} with {common} channel(s)", file=sys.stderr) + + def stop(self): + if self.running: + self.running = False + self.thread.join(timeout=1.0) + print("[AudioRouter] stopped", file=sys.stderr) + +# ----------------------------------------------------------------------------- +# Simple input recorder → WAV (stream) → MP3 via ffmpeg +# ----------------------------------------------------------------------------- +class InputRecorder: + def __init__(self): + self._stream = None + self._writer_thread = None + self._q = queue.Queue(maxsize=64) + self._running = False + self._wav = None + self._wav_path = None + self._mp3_path = None + self._channels = 1 + self._rate = 44100 + self._start_ts = None + self._input_index = None + + def is_recording(self): + return self._running + + def _writer_loop(self): + try: + while self._running or not self._q.empty(): + try: + chunk = self._q.get(timeout=0.25) + except queue.Empty: + continue + if chunk is None: + break + self._wav.writeframes(chunk) + finally: + try: + self._wav.close() + except Exception: + pass + + def start(self, input_index: int): + if self._running: + return True + devs = sd.query_devices() + if input_index is None or input_index < 0 or input_index >= len(devs): + print("[Recorder] invalid input device", file=sys.stderr) + return False + self._input_index = input_index + self._channels = max(1, min(2, int(devs[input_index].get("max_input_channels", 1)) )) + self._rate = int(sd.default.samplerate or 44100) + self._start_ts = time.strftime("%Y-%m-%d_%H-%M-%S") + base = os.path.dirname(__file__) + # temporary WAV, will convert to MP3 on stop + self._wav_path = os.path.join(base, f"{self._start_ts}_record_temp.wav") + self._mp3_path = None + # open WAV sink + self._wav = wave.open(self._wav_path, "wb") + self._wav.setnchannels(self._channels) + self._wav.setsampwidth(2) # int16 + self._wav.setframerate(self._rate) + self._running = True + + def cb(indata, frames, time_info, status): + if status: + print(f"[Recorder] Status: {status}", file=sys.stderr) + pcm16 = np.clip(indata, -1.0, 1.0) + pcm16 = (pcm16 * 32767.0).astype(np.int16).tobytes() + try: + self._q.put_nowait(pcm16) + except queue.Full: + pass # drop if writer is briefly behind + + self._writer_thread = threading.Thread(target=self._writer_loop, daemon=True) + self._writer_thread.start() + self._stream = sd.InputStream( + device=input_index, + channels=self._channels, + samplerate=self._rate, + dtype="float32", + blocksize=sd.default.blocksize or 512, + latency=sd.default.latency or 'high', + callback=cb + ) + self._stream.start() + print(f"[Recorder] started (dev #{input_index}, {self._channels}ch @ {self._rate} Hz)", file=sys.stderr) + return True + + def stop_and_save(self): + if not self._running: + return None + self._running = False + try: + if self._stream: + self._stream.stop(); self._stream.close() + except Exception: + pass + try: + self._q.put(None) + if self._writer_thread: + self._writer_thread.join(timeout=2.0) + except Exception: + pass + + # Transcode to MP3 via ffmpeg (if present), else keep WAV + mp3_name = f"{time.strftime('%Y-%m-%d_%H-%M-%S')}_record.mp3" + base = os.path.dirname(__file__) + mp3_path = os.path.join(base, mp3_name) + ffmpeg = shutil.which("ffmpeg") + if ffmpeg: + cmd = [ffmpeg, "-y", "-i", self._wav_path, "-vn", "-acodec", "libmp3lame", "-b:a", "192k", mp3_path] + try: + subprocess.run(cmd, check=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + try: + os.remove(self._wav_path) + except Exception: + pass + self._mp3_path = mp3_path + print(f"[Recorder] saved: {mp3_path}", file=sys.stderr) + return mp3_path + except Exception as e: + print(f"[Recorder] ffmpeg failed ({e}), keeping WAV", file=sys.stderr) + + self._mp3_path = None + print(f"[Recorder] WAV saved (no ffmpeg): {self._wav_path}", file=sys.stderr) + return self._wav_path + +# ----------------------------------------------------------------------------- +# Whisper-live server (daemon) +# ----------------------------------------------------------------------------- +def _run_wl_server(): + srv = TranscriptionServer() + srv.run("0.0.0.0", 9090, backend="faster_whisper") + +def _wait_for_port(host="127.0.0.1", port=9090, timeout=15.0) -> bool: + t0 = time.time(); delay = 0.2 + while time.time() - t0 < timeout: + try: + with socket.create_connection((host, port), timeout=0.5): + return True + except OSError: + time.sleep(delay) + delay = min(1.0, delay * 1.5) + return False + +# ----------------------------------------------------------------------------- +# STT worker: whisper-live client + optional English translation (no NLLB) +# ----------------------------------------------------------------------------- +def _stt_worker(input_index, queue_to_main, translate_flag, src_lang_id): + # Force TranscriptionClient to use the chosen input device + _orig_init = TranscriptionClient.__init__ + def _patched_init(self, *args, **kwargs): + _orig_init(self, *args, **kwargs) + try: + self.stream.stop_stream(); self.stream.close() + except Exception: + pass + self.stream = self.p.open( + format=self.format, + channels=self.channels, + rate=self.rate, + input=True, + output=False, + frames_per_buffer=self.chunk, + input_device_index=input_index + ) + TranscriptionClient.__init__ = _patched_init + + wl_lang = None if (src_lang_id == "auto") else LANG_BY_ID.get(src_lang_id, {}).get("whisper") + + devs = sd.query_devices() + print(f"[Whisper-live] listening on input #{input_index} ({devs[input_index]['name']})", file=sys.stderr) + + last_asr = "" + def _cb_asr(text, segments): + nonlocal last_asr + asr_text = text or "" + if asr_text == last_asr: + return + last_asr = asr_text + queue_to_main.put({"asr": asr_text, "trans": None}) + + def _cb_eng(text, segments): + trans_text = text or "" + queue_to_main.put({"asr": None, "trans": trans_text}) + + client_asr = TranscriptionClient( + host="localhost", port=9090, + lang=wl_lang, + translate=False, + model="small", + use_vad=True, + transcription_callback=_cb_asr, + max_connection_time=86400*30 + ) + + client_eng = None + if translate_flag: + client_eng = TranscriptionClient( + host="localhost", port=9090, + lang=wl_lang, + translate=True, # Whisper translate → English + model="small", + use_vad=True, + transcription_callback=_cb_eng, + max_connection_time=86400*30 + ) + + th1 = threading.Thread(target=client_asr, daemon=True) + th1.start() + th2 = None + if client_eng is not None: + th2 = threading.Thread(target=client_eng, daemon=True) + th2.start() + + # Notify parent: STT clients launched (server reachable / sockets starting) + try: + queue_to_main.put({"ready": True}) + except Exception: + pass + + try: + while True: + time.sleep(0.25) + except KeyboardInterrupt: + pass + +# ----------------------------------------------------------------------------- +# Backend API for the GUI +# ----------------------------------------------------------------------------- +class DeviceAPI: + gui_window = None + + def cleanup(self): + try: + if hasattr(self, "client_proc") and self.client_proc: + self.client_proc.terminate() + self.client_proc.join(timeout=1.0) + except Exception: + pass + try: + if hasattr(self, "router") and self.router: + self.router.stop() + except Exception: + pass + try: + if hasattr(self, "recorder") and self.recorder and self.recorder.is_recording(): + self.recorder.stop_and_save() + except Exception as e: + print(f"[Recorder] save-on-exit error: {e}", file=sys.stderr) + try: + if hasattr(self, "sys_audio") and self.sys_audio: + self.sys_audio.restore() + print("[SystemAudio] restored original default output", file=sys.stderr) + except Exception as e: + print(f"[SystemAudio] restore error: {e}", file=sys.stderr) + + def __init__(self): + self.router = AudioRouter() + self.recorder = InputRecorder() + mgr = Manager() + self.queue = mgr.Queue() + self.transcribing = False + self.client_proc = None + self.input_index = None + self.output_index = None + self.translate_enabled = True + self.tgt_lang_id = detect_system_lang_code() + self.src_lang_id = "auto" + + self.models_ready = False + self.waiting_first_result = False + + cfg = self._load_config() + self.input_index = cfg.get("input_index") + self.output_index = cfg.get("output_index") + self.translate_enabled = cfg.get("translate", True) + self.tgt_lang_id = cfg.get("tgt_lang", self.tgt_lang_id) + self.src_lang_id = cfg.get("src_lang", self.src_lang_id) + self.gain_db = float(cfg.get("gain_db", 0.0)) + + self.sys_audio = SystemAudioManager() + try: + if isinstance(self.input_index, int): + devs = sd.query_devices() + if 0 <= self.input_index < len(devs): + preferred = devs[self.input_index]["name"] + if self.sys_audio.is_available(): + self.sys_audio.maybe_switch_to(preferred) + except Exception as e: + print(f"[SystemAudio] init error: {e}", file=sys.stderr) + + if isinstance(self.input_index, int) and isinstance(self.output_index, int) and self.output_index != -1: + try: + self.router.start(self.input_index, self.output_index) + self.router.set_gain_db(self.gain_db) + except Exception as e: + print(f"[AudioRouter init] {e}", file=sys.stderr) + else: + self.router.set_gain_db(self.gain_db) + + threading.Thread(target=self._poll, daemon=True).start() + + def _poll(self): + while True: + try: + payload = self.queue.get(timeout=0.1) + except Exception: + continue + try: + # Hide spinner as soon as STT clients report readiness + if payload.get("ready"): + self.waiting_first_result = False + self._overlay("hide") + continue + + # Back-compat: if we were waiting and first text arrives, also hide + if self.waiting_first_result and (payload.get("asr") or payload.get("trans")): + self.waiting_first_result = False + self._overlay("hide") + + js = f"appendTranscripts({json.dumps(payload.get('asr',''))}, {json.dumps(payload.get('trans',''))});" + if DeviceAPI.gui_window: + DeviceAPI.gui_window.evaluate_js(js) + except Exception as e: + print(f"[JS Eval Error] {e}", file=sys.stderr) + + def app_ready(self): + self._overlay("progress", "Initializing…", 1) + threading.Thread(target=self._prefetch_models, daemon=True).start() + # Toggle visibility & resize native window + self._apply_layout() + return True + + def _overlay(self, action: str, message: Optional[str] = None, progress: Optional[float] = None): + if not DeviceAPI.gui_window: + return + msg_js = json.dumps(message) if message is not None else "null" + prog_js = ("null" if progress is None else str(int(progress))) + js = f"overlayUpdate('{action}', {msg_js}, {prog_js});" + try: + DeviceAPI.gui_window.evaluate_js(js) + except Exception: + pass + + def _overlay_progress_bytes(self, label: str, current: int, total: int): + now = time.time() + st = getattr(self, "_dl_state", None) + if not st or st.get("label") != label: + st = self._dl_state = {"label": label, "t0": now, "last_t": now, "last_b": current, "total": total} + dt = max(1e-3, now - st["last_t"]) ; db = max(0, current - st["last_b"]) ; speed = db / dt + st["last_t"], st["last_b"] = now, current + pct = int(100 * current / max(1, total)) + avg_speed = max(1e-3, current / max(1e-3, now - st["t0"])) + remaining = max(0, total - current) + eta_s = int(remaining / avg_speed) + def _fmt_bytes(b): + for unit in ("B","KB","MB","GB","TB"): + if b < 1024 or unit=="TB": return f"{b:.1f} {unit}"; b/=1024 + def _fmt_time(s): + if s < 60: return f"{s}s" + m, s = divmod(s, 60) + if m < 60: return f"{m}m {s}s" + h, m = divmod(m, 60) ; return f"{h}h {m}m" + msg = f"{label} – {pct}% • {_fmt_bytes(current)} / {_fmt_bytes(total)} • {(_fmt_bytes(speed)+'/s') if speed else ''} • ETA {_fmt_time(eta_s)}" + self._overlay("progress", msg, pct) + + def _make_tqdm_class(self, label: str, total_bytes: int): + outer = self + class OverlayTqdm: + def __init__(self, *args, **kwargs): + self.total = kwargs.get("total") or 0 + def update(self, n=1): + st = getattr(outer, "_agg", None) + if st is None or st.get("label") != label: + outer._agg = st = {"label": label, "cur": 0} + st["cur"] += int(n or 0) + outer._overlay_progress_bytes(label, min(st["cur"], total_bytes), total_bytes) + def close(self): pass + def __enter__(self): return self + def __exit__(self, exc_type, exc, tb): pass + return OverlayTqdm + + def _download_with_pulse(self, desc: str, start: int, end: int, func): + self._overlay("progress", desc, start) + done = False + err = None + ret = None + def runner(): + nonlocal done, err, ret + try: + ret = func() + except Exception as e: + err = e + finally: + done = True + t = threading.Thread(target=runner, daemon=True) + t.start() + val = start + while not done: + val = min(end - 1, val + 1) + self._overlay("progress", desc, val) + time.sleep(0.3) + self._overlay("progress", desc + " ✓", end) + if err: + print(f"[Prefetch] {desc} failed: {err}", file=sys.stderr) + return ret + + def _prefetch_models(self): + api = HfApi() + fw_total = 0 + try: + info = api.repo_info(repo_id="Systran/faster-whisper-small", files_metadata=True) + if getattr(info, "siblings", None): + fw_total = sum(getattr(s, "size", 0) or 0 for s in info.siblings) + except Exception as e: + print(f"[Prefetch] repo_info FW failed: {e}", file=sys.stderr) + + used_byte_progress = False + label = "Downloading Whisper model (small)" + try: + if fw_total > 0: + self._overlay_progress_bytes(label, 0, fw_total) + tqdm_cls = self._make_tqdm_class(label, fw_total) + _fw_dir = snapshot_download(repo_id="Systran/faster-whisper-small", allow_patterns=None, tqdm_class=tqdm_cls) + self._overlay_progress_bytes(label, fw_total, fw_total) + used_byte_progress = True + except TypeError: + pass + except Exception as e: + print(f"[Prefetch] FW tqdm download failed: {e}", file=sys.stderr) + + if not used_byte_progress: + def _dl_fw(): + return snapshot_download(repo_id="Systran/faster-whisper-small", allow_patterns=None) + _fw_dir = self._download_with_pulse(f"{label}…", 10, 95, _dl_fw) + + self._overlay("progress", "Starting transcription server…", 95) + threading.Thread(target=_run_wl_server, daemon=True).start() + if _wait_for_port("127.0.0.1", 9090, timeout=20.0): + self._overlay("progress", "Server ready", 100) + else: + self._overlay("progress", "Server pending…", 98) + self.models_ready = True + self._overlay("hide") + + # ---- UI API ---- + def get_config(self): + return { + "input_index": self.input_index, + "output_index": self.output_index, + "translate": self.translate_enabled, + "translate_lang": self.tgt_lang_id, + "src_lang": self.src_lang_id, + "sys_lang": detect_system_lang_code(), + "lang_choices": [(x["id"], x["label"]) for x in LANG_TABLE], + "src_choices": LANG_CHOICES_SRC, + "is_recording": self.recorder.is_recording(), + "gain_db": self.gain_db, + } + + def get_input_devices(self): + devs = sd.query_devices() + seen, out = set(), [] + for i, d in enumerate(devs): + if d.get("max_input_channels", 0) > 0 and d["name"] not in seen: + seen.add(d["name"]) ; out.append({"name": d["name"], "index": i}) + return out + + def get_output_devices(self): + devs = sd.query_devices() + seen, out = set(), [] + for i, d in enumerate(devs): + if d.get("max_output_channels", 0) > 0 and d["name"] not in seen: + seen.add(d["name"]) ; out.append({"name": d["name"], "index": i}) + out.insert(0, {"name": "No output", "index": -1}) + return out + + def set_devices(self, inp, outp): + inp, outp = int(inp), int(outp) + if self.recorder.is_recording(): + self.recorder.stop_and_save() + + self.input_index, self.output_index = inp, outp + if outp != -1: + self.router.start(inp, outp) + self.router.set_gain_db(self.gain_db) + else: + self.router.stop() + self._persist() + if self.transcribing and self.client_proc: + self._overlay("show", "Restarting…", None) + self.waiting_first_result = True + self.client_proc.terminate(); self.client_proc.join(timeout=1.0) + time.sleep(0.3) + self._start_stt() + return True + + def set_translate(self, v): + self.translate_enabled = bool(v) + self._persist() + if self.transcribing: + self._restart_stt() + self._apply_layout() # toggle visibility + resize + return True + + def set_translate_lang(self, code): + self.tgt_lang_id = str(code or detect_system_lang_code()) + self._persist() + if self.transcribing: + self._restart_stt() + return True + + def set_src_lang(self, code): + self.src_lang_id = str(code or "auto") + self._persist() + if self.transcribing: + self._restart_stt() + return True + + def set_gain_db(self, db): + try: + self.gain_db = float(db) + except Exception: + self.gain_db = 0.0 + self.router.set_gain_db(self.gain_db) + self._persist() + return True + + def toggle_transcription(self): + if not self.transcribing: + if self.input_index is None: + return False + self._overlay("show", "Starting…", None) + self.waiting_first_result = True + self._start_stt() + self.transcribing = True + else: + if self.client_proc: + self.client_proc.terminate(); self.client_proc.join(timeout=1.0) + self._overlay("hide") + self.transcribing = False + self._apply_layout() # toggle visibility + resize + return self.transcribing + + # Recording control + def toggle_recording(self): + if not self.recorder.is_recording(): + if self.input_index is None: + return False + ok = self.recorder.start(self.input_index) + return bool(ok) + else: + self.recorder.stop_and_save() + return False # now "not recording" + + def _start_stt(self): + self.client_proc = Process( + target=_stt_worker, + args=(self.input_index, self.queue, self.translate_enabled, self.src_lang_id), + daemon=True + ) + self.client_proc.start() + + def _restart_stt(self): + try: + self._overlay("show", "Restarting…", None) + self.waiting_first_result = True + if self.client_proc: + self.client_proc.terminate(); self.client_proc.join(timeout=1.0) + time.sleep(0.2) + self._start_stt() + except Exception: + pass + + def _persist(self): + data = { + "input_index": self.input_index, + "output_index": self.output_index, + "translate": self.translate_enabled, + "tgt_lang": self.tgt_lang_id, + "src_lang": self.src_lang_id, + "gain_db": self.gain_db, + } + try: + with open(CONFIG_PATH, "w") as f: + json.dump(data, f, indent=2) + except Exception as e: + print(f"[Config Error] {e}", file=sys.stderr) + + def _load_config(self): + if os.path.isfile(CONFIG_PATH): + try: + return json.load(open(CONFIG_PATH, "r")) + except Exception: + pass + return {} + + # ---- layout helper: toggle visibility AND resize the native window ---- + def _apply_layout(self): + show_orig = self.transcribing + show_trans = self.transcribing and self.translate_enabled + try: + if DeviceAPI.gui_window: + # Toggle visibility in the DOM + js = f"updateLayout({str(show_orig).lower()}, {str(show_trans).lower()});" + DeviceAPI.gui_window.evaluate_js(js) + + # Resize native window (no manual resize; no page scrollbar) + # Tuned heights for this layout: + # - compact (controls only) : ~333 + # - one pane (original) : ~600 + # - two panes (orig+trans) : ~860 + height = 865 if show_trans else (595 if show_orig else 333) + DeviceAPI.gui_window.resize(730, height) + except Exception as e: + print(f"[Layout] update failed: {e}", file=sys.stderr) + +# ----------------------------------------------------------------------------- +# HTML UI (English, compact device rows, top-aligned buttons, fixed button width) +# ----------------------------------------------------------------------------- +HTML = """ + + +MurMur - Audio Bridge / Transcribe / Translate + + +
+ + +
+
Devices
+
+
+
Input device
+ +
+
+
Output device
+ +
+
+
+ + +
+
Controls
+
+
+ +
+ Gain + + 0 dB +
+ +
+
+ + +
+
+
+ + +
+ + + +
+ + +
+
+
+
Loading…
+ +
+
+ + + +""" + +# ----------------------------------------------------------------------------- +# App bootstrap +# ----------------------------------------------------------------------------- +def start_gui(): + api = DeviceAPI() + w = webview.create_window( + "MurMur - Audio Bridge / Transcribe / Translate", + html=HTML, + js_api=api, + width=730, height=333, # will be resized programmatically; no manual resize + resizable=False + ) + DeviceAPI.gui_window = w + try: + w.events.closed += api.cleanup + except Exception: + pass + atexit.register(api.cleanup) + webview.start() + +if __name__ == "__main__": + start_gui() \ No newline at end of file