From 642761fbcc2e5069a36453fb7826c9532c9a59de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?A=CC=82nderson=20Q?= Date: Wed, 19 Aug 2026 10:58:07 -0300 Subject: [PATCH 1/2] feat(sounds): add a spoken "your turn" alert MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A blip competes badly with ambient audio; two spoken words register as directed at you. `yourturn` is a pre-rendered clip, so it is just another registry row — no synthesis at alert time, and the reverse channel keeps forwarding only the sound NAME, never text. assets/yourturn.wav: rendered offline with johnny (Kokoro, af_sarah), silence-trimmed and normalised to 0.76s. --- README.md | 15 ++++++++++----- assets/yourturn.spoke | 0 assets/yourturn.wav | Bin 0 -> 36680 bytes config.sh | 3 +++ 4 files changed, 13 insertions(+), 5 deletions(-) create mode 100644 assets/yourturn.spoke create mode 100644 assets/yourturn.wav diff --git a/README.md b/README.md index 95612fe..eb4276e 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,9 @@ reply, or a permission prompt — `hey` plays a short sound, **but only if you'v idle longer than a threshold**. A fast back-and-forth stays silent; you're summoned only when you've likely stepped away. -Sound only — no speech, no listening. Built for [Claude Code](https://claude.com/claude-code) +No listening, ever. Most of the alerts are plain sounds; one (`yourturn`) is a +short pre-rendered clip of a voice, because a spoken word cuts through ambient +audio better than a blip. Built for [Claude Code](https://claude.com/claude-code) hooks, but the CLI works anywhere. ## Install @@ -21,7 +23,7 @@ ln -sf ~/hey/hey ~/.local/bin/hey # put `hey` on PATH ## Use ```sh -hey # list the sounds: ping, chirp, knock, coin, chime +hey # list the sounds: ping, chirp, knock, coin, chime, yourturn hey knock 2 45 # [times] [idle-threshold-s]; previews once, then active hey off # stop ``` @@ -61,10 +63,13 @@ gitignored `.env`). ## Sounds -Five bundled sounds live in `assets/`. The four synthesized ones (`ping`, `chirp`, +Six bundled sounds live in `assets/`. The four synthesized ones (`ping`, `chirp`, `knock`, `coin`) are generated by `assets/generate.py` — pure stdlib, no deps; -regenerate or tweak the palette and commit the results. Point `HEY_DIR` elsewhere -to use your own. +regenerate or tweak the palette and commit the results. `yourturn.wav` is speech, +rendered once offline with [johnny](https://github.com/4242labs/johnny) (Kokoro, +voice `af_sarah`), then trimmed and normalised — a committed file like any other, +so nothing synthesises at alert time and no text ever leaves the machine. Point +`HEY_DIR` elsewhere to use your own. ## Config diff --git a/assets/yourturn.spoke b/assets/yourturn.spoke new file mode 100644 index 0000000..e69de29 diff --git a/assets/yourturn.wav b/assets/yourturn.wav new file mode 100644 index 0000000000000000000000000000000000000000..0c62783a9fd8f1f57154cc29be9628993b9ccac7 GIT binary patch literal 36680 zcmY)W2V4|M*ESA!n4E!uAq`1DK$3`vhzS8v0kfF%s%s9btg@~-tvToHnsdU4iX@RF zIcH{=obycgSF=9;@AspAJzZ5@U3Jwtr>eW^T+O60$;l&*LQuxYX-P{~{o%ubAP5HG z^Bf4;{vLu5hyyKN@W%pAPzJ-T{};@-8Mmjf|0meX+SB%2dpUb~d$6DF*X&n8<^Nxq z|Nj&O{k-F63m9(vuZCZB{c8DVK87Qpw7t9?g}vm@+U=$6E&ROeXUqS?@DtguR_*uy zEb+7SFSI`q|H5y-hJn8R>f6uS?7zQo{>u5;_n#@`|9WXp{X%As+p+!X|NqMT#QY2G z&(tq8ze?Nd`Pt_G%Kb0)vsQb*e}@0v{r}c&&$S=s|D^O&8us#bWIy$3|F!-Xx1WDr z`&GhT{y+HtN!K1D0FC~XH3E@9u>WB=0p$OZ0uAKaHDzy?1ag1YZBLtVJvi)l8~2i+lT!+ z0`B{jZ%^4v+ppV8*bn>fFTD0R_8-dsY5!;5Py9dY{)PXiWbNpF_V%Zg?d9#Y*n_=Y z`(Y11Jf8+nt*U#~2*Pwko{KWXbm_7fOWbByj zQn#0~$LyN;DOdZwKTF#4?N{w(?Dze;`xi31?Ci3#qa{HUaM(3%kK1)_4}||O*Pdd5 zV83FQhFy~kaFy_%uIwd$jvf2ijB9ZvXxHAd9#`XXkg}hR;4BA043KC+kb;=qDj=vA z7l0H3YPW)OJ>CuS?e?L>+rbqxunE$C@m^4d3)+?Ay`Vl8GC>q4QAV)C&c|o3#D?n_wMhYltZ(j<~XaS0DycO>RsZP8ZFTyK9tM(S^ z@oEsdK}-Phn?bG^#5zIQR*)+N`JEug{@eTC6}t|U0GD0XG=S1BFIRxf3km_4qM=wQ z4umvlGBh3<3r&P(Knp;a_1}3Bvt5a5mmEkD8&@e$x^ERe+=JQAM($_GMvd<`B7N>M=VdH6Iu z2&7%1c&HYi4Px(bA1D&KjE}{S;&A{64LS?zsK!@7D}dbc@LJp-+5-)PDu5hjK^LHA z=n~LHJH7)dfnZn!Z3W05LJ_b8s)b%cuOT`-8%}{$P%fl{Bv1gH412(AxDzUdZa^BS z6)J-izYnns*gseS_7t4Q zV3Vv?M)D8JU0Z)0JHKtJ6; zPyC_H&~H#TlmdT&2O(FGPe?3!6jh+Xgk=OJ!I$_4@dQyuG!k7&=SY`G&q=u?38{mm zBl(goq!N&R15z^5DN-7VL2@L;lL({}L^onE5hI)@Y$Lowe@B<1T=W8>h0EY2K%>{7 zTp-0B&=Y?w$!4^MTWyvs3&FxOmzXk5w~QN&j|}|{tM##Z2mNLpO?OV~p)J$Uv^O=O z8dyWubg4&Z)@#@rswP>}t5IwAYMZp7x-6YU*Q|FiC=92J#m1ASW9C&rB4@25Z9$j; z%YD zu5+wgs(Yi0(W#KDaMrl~<2svr!r_!drBkaD=5UF%m@cPzF~aCg6e}@-Fc0011Ry4C zu5GjR1CYD7X`+#2AnRxA{d9k8>6&;=s)nnsQnf1YC>JXGtKKUM6kZCNVh1?<6i?+# zioJ4@TrUfjFOVaOG{v9tLvl#bs<0^(ikZq!%AKkbwSy)=b3ijto2h%DKVo=h za4~in$Cxi!oUE6v&usr-1gI}8h1D>Id?I`$UM5472+AwUSelw1#9Yi8%5r5NWA6uj znCv{yc_+7xo8x@QHQtTuHj3xVo9bHcrgXc=d+9RWWg*Xj7vtj1?Q!S;;U#-M>l~w) z#-wFZSCUO=3*w8+gjtX~mT484x0?%0k;a?)Jl$;lHr*OsyQWCJLA^`eN7JGDs(PfX zRT`D;%4!8gaZ7Pm(XP)+qKQhfiEKFNx>nlIcWp9_1=^-|QLSzMA)n_t`DbW0Lz}H&<7Sa}w`7 zZ?4NDr|S;$IZD=GwwB3aMACSa8e$Ql8m&Q6;bJ@&>u-BvRh#FUi;b9Jf$@eR$xx=- zsym^*r9Gm>GzFT)nljC6^##=p)nL^C6-hNzm9KoPNKqVBL@N5o_sbbTx3w~VMUvb> zrjS0DE|#s7e^A^4n)i@*$R{b!sHUoDs#|Jr?G5cpZKN(n-(g5IZZnEa?<_lQi>+HR zS8N_O23b!uk=_zC#2F+B#gVazMP^knl2|#M56*S2eR#eOcO16xx;%b(4fpuXb)2ih z)s0W)E8TayhPeLb@u$0sTdfP-$;Zj+Fxk=S(7^U)O`@?We^W}x^NCH!Rd@!%K(0Y4 zK&$0undOzapLv++ieZnDu76_CXisQQ=@Rryb(b}K?Gg=HvsiUS{X*HSM${8k@yb8t zC5n;qc%`dim*R=+zI2JKO0JZh7QYo2OOMDCrKz%3nOc@8%aDgCx@9vI*HpfmFWOd( zhw7B}xc;!NQ@_->!&+;7V|iowZYzW9@jmbY!XK2Qqzb|nN)S8OX^_KBS|wHOw8QPS zTNSs7mk0E>(QTXCBmOt9i{2OAwzyC5wt2thk8peDKGl`&CUG9fE9DJxZgIH9ct#(? zkTB9|m9%g|F(ICi1?AhcwqCf{`ra03xn^`V8uh2l-wm;v@w)L~KG~{yrHL>+P$sDi z3QskrU95Scu>d`80Ao?Ce6A2Fq7|-kPsJ&TuM7eGB`EGoM~LF2$CZwXQpq>jX{C$Y zDmyH@tsbLJRdVHrR6@fE?N<#&5oO$9Y}YrKKWQ&mW+1WfYfFz&hOH+$(~=w))7~Qo zQ57YDqjzX`|C8&_4s{YZiFqr$nf$@dy}YNsq=2oShuklDJoR4S(cvod2y-v<7P#d) zyK!SUdgf&IYnLHhD(4t|19|~UAVo0-P-3CW@GILU+kULhHp1QLlx5u`q<{Hur%>{_ji3XKi$b9L)3$j4`bK+!M}Y-B_OK{7%n}-iJM>diZ&B{kHg;yzhFO`H=5J zFD?JITLkYn=O$OFTb6Tw-c-lg%n{@t6gSplW&xEzWuYIiIQ$drgXLMaLc6hS+XKTf z!(x4+{*0l=_`>{Flb{}>c9;fCdQmNRa$Wc@%CMnAl)f$$nuk4X2 zgP2YpY~Ey;U<%bs2~DgWoY&N+)H}>wjAQgo4%6IHJ+FG6=GS{i@Lj#~yo38Z^bY6~ z89YC5zR!1`*?rRav2Ko@L--&0wcfD%Bd0;E6>KAi%F!}6&`wd!Fem7WVc`uffaNDESh z&5oQAzBsVj=X{_2{&1fJp9Ov^1IGtE^&06)Yb(>t+C$^L`f|KGfFT}L`xCeNo$bqw!EicU)Q7?(S=W`JWrjNcFcf1~;hk4aRG{yc1c^dcv^z!8*SwfrPMe(Txe;lj28?>#y;sqIbf2vO6`B z^S48d!&-8tu|*;RuVWuO?g|$4@MVt`joqPjB^9ARZq%M_3F?G9r~*mvvyNr0zc*$# zg>?NXqiHW{Mj3)NIqEQZfU-rkN%g`+Fofu(8h5oyKBV`(Y?FjQ>@+{qI%#@ky&`wPW#Q=FAszMN8=Y6%&8@lB0pCkX2X*+0V`$rX zQsxB0BSNg{gKiFKJokq5<>DKCJ8K)Zlkr=z3o5t79E+zUNm+PJY<+8EN1U7cM0`OC@N`?ZOJR6@S{L)Q@M5+(}`uo=(-(mclVfJeh; zjH*bdraT>TC5{-+PWqUtpB_JjJ2`ap(zxKkZzHgf(M=TQ)Qkg&N6CWr=>PRc(v3_OmsZ z7hwVdk9CRl)VYj(jXIDx)AUvoE5?*dCH<5aHKg8W!lLFiEtZPKmGM6kiYAw46q-Nn zcrPmd(fbWq?LOXhxZ@AjBZt2zK~w`Nj&nBn`r!Ae`^Jr))|t|owkGZGRMPD2vuHDf zsj-Qj1II==h06M7`;Y1y%op=-GdlIj;^(z7RU3Zro7OdWwrCqet4Ni`@*Rb?!e`&! zmUPrlZz}B2HQ(*jc7zG}s#@Ji_$?ul{e`@lHj45YY(PCC@24+kE^@AAo@1@SZeUlW zQ{`WUjy*cjlBTQOP|cG1Ri*b!7JPY;TlMW-_Nqee`=*kes!FPlb0Pmazs6yP|6e}Q z%t1U4{=V=RNed@tPti;cn+r{wGvi>!xan#0?q%#rADcLCz!(2Ho>iA{2) zxJ$mHJ*#?o{;7AzKkR$|<ab=Gy#?)+V%-o2zJh}bxe$ON2@2(Qx zP`{wqroq!=W`sEp?DQ@kDNS!24bAhLO_(}r-tUW!PWfx0bO}FW+ss92RRi+-%y67w zJtFaz{o662qhHUyx}BAM%D#NQk?oZ|^>OyolOLpCwwLU!@vB`^H>iGYi&1!2F#;b& zb#|KK{nBqCf1*dA>l>H;?iTO#J|4mKp|pSjzJ(4aNM(AP&RICGC!?2Nd8W3yG%@F| z4?Q1w&m&$x%U$=x`8D=jcb${HrNGuRSO46Z;ITTmI8hn@b@-*2HF3O%hpB7FEl8X= z3!79hW&hmZxr?TqSaxpVkr}laq*2*n13ZL?t8`I2To+UoTsgYx&k|utNpa?vzdjy+ zGz%S)b^@`|w zA*|46yDy)X0Od)KN@v$St2BS|`h5Ar)0ZFK{dO05Hv7$lYrQY-J$n99+W1<% z1P*kI4?Ym&nH(@?+TaNz@u9@w?PIr2C{Iz3n>ej!eB`v;Ir-B!%`KaMds5cu&2bjb z3#31lH|yS3J}R49P*QljusL6zFZw$3z0doE_mAFA`1C6OVd8l1H~ha9`H?O ziPLrW(f;d0sXlpbVICV?)7{p1AMyXgtKH=f`c=KNa&c40k5k_=zo1_d zbB2Glz5AT==1o&J`a<-0<^4T3+4&30wMsQ>jq_;Vlp(qi1;d&rqzw%lE=+4qVy7HV zA2!-MDKAZt)|NVa)})NY4B6D*NB0g~-DeHsn#j`DUiL6gR4mIoo0sx^a`D>&Wzo7X zb3du_7Uy65j?^U8FX%LOb48eTwD}#WuS1R}uTOMDUO#DYaNjVme|eL*o479>uXv4h zH+Y}r1vyP7Zo_1X&uv95e;3Rz$;uh|@!s39?;pJ$_|Ek4+MPu&&pev&=4MNrW*9uk z{dT~@z_$smBlq<07;25#Fi_dV55?zzY_)NQVlr}G)-n@)GQOZZouOS%1sGIO`^L5rrOv;fZae7`yG=!Y9$ zGV>1Sw!ixK^@fK}U*=S;6|$fwP9fgv;0Xz1!HAQ`WQETeq)d1-vUX%o>XM`*skF3% z<1Qx6nQ%KfKS?=qR3scYilM>&=^WI=C^mhY_w8=MgG%8yVdd-62j9Qu-_Bc~`)BT` zswH)Aq$c%d(_KhUcu4A?=d*^hXPb=>KbywckZ!^AKD{TCveBJwy|6==BMO&h&o4Js`I#fD%`QWs;nEtbZ zgpuvBaYODW+D2!Oi5=UT9-JIBx?@asLgwiBVF82t`_J2`$ihl1n0A=&{!Qn`^3@ z*5woLkaGn0G%v{U5xoc18b)^>>QGc(`F5pPQ+P11HZP!T_oqc)E8nC)4|s8`Ag6PN z?mG9H*N1)%vELGk1}%wt5^>7kIcj*^?KpVk-LyTUZE4X{dXo~ytxx%qP!uN_r1GOW z6_f7B&UGHHi?3Q+?pt%ddR$FMRYgVrlI;9DpW<_de4LZ_sCsAHLD@`wt#uWaM=l}s z5Ibor>2tZ&F5_Hbm(6aoxjwEJTt7IWV1KU8Ig2@p8fZ-rZSUCJKrXvdJhgOBUeC9! zRp-72=TbiAzj*!`ty>{_WuC;H?fxowP~5ZuAra0YgaE2fVPy7zoaoVG2BpNN?Vq%H zVr5D~nmp<8(4M%^e%E~4*az?s^&7#p=9{hV&C?rKwCrfyQJwI^_xqn8{oi+Ft3Om1 zy>7VL{ZYQmbjIukZ^o9{oXr=(KL2|fnYn{Kgvari#y`*R@-20C<5xP3a=e00hRW18 zI(G=#>&VsfD-YGYEF4_9?Z(?V5~IhlFPSLd-L021C_{ z!lbW7Ifvhzf18lkSXSQjOe~W7D^BWf=sxRm!H(=!9o-5O{vfYlKX3p`ea}r^h5X+< z5a+#)5fruUjy_siByjGy(X+I%fA{S6rwuhVjFP1}W3mK-zKUShqf*NZ;q) zTZ85}uB89&xx+IxaLI7bQKOT$OqxA0E%|=x;DjSFFJkb1XZ>*BLGCi@4(cjPh32ik zQ?|2bN%xAnS*4otxw&3BQ@&K^Ov!&#pWObg$Dm+|n8HMHyzqS2HOV#k04<*&qstrz zy59CMbJg5Tb|rNTwTwU^{R@wUW?{FC-&73g`R-wj4_eyl8%yVxX^ZB3d)jhP&%{?a zo$`3<`o$|Z;0|vtOW{Z$^*HqNp-1FJTT_BlIiuI7;v;$SXQN(4EbvS1v()!5pT9lM zIPYT`2_0CK_Pugw$C#$9AGsC#itm-N%Tm4%uQ^uxqBX4z@7mhFzP>#XHo6|Eg- zHQV5$;Awo7SM5E>{i@S8wv}=iJ;^!g`64hWE;!-RsPxgA5l;tc2W|*I)OSbVy}%ZK zV(>qG)4ZB^Y&rwEZTuoH>@H|V8>6b>#yfRu>xVZK)h=rItzk>+_4>SqkcN9TAuYs? z-fn-e*MaL67-P^xcn)z4QHKO0I0g}~VPQlMWIcQgyJPh=k5Hh>48hv&9qsy7YyGDB z(}L@=R(LJ9%JsYJM6ZJ`%UGd~%jttCADni3-1dDoaN3alLp_G82XBhhhwTqL5Hvq5 zAozB_hLE^mZ~xytR&X+q*A|;1S85c73NCm5+qJ#pX6t|^r~17$^Qul(&#uwdookrT z5!dc6$P(-n*7c@IUdU%CrW#l2=3%d~EbJmY98+3vSdLrW47nyJQ=u|UTca8*&rm>$ zt%410-?~3{P15K{Wlp|4EuZVLhVzNLfeBGn)ME~~^DO@}10;iH$B!Hw9d$V9mj4ZZ zf!~b2Tl=|%&In_LbB(H4HtA%waJ>n+7pHX{dcpYagjxpEOcWqQr5YaqC=fv9m~5h;z_wIFWYFvE8LQV0x%qXh7(?pnU!h?so1< z?rsm<|3+A!$igsMze)VPjvds!$iH|zJeBk}WgKGzBc3z_JFjWz-QIJ#iy@dONmgn# z0?ie5A925)Lv8(<{%*S5^1M^n`&Oybp?ZIlgNCh4lFt%V$>*uw8Xg%|SyO-ytOa;z zZ8<@S+|< zj4&0iunaTR>iua;# zsve=f34BJ|z0OY*j?6HR{EN3ucbR#c~LEnIer0<5^R>H5boAGtq3~ zEMh8QH!+)#hl+^Lh%<;Cr0dtjwo6Rk>frs;3P zbKPQ1raDMHTy;X#PjypyR!LB0sv|YKwLxHS64NTQ7xh8FhY@SpY}slVYMBcBk%z5j zTM4Gae#d^;a;!y`9E+!Ak7b0F2f{RKpmnL`j#*+JZu#9pwxwawkQ5dnTTu@}Eny^4 zM=GT7Xy@o`<_6{-W*Ku6tB}>f{=hlPImij+M6s8%(pWae9L8uy06mC$o{SMM6H3qp zXgE3?35M6;M%xFg0(cyUTUeIW=A$NGQ;~56@H!S4pBh7r6ypg)wxPxlY4kDvFlY@; zh7edH0PYe?cpA4Z!i6PvmGC;<7;~8U%(Pm6GZ7>})v#VtR@I{URvFT=kso7*T%{Hf*=bJB?SDQDPKbd_j zw=D5iw$0mi&z1pdjs={6Tfoa+0{@A0A?|1v+KB4VECNROi+CS+feVRmi8qLsh_{FV zL=y2P0eDi-UFbNJhGNJm;1hfSC%`)3%eaP2oOIE#z!LFg1y0xU>R5%@VN(KE|}8x-u8!WJ?NF$T4udz-Dl0TUbmjMKCuq9 z{bSp2``4Cjdtv)-^TIMQ6}AF@19%i8piHP5N`=qEy|6bj8OcD7A$O7YNDbnLCZl7} zIcOZ(gFHqKAybj@z)#x=UxtqYkGnUJ>t?|JFajn@1%4Hu4!rCNtO{$xh#(e%JK++n z1k1x3upSJ?HNcmw0-+7-0-*yTn#t@_Tww?z`uuY!lyz0T)=ne1EcT-0bGX!AobZm?rQ)8;wX^waqxQ? ze*#eC;AcVJOi+s_PRAYa6o79M9uDG6JPJPzWEl-50CB;`O?px?pBj|7Yz0pJwf0Z6j|pJgT( zKas#bJwaQZfY}m)M+5YUK>O1`SPUe*5roa)yawL@WR?ly_SEm--o-!fy#QJ)2JPBeTg4#v8NhxI95=!5MbM+80NFm!_v;}1 zi@*L)s`Y?NB?dE#omCbK*im+-P$qN~NbD(?1wMeI66yp&0yP2_Q#Cj$fF)M~$v*{b zqT_&7lm%vtv4Hgz2yE2{%mR*JB-wdy-GH&x2&}5;|FFFVv+HFb)uSLB02-bPWHk-g zh!+^uo?u*2!E?g^>{S8gttK#kNx=MOpEQ z<>DcLmlX~q;{(0H-NAFg53~{rRpXIh?yU#d1HqGG8(2Bk18KSeoy0*Gfj$I4zGZ+R z<_P8BF2^o)~@3|e{nwi9N6PMz_)q_+IRulT?j_j zJ1|m!?E@(u1v5k*-UOZ-y8w!*&_OVFe89Z$1klIdp^bPt><<+H6e!T+KES^EfUkt> zp=Ub(izK|IxPg(7zIHH7spMKzW~5_d+K%R+-nf|!jQ7wjAH zDs7*>8@xX%*ejVamOx#L!%%-e>kP*T-aqvRx-Prtc(ysrlbRb3VIfpcbQz6cBzK*m zhBMq)ZhCfmGSsVIz`n(vT5Ht*?J%nVRFpYxQSkHHLIosZa*t{;c=HV~+ z&#OlEwfVhyxyG?A=6P3RDA-Gt?eo?c{RGR+c-%@;Y|%^T zyyrG{gzySV=4Q6Pvs`uf1P|))^jP7oee(?el1%EE(TN2zME5Ps(2>Z87K-JL>7}<| z@Y2uqZ%&SMqO6hrKE$UXw;_kQlr(_;gRV4R>A9hr;NHnsHShV6;c+7J?1wFFQ5(Ef zMUQ(Oa=kGJKlL)zR<}XKhSmt*C#+W4C*m~tCM#3V?$|j%;%9vI2H(A4qJ;SBPY+|D z!SX^I=Lsv1)sG1?cuaXACU{KzR`2d{yvchG}s6mw@@|OfA4B`EV z_`1~N&fuY)_e+oajq`tBKBhjT|1QP@NzH{ZMbY&v`e90N!CO=k}8DQ^p6-g8TGbd~0GS?NREmum<1EaX(V zHtYLHW^)F!EuB)~w-5=VuHyl#0P5+yZ|UpP;3}30x;A1DsSw&j-)-C9J&SnWO{a5} zKP0Wge`u+!zucGEhIGs`&T|~=^8}}Lc01J*dgP;Aml3D5WKh1iv$W6AonAY8i)tI_ z1Nr-yXUXA~ed3!M5;V&$*>EEqh($AN38}(ZX@BR@4yZ}wm<>P6pK2W7qvjNllA&kXdchcTIyv3x z9=#eLZMf4Bq>J&sMY(4FrVUiz^%(4MQ17NWD`OKV9;NOt$VJVqb)OkV{$Tb|lC!K+ z>4_=DE~vl9RsI3>`kGej3eGOhdf2OXwd7H7xoc8uX)~WtNjgaW#Q#FM-7`#(gCAlX zp(mThSy+JH`$|7k$&zGJEuNiDr7C{MJKZCADDM@53e(ACcZq~&I!&7)TB2O%yn(jZ zY&DNF|3&Gm!Ayf4R+62q%anubm+GtE8JgUka)PVHsENw>9Om*^3l?IJZ? zY4O9h`vh<=^~k%Py1evglrcnaC0j|}QNOtwt*a&CFL`a@{pGO~#M;^_sEu(!hE| zxS_V`E+Gz_c4oM`#n6LHB$haZqEg^t$FY4hGA*6ZNV;MD?l&H!Lli)hW65A-73ss0%&Ayr?CJ(?UmJ&J`#gWlcA*Xm;}TM7F}?$~)#8C(QS!)qu7t(VD(_#>O2b*?o8zd#yG$T6+6oU}f%g~3c(Jwa+c2n|G5B3j!`GnMd) zUJ3i4%V3)BjPbg47WxXgj)$U0NiUFxmJ7BYHj(WDx|VnVaGoTn%rXqul1~sHBmK?e z4MzcId8;u8t3pm#*rp6jOqfMH2;bBP>9egWuo}4sA0Xu;1zyc=911?0EFbOLGTyVq|3Kb%!Y?t92tk@EY|A|~A z9EUerx0`1gu3I;OxB7I#CFCtK1C7E6Sf)v2tc6P{@w5x17la^u4p@g5!m0QSEFQg$ zhT~kYyK~1H4LwA^z_Cyz{EzL7@x9s65(DK>yC@6cOk;!LCSVYXAO%V$d?%iUQcYjX z3gbg$DYcktrU>92*lt@g9*ee;|E6$=)8T%$>n4Wbp!JaXh)sn4z!;dy*kfkn!{CLu zn{5t+AsJ{rz8~9ez%4wY8|^e9#Ja;8YJCdDpico9m@ zT!@EbTdfUPFMb7eL21YvJk~N4n+JU&WjqLuJ7d@Cs94Bi}5 z@eSA3uuAw9 z;Wp|7&w=)!Y;qYP96Ds11sTvOWPfzOZM@}}WjyqXm`xmm)M1w_o6Hu=N&F5xn@|9q z1?x=uUTU9ErY$R*~7}iIyeSQS z^@GRQ-eFhaI^;NwWAmWDBt#B@tWU z0NZQJ-!>leWF-AYy=LR7@xNfKfM z5{V~Uv!HrHIN40efnfZi^%|N%I!HQ4yaTxCS8*}?1RqPd4*!M)S@zl*Y<$~w>v&x- zU}{HM?tz}Xv&_;74QtIw=8@)+Mxl9&VXpasd8p+SR&6b}oiX&97{-?tDO_Qp7<1I` zHTx}>uBo1xG$79RQ z#n?^jB1njGPzxFbRy)_Q26G%(hrI?XsRZj<^CcZ-s?k0-9x*&r-<8Z3)(W@rq$T;1s)Bvhc@PGkAVf=;z5X*$pX2yhDIE8q3}DGrt#Gdwb9VG}W{ zW~RZcO);%Rz91?TSO8tmxy(J~RpZL?4)gKmFZE^le)L)3cEHocek=Xnk4xS@&3@952(>(k#$9G#0Fhmm?XL9hPyr(K@D*tRzX(W!XZu z%teC97^+9I34o~`s}rgkH9hj*Mdps$_K!_)V`-a1JKF6o>J&T?&J}+Xr-*k;hKaw5 zjk0)Iwe*&BqP$G%V9v2z$8V!q*nC`tRI%Akivq^}p0)M* zi3Yw#qaCO7)jZdgXbeV!db1)(VCa3)k>B0YxwGf8;CnAaG`n?Rk8hKuJ-gf1^{{KO zP}n)7ncb1va=QJ!@Ji3_-Z#<;&`*g(EVfCS^UU=j7eFaJ(q=C z3iFP76TU6#eCVgZkzu*s*8{(L40aD@&12~4HyBFpYu6hd+Z_ZhD;OD!R;I*xB3r;+ z%f}r{ydSwA;yvPQWvVDyPy%@`wgk^KDb4Fl3T+_1%DB%OWNEPY87CWEbl>D2vK<0r zx3XQ@a=!Is%hg6o#Q%>w(k=(bqwvD-1ApQZHv18e#7nNysku1idZfC z(%V;Swr*f6{CYyh4Pp++8MgLl9Q|Gd7J>&1(t=~ zK@Xr@Mi>-*>HV7M75%Fi=a{pW2MUH2< z#{lncKB0m%@DKVOS{OZzBxJ2&uVae=t8SSCoxG39MXwPHkz#8M zG{7(wiM8CoPS}QH;nvaMox)_CXjr6}su3QC@sdH=B9r2&NGelznhhEXSpz~5& zXZ7!m<&|%$_Eq@QovNj_MhPrk7e&vzibO>HXp)cXk-q1n9>g3Q(VQq9Icmg;STtgO z;7Xql&U;yD#KW-7BDKY$BGL?MF>M3YgUlhp8K zyO3THG?rE1jm62-2i^l!*?xl_V;8^|6e)PUiLR+q)r(7e_V#pi_7x(%g_4`%C*sAj z(LG2nrEPlCl$tSBn`#!8&1^c+5Y$%D71lYs-KTM(u)m}cO5rv2jqiVDM8W9QNq?l& zjM5D%4SN$r^_<`|gRz_IJ9!d9t8V36Jr zrOVDq76?{|`nG;)9o*1S&#kSiL~3VNW;8r%+19RZrMCDrBsU%wPK20F`}_J2898)F zYGm4!^ckbC0jAwcKPm5^QyuX3AG?x)R|MLN(Y&9E`jo-n6l8?~G4W-LeG|H!&*e zFIgu&AzvXKtJx@hB|j`;cNeyutIw`4_~BMv@?&6)bM@^8xalgef)fo}1xN90o_EN# zxbsO<5{IQ}Qjd)YiMz#v{GS`CCaKnV`*mQ9!56(7-b%|-L}lM7JLJ^ zQ=4I|hn!d@_Fk@l8|{Q~a@iXgdq^wLZwLihL9!COkw@@LC<`q`_JDQ74*hLioU*@s zse~hl6#Xt*DgP#$t9h?#Rr|`)MTa_PHeRnUuJElEmg2SUwTqixHh!$fYP8iH@QHH) zhaY@saMB1xYS{Q^Nzr2;#Oj07`|NRva7d!lNF(4#QzvxEb_!X*cta)8=TmY}9C%}U zm67T~C8FiwHZ+}c!SPQn!&TIGlHFzJGLct<~Wx)ZOmHt0j@h8Cz9^bMaThsEqIT8Lb*w!)Bj>ECZgng zINLMT%9YM}x2!_0V>4Ck>wZMSmlGBBl`b5|^UKkX2%3*S?F|+Glt}YM&g0kUtmq;4$<-1 z@I)jU-2&FbJkt|XvF?WIhN4&aLwH#HKsH^IY0Ng4S&NNy(!XtW@(Dma>861fxXe?sdJ8VtCNtijk*ZB2=_;d zP$oH?;Dd^wMzE>|Uu;{?n_@JVv>bJdoGoSx+eHUt&idU35_Zm9VV$jCsQIUNUCaL3 zDc|+qHxwQy`(8e-KC@+I>)F-|^{bn>R4^)Rrgk> zK=wGsU8>M_5S@oyBUU*MVF!Y*hN7u41XpO2xk&R~@~6x}Gu22VRx*aL{&jM7e&ST& zw2v80H6S|ZIjSY7NOwt&=y5_T%qOgZgqFKTGS~+TQ0|p?N!E)~WEpCA<7{({nQpGo z-%xFpuIxVCNUaf;CYB}_NByu?ZfrQ;{zq$KOGAB4v$3PxJkGf>_*v|L6u+^ZW6zB5 zO#B>mCvb~vF>?xY0A&dAy6G%F0X7r2a*8=d=203%O(fig$_+*80peB>tT|-ZMnLFv z7L|M6WfJcqm+#O-xdz5xCb^5~Pg0OlplrZJs=`drW23X-h;fdpN_$y(P@OB|=>z;pD2G^7Bn6+PH0Q9s8S}wH6BB>Q6a82=p4V zV)XN|HRBz|l_c)zKcG*Z%Qos$Mk&}y3dK{c`NY?xqu@Kxk>DQ;s7QAR3vDlrp^A9n zEYS;jnD!&`fOZkQJ(&O@IP$^;X+zHEmxzSGAP3 z`ZsTuHp3`?cg)R{Evb^JvI#@S=L}gAV&<=&bm#Xt4aEX%RY?mdd&4w#aR=bEw-jHjhrCN=PbnBC?Rug$lq|?9H$X zdJOpF#{>S|CT*qkfVfc**4r)|FBz^~tTp1F0oy9enxZ%&ztxO4Jg+J&s{H<2p`^5_ zVnw5&?M7!@yKD2pMtS>q<5vf9==J!Fv9rntZPI>L)Jc~1bjoh1|FAtFM9>Fw_qhbQCb&_#UhHf1os=>{ zC%KxGL-HVpkU9yzh!US~jRN0@?$bdyCs0XVA9=rz3*}B!V+#H}U(RFJs$XClJOFaPVDql6n zco2NqHxc8To*AMP8NGAb4pmyeJLU<#T+JWyt^UX0hEr{^Ed?$68eQA>=y%ik{(}a+ zNH~%F&v^F4dC8v#X@irTJ($icJvpARkT?^3wg1EMo9iSnhdDXqQsc;Lkzm_HMVdTI z3Q53H#^Q#YqQn5U@kRGn?oGTX<~{l+aya_`>*ze-qPU(ozE}4uaP*@HO0!F>*t?>L zh>Be-7`tMPF>3f5TZ}b!jV;D*)DU~GQA9%!4OXzx;mY>Cw)g*$4<902?v~wo^XAQ) zH}jo={9&gu?cg9cWfUfi=J%RTANujvd(EaNyV_$&b1z`j38p1 z)nbTcV&$X{GoQD9T6S;Uy)$@4EOqSk)`b%AZ^ zzOE?L{_9&6{CDW~u**S#{+Y(H+A=ahoc}E_tEh>IFxFq@0sE=#k zcX;QhE@ecckT9%Go9=5;#-?>o+dSYzm$;bW!GXxmd!V1CU8Fgxjq!;N-W@#2+$7|K zPh(>b^#ZPPWi-gczotZanS3H+Zi(JfwAi(%|FX`r)dWN(K zHHKLOFZfL`G}m5G#mGC#yGy~uLWNy+ThX5Q#&gp3+R@9sfcN1f=4;gXj<+URUespQ zzP0V6-!pr}d%}3mmtSIgT^;!O#XHl>(|@Nto0ymOY{%bAUwnQw;_a*VtN+b;HRk2V zk4bKi|Es2lx{V$9?cnKST8-MCoR?G=(Q~1bFBVzlzT%(?@ ziY2B=$K0K~=iPU3UX@`RV71h(vSinJsyftGqVCVdE#{l@hecmuE7#99qx$0KA+Jkb zq!-SE&(Qsu@%gsGptr`-ypqo!7rizXDgXVks;z5C#DMny^zA?3!>FLKD+bRUyf3js zc&;C>DbWu#cJjL(;PKZ-XEkJ^ybY%X4=~wvNyiSRC|U^V$V2UyK_~kTI_Cv z_6OBPtr#wIKyxj-Qd$DB1r+3Bu zi?crDi>dmH&1UuX4hSB0EmImbbnuTouEk9C3(zgswAUR9SR7Cr`mRAteB;KYF;k=Y zz;wfOa<})YxSl&~O}3AxTk=gjv^Q7N)VRmDL2!Q)Y3!`2@y2=fINx|yxQ}rU;hV@$Yd$7_e22{CvdYDLqkv9d>3jX1rXAy) zv^=x?ixB%xEYT@9d323o1`9^-#zzPJ8t%b{;` z-#Qn-mp`xBW=J*tzey3LITaJV>`FVYL?b)K_qEfLmnY4&W_ag*0`FWnj^M8`~(+AyinaVeDLXL8tWfu zc&_0HjWpE}k4S8LG1)y>mZSD+Wx6(qs%%GZfY6hvx4kF79pb}J@iGSCZT`wA5&ldTEltOAX%*A0~a9V z!((pfi1ZXHZs<}CtF(1wvho};+tW%|#bkjov6kw`1o1~fwHeJ#XAAjsilBSZS1fAV z=Gv3h=PE{&rB%JCd|YF;WYl&7cj1qUOP}VvXaD{7AN$j!f|{pyiW1)(C>d2*1uyqQ zZ3vU-xb3^S#oL}|2Y(#%{iN&Tj!mh|Slgvpg41uSwzqbz&yJw^0iUDI2{#)bYGsc3 zDMY0^PJ9qXQkAvgHIFO3bqm-MuFh@r{!dO}H`ZCdR<9*fM`4c?o2gD1#b`jG#5o3V6IW`r~+ED#MMl% zTwX?hIrw>dnXz(uw#rEkSN2dGc4e|_m`d9NW(1SV%;7584#Ggk4Pmqx#+5SNsU6nzI;tY0 z{JT&6KHdIYQzomNRNJF2!Rl*2ZY!v+saX4I=)2R!CtjAmJX`ec&D!_he>PTzQ-85% z1wp#y9L6EXG2loerg!DoaZ@^F9iOe5(R5f~YU`HI{fF!RP*-Z3nYxEAk0hh>n@wzz z6%}k=LB0?!SpTgmDQ)>N^h0*VOv_6y8qus=oNB&TegK^)7P(Mc9P9XWco6CEclSD) zx>d^C+AX>$<0EnJ26uw9oa;zkqo~@$)yi`3 z$ElyDeIEFwRoR8Id6g+udo2g-XDlU@pRLfIP?J%$z0B}_a7p{O6JN)^seUu1bmZq> zE3Z&J*-Fn>@^ zb2c~y0oZqRbG&t5RvguAz&b0DSCk2|T=!97AH9h=$!VNg?>SckcC|X8=5f{e%2n0hRn4j9DxxdChn>(@wy1huwV?KC?F?I#<#t_K-Q3!R)ki-E zmF<6j=AG@mtn}2!(k}^?Gb!6HENR@JL+fETzdro+o9UfqpPbxd z$k5K32J1m}QN+KDOAUIYQ;TfP@Cvfj{I2rN<@Zy{Y}WN$o-0^l zu!EVZ>aF4Ao8^sgej17_`BTnxp;`=f4RQYf!qd;ncF4xQsVJ6>mUf6!*+Wb>PK|S{ zP420l=*w@rpE26*b{_?I|RG{;cj-eYd(pSy=6ax+MC6Q|~3TPF;6HC*y6S zgDQ3!65`$$PDc|uGTTCye4>5Ng>m5J3cyGAep*X2pEpP7q-qYXJUOdHcwkK7F z@?XlxFLh;)D-)}Qy6>zp_A8cFweM@H%frhCSKKWBy<%7GHOqWkzU>5~qec5H?hqJT zOPMy*J8S)neO=wlzDw|mhvi2NLjrCF%`#sL2?|j+ZqsRC|H3i%CyX6^f5P0cNdx0M zeQXq>pCfLUvC8d=--7p`@^wLsDP~2mM2>d7tofy6^@qRTbuVuHaYe=G+F4v7aw2lv z?UCit$8AG4fEM-keLZWDL3~=e;@p~WcTEevU&0&@^m8ByUKBwUSUhKrc(xX zhB(TTB6)&*kZ7r;2HKEmi)d+RfV89r_b{SZgQ5#(sQF{k^{ZFN{ zvUgQg&2g-QZ7qT|-FCqq#~fupu#t$=Byrogb=(bh9McdH#Rv8R?mpigq^W3at|>S0 zNDv+PQ;4tmQS;#b(}sy7k5Aq*{^*eEVH^5*8oG^savN9ZXsRCJBkH?E6gK)MGAGL6 zpXim_ey$YXmAxAJw)B(n%W3O1=NECXH&YhxO_4;m)7j6lS!jW?;u7as&tj}AlO#D< ze&NdRRna&_=qml;DsmhV4$>d(y=*D;9p<(}?Hb{cDevL*cR0?Ke{-)Drt|x0e``l; zfW=cg(K63|#lFPmN2S>OYo(fDRf8+I3P*WFRbW+eb!pArI*YX&{@E=0rcK805PosU zJ-ei{sAgF&dm$By+eDr@W8Y8pX8UqG#3Y%YVz};vX-DAIpeG@5fm4m7`Eb+Nr0gN& z__JdVkKQx->mk>=q&K_kKVG`;S|oEQ5`2CRFo#HyRKrmbcAr%QW4rtLX36t+z2B%x zXH*=oYs#alz_S(K;m#a>6=&za(0Tkdr_p&(YA1iI_(|@k9*@)bVnrr0>2;`0*~Yb} zDZ~xtT0`m9bX!M|)9!vIjYQUJiF2r9B5!1h=$@>#3$Wnh$+nfacFMXfHs|y!-nOLK0NMDMp^RNzPH+c z3`tXck^I=zp0{d??{WW);a3uVY;Y;8kKZom-!&S zyNir?*Rk922jU~YFnuYKnLx$U%h}U(XSNT|VwD@kcj9zZjXjXgwM?*9S^lWISi9FU z)_S>)wAXXiw9GDcE4z(5!=LBZ@oycgos-=P?;PaX|0S!H$H{Jc2NGMn|4JV*5`OZB z#A8`+se^NutJE>Y*;y(jJ}S@ZLIU0d(xxAR?0)L-#x3`C%}6aCmN6t{NT-2(x2<1w z4jZSNDkOUucn(9uwnP+RW&}sI2wbRMAug(IUGi1wnUchk!#LG!K>sOr^%S|{9cpeh zYlVMzoi3yw2wKlbVz@Gd+)G}@-t?60FsfskIm3k#R);$uifXV;^d0*OE=}Bzda@sc zWWK{wZ}S4ID-5`f0w|W zWpCBCt65XGwf32Pt?;+AC81Gw*1S@!RHw_+JiJ@&+JoJ?jQO2&$=lo(tX`adwQu~`NZhk`R4?z^{t7Xl6bhs#nd&! z%xO9OPbB};@m>=}M5Fq>T9x=sBG0cqQw(DSaxhbP;5d_ zsn*$fUF`0B>bxv2<=U@ebDJ<>>2(j1igN$2XTgJw#UZq<%!v$cAp+PH#yzsgt<>xjkzXrRM-;VZe+IP zs{6BIW|`lY;>uqwLwP;Fm|Nm_O6A)s>bh3dmgiO;tlMiJ#g9d8p@TT2?4!7=h)_KC zoJBU|c1N7BUhFT7r)KhnyvW?d?yFp=rPIZ(>_>}@4zLthI#_#HNM0R#h^%*E1u(9`V-QDenwi+KE z?$^jSN2d?@6yB}@9l0%ZS+HK0MEvULQ2VrMQTe%wZgoAW_Kw+nHg}wkvDj+2*L+vC zvFc>C(f*0+;6&A=cPXk=TFJkcN1zVtg1cCJ=bYvWaa8aRgk_wD`$t#>`|~q>jy__0 zZarw*Z8>b+Yi~yVOSPomu`z6a_5_nox3|YIKI|sC6F-b=EY1^pz?0v~y7`aHdHZu} z9_3FTq1$s0*gb40Hle3~bGwN_OM z;#z>JnX(4w68Y*dHKW>~I7w`AyTHG#Mz(ZsSFTg%@|VIv%3bKzNOQc8<>PdXefRrE zm?s7O7Wg1MsOi`a8~S9Ya{Y$(TG`Fep-+?eC^4{;VW;27@WiMIaaZG#qPB(nVfaH) z$Q`wAsCi!gRZX$wG?gmG2xo*udRE=;n*Wt=sz@n+UOCXxhi>jlM$M|fVuP#!@yYYZ zwN;>bFRJQ88B07P){Ch%oPwpH!ryf>TZ$m-e`L zXRwP!KIItqbC17t9W}XTM;Vw5%wVZaY9s+(s(*7+@#j19PxBpTUXG=`coH>wK@Pbsvdexovv!% z=ifhLVphR>UCZ8JpD`<$40;>2(sl&&+$(lJ+RPs0yvXAH%x~qMvK*a8AEkbz zT=W(?iPQ29u8M!l_2V^MNA?=~lF7te-|T$p9w04{5%R@~QbmShkK%}2P)tw%}GH%n^h8S3fm zy5R2X`6Pd*YOfpSZ#3xxJDV!}7KWz9UT@d5=dwQE^uF3@Y=>rvpJLxewG0XjBF&}I zi{se%!SOS~ulkKtuXg^%%%K0FM#5V>jQpg{QmyMEO$hL(*i|Gg^4l57j$pCJ40 zH%~a&kOzg?{BYz#&lY}iX1Uy+OwVz6(%%aw_PtgJq3-T4*&BI#WsK^fdI)(&Q>kgIU8l{}tRc@UH40xD z?+pNxxt+YLTqmC{tMMN5Se$s z&1L%Wd-<=$<<54_v(AU&TuM{ht>RQ!MMYk9OWOl`d+xq?Q(WnoBU<_0e5x=&SO6;? zO53puZiouAGd{S*t z49U;9B7H38hE>4Bwosn z%KOXLDe{zq$<_L~K95bUOtjBd{cXeUkjruX+70Q}r}O5odNe7D(KJkKG^Ek-sQwL4 z#T;!EA6MBhE8H89sO5;xu2fHJ*#X26(L@5Hg(IHtY*LG78EKGpYXQ>_Q7sq9ol zH9NBzl!1Cdbz*w)J|GM@g{|UQ$8@L0`3`n(6n}tki2NBS zO0qw*ccvCl4*X=Z(iXR+v2C5*hnh__r@PQI=srvWvw``Z?auZDt=a}2<{9BAD8whA z*UkAm{8V9;Sn6nn3WIP|*}sqyQT;fYI7xJoIb|ypX{uuNEwU#vnsGi&>X8Q!tqxM1 zQOcAHl)II8lw*|d6&ghwxefKLmB?5=js6Q3WWm;Wd&%~Je=tk2Uh!VhOSw-yN&C*Q z&3BY(j^8L_qH&4uaPzGur`tA4lD8S%czo3A$cfPxqsBJOZ?q-)LUfO)Y2mX%tAacF zhv>dm^hBn?a@liLw7RGKlBc^cgI;83tX;4xjHf$L#Wth;8|ovolmCV9z!reBo=3-W zA;Jfdb?k7KI@-bmHt|<@x3E%NBy{4taDH3{*B0w#Z#IYNLaV9mcCW3EeWiW4y{$db z-p`(I+h9A0y>$=d17_h=#D~hJ=P_Tgsq8RT&Gv<@%;NU)(}nKh|AZDoSK+a+(6Pw5 z0-41nu6(!K(~CGOE0Me9+mM03Oi`uWpkAa2)J{jtrY%{keoHpj651F|Q^b|Wt3E1c ztLCbds%y$@#W493Z~&Uf2gtk2ccXqe92M7rpz@DL)ydabvt5c^DmQsRx6ZJ^C>k?; z7WuGDaQ7m&(1+hF@OR1(I3z<%9!7ZmpM_E*$Px)+m( zui^h$HIco?TA4mLTN%d`F&x{QJI{_{+S8HL7`q%4^NwJj&%=)0V>9DQ-KnS4Tq+IU z4WZjt=@Fpz$FXCv1OLLF#`;^t>xA!7d-0EOL~M@e!zbrx*D6pcl%8KbA>PrblK3d= zDZeGpQp6#{m{2E@lQn8>toD=Ug64(B4>LLzypqS7Ak9uPh@7SFrv4Xk{Cwp=WstIo zGD^uPLX?$?mmpbWD@H2v6dpx;YS9IBi;XVnb>48BZ&qIGRpE7I1 zMu)G6m>v0|fekFX!O_d2(i%LE{2}sU#M*F0m^I{|pt68lrgy$p<3YVaJ57CGp$Gk{ zmwTVnhO9;sC*>x?EG2RS&iILU`)+W}~ z*5lUG*5}r*p>Z>8y=>d89jwEw^T3szWZh@IWmTdRzd!0R!>Pszxhq!~D!l+>} zUa^h1ckD3Oz(2W6$WelYeJ9)inIuoV;F#-t=oEZ@UWZ?qTl@&t?K$Om|_fAp*LOE9AQ2)Swv>>I+1NnCaN- zD07@a?BKR*rTcip$(lu) z^U%U8np91i=70DescEChC+CrU$X?_?G6~f&>(wrF&UmCguAYybN+d~=4s}OOOYK5! zuI{ORkKwiPCTL{uf=WVXg?119+Wbq{#_;5br*R5?Kn1m^t(l%8YpKcDu*+%;tecsjW5W zu+R{D(oo2@8oD>r%3;4&V0&wO`JWe~xBrfxeC=0l**1f1we=h8BFM3)^)KrUYkfb8 zZ>%nBp-p8UWp~>*Qx*#Q53I&_*g2e$|Cx^zrU+|=K(R<1<#^coR-$>XnTyT@9W{mI zEpj56N&ZaEB`xY=b#rn$xsL2Yo+33GnjD}xtm&y8q)XE~^>>Y-zO8*P`HcwZ6}&I> zuDQMWrFlYlhw#qfAHoMm$ReLdMn{lgt<8Hw76-3Erf5=*DIg-#Avu>QtTIrb*@Nc%d>;J3CpwrP+t1wDLeGugM;$0I}P79!Flvy=&E zAFwOA5PlQ?na>nzg$(hHnCysjmOE2i)voLAC!S9d?_C3H=$1{F%N4H`Im#$-c;2bP z)aTR>)fV+C@;y0Ga}cX^9CR>F69b(j(AVJ+Ih^!`{*^=TD$%p$y}CX5r+S^5BxfRH zZ93}6c9St0mh7l$4R+X4-8cFq!))U&pBFwS{5A&u8Qd}Cd5AOQMd*mI*XCa4Kf_It zSrH}SXTvUswhC<*ay-ZpbUMi5pY8XL&oaX)-5!mk`c*kzv4m*h`N7!|5w^EnS9TFo zK!d%AmDFZEY`tfFU^!rsTW6w2#M``fgSE+I|BUZ$Sg&W>&D0HQ4V?h58`T$VD&}-9-w`WHck#3s z>#!m>?F@XwnQpiH3^+$FRL$MQ9_5T|fxKFNP|*W%=gy!TMl35kv}@>|&}eh9xh~8Uw%7b5{C-4M_6MqE4`zqhb!;pObLAA-+w z$ew_G@m8GjHlj~s*Y}KR25n5^9&&^DQh1!1!YyGjB8N8|QO>ofN?hrV0- z1-)iw${Q=n6=vmch~7U}wMCDh*3hdevV|s6vk^PLQ<&K{Xy#GO?K9BJwVIyL%-)#0 z6W{1z$Vccq5Mie$kF?kU}J{bhsP=aNslZ=T=%fMvm7hn9yrLQlaq zJ`I}}Mua!Utlkpg7e3AG7wUo>4+I_xSmr;(Z>4dUeyMf|`7LOFe-dVIjOV@MFtX0l z*dpdFt)$HM)3#mKbn95_ORU7DmL`^P%W}(bORi-(EL|7qS1(&EX6-}lj$2R@s3}x1 z`Yb%f8A~i3fiE30WU47Q6#}m&l^RWLrv68D!0H@JkEF-ad31B;0yB&)VY9K{TgE@+ z!v%|wBT|UfS2)HvUqKtIU8osGH>$~?pp+6bWs~Hb{3ddhTd3Np{M1{J4VpvNkZq8c z@E2C!Zy>+^n$?;cngyDM8WCE$02c5iIxt;U|E|tbXT$GdRL524RgKk4)T>YxX(oq| z8!)T?(wx)w*EcedM&9SB?<3!({{II36f(wKgq65s*zxcoVUb~h5d$L{N3@Q(Z|)gV z5&R}7Ah2OzuYlXWnaH5rq1mABt@>Gu^pVjN|js?Z$&{8vX3c5C`swRpBqo z0?Reax6s7*by;=4*R8XpVx?GUYYk1kY7=ak_SaZ>=OV`Uj=Dqn(JAyY`XpV1-CrzX zr#G;NIZs`HHB_QoN;}pod?L*GpZ+vIrpwL#liy6Jb5$D|K^l@Ex zWx5kQwCAC;9+keGz)+el*C-Av<|2;TPIV7ms|G-h0c2~;Rx4SE?|bBAtR0KU08&Q2 z$BMi|Jyu<*dZT)(It;?uCDlF<&aS9zs@B-!#G<2BwE7SA6wLJf8Vfo`xz zP5o||ItQvkwuYOwOWF#7|s@tvt6CFz;fPFVbNJjExVzIGc84kqHf1& zE(@mK1N%rsQxoZR^dou@GZUV7DSea5#m9u8vz30Z08jx;VO5{aR+(IJ$>OHqJM;UBry&<5UXqt z^l=8f<>~MhHzGeh3)a!0o(hj=F7_}ae41nU+Kuno$oYvwM$|BTWvPo$)s&|`0?j;( zRVEMq<$97Oon(UMfhI#6q;u;&=-`{@YUep&{*?}&|tI6+%N2> zup;wsA-jXm1TPIP2|9slngG94pUv34q-f@=51~Rh4ksJ2E)tQ2zJiJG&1Qi2at5nL zTUb1meG~lX59lq`5Z=u+^v>#KABWY}ZBK$vo=a%@L~Q_j2LCo;u0xu8 zaL&3AyXC3Wx0D+;@o%avc1G#60v!}GnGk$xD=V^lAjgN?Ywj#$xliyHr-=g{*Bqk| zSxRxPbbmkvwvSZe`O4GZa~q7N`@}IY(!P_ImmhL0nC$YIoQDYA>e4xc0~e7{`YQulWL;AKpO^gI1n= zSE{osx{R4Th3*X367d7~E&Bu8iv5PogtyL7Mtd{MjoOUbMs)`)w{YGXQ+utpxNfyI z5|N#a(AuR;4A$j5zDPXg3IQ>|L><2h+w@8GDH&bj+r-yMgAA}REbKDNLvoO>V>uQKDWOLkV z=P!=Nj$AMwl3X_&eZ^9KCBI*o?dXf>{c`6U#KQu`&CYyxb7Hw{hzxa}G6T*6BGhBZ zACP5bLrn1mIZb<1Tdv)OwPhxvI=`zYtCZ;8mx9%#k-A!y0=wA2Ca%qOCY<44D>YSgB|%&e{HjR@_s?s|#fd-Ra_wte%e&PIAL}1z*AM<6f~Hup%pki4K|Lnh+xV%#U-PKp(q* zQIk2|)z`TbC%N|!ovIa^idsH{CXqkBi(;^T*P^Gz%$k$6GK*xXw!XvOWRT@iU8ZH2 z?W6r9%^>RV4>gr?Gp|@*T=zV`h8xChheqFa3~;`7G#BTHPQIo1N>Dk*IWj~M_f(9$ zm+RtUN0H;4=oFH`^NeQG{KO2oCKVvcR;;FV57+I9tYboHNv z(m4v*k7Jy5j$%iwqY=8%<)9bfMXr@F-LVv`(k*-!{+akADj5z-^PHU=6!#AshLcRh z2iRy-wv+Z3)+gw|Hx>Jj+jV6%&8w?wLTw|dPjtBbh^@1AA=Yl}s;NUbQBR}FZ9&MR z*u*?SN3{7M2~1~2W+A5&zMwHHFWl#=(Ge~VzlAuqJ6K^EKM;i57eb`trt6|B*44(@ z*wFyd&t9_8phUKkn`IY}>(T|SQ{~zth=vjH0k3Nb{ds*`U9zsN_9V2dTH9DxtIgD1 z){X!l^_gyrJ`(j+CHgp@S%w;PY8qvH<9pOsG}ZV`F-~XnWu-`MaFlQf2!%J{y0zl9wjtSAah>SqzU1iU(73KSmST5M z=XlGD{1*N$2QG`Fi7=YG$Bbc0kkh)wF-@Ez%;2sthZujl9H(=$nM!(~y~eV=E&}Iu zepDy>Op9OLqq>)tvDi0%WA~>lwgmfi#15yT@1Ym5hAB8FC+)}SVpzeC@SBpDv*@XF zlpD$~5qF49gbYN*SBjs+p3X?8-f_jTPP{CpI*sn3;JLnW-2w^M>ssWQ>`j#iB7!AX zgei6^*O0HZXLWP+pR^V&h~WC+#t}wepT>rzI#zc{XVJU$b9JM!d%3DD&}j_I48!yx z#^?G=I)`B3Vfe8B1;)Y1B`^nK?0UiXL`2S)8|%_!v;d4wy;wFgycCeK08D=s)cfS$Wnh!9(g zN4Z9bwBF`qKuj&lf|IAwa)CKg_Vk(As!Ue_z*1pP-**pbT4#aXx}!nQ^fp&k$iK zG?W?J`8@JHZ;Um@8}f`JP|e%h^vU;(Po%y^cgA?kqzyReKf-T-??S)Zs6v9TYTT9(?Rk{9&P`<0|s(Nk_heb<9V$ z$Re!SeLc_IQ{9U^v9O0rkqy+3Fv;v#RsND&6mAuRU0=NV6QZ+{YCAcIOhgX&DRP2# zl&%<*>6dug0x|}Xg%o{L-DddFXV8nWkwMa%^uzQQbPEmdjpKZLje&-8!%v38hQ8>_ znya5-_}!2Qea?sXb4~x&*u{8DKUG((J)z%V%rUz4wHisI(5=^+kRvfgc}3Y;ISpK< zALUc!Uc{NU$d1WAdtZ4*x$E2=r4G_huCtC`9lto-&H^yAZLm&-T=TUp(96C;jM2my95G z66kTf+nYrMpg-_9Wp7m_$j`aTWy*5(kD5%4T+=~w5Bugth=FYvGc|cwhvIdK$aQv-Pc*}{opiqXTpgvkNAA%!(=!IIwg_#nFRD3hjjpNIL}sA> z?I@k3{{q%IqmpaZXcMTZ+4c zHbOWo?OyPLGEplqo?9cYx`HN|;UyeN)wG==pWFZOY)adiX(Ce@YT z4038*(_DkxQ#}*GfxhW(0FN<4dgvYQSp?qpNY`DL(VLI{)&`syC&|76K{pT5tY<-8 zR;*DB0vjR$=LTA3C6NhQ=yF6L=gLFml1!~=hTdS45kG6Bj)Mm2m3@>t)j^!X2ntTM zNnHbOcnZ!3yQ&(2Fw{^L37&e6y1$yi9><{Cf*zvlln0c@l%o|lz+YRVI4YkB^5|H_ zD&<|pGg%*Ekvv(cR3W!W)(~uLrF=gKz85gkH;HWTx1Kwmn^G;&L%}Fc$u5IAz1{mK zh}kE>-fo5d&m#D(O5$Is+SAojbcGS8;r2y|PPpa#hbBKE%&ginFO!qzz)tkGX z;jF|6zpwz6p#g|-<+|s)w|Q1ezk2$in`)}(p}WHU!lU%W!6SHxuGWFlS`f;O-aKiM zX9cL?+3s#2edV|ZyIFLIcDX(w!n4&AhR)bp&wKY6JEBl=Hh z@O<>kK8WtzZHZ^z{!+I07V;&B$X0;Fd`~tKj4R2TjV!_?iZjX$3WaPb@+C?YrAo*G z)MWx^ufHpr$d}8*m0q08oRaM(s)?7f6h#9?ZxGLKAUA-)S1gh59Sz_0*ZLC{FWB9x zIM5p&f?IYDMEE7mDbC6giTT7maMzNQ)#yyT)BBg)jIrcplfb4ug?tV4 zLq$f83^d%Os8aM2&!yR(rorx78{2Hm(EtgIWt_1H}57xzQu)v)jBVJV!J*5!$UG$I@q)kM7R79V^xz&EDALzs+=*9KaS!7yy zx8eP_5iv7*cSt*=QJ#M>|6{Q#z47cp#kW6pI~jyRb{gH=+k^S5fi4V0HqLy>B0Yk% zyWo{F?{1uT`YVeZ5xnAXdwFDNe`&>TLn+{{rOeGywlM0lA?dK|?MpkSp2(ypm4do>EKX zZ!Gj)2SL4Bx($N19z^n+UIm!fm%S;TcAgw>8F&I!$b-*^o~UG7K<<=0?UDO2*t->E z`yPZ%o}!2Wp-urNa|IZ{KZ7FtlXO=)iJt5WA-8z%aVZ!5&znlGy&H&RR2R;XdV^`~ zB|c-+-$?yH5Pl81@DlWj&jbDU4|Gs{A?4tSuY))o;8lWvoQyke4sx*{ddttlEld=oYiAI>U z=@_jz**an!h|p)e(~z&71g`LHoT*%m~o!+Qg~r==0#TR#JjPa}6>#eazPYPfeIh~mq@bqTb`E9oF-9j>ha&%GBI^Jdv+oX25T0XpA7Na!Q7q?^g2 zaivEfaJK}3`Ze;}$6(Exg6n<@{#|1{|Bq5P+}kktFsr;l;5f&_b`1po`ZNC0YtXA( zgA+a)g!aLZTq$Z5YNeg{tVuS-+ga);<$4pqn=Zp_u9aACH)M=lg@itOe4`ZUwGiwvkqL@9i&JlwNI+JyNLK_r2bU5vY#C~HLgA=P=Zq*%=K zXyOYhNghFWX3M4#!!d?cupUX6_p`9>3li3YF`fr$ zkNj_p621FD)xM1RG6O`omFQPNg4tPwJE#GPI~u(4WssQ_HpJw8hsfgr2nkg zUX0^OSbZN5#t#!;6P+-7weaVBWsNcWVTEAb+7gMdD}!NwYl*v{H#~%{=!h(62k#BV z9X7-Ye-a%XK70G%$%}Cxvk*sG2%psj*^Pk2>lx>>5UKIOSYL)en})F|#eL*KTP{mI zVHcLbnrflrkMLZj(9M$$erH zR{8tr6~IVKp$qk|PsFueBWHXDaRwB+UburLh^QCi>hCdH-^#YbVr0U8c=7vo?+Wym z;4!|D$dn7h>rTv+4S1rJxJC|a&M%mW6<|NE0rxxvob@tT-eTe|Bs>)}HVIVnNw}X< z%))HUTs3s_BXqMl5s0UM1IsMOoXLV6YYuAtB&-criO=3@Xh05ZS2nJ>4z%{W;N2es zr{52wumz)$i~bm`i6*j@m=B9V(!Y&Ui}kWn=+p&VufEE#xpxU>*eJ;T8Roo8+Txu7 zN0ju3e{JaIeQ5nYH50*F=Jrf=wc3R&tV=2b; zSFD3h{A<%0D#%ebtQH)m- zVapccYalFqGDiL`$p3b%N@=)a4x~Jmct+ST%jUzTZ9qqYoB!!!1^z;=w;z1Ge5|!& z;1kq)5jN=*J{eEYm^ZI6JATG`z8lvpf@R3S)imH)=6WUQ?0m@gJ+wOqT9u7CvKN+; zfNia>QAvbFZjJS830{AQJD0=ix5hP}L9f?CKTktG1EI0oq044;QJ8`E*OT|Vz+1i# zovgQ&rH~DeSC9So`KGYO60VaB{SnbQBopsggXdZY-L5C<*Y8x4F#79pB@MJjA-jsZ zK7@C!fzIs2zoi%l4OscVVl?Z!85DSbmvS&ylcAk!;C=A0NI6((Ph(~mV5ILtx6>f6 z`i>J{6CZIGFEI{_A@@G$32+^=j)sJ8LKpktS!!@U`H)5iw5Ahe-Ua-T8r;_stVo%- zhg0}OK4g)HD_?~k)<0PebncP25oX&Aj9_zE?PO@>LHu+9uUoy1F`u$2B_ z!qq3?%B7HWDJ=5_JpE|=F2`T0fxVxC-UK(H5!-Q((HIXkBtYZoXJM^M!n+eO!{+B36oSn8o9u8M`6hEf}f# zPARMKluF$9Ea+NO^wMaGJ6Vb68i}9k*O~_SJ85|0SZLT(d@>aG+8VR^KAyM~&vO@+ z_#reU2l6_E@#zOy$KyGEfwcW`opsQ_`uFdLYscWQ$B-y9-(gJEUxCp z{7Hs2FT?9U;~rnuQ<$N7(UA92jN|VZ&vcXP29#`D#9I}z!k4TR^4#-eV}K<@Za`$!f5=w6dgR)W1KhO{>EeMS=`kH N=)pQX(@w0o{|Dgv_dfst literal 0 HcmV?d00001 diff --git a/config.sh b/config.sh index 9641d55..db877e5 100644 --- a/config.sh +++ b/config.sh @@ -17,6 +17,8 @@ HEY_THRESHOLD="${HEY_THRESHOLD:-45}" # default idle seconds before a beep fi HEY_TIMES="${HEY_TIMES:-1}" # default number of plays per alert HEY_GAP="${HEY_GAP:-0.25}" # seconds between repeated plays # One row per sound: "name|file". Names match case-insensitively. +# A spoken alert is just another row — the player does not care whether the +# file is a synthesized blip or a voice saying two words. hey_registry() { cat < Date: Wed, 19 Aug 2026 10:58:22 -0300 Subject: [PATCH 2/2] chore: drop stray marker file committed with the clip johnny's _voice_play touches $VOICE_OUT.spoke as a session marker; pointing VOICE_OUT at assets/ during the render left an empty yourturn.spoke behind. --- assets/yourturn.spoke | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 assets/yourturn.spoke diff --git a/assets/yourturn.spoke b/assets/yourturn.spoke deleted file mode 100644 index e69de29..0000000