From bd3bdc3e31c3fa7b43ce2eee1b5b99c29f2ebfd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Pankowski?= Date: Mon, 6 Oct 2025 22:25:58 +0200 Subject: [PATCH] apply patch dwm-autodarkmode-20250224-6.5.diff --- config.def.h | 14 +- config.h--wip2 | 124 +++++++++++++ drw.o | Bin 0 -> 12152 bytes dwm | Bin 0 -> 96640 bytes dwm-keychord-20260717-f63cde9.diff | 272 +++++++++++++++++++++++++++++ dwm.c | 74 +++++++- dwm.o | Bin 0 -> 73992 bytes util.o | Bin 0 -> 2520 bytes 8 files changed, 473 insertions(+), 11 deletions(-) create mode 100644 config.h--wip2 create mode 100644 drw.o create mode 100755 dwm create mode 100644 dwm-keychord-20260717-f63cde9.diff create mode 100644 dwm.o create mode 100644 util.o diff --git a/config.def.h b/config.def.h index 5dc490a..83e8cc6 100644 --- a/config.def.h +++ b/config.def.h @@ -12,12 +12,17 @@ static const char col_gray2[] = "#444444"; static const char col_gray3[] = "#bbbbbb"; static const char col_gray4[] = "#eeeeee"; static const char col_cyan[] = "#005577"; -static const char *colors[][3] = { +static const char *colorsdark[][3] = { /* fg bg border */ [SchemeNorm] = { col_gray3, col_gray1, col_gray2 }, [SchemeSel] = { col_gray4, col_cyan, col_cyan }, [SchemeHid] = { col_cyan, col_gray1, col_cyan }, }; +static const char *colorslight[][3] = { + /* fg bg border */ + [SchemeNorm] = { col_gray1, col_gray3, col_gray2 }, + [SchemeSel] = { col_cyan, col_gray4, col_cyan }, +}; /* tagging */ static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" }; @@ -58,14 +63,15 @@ static const Layout layouts[] = { #define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } } /* commands */ -static char dmenumon[8]; /* component of dmenucmd, manipulated in spawn() */ -static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL }; +static char dmenumon[8] = "0"; /* component of dmenu{dark,light}, manipulated in spawndmenu() */ +static const char *dmenudark[] = { "dmenu_run", "-m", dmenumon, "-i", "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL }; +static const char *dmenulight[] = { "dmenu_run", "-m", dmenumon, "-i", "-fn", dmenufont, "-nb", col_gray3, "-nf", col_gray1, "-sb", col_cyan, "-sf", col_gray4, NULL }; static const char *termcmd[] = { "st", NULL }; #include "exitdwm.c" static const Key keys[] = { /* modifier key function argument */ - { MODKEY, XK_p, spawn, {.v = dmenucmd } }, + { MODKEY, XK_p, spawndmenu, {0} }, { MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } }, { MODKEY, XK_b, togglebar, {0} }, { MODKEY, XK_j, focusstackvis, {.i = +1 } }, diff --git a/config.h--wip2 b/config.h--wip2 new file mode 100644 index 0000000..767288f --- /dev/null +++ b/config.h--wip2 @@ -0,0 +1,124 @@ +/* See LICENSE file for copyright and license details. */ + +/* appearance */ +static const unsigned int borderpx = 1; /* border pixel of windows */ +static const unsigned int snap = 32; /* snap pixel */ +static const int showbar = 1; /* 0 means no bar */ +static const int topbar = 1; /* 0 means bottom bar */ +static const char *fonts[] = { "monospace:size=10" }; +static const char dmenufont[] = "monospace:size=10"; +static const char col_gray1[] = "#222222"; +static const char col_gray2[] = "#444444"; +static const char col_gray3[] = "#bbbbbb"; +static const char col_gray4[] = "#eeeeee"; +static const char col_cyan[] = "#005577"; +static const char *colors[][3] = { + /* fg bg border */ + [SchemeNorm] = { col_gray3, col_gray1, col_gray2 }, + [SchemeSel] = { col_gray4, col_cyan, col_cyan }, +}; + +/* tagging */ +static const char *tags[] = { "q", "w", "e", "r", "t", "a", "s", "d", "f", "g", "z", "x", "c", "v", "b" }; + +static const Rule rules[] = { + /* xprop(1): + * WM_CLASS(STRING) = instance, class + * WM_NAME(STRING) = title + */ + /* class instance title tags mask isfloating monitor */ + { "Gimp", NULL, NULL, 0, 1, -1 }, + { "Firefox", NULL, NULL, 1 << 8, 0, -1 }, +}; + +/* layout(s) */ +static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */ +static const int nmaster = 1; /* number of clients in master area */ +static const int resizehints = 1; /* 1 means respect size hints in tiled resizals */ +static const int lockfullscreen = 1; /* 1 will force focus on the fullscreen window */ +static const int refreshrate = 120; /* refresh rate (per second) for client move/resize */ + +static const Layout layouts[] = { + /* symbol arrange function */ + { "[]=", tile }, /* first entry is default */ + { "><>", NULL }, /* no layout function means floating behavior */ + { "[M]", monocle }, +}; + +/* key definitions */ +#define MODKEY Mod4Mask +#define TAGKEYS(KEY,TAG) \ + &((Keychord){1, {{MODKEY, KEY}}, view, {.ui = 1 << TAG} }), \ + &((Keychord){1, {{MODKEY|ControlMask, KEY}}, toggleview, {.ui = 1 << TAG} }), \ + &((Keychord){1, {{MODKEY|ShiftMask, KEY}}, tag, {.ui = 1 << TAG} }), \ + &((Keychord){1, {{MODKEY|ControlMask|ShiftMask, KEY}}, toggletag, {.ui = 1 << TAG} }), + +/* helper for spawning shell commands in the pre dwm-5.0 fashion */ +#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } } + +/* commands */ +static char dmenumon[8]; /* component of dmenucmd, manipulated in spawn() */ +static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL }; +static const char *termcmd[] = { "alacritty", NULL }; + +static Keychord *keychords[] = { + /* Keys function argument */ + &((Keychord){1, {{MODKEY, XK_p}}, spawn, {.v = dmenucmd } }), + &((Keychord){1, {{MODKEY|ShiftMask, XK_Return}}, spawn, {.v = termcmd } }), + &((Keychord){2, {{MODKEY, XK_semicolon}, {0, XK_e}}, spawn, {.v = termcmd } }), + &((Keychord){2, {{MODKEY, XK_semicolon}, {0, XK_b}}, togglebar, {0} }), + &((Keychord){1, {{MODKEY, XK_j}}, focusstack, {.i = +1 } }), + &((Keychord){1, {{MODKEY, XK_k}}, focusstack, {.i = -1 } }), + &((Keychord){1, {{MODKEY, XK_i}}, incnmaster, {.i = +1 } }), + &((Keychord){1, {{MODKEY, XK_u}}, incnmaster, {.i = -1 } }), + &((Keychord){1, {{MODKEY, XK_h}}, setmfact, {.f = -0.05} }), + &((Keychord){1, {{MODKEY, XK_l}}, setmfact, {.f = +0.05} }), + &((Keychord){1, {{MODKEY, XK_Return}}, zoom, {0} }), + &((Keychord){1, {{MODKEY, XK_Tab}}, view, {0} }), + &((Keychord){1, {{MODKEY|ShiftMask, XK_c}}, killclient, {0} }), + &((Keychord){2, {{MODKEY, XK_semicolon}, {0, XK_t}}, setlayout, {.v = &layouts[0]} }), + &((Keychord){2, {{MODKEY, XK_semicolon}, {0, XK_f}}, setlayout, {.v = &layouts[1]} }), + &((Keychord){2, {{MODKEY, XK_semicolon}, {0, XK_m}}, setlayout, {.v = &layouts[2]} }), + &((Keychord){1, {{MODKEY, XK_space}}, setlayout, {0} }), + &((Keychord){1, {{MODKEY|ShiftMask, XK_space}}, togglefloating, {0} }), + &((Keychord){1, {{MODKEY, XK_y}}, view, {.ui = ~0 } }), + &((Keychord){1, {{MODKEY|ShiftMask, XK_0}}, tag, {.ui = ~0 } }), + &((Keychord){1, {{MODKEY, XK_comma}}, focusmon, {.i = -1 } }), + &((Keychord){1, {{MODKEY, XK_period}}, focusmon, {.i = +1 } }), + &((Keychord){1, {{MODKEY|ShiftMask, XK_comma}}, tagmon, {.i = -1 } }), + &((Keychord){1, {{MODKEY|ShiftMask, XK_period}}, tagmon, {.i = +1 } }), + &((Keychord){2, {{MODKEY, XK_semicolon}, {MODKEY|ShiftMask, XK_q}}, quit, {0} }), + TAGKEYS( XK_q, 0) + TAGKEYS( XK_w, 1) + TAGKEYS( XK_e, 2) + TAGKEYS( XK_r, 3) + TAGKEYS( XK_t, 4) + TAGKEYS( XK_a, 5) + TAGKEYS( XK_s, 6) + TAGKEYS( XK_d, 7) + TAGKEYS( XK_f, 8) + TAGKEYS( XK_g, 9) + TAGKEYS( XK_z, 10) + TAGKEYS( XK_x, 11) + TAGKEYS( XK_c, 12) + TAGKEYS( XK_v, 13) + TAGKEYS( XK_b, 14) +}; + +/* button definitions */ +/* click can be ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */ +static const Button buttons[] = { + /* click event mask button function argument */ + { ClkLtSymbol, 0, Button1, setlayout, {0} }, + { ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} }, + { ClkWinTitle, 0, Button2, zoom, {0} }, + { ClkStatusText, 0, Button2, spawn, {.v = termcmd } }, + { ClkClientWin, MODKEY, Button1, movemouse, {0} }, + { ClkClientWin, MODKEY, Button2, togglefloating, {0} }, + { ClkClientWin, MODKEY, Button3, resizemouse, {0} }, + { ClkTagBar, 0, Button1, view, {0} }, + { ClkTagBar, 0, Button3, toggleview, {0} }, + { ClkTagBar, MODKEY, Button1, tag, {0} }, + { ClkTagBar, MODKEY, Button3, toggletag, {0} }, +}; + diff --git a/drw.o b/drw.o new file mode 100644 index 0000000000000000000000000000000000000000..565bbe6254488ef57d81041b9235999120b58d30 GIT binary patch literal 12152 zcmbtZeQ;D&mOt;k&IfdiOb8f~jA;l83D|>@D7ftK(g^{D88L}lOleipbUGwMCmp*x z5`tyh!s=_X2P zbZT^X#QYw z&uezyMlJCb`g$mS{_4Ye;%h@6xN2yXT5kOO=*>A5+@HBe+#4(OJgOKn77oN8Gt)f< zlsx^nyAQ^)31ckS|5!eyU2Du_$|xM*J}m{5W?8Nq;MVcS_z<}K3n{&n;tkw3Y`7}3 z@D7;fjx zDdUy_9)ss|El>-NI*j+WHJ;~*;+OvY$1M|IV}7jbFzn?oFfIMrC#FWHF_!~GW*V_^ zfZG=n^>Ll&xHgCSMyIB3Ndf2jH|TRrpXtN$+)wSp;|vKOeTlv{KXX#QmK8tGalr3o zd$q(_9lHF)b3w%mLmK=*1MzGVv7xzJa>=rD3sHL4JW5|PjDbIZm+f&D&z9NZ6#n8d z)VSONS=;`On1)Yb6HA_T_b(Lhx8BGB&O+(CvpO~XT({TAsG$uYb_Up=S@Ysaj+2p_ zDXk$cZY#~&|BA;<|9rX4cb2Gn=w|EvfLJeVn?inP{cIgyn>|KK5E}+HHM{7_e`EZs z81ov&hJOb%J$^ogI?tP9hu3c*Y&86MY{FkqxSxI4pKbf$4ZZME&D2!WwGxgWtX;=? zn2&yG*h|h8anh8K-tTzO2vH`IKh8 zkLn99{Rd$V^JjG6^~koc^erRHC#-X-%uIhJ{AXevYNeEBJ6Z2V_B&Z*}dIc(%$FUcJk{ip1Ti|g$*ZpFh~ zUt;vRdSGU9fksuV?+Dhpy{>J2$FN>5LqE0cZ5KVr^Z92yc}}cv3h^@aCcXCs#vQZ9 z)CN8`j7rvJa*vjnti^gWax1?uC^_P$ZRfX|8_ z=AWw7-kaQ`Cnlf9p516z`|eSluArZ_#;=yM?TrE6dkpBzG0J=AS@<`O{har|Vfbm> za1A_(y?wOYj+Y+TJXL;nH+-6m;ypeWdmr84a~l;GG3U`0n0sSxVm0ZNU%@_CAD)AAL#t#z zT?@>`9_NM)u+Q9sHHPuVy;Qwt4)!>5RURX%YC&ALc{!x&R2EnJC>bU=2$i*nP2XU z3!op?#G_L-radGDaFy=9^Wvan&l-|b6$j@ab-h_SG8w9HIiT!B3n zZCGzReem<3Ug$>MiihEQuJ>Dfne8|3|AD^1?Vle{_Uj8a%kyoC$4r-Ft^1)bbEaUo zUm@F?1tvdl~`DXksc-M)QI(nVFnuy=V5 zJ?J}IzTbDiT)UX`xz(lSvx_m;^@g@{3-*wq$u|n#(6vkFu5ndkEqsL-%SC+; z6)hOxb8Z>rPfr~^pEhzT|AcxPF~@brFQHBbRk2@EnA6D9THmm-sL};pFE&zgtl8c( zQiz|6jb;)#g?p^oOqNmM&IHdRU?x3O?B;rfi<+bm&Vx1QBG+b<%;e|LaSSo+a@D!9cPF1Aa;LBtAny04(2rwh47z@x z7rXnR|Bmla^+ninx4!7deAbM)Yb$u|jpl5q$VRM=JZvW4Mqa{s9QS3}6l_IUA7(yP z-JVa?hc8c^KIVJq{#PD4)S!L;c!c(9B}2dZyM~&bzlqQ~^M0-`!gFy66%3VQePJE1 zErI_%)VHK}_nBr|aOqesHR+E$I5^DbZ146nWxxm+kNGY3i6Qug-+3S5TsTfL7qa(B ziL(rBh}^UEy8UAb^iLVZ*I`4bBX`BT?7WEEtuZjak%L+v)>?8{V4T}>>oL{U@+~7RD$ez=;Q&nsu zo(CaEL;iMp9df#_{(>A6aba?f4gH_c>Cygzqs8w7|LuEIr;(2|4C1~1@>KO8)-dag z^UzvbzW<%F;)Ua66tT#0!sj#Y23Q9r12Sf0pAU3G%+cmn%wclR#ssgG@y1QapYKEd zd_T^X&53WKTX0?()_E029;KIJ|G*RL<s`*?{++4*DIq%=Hq1LMZZfh4|8zN=;RqIv-grQtR2n^%P40j9r*iV=4F1h&i591 zkFatX?6m|v`HqEkdtTG*xZ-mzg?JrDZhn2vW#3I&ti0Wh@3>CsuVJ4j!6Wa0oPXH& zKn-^UJI>Vnn&-~?1tXDgWThwI@9GN2JfX0^)zcR4ih0^1;Z9GNzcYBRXW4DhWpn9z z!ES#f8nh)@$P){Dy8W?OFw!OEyTW#Jv^yB+XzK{JdL0!0P$(Sm$AX?fI24Xpqmb9@ zrC2+NJ0el&z>0Kqc^C=!1NiOi0lYnE=^2EktfXIz6N_|o?eJ2domGobG~f^Uw}*m` zQ5`cBN_*$R9`vU-UMI~_80Vs+7>0|UD7!g_>v8_cHM{;}zv-`7Z54nD3w0`#K`yUKmfV2nA?JR>5;vZlBs+Y5mWYr#Y^&3rK zgwPtmKjk)*txz3&EidOCac?>}w|~x|+@IwSJ*O>FW+~u#JT^)z|7@^j9>9S4$z88EezCMZ@-Noc%KbZ(H5GaN59gT(@>;~NBK!~ixJPQwR2)crs zN>78bl-kUzLF|C*%L1!vKZ*dlmHHa<{-g61ZuhMC&u~ zY!vcEV*PVGarv7J^1OfZxO;{CK3kl23EU+DQ||B2WZ>x&@@s^Ai{LpT@aF}dC-8q2 z_;CmRTY;Yx_;Df6XTfZKM7}#KKAZu+BKVucmLm1Uhmu)&4A_0PapwSMyPXm|QqSTH z@+&jo>oee61^+g&m04#EY=OI~HE!-rwqfM?(UpN`ZwCAyGT?_Z;IC%DU(bNQn*krq zfaAN-tai>tT+U|y(hPV-2K?R(_zyDRjT!Lmz}fGnuz$OV&z}hVgutyc8f`z#z;i^% zyR6I$AJYWSFEYqeYh;%oI?*qt#nQphv>tkJU84XB)J&$f$m_}4{`0GXsi|YB5Lc#-6Pfp zB^lky7Z7Ugu+@?bmVqovwv;svw6PQqMHK#8z75sz6s!?gAR6eD0#e>$gEp2l>ufQx z;Pg09Ta0bD1!Gaz5=t{iBp8TUrl=1`f;%GNo~~Bt)Da3bpuyj@1NWwFbrJurnJV|P zEgA0KT?5;q`|hrQ#m3__?+C_%y|E}YH%DXsz|Q7C`_ASaJ^l!Y+hR><+Rz&d!kQ1o z+SXhr)aLI9Sv1^#nvbmxN-H*)fwi$+%C%bD@;3B#L@}OdYqaiv7I}Suo8f06KV7eB zZRHjvn0mTH9efF$frJctUx)d^;Shk@a93N$j>ewt(O5?e!2_r+*yisE#S{!0)x#n` z;Nayxwla>u0~C!j2HKQ9K(IjbykpJDl83F3KJyfa>+;HMOv?-sIL z5HBqMT?yh@iaHm@%j{R{*Hmzo{}TmYtjK>M@O$uFqTrVW&i6|d|5D)d@wD#-cBct} za~`GQxFlGG^(nxYUR50bKa}<|6fxc$L7N`j`r?`gfCq z|3@}0ZE^5Robv!K%zvBxYW>PPDC258#1wfIKda!kD?DE+xa#+B6ep>`C?JV>4c7aPfOFX3Tt9Ce}@T>FvNWrDAc;HncuVg*%Q1t0l zaCO~1BXFMYN=05?Ng2OO!Iz7Ckoi|D_!b41XFWIf3!HiGR^(q*IWS7Ht=ydXFo{t$nS4oI&k^@tx)un^71>|ItMPl zr-dB2{GJwf;PSiKDF-gUo4w<}<##ighf96rcQcs}OI&{MlKHB{<@c)=VO)vJ?@q@Z zxcu&P#(~T4A<|BgM}7~Hd85STcMtMLcX!78+wqJ=>}R`tiv&Y{uXRcFw)$g!@@|ht z$r}lCg~jj0_YF}cZy?;+iR&(T@qg8zcjFHqy2H8_Lx5R=?YOA(7li+B@qmC`A<~s; zI#ax@5pgUV)V0MJ-=P>Y@u!ydTkV=D_7#5cIC3q^ob+~qi}cp+gx_ArxUxZnjjUQZ zEOTb+pDX+-J2>^f6AjF%<|ZsF$DiXEP*&yBge<>1hM{L}28g2O3|x1P&u0ktU&W0| zc}?_J@3h=3$CXdsbL6|yojw-*RgB-AvTXu$>Yoz*Jr2W4|4CjyUS{+Ei3(dHB?e^w zb7~~}OaF7Tb8M^UeCwBF{>a-qpP$bD%;`|k>UdIY-oJJ)5GotM z*8AW&WhEABtpv2aN!p(BYoUj=S|eBwr>CbkMrzSoy9o$X>?sIHR>i&F*Y_bAzGZ)} z-ygqy8Rk2m@60vVTyxDe*IYBZuA4o7j@#u@_Q#|CT}f{D924+1Mxh40HX|4$?JGEPvG{t&%xuiR4qIRl`-kARi zuf9*r_r6a|igtSB%O<{UikaH=ggvRZD{kVu;$}TNRTlqtYWGk2CV$hd_s(>@Nlw|R zl$FoI4_X$>^PU%t>_4O}A~-&FYS+7mdcx=b*H5-pu*_;NnOtI5m<8?B9tUZ6IDf*< z+y(cl?iFhi7k>1!pWX0r{L}RBluo~IUdy>J*Db61a^2z^m#=KDyD=1Ms$M#6%B1Fo zNnfFkh-D*xLeJnk%!AkO5==fHzV-JZ(SJEJ#LQj(Uyn*x9k>4DJCDJcJuv2bcbZZ| z|FNiAP6sZBe+FZh!#kmIIs65b@^bihVB>Q5(@Dxp|MM@y=kJrW`#=)>c5okm&QEF* ze%?sJ&#xGq%ke)qiG2Qz1}|6sH%ZFZC*kL@B<((tgwBy9?fxYRzB~ziF@=}o|MMht z3X{k!CkcHqKbNDQmZbdQB>K6O33xd=qmtmWlF+Y6!hcl~K0i%DXI2tEGm^-2ev)?2 zCeep)CFxfvNxPep;75}1pOb{ouOw-=Ckg-GPC`GBq+gySeC|ua&s$0G$w|iRbP|64 zngpMigg&sknm^~~z9i*4lJvI;0+*xnK@xdBoP@qN$++B>1YeVcpD{_=y#+omH^2Up zg#P3tcFN$YE;|ezKC3zdZ?lJc)dolkoq` zBy?6MDSskKzZNBFS9H+FpYtRB+vUc63%Ji&n0$5;`u`^hpN}W$*PoN{zcmT{UnQZx zJPG{}yk4$fyOQY16-oT1(@ENWF$te9B+;L|B>nwK68e=%_$(I*I(pCgF1r^7QfN{M?X){!2;Z@OTpX zvyo9wa8W^814192ZVdJW~WpPbYlWMMS zY+6>|vP4x@lCODqS#wKGQ{|GT(DItfW%WxMDA!cIyiqN$S>9aJV&ocEtI9jd@6yVb z-&I`KP+wCXs;aAzBK)UTEwKobsjrqgmCY@o>e|ZcrL~n0uM9OU2B~fhRW4apAF5mS zSPj|BwO`Y^tVLDVH8fK|TD8ku+Gb5lT|;$<*7=7gwWM)nOEnbfVtqrUylYw3P;bD^ zYDrU#!6q*onxtpK9&Fat)L+8olF+g`RWXOsi&_xU!}Af2s<^lQ;igd4qMD{vHBG9b zq$%`hSxt3IsQzJEub5lYQeM;AvaqS4v8JhIwW_$gv8KLcS#x7uh|Hpzmf6zgyion( zI;maUR1<2cnbT0;QoORM8D=W(s7Ll`SoFu3~wW-gbF|E;b`~ycT^?!_HtHA8UIkHuBZjWIrljG~`nwtyOAqK= zX${O;T=QJbi)N$j9reg{PDAxdvc*g3bItwB>K8XW8fZa4RV!Ph7$W#bFu4lmvZj=6&|tEph7oC4ZIV(I6to`)8W@!FqLqz}4NWc0^GzkN zsM{k`+)%${*~2TFEODudve2^TfsD|y$L8L8daw0VBWMn`F*bLFnrp2Ql**TIy`Z6K zd8p3hy`rpUNmEVpQYuw7Fy(AueYG@N$9yp~iD7M6RZ~{e%=Fj#?BrIO zL;q_YZfaOrzu2BNi=!{B*fs7nz^ah*&;Q%yy!%n4=lEWNOwktfD8WRO@?O~32m#scqX4pg@+TUDdx zRHJU8m31wPR#r8)ENfxrfGrHQ7?XeT;-ZFzxGd`z-n}`#2^<|WmU1nFlw_~TaZEXy)8?o3nZ4$w2L}o zF~)nTJ-Zc?N&lBHe%Ls}ip#5px`rlm23Z-g4@O^X$~He%RWYL$V>UH`r1y6Iu24($ zQnjR^sa7>Fd$?wKW6SDhR;-%Vn(9@J0)>!0X7bU{vX;hWixn@MNh&Le?p4d$)YMYB zJhZG{k+1m5S0unU&3Lv3&y4u-atU3jHbgxD!KFOkB;~6oT`o>&$7em(0{pwV=K4Ir zir?CJorOYLyQ=@apLc%?ZEs0)x>=c zd|`u$Pj}!QkC}MTfgiHyEOp?UExgr%AKYrvdD4N8f6Bx+JMb54O?;mNe{X|{#~gUw zS`$C%z-L-=OScYYZ25G2(=0zB2|n3@FSO)7&w)?gX3|;ez}H&xY;@o!uf@^l^P~em z{G3T=mjj<*@p;gJ@A{ru{-gunv&qEMt@9hZzZDif!GWh+_&f*xlYchpR5ZwpG5ufq!6?4?6Hit@2A9_+PE^ zjShUBRX*&%!?qqe@Ei-@?7(-AH|4g?fzPw>4hJ49Fw5_9;H?(E+kt0W_&x`|E8nEk z?ZEvOe$as*k$?-ILk_&r!jCxcbPJC;@D86z=cEIlZsDgL_@QxT`F;n!)WVg^d~fTm zvhZ{VzHO{oF57`mw(uMWe(;~n@;(P1wD1WIynl>YezF7KY~j-#_yi00JMiw&CY^Z> zyu!j4I`GrEX88&S{-lKm9k|cJmpbr$*O+t~9r!{EZ*|}&B{0n=?7+ho{-guXvGC0f zeD^4m&Nc@=&%!$#cxg7_`WQYPNM@~XyL66{A8wCKJ3857XG9I&#~~$4t#fpNoSh_pJ(A64m@^+S$>xT zZ?*8<4m{h!_c`!g=_Z|S2ky7!eb7+LoN{TIqATsTli@Q zekjE(-|xVeTDbCsYrtFbKtiB>9hK6%gy#zpLF21e|y@2+x~EcC2yOK zO~2cL+w><`<7}6=>2G%6HvN7FZqpB1`eoCx=^u39HvP$#Ufbnu`r911O1SJZ z(JpV(Z*|}{{g?x{>Cdz5v`xpRzuSS^^mD9rz%Fmo4?A$1{z(UJ(_d(7RDsHvI}~y|wAs^t&CnO@D&5&fDc}`kNiNO~2oP+w_B$e__+H z=^u39HvP$#Ut^cI>2Gu3HhpFJO?G*k{!#~S(?8_EZTizKKhCCO)9-NLHvM$VPqfS1 z^cx+xP5+1kx9R&WztyH=)8FO5ZTi`kUu>7R>9;y?n|{oJ+w|vIe!5M^roY>P+w^m+ zeSlp)`+j42RAC3c*p5pi!53Ql5}VFKxp2T|UlQDB?R)I)GSG--@g3w&GMSuTmLiSB-!7Y50{Ieo(`| zs^Nz;{B{jLqTyfD@R)`_sNttI+zQbeZ@c9}FCRC2dWw&psrN9hG%JbwuTSU@Ei@l zO2d5`Zr=@;*Ap~czqdD8!}WU@(=~jUM&GaDa&O%J%+v4@Hb}Zq!$)d(g@%vP@Suk0 zX!ueMzed9wH9S|tTQz*NhKDtLjD|m{;s2!Jn>Bo_hHumGaT?yC;XV!DrQvxRzFWid zHGH3j7if65hL6|qgBpIVh9A=K>ooj`hF`DYF%6%f;U_g*?%>#;(;8lAgQWc${v{1p z7YFtK1`SWw@EbKeTf--5c#ejDS;KuAE_Z3|&jbzsiVc!Z*6^D&e7c6;tl@qQANYz1 z@8@awRIU6%4WFjr6&fygRP9et!>8LI=~4}!q2Y}hK5(?a`&JE~sg)0F_-z{gq=wJZ z@XZ?T*YIr`9?+1KW(^N&<+o{gNW(icyh_7&X?V4U@7D0e8op1%Yc#xD z!&x8ope^mF3ro|5mTz=^Abw zEgNsMHM~(PpQGU`G~B1*O&UHy!<#jHvWB;4_;d|lso{PNU!~#mH2hHwU#Q`&8eXB{ zt2I2R;cGN}sfMrB@J0>)riQm_xV05A-i9^Y+IkuIlNuh@=xo;THVxmV;p;WLL&G;{ z_{BA^c3$+T$i+3U?dtYazI~efX{9z_{r>EDcHg9k&pqz#aX!x<>_6jOAMe~>Hr^Te zT>$Ute z@;kNst>pJ>`P<3&Y55}Z?wbbNpF=)h%il@9NXsuEU!~>C$gkJ(_mSVJB?E^R@gV72|CxM|mj74sRa*XO^6RzycggS6^3RgrujQX7->2nwl6OxXZ2w2(^R;{z`64a< zZ{(}A{Ljg+*Ydw4zf;SIrY^R@hkzf;S9N`AkV z|AKsA0MK9~G{EkBlgpO()j@18N( z{&nQ@wR|D@A~S!8P{h@f$X99ko5-)%^3%xg)bh8I->>CwC*P;#i^#igHQG1m&mo_$ zB?E^R@gV72|CxM|mj74sRa*XO^6RzycggS6 z^3RgrujQX7->2nwl6T)W*#3{m=WF>c@K`Jaqk(U2G`6?~nLw>!PPk7Sa+>eeHotzuLxMo!6#RDmkvx{;% z&p&ug=Y{Ir&Uo$U&SK?{AN_X~_o#5sxOBCm?P^t?=k>>Za^30Vm6214#8%(cYO0Zc z{ffv9qf|S4ZB#Q{wqw61GVF`Q)^N7k+f6&_*j#S#S#_rjiInq>ay>nyXQ>nF^F@4F zDjrs9uR-s{A(0&DwSX&rHbdTkGo>wXkd(MliS_Vlb7y~kAfe0 z=c4^Ao{f5weUV-<08OMhd3balp{lNhDqf4f?>SB))+ z3yq^2R3uR1j}Aw6d43fsZq4gIJXGzKzPZ)rGNCQ}ZGeyaqz|e7xS#jUydRE?R=Qo0 z9gns2x2LK|aFRd%h*!05AEM5L5{dHQP5yYFXLy&$R^FXR-XZrnK=KyUHK`{8Q?W zL>}n-sP7v5j)LD+{eI}Y4L|TXWspx3f7#@7ip^)QviTeZpR4+7;FIyZ`n`d6SM^V@ z+6^$S=fOpHdS7ryMBk=MJ0B&c#(o@*wmlZ?&-*B`C&oLUn)UWKC@bUlV{|S&%^&Yb zB=)x7>W@DRz6D*WBfYrh{!W>fXBSm4$G^rLe}FmuU?+AUBL4qBF>Yh|i+NP!HO4is zEJgO^&cdvtQjLnS)Hv0Py@Lc`*+_<3w=jO&+zDSI+_X?86#16zp zMdk$5YomQ1{}RUmJUwvzaO`wj|hh{|t2K7K67VbH%3Yf&ONNj(+%gV(UA$?tWyx z^9ipVKEq!5kWsL2)Qq#4e(d6YV{c^8IXyS-cd0$HZ|bGI)RFyDp2~?x-7LmO_ENt` z*8k04%qXkzg$!jJ{qS;)%tJTxFvB1J0)AqiVO@56?u&_0B9Dt}UN-x*$klm{y71L= z{y}%=C-nQg$5rS`5BD6qDs5usNY#Fp_eV45PIPCfiM^hYUEx*!_{yOwy7%$bTUt_8 zT&WS8Rt-^c?{st@Td^EogF_W_W@MM-Wxl)l6Z_B$tk9ypNB9pTQ&#pq@%ayJsy0ZQ89rT;up^5i>Sw*jg z&e1RXqe1LkXlOVpwp{EucC2tbJch6XB^HloY3t&e1Limwa(St9oKk1T=lDOh+Y-54 zsP>@G-pkF2I&);9F@ki5_Hc_N}` z`zSLbO+}80E`UEo{xj-yxCiSP<*AqVx>@JPl#zCNk$Wr8r>QG?rZ##b_l{8Qu9R?( z=)u48JZ`P4v)k>Ds&D!Z+xU~yKkQFQHNTIX1!?yKe0E zPPgdIuRD)n2hg1^8PAmLa8&fPl=7bFk1A7x$Bq@!>AWWUN#TtNqLI&iMG7-uY-Ph$9SQc z($z-a*3-9-J~QQO*FjIpbsKP&y28)-VJa?sZ+DM4g-t9!KWvZ(nU5bs$KZFIipStp zc#e(3U$Mr|&pdREQE?ed<2lEC=EuMGq~-YI|KXJ}(QS{bFdg1q!~Jn-`$w$JC-Ak7 zd%T6mnC~L1^PZH#K2I99B)#j{cTy)FpQWN+(E*v?8AYAPw$1_bM@O(u3cp90=jObA zeODj+o?yOw1b_OwH@xZ|>CX>IpRr^ULthdH)SD-1_k_`=tLp=gr%-sgxW?6av6%Vh zNiRI=L|pRe1XW`(|Y<_bk^hTYQwf4D^L;a`BvhU zdtwFMs~OX1GtXiC#vso&-9GeL_n#P-@n~gbWUV?CLX8H$G$}07o~UJtlWj?kk9!CuVCG970NhWsLsH~Wg-LY%q`3@ z_&+;IOAU z3Vov<*a-MzPOM09`J*!!3+7vG5##)pdw8ZT@4j0u9k=lHs=SJ_QvYrDh|JKiaJ1b$qSRjB@|o)e z%=HlbHqu@Ux&0iyXI>8#8UBpt&pkO^*BSkgd7WC=?-|q8%b5NL?~Y#YkLQmmerxs8 zs_9X$n$m~73)0j*McoCPiZ=UaiW{Lkte~OldrmtuImUwfA zZddLVdB~z@IBj`V z=eefP3$Mo)spyGH74^w_f&Ls{ zBQxo1nUBBW@F{Zd^Nc8L!*{c39%np+p3w4ro|yU^vj0zb@q0#Q#=f62G3?GQjiEy) z!H(bTkM??o6=Ks1MPIH_s%!>*_!@0JggnwlDz>-bvSpMV=NWTKWMJr7_l!-VcbxM~ zeM4Q7iE$_t*~vO9sqptVo<$yFKNs=mhDXt{82aVS#OGnod6l=+ul&&u;PC`H?Ddvp zV!NXomCB4^3()&bG3tHq)5O*j@cOnpH?tl7A7&4J99gb*U-O8pH77EQC(7JAmNt7L zcMNtPeb66$gE=UE+-dwODH}spiuvImqNZFoL`{9}qr~2hqI>V$aqlx_uG?R1QfpnK zdw>2!S)lf%CN^k`4R8Lw-w#%#Yfz2 zm7OLyeqi8OVvp$0?bPk39J;!fd45RZ7NQGcFMSe+*p(W&)~GwCD-GKoLk@k6g+dN4 z}JzMRNMrTHg{{)*ogX8jU= z!XEL{bGoKTpFU4a5gAE86h2xv`@EU>bi^V?iC*|wTNY4mom;JFAG$sF58%IgGqD$c zr0gx8=dgd|ch05=&#Z^W+$#E?grP5@C&$pmH?Rq^KC?Gq9*mZKUs*LeW7m1xtM`(zD=cIFDoQh6^=M&5w z@e9YPv|6?K+qptl=<9jex7a?S;mcra6@1Dbi+S7Qa)o<-K2){KIu}D<&*Gb3>T{WU zlc3?Zk0^W`oeaBG{1fEU1|55ED*lJDKZS4BrTAe(hX(h38{?)A;_gNlgRV%?4fut$ zr}i0oXZUOR)T?A49mMwxbf-j$cy~c`i8}cmu1LWYVo2zK#O>BmE)Q9GUiQa}@%{5B zn{`9j2Os66j~?n(`TfzVboZv>dH$%oJP=){+>fC5<-Wv|{*Bsy)%smb+1aZ6Y<#}CX>OSQ|_A(~o--|9u zS&0ew#5RwIbj$L_-`C%9JZ zkoviObyRmPu_Gnh@ zK=uyZmMzPJ&pefG>`|{mSEcW)d0pA#OIVkO8+#dJUqxKzTEBnw_}9MO^Q!WmlJUQU zF7?*;`62WWs~?uvTS)Sf=p0l}(@ zT+zPkt>-zeXkOa%X?uz&zNy+?^d>kbfK7MR;@jp1A8_F> zvCp~F6}9Ek_hpB_iXZq(WP)GJ{zU6LyuOCq*L_#Tjr3U+e?!Irdh4E7hW|t?a8Dod z8t5PLIw*B^s<@=Yey>{Rc0~_c^(4-D_N%g=nM2IcZSG|bxZZqC_6LmFF~-y$PqA~v ziQ*EIdd-bb&wdX5*nKTy=wcpz@NHLTFEMt{lM6c&>;csL0Q)@;ZeqBsSatNoirFi8 zQo0iOmG53KVg{U75T|zZ-_M*|MgI++*iXq^Hur!Y_E)k8^md9KpQCMChN9ak@b>}j zv;Oo1GXl|It}7ZGLOPaoC}}?F$Urodfi4VjMXQIpqKij@UB};oK(segvCfCfjt+B8 z6kU!DQ&D4npr>8%EAu0YFD#g>i|@dr-G1MwOUF?9Fx%)uG5f@lfqkN^YwOUd6Rcxm zla8~VN?fkx_3gRa!9B=q3(qI%TXpNWMc1;IbM^Wnc|Os_wAz1$Zd!IA`mjpNydIls zyc;j?QjK@1!voPJDmC*um0H^7PRp!vr)JJlo-g$-+@4!Wx}Veoy=wLr>)f8&=A9dI zx0AM$dgcY9=-gEL9q&s^nV2blKR$0C{%Tsx8#$W&_{8JG0~6QLRtP?}tCU*eSmo_* zPieE;TPps;I2CxMzrZ*4qcl~H-#x{Cmp(ZV3=urSa0B!BgkMrZM;hU2k!i_Yx&zbdgj6G}e;YYELl{uqWKRbwzGR{-- z(J|5KqJ!xXiL>2?zRKCt|KLAM88h~6`caqjCuF@9pQ75kAy@X1)kEh_6yMK<4sZ0j zN~`$`Wz3lvV@?){E-^=>j_m0!uKCq~el?1lh{S^5xXe`d!4C60V? z&2NktvhcB&bDm$&hVZlXR)6#iDe>1b*&|nD52U>|_?LOO@pfr@WbGB$X5nF@$|+Tw zpUHK5+?h&^ER}w5Oz+MWd7>MoN0}2T^f`pR5!>SPs?0WMD3!xr*;SiU5Y7$0L_7i> zp0@faHhH7ErnJL7vNRvMd1_RqO*agGN{uQN+8+L-oxkBr|0Dft4Ei&mZ_4@Covxu~ zeA?E7V^^v69pC$2kI1&I_kVw!r@BApJV5p@KX+~Pc4GT?=XK{q^8M_c($hQpSeNrS zr^$OSJ@PqraNX@{hO}>=jhMRjYonaB;o?j+PwKXY`tz{Krhl!v{zl#49PAGD74L(b zm$~p$Xm5|ulXEAVrkp?7&xZZ?xZcDjZcfK`eL%VW@MxZqdx%r3E?F0hb8%UJu>a~x z>{c^8TtmuUP0o5xRO6ozCp=C}v=Cm5ezN`?MK5J-t5)t)vbKrse)|(ye~9mSto4WZ zrX9;XyU1*xT5BwgT4An(Q+T#1-noQPIH*0EEr}U>8-p@aHW#{>$Dl*OA)^nj* z`h?$hzuC7K^7t7%;luQ_sm(nt?5|?Pw0nzHJhp{c5j50C>5`7vC3H*#cWP81wLFM}6HHH4@hOyXd z=EVA&{L#NdNA}*qeC+(~;-9cbfZo-jZ=}q-_`4!Up8H-Pu1x+@@^TjYM`U%OS^S?; zB_6^u7k&)P_M-4f-JEywBWybkdbBYo3jZLDTWBlG*2&=b4N@kHx%uG#>$#g!RrmhmHI=X)=osN*AtJb=yZ79P8>{h z+U?=o(LE|t-k*3>{O!@FT-;5lqK*BTYEMylfHvKae2}(1_t?Y4dWl;~{N*U|`( z0`2EG!@EGtWBV+1CJ;}QOJ945i+qjtgziDBU%B*4co!WOywl?Qs3*5j^1`q1eVn>K z%z7tRWGp;q!S4m)h1JMi@qQKZe%n2&RMvpsvIYpR>f5tB*QcsIa-T%{&`0b#ueGXw zv(<*smNsPkmQY@3OIt!;+LAa~P{Fz#($AENKvd*Ie+y+!2n~r}$lP2EKOy8T z>v|9!5nB2g>1WNeJ7s>De!#(9-y?n@YvC&N+#L)UaR7;(7P0<6Kq~8?_(-zO{E$@a zb&$3s)-Ak#K&)H%m%d0_f2NGsk(kVL_U3+Ul5PLR_QyDTxk=XgtB?=2C`>HOJ_FQa zI{5CJW&M$}t7qsJ=N5ZH``J$tv+$*>O)m5iDR*$&A-MT z(4Qb_J3Jhb^_qP`J~0AWvn8J7W8Ieaq;2{GbsudLlc=6?+Rk?{|B)zlDcqpX{u$5=P%%MQ-BWj@Ak zR?#3fOJvr}J(8ovDkA)fU-b()1E;@=Sa>q|A&YY1+nt4dr5{JJrK`?y*3WtqBrkMC z7P6<8eVj42?CAnxGvUczt3|%y&k}p>bwc()VpF#=7LxWIWxd6ZOps^Xr*>OwOy9ao zZ9h6w{srw{T(c0HdrxO#gV$J_E;-+%uhK`+kF%mD=&CEoo*(|CFGJuBTe8O^GUffN z#8&%Qhk~m0=hgj>K3%QC&lVG3ld{t1O4rh(w^{e z9)9+~kI?%&{bN1fvx9jrZ7X=lBaSyq4Lj9_eG9t%(-b_=PosU|OL+JVJjmIQpYr$t z)BLOvK%VPU$jYF5|I5tRrFkuNY@qHmy6T|1XBlTpCkJ6no!1dNaCP zEU~H~#2!8Pu-Tlg8+KzrkIpW-%J6Xw-Dxm&CkUUf!JF{{N2et_8Rd)&Xv-!#jsz9RCGx+%nti=V3OU&lFH8}?udSnpLTx`TRCE+(eP zI_~p^%cR}&>ry(8RkLo6R#BN}LH2}lmacdoD^*eEs9|G=Q1?&tJ&*Q2Fl4ZRc_a5V z?#5>&-d1eeP)CfJ`Jxt^>!9>i+GwNQeCSG_57TGi=Ue%yk?RfKS@&tXzzZ*8JMp*W ze(6xkg{Y^;qIbfF*om05!C8UA1|qjT`J91?-6S?}%8yKhZ^KS`rJ<0JcxOk+)? z{NVoSZgWh)4u#x|32Pzi|EU1_-b))k&L;AutzcRtkM@c_PmdJjaJIqzbO`*_AS2?N zUpWlT_7CUAMfT|9R_t^1EwJX}bK_Z*>AjmX9O!c{Kd|3>0Q};bJ3Gam2YKh>T;%Mc z($2i}DEA@QJojzDmazB#jg>#jy4Jg?cp`Sbw8*Qjehb`>e0n*D zl>HKZepgPhihTM4^N@JE#Ak}|Ifbv_@j#TddP(?z6x@bawl&3#!`{k@(6o+LikZ9&Ci*ZtzO*o!}~%6=CmsivE|&8I?U} z{yl?u7G?7&YmC{w;hx)}Eiw{&+uIzN!JfKD~>mw77X&OB9+!CwCnv0pBH6PKLrVv9rvIkT*N4ISeL zNh3Zr>+SK-et zz8makeskue44x#WyNyaUsZgG9{Z7PCT%f(5xKW3eyME}^gFxwcG!N?kGoLK zT!$B%rkv-99XS7BN~iewGVf%r^jiMie)dX+4ZtTDumSi512*7#(*_)6eQG_!y*}3P z#5&cPhD=lW6PY|goJQWu7~0?Mc$2c|#O7vX*_@vi>902TRjVi)6x)}rR=5~jx$CCZ ztlTH`gf4O8h|ImJZ}}(MbkVWGFzpEaUqSa(=2!@sHm_F^WWAydyJ`2g&*^s}!cfnoYf!o5R(S~jAuEgv-_#XOJ(l0Fs|nx^w2l2Y2&SUsmM*{UwAk% ze$n4yO70hy-GNL*Pr|HM9mEJ@X?(|mwO-b=n=@3q_;+Gw@oCCr95^c`Uf`+y31cR> z#Dp#oPbr4Zxil3$$9u(|ce{I3?N2z<{moDn5&e+(*mgHQvB)(|?Uj0qStliaA!h`= z^sDWGAAW!1OdexhGlhvCiXfps^)}jIX{QaU ziA%8=!p9r%_e1#GMVnq^zmat}MjY?B#^-OajVX+;A};tB@%L!Mi|-_T<*sGdLE^Y_ z&oh(xB=^0ypH6HgU^P|t!>?KEio`Nx-LPZ$Dn*rlKsm;@N6tYy_92rS6n;xem+*TH zG{dypu}{Tc>}IdQ-J2(P-|@1FKQTqc#b*`03o_O}LvG zScfb+@YkgO(s!}P;%mE@lcBNRxSR!?hDMNQA8o${ZMp9(aryHP7Be3P&xg6I5k>Y> z84T*n>&@TlV6zr<0gvGkMvQqldKR_&x#h$)=8!eS)&ao}E3A#P*802mZd%r$Jt1 z53cGsQ|E4JFilMr`!4%%*+YD5f2t8jxgJ@p?_umoz3e$QFjoDHnaC(aOe^>eS2S49 z-+tuyh$||4)pZL<%ZLLp2A=HM6NL{hTbcJ*pl$c_=`-|$wy{O06}D5_75nWzWSlef z$lgb9_g&fzuJ=Z2*t@!j5qgLb1|J~~n?7se3)yO-!AluD(Y~~~4!-^*=L_&=xA}8q zU_YB<^Qw6^WsT#15wk)s_lVsM!IQ)>WWRA8JiV$?Pwl{N`Hrv;@QE!~r^3vGw()X~ z?1dz58Ded4NxYghLuk0O z0#OfV(}rw0mv%iQV-<+*7g<5W_6r||w{g6aHN(bieHNM6XO(u_a;E4;FH4x?uQM0; z&PHK1KAfkux_`U!7_!P!s?1fQqO6z3UAqmW*z3X~qg;M}FVAk`lj8f?XOjnI+~Lbb z-;l)~o0nM{U&P*x`)FZo7jio-dtKpYfDZGGvD;Ir{I877p2WHS?PC`s-^5pMAM0UF z7@N%*^_OlR>!R)#oa5g%rRd_Jf^UxXGA6wzJU@T!;)#!MQx88cSRM87J6;(_`yvmK zh23TmzN2fntjnAYuicU18m^)vDCZojCCoFUPpt9ik)a!|g~S)|qke<^lJi2(800yb zJI>gfZsx*2|NYYONpR(E~7vt=cgUlZOMlX2HW?%+4>9!KgdP|780Sf{Zk5sp`gPj4%f{G< z9PNF+AK4y2|K!SiPJ#V4Kde=lBI<>x|j2g|`9TFB7wG=RL9d z9xG0fd#T@XT;7d572=)fyR60X9Y4_-*=yS0cjc}Idrb5DX0p$a{jS|Nxw9d2 zQ^rQV6M~KCX%pH*(Ghg>myF-r#0+Jv?Zqzd;QNxZo>OPqc#h#)zUCG?V#elVOcxkq zI_Sg6JrP+mc5o+wHF|}TI5F`+(OvwIJqEoFb*6)T$EOwn!p3|XV(j4435cUVuwz6jkgauk0-D8vcKJq|EiQuc94U6NXJzmhC#Q>#NuA)86V9ogiTK4l!;_E;9TVkukTf*!SdPox+Qr@(6_u`tN#LVR!c^LXWyz|13MSs!b z@0fbb|6?igbLa)3&pth()Xt_@rg6{M`2KjT7}*n#{tayi52E{uGw#*o#doYDCLs2@ z1wNUxn`OOl#qbYWkms!`TCjHY7WV#|inEEK67$+H)H`u~u8QBr`VgL^;ya4?t`Riz zh_^j17<&%|J$3Ag$d#$8UDoHll#%-i3LjRne+}Z#^BttCgN1x25}5~S({1p^z2o^A zk&od`_WqaPYcnDrfd^kA4y2dgoe?=MIAeJU{&{93Cis2_el8>OuHbJt@EbBChXsG% zfwyKxelPfM9r&Ki$U(t>@4!!HM)nKd2t?7_>>f8uVOtHGc6KJtFa&a_C?+y40V;PzgufVDjI3HKAEACx&t9H;8{{ALDa zLZ4WBHex-g=+_(EGpn=82`y<$XbDZ7UbS7ODAg=O{i@#%me~Nm4_IXk-|s{2A$=rr zGw)gm=2riUIfEZIOV0F>Rc6P>u`iqQ|C5x3S1BiV*&l?~>)1l(SkJGKi#?C~zQeqN zhVC1@Ox+7V7JsUYc)%j&cRBYVQmp$BgL`n9pK^CBAG@?4+Xyew0QaQSbTt&)UyE%m z&r|BoKsob@b~|X-@T>5F#Qz~scZvTq;M?PS+O+eajSV(vL$^sm(`V6p%0ce}dqsP% zWbfOIcm;gPeNUk&yvg0D0Jh%#9#W;nYZ1KW&r=4kD;>0BNoadC+SMBEl6iTXHqMhc zjJLMiltWp-FSLpG(T^bOVt_I}tG%x|+I#&U+8f+o9Ht-Z#eNUxJ2dzS>sVXbShFQg zgWOl#$g|?iUhL?9v*r~01ozbL!1pd9ekT1r%epCRb(`BeaUW}kQo{;^d`~z$i8-3j z9Y)SjM&Pe~kNXu{Qq6dcjNzBz)82!83m$JqxBrK=LFT5Pm`+%9?sj5cWBINa_aGPJ zdprTHQRtM!a-^*6)n8)`tR6ahVko1;xQqQ$=Dd9uTgupN7<-xxa`(bjxWn30*fD#F z(aRo7##Q32H{LiJa$mz~{5@6iXy_%ige> zXThXy8|&(Kti0R-kUV?zvIVE?GMmdbfXRB=1{OA-d$RF8gofac+O*j}&bMgsol4_e zTX@<+J(1_1WKSqEW1dzq$Nv+&CDk8qL6#C%EMgrRn5&K$y^ryHlk(3@;x}Aa-z0YS zv5W=ue#F_i&@^lhbZ5hp>mJrj{6;~a=K%R3l5*{^NKrwkBxl6dVHXv_FBzxE7cygLj(YuG87ZxR>EqtDlH zcl8(eFX9)8+-<%3Ccm8{G=66J!*XZ29X@4$zMb>AHsZR@{q=x-vi6d-@FaWq5cjz& znS&w5LwWBQxJNB#Il^BsZqh`CFc{i+_fb>Dff2w zau2rBGoseRSmkhrIF389J0w<4S)rdoc`3WsJy`YyzPBU%$(`d7*fJ^m8S6Q;O1q)W zxyL=P@;hDU|F}JOFL#&aPKysY%DIg49pQTp{ALFH$=QjVodw-u14q=p#<)~v$o&fZ z_Y7i7_ZfDw)&(wp^?@?tPch=CsS?K;cN6!F?o=u-V+ZG~`0bCphOC%hQ-itGmDq8W ziul#6x8)2&&e9T-_)aC~qxP7{Zy?Ax*lTK#c20bl*xE>+{fxu==;Sl-D18Y|qTF2& zY+B6vT0k9Qtpj!J@0ZvyAJ)p<#{SidJ($kipue&PA7bC7&j+7nGq7uAS=M|ITOmA) zud+gX745ttvBAxpG~;aNA51mwbz!%5+d3fkNX`)lvG0$3R;mo0=(X;Uptn7)n~06D z@4wb#{*F)^`szw2Hl5>&j(lCk+t5c>7WpwQzVpL#HqSnuhwwa{=kYub<$0kiS|RHM zy4+VFch*K4zaMrTYlAPFy(aqjrufBInR{J4k7#H=e&T)BImS@#FLREO!km-4%wA%! zdEDXKs8TX#GneIiT+5jQ>y@jtio1kzcP|D1LhkQvpq!Vxgi`ieR%xx@r~Q%a;3nig=au;T-4bEB?wlNo>#P z6LU)Jt-QaVc_RDX$Cy)+K0*H_^;r3vnO9OyV(Ud&9Un{mXRSIi#xD6@8Rt0)`H0*? ztl_e^o`}q3AHD}{iFN&}!ihv}2Vn)1*A4}42|JD6k0z=$=8T^1f6!7r0{5^s_{{Ve?V4(bc9 zZ_$S6=6}h!TWf*yK2I2X{hzdD=moNtHe}qTpG<;7LMO4#)hWMOxei@u-@7NMVb^qx z1rvJ{#y2$1uI}Tk2b;=zQ7F17d@AN?H|wxFhwr%|KkS9!w;KE9G<9|RPGZIIC-*~o zIp1uhY>eN$Xb{@$EBxf^cn(5a;b-@rAEiXS1diX*MaAVE7{KmPw+L+ zHvO015s*iQV|{B(l1K?^Ixai47l;?}NO}+V0{-}q(8!ov@g5}57M5rk)|%?McNd8gcsq1A5*fwyWaDO^=$GH z?s*y>!hC0AvE1GEuA8_%%RljRVv3?iB3HR<7ekNbHxNZfgT$EkSbppi*iQ7s7^}WV z#hwoOV}9)72HG08kp57A+(Ud{fbVO)#$B@*GVtNs$(^)*)*a;;{$JyK>dZ2}$9&Fn z*Tlv2vzqy#RBmaz`n#<2xEu17D%QL9H@4?)J98u7ofkV+ z%U)d8SnlEReQ#IoN5qG#SpQf@qU)7>2i#R#3g%&L<(`v~m*3)&`P;^MrhUGvQo-qp(1F*55il4@~ z9OJieu4i35#ywA2D}01W+dd}ty1e-HOX%Fz8q+zU42 zM5J%p^4I6eVdja7QgxPok&%u2cCtCoa`f7yFDI znx4ML7+*k7WA0o-Pp@E2+(?_Tw33N^wf^X{=pb>e(pZC}Ibs(|10Hv6UU}OCir*ib zwN|b87kuAp^rQyeZbLt7yeXLhk1O*9bdulPsYPE)tIIb$unzsXb@%#Q`CWnl`Xe;# z`fcc}_>gk{t_uAs#xJZ=DwE$fpuVTHsC@kcmDJDQ&3DYvp)mR!w)87(eNRsGS@__0 zx(da|wDq}yHR4lZt~*4Z(F4C{PJQBvaDwDBnOF5U0p+UsHMhN-B8!iWVE6tO`4=ymO^-0Q!_jWBg^W2 zf>ej9`FHtB;Hnyf&l)%tCPP*`EltbnAD*PDmkMhws<}E;7pkhOakT2_p~dv147K>t z<+u7m2w`bWlkd@G^@|%G^(_z8haM)otl1Z;YpMw?UhQjISzk{(X7MGVmQbC~kj$;V zrkWKiYhbUsVR6lE*Dk)n#O-W`dhpuCUsn%){Whtpu3cQ#+~NbHwV{KjdMrYlRX%@AH$w|Gz(lhnQCbEa1=DlfZZ!CZC!U6l*V?k>N( z`0n|OBvUeb{_OJEmG|GVpyclR1t<@c&aRwuck#W8RON!%<&}Zr@;mMuC}2Q~?p?U> z?y~aPC1wdKEePB-dmyu@JWy`stdcZbNvYy_vx`eFEmk?_-ud$v6_?GPyZd|2SHZv@@`Vfil!5de7T|F9Vl0muE zhj2ux>S}z=D;padnp!M@TI$`c-{j z#w8^6Rs1bcH#U4YoMlZlOBz}^ntxO^sgQb1RjcI<^$pF9 zq3W7jo0mOSbK6%YD+W`+2;AJN{{HGK%H{Yd>*MC*@p#p`aaW}Y6qbL|5HUGNzd_R?-xnO z|0t0-NV=F5A4we~9Zs-s;s2&Q=|<8D(qp7gk)9^)ApM+l4`~M%dry+8&O{vkxnPwOj<#@o7BgpqQj&wl73Fw_{&6sy{Gd2J9J2YN4k`B`b&w#HqyhSFO$xE z8TpXDNSbp6<++GbLb{Q3G3k7a?^C3${D4n4Y5RWUl7W0kr;z^S0CY)Dz79X6b-zg@ zUMKavkx2BDo+cfG2jKfp=#t*R#-@ezInr&U2T6ZIn$Bg3_eftS^<^pbBtKOD5NS8* zlccX7Vthzd5B(!8C(XW+_DRQ+e)I>%hjh%_iA0#Rk#ra7F4EtT?)xKh9->qWUv8g5 z`Vnc6bmKepkMwiW4pQH{j3;R;=@HT_ED$ySSV&JFeLbc ztmiZ5ZOLfA;+gdCrfp5#mhwICv!3s}@5y-o&wqO7-9H{N$p=ty>iZn& zyL5f4yMiizwE2^9I!t*lcG8eHdExUU*m$rY&y2w(@|z2RKZsxgnRAAyw+{c|&+i*L zFviWeP$x_3@DbXR!RBe0&@KVg=}pVT|U8;>_OS zzT>Swzb}d*WBwdvKCBL8Wf!vsi0ws2hg<;}(W39W zpL5NXVJ((%EwKmI^F7y}-m{0*pdx+CVjVdocAaPWi0=Bp&VelzV4gWfrPkO8kL(-N z%r0!1ybqYVX0TZFjC=lI-<6Da9cAk%YmAGfH^p1r19~GQgpYR0wc6z@Y!}!zutq7w zN6NhncFs}m5ZLe^Upi)-yQ(a(r;M6r-F~o*U^6w0J*oN$Sh|H7{Ris+^9dF(=PnEn z%w50r{-C`7`oP?6cP%jIn)G`yWlDa69g{MHHlp2ChJZ}HGj!r9p+&jhp{tY&yNWGq z;;u8aLipKDnR)+)tu<*imWVN_G!ufs>UUF0wtBaDzGsks=TdvJk$QgC`K2ap!-ke%%y#lyTRMW$r?!Bye=$9&H41bXQ{8dF;hO}QKgP2?mc|?` ze#Tu-3zlsww(XDTNk4UFM$vz>Zyj!1*VSZ3Kn;rS<&`5k4%219pY$-ua| zH`>ZAx-EXD*mV}7S@>gDDO>Y%z9;EWD%UyGcc{kRRkEH$mmVF=Wr!0S$%%PdE zC%*Dz%6d&%8~(u^L&8`7ql@5f91_GLYF>iqKn3;B;X7OU)fh0Q&Q|v}SBb3LMY43e zOH4Z;Lm@I2Km2q2>~fyvBUlI6OnmMN12Na~Jz!xlS$jl|#RJol1y?+RZ7%n321y%h z&q?Y$bf-O*vz&9Q1+E zY18i$d-xD#4pS!E9IHXS3J%bEXy8c<801B-+Nt-G{~XX0!(Wtw;up!9s{2P1C@=ew z>Ay`RT6xy=_gR{270s zU;_d?JU_j6B|ZGUcptWGNN`C=$i&T%28i2XVs-Fj#0<@NW>_}1X;CyM?|Gn z3_OqGysC_kMyzJ*SM`94vCN&`2LDmv*D6ZVB!>C>9kK0XL;a<@_k$6EuD`Tf+tbSBV*#4_9A`sR`5Ow-uoSI?s`-11e{|5Mv zy81QX?3HeAquj|y+Stzx&f8ygZu^1@$h#49PVKww{hZ^r$%=n%eU$m<$hXiJw4h*v z?XRFe#q7hjW7poAE|hPB;KcYt5)AiwLYD)XXV zTzX#lPC7nYZhM1!tmzJj)h2?`x;=Ak^*r(%g=}A6@o3~uXKFuWEyn!*716JK|De6a z*fE@p=7!vz3ip^#)!t*o)?ws5gJ%n^wSAr)R7zh|?r6X({72-O0-ilow=vA0tH;LW ze&I&&p9KFo@Go|CaZ2YoGP~I%_ong`=eL`h{-JzNa_vy`ok#wse^5KtwEA|JV_nuK z{_pI-GcoYn{!-^Z;J;nC#UA#TB6|mThw(h*37oS}v9c@ueOdNWu-p&+=fS^G__ygj zNvZ`7iNh1P{tB*N@9uM_(C%=rACeeIFe-64RT~G%dk%TezKZdbi=pPVqw$S3fJ=WUZ`@Ib=@4G%Ot(C|RR0}T%}Jkan!!vhTuG(6DoK*IwK4>UZ`@Ib=@4G%Ot(C|RR z0}T%}Jkan!!vhTuG(6DoK*IwK4>UZ`@Ib=@4G%Ot(C|RR0}T%}Jkan!!vhTu{Qu*D zGh3XkDW&Uv*QFoE4>`&4<0l>E=j)pO(cKPdI^k%G(&>Nh(z7*vT+^+ZzEcQ`N z+T$0>*QVEv()mj7Q@$Vg%HwilzrO;{9PNChHa-1YE`8yPwfJzhHqF%3VV?bRdRFB< z;*)zCyT(@^%a6L$iT%}R`1#A94!>4?C3U|`-RQGlwjGdzbn25X%}?UZ3h?^y&)gN_ zvTRruQ|7Ftl>f{Z zYH_BRewM{c zUwXSQeY>XTJ27Tzy*t4+Aoh56%F!zwF`XLkt2N!K6x$Qnqf4*LJ`Hm4`cHrHj*YnN z-zNvQ60=9|LPxQ!mOZBQI=0)fM@GvxPt!}3UZ#|UexH8Jd4l!iSh89dxZ4o7zyF!v0y>Z}3h{>1XtQ^c|%gA8|eF_cVQ6$6J4`>91(|Z#4Zm zP5(DdAJp^@HT{65S(+m{9$2FEA(hn=`RQl|d4j)$f z+7g#OqI8MUlUF!=tI}64cj-x`9ZIJ!bNGPLbBkR%r?ge+)TIvZS98;rd_?K_1up%t(oUt%&Ug5*(%0s>^bw^?l%8yJ_*SK_ z%ysEWr5#GATOB^2^xPbm&M9qGIyKwj{YuZya_I@BM(HuTfg{GTN>4XCzI{sDwcfIR zv)=!f;;h%K@1$&3n{4edW>o3LlJaK^0stJ>_w)PtV3W>nV@FeR?!mH@}tV z0X{v9&jGdTVo5nZolcTJKK0U5j*m|d<5Mp^<@osY3^?;lz4Vmh~fL^bDxK>ZPX~AD~fL z^e{f-^^T7l#?0v7>ZPX~AD@$u~fL^e{g4(o>F)PY>ghsB?Uds62ms>ZOPA@#|rH>ZOPA@#`5-`|72K@$u_n ze0*O+sP;mmbE)uZQuemmbE)uZQV+>0x{*mwsb>Vx~R^tTHArHAqH>lsi- z)k_cK8v)JqTJK7b9{6dKcoHBOAq7Y*TeYKOAq7Y*TeYK zOAq7Y*TeYSTj%(&-H;Bd{CeqOd?=rk@u`;{#)tAr8J~LTVSFf`aiX4&s{aNr(vKat zs{kd`N4feMMJ>~NNG0^W9m*%A9{IhHdK}c_f1hSRh1biT;V(OZw1bp->SYi0`0b(J zdeyFrC2T)_J+$Z0#VXMJtk-@$w5PL9di?K^`QuYBJ$zq|#SUwyyq@OCuSltf@8!Ll zp7;73hI$6{eXn=Z^Ipf>)YGea7$4SydVP;^{R6d*rk(+X=i0aPYI)vEiuIa#{dyME zNss^iOTV5J3viLN|5HxDU!B=;lbreWOkAXVX0Ouo7eRVTWV}dvQtk2gI|C{=d6Dv& zoqFgmQtH`H#*3s||A`Y2X3sqrDWBP?hjzSMe=y37zao7}q2AEx<5r02_J zx!PiyrQtMxA0G?;#sck2KqBo6{DFu(u?MCv%;DNnIlBaGV)E=Re00nfiGBDNZ_M6} zk41Au!7%A0NQKyd8KG z{?qu693hLm1ReRe_z+*-SHlunZsyJV*u3U;m_EyFyA;wFnt97w<*Y?ao7EHf^(&j( z*Ds5Fblwfi=G}N@1XpJF8A9{6UD|ZTpKrJV#oT6^mV63%S{Fq=*na7}=4-CL=GH3~ zMLKY8uBt&jXj6gnAP?XEj~>@lHtC z3*L8EFaWM5t6+!7wjU7BwtL00rU+yKVe4&P5OLU@zoPuzBHw;M8r$}zW%+E~)aa_P z+{+@SW%B*=uQ7`uKn|KNwOfv8GLtNtR5ml-S;`cW;~6i}DGfSWD8}-|Xxt>SrO}jU zV)^m7iAGb&(YRhp$C4SB(dM?9#vn~t4;U2{pNQqnmR+}Y4&88rc9Wgm=~zBKaZ@ax zKG5GCLo$^t7E@lgmq{dJ8M!=~yeXAi+t=AWZvSpx)!AJrCT@yDM)%lQ-t$m6Fr&=f zW8P%kD-^nOc`u$UB(s^D?6p`vfou6}$+AIYaRTW~7IN~*c(FT{O2!IK06?V1Gu`); z(z$};a==(A6E8w!4VcPiYq?UfQ7L_K8q{6z%7!Ik#aMNEc-xRG1N<1@kCJ4IV9w@EJYQT9 zlgO>@TY>XrPr9O zxVv*zPv4rJm41Pl_aIQpv>P8Qd*ULlTBMvy89_vH3Uyr?bmf@MrqE)RM}}LLU)P+U zJl=9$R|~rEe}MwTrP<6auS2MyxZ{~N<9{Dtt~Z-`S49-(p^WrxwKk#sY2Tq>jsYoj98!aT)4`%b8g}ot&BVP1^e} zlf$M=y_Ca-O_8FL+A%a~3sbwc;-;PX3z|=ksgv ziyRy9FLIXZbM2!R#cxq7KCQTnwd5GVzwrO9;_R>zivLLQPNe0KatZ%@$%x~$BjzBe z;4dlu8O0w|eB=%XoRNxvL#FS-zx*znG>2T*#VLP37DfvH5gF;>NNF>B3g?1z z9k%3`^|69p~qXqJWf8T^l->CBEEB-{% z;q?FIig)S*k!Rdx+(Mn4mlQv%c(>wQpWUl|{uuewj#2cECmp+yWkFI;_?-Ee;f1n2Xq z5ye+1&gaXID!yLvQx7(8BvkNhKtOFt#YxZ)=i*Jfi1inl)K`0jVa zd|vU-DE^Y-Pbfa}X$P=f{0qgozra!WQH~oGpLocnSwEjweEPEvZ)tJ#8;bKimc0%( zrxoY-O2dkuQJmkSlKjf#&d&V3ZFM_P`I;@qF%tlH)7`!mO} zlQ!RcGjYP@=jVOEBX}T{Q+$qIcu;Y!mupr03yO1H9r4E$=Q=#%#}(&#JmOC&&h>i4 z|5S0VXO+iga=7v@#tcghb+Gvh%U{7YEXseG>1V)||3%AR!KwF*;seT0{9B4|_2Dlo zKJ3F^QG7&kmgiN)_xkX^Q+%Hf|Doa&KKZYro<=Y}&-wU&qWqJJFHw7cs`w*5Ie)mw z$vNi3-&Fo7#i7g|?-2j6^FQsHg%c^ywBntrcfR7M72m43v>V~)`epjrQ@fVvx@O9M zpYnGqPW~>%yL@<$;=PJLta@30_}pD#v)b}6#!SoE#eVEY#g8aHt<`Qbah)GcsGz$P z=Xz=4ImNktn)pMCb3HZjf2KIsR}=pu#kt;^_zQ}2{WbCLDbDrS#DAhV*Jl%No+WWv zY`9*V_!7mrew%oY;#|*7e52xA-%b2Z#kt;_cuw*1`fv5;XBFpqaPmK)IM;_0{}aWz zUYz)8#kqc*_&c0~p*Yu<6K|XC{KNI;#5)z|`g7uI73X?%;yV=Q`gG!>igUd> z@kzzGex3Li73X?(;wKd6`gY>aDbDro#Lp_u_3y<0PI0b>C;qnLTpv&T65KeX{&2lK z@h-)=exCTp6z6(+;(HY5`g-E`D9-iv#E&S>_4mXdSDfqdi9fA4*XI-ehT>eWPyC$X zT)$8JCyH}DKk=4U=LfFuCw`UUT<=f3SMl=tf35$U73Y2ctBP|!0pian&iw_5|E1#GZ-DqKigW(~;y+WI`wyqWKs=>5_h%sfpyJ%Gf%q}S zxqk!kuPe^|9EiW5IQMrT{(Z%{-vjaUikJ6)(E2|c-vLWK;eHV0U#d9whakR6aqbsE ze5>NzKZ5w(igP~+;zh-|zXb8$RJ=>~ooLl^K0^75_bUDsi&vi05ja`|}<{4$U8KCo8+oKeysf52a(sB=S%&m zJjYfy=)7R&bM=LmebxRmpZuRI%6zWI9;_zpTaI zt^PmnH6^Ez-_-!{AQbZN1E4jivP%=lhu!2+r0kb`gH zs}EOCW`5800q}E9UCsZI5d5Pd_~sCNyT$QbZikbu)xzuv;U5pdCsj_1%IVX>J`}?L zIPhz$4bt=93*rAGl|OK+W1LX_zYO937Vu8xsU|%|Kpa@z2MO_2XD2i{TD zUs1>M5dOXpd?*Cp7J}a%f+s@odqeQ45d702_~%3L$3yV#*q<`UZ~ef-1i_}&ma9fIEns{ zVevL|Li>&R8o56S;eTHFkNNn&8N&aa5d75;{C|buzX-wG5X7K3UIj3ypPX&`x0&yO zToWRvI|Sbpf^QGO?+U>uLhz!++sw4yNBI5Sr$hL^1iW)bt25>);6Z-)W0gO$&1D+a zVdx7X^8YGC{;MJUuZQ6B7O<4Ze;;2Ea^G1Ng8y0w{#lDxzDMiO8)|6-2%6T({e-64rgmT8Q zFa%#7g7;e-{fy4z&a1>56<@O50SU#ohse1r1RoE<^C9>rL-5as;KxGnr!03-7EECxdvGF|uzKX(Zd34zrTn;*-j(TK z+LZ``QTQU%vS@kl-V$EAM~+OwJ0LlbcPtw(6^#AFN`OKxc96zpN@;n!Jsm6TH{2ukF7H-_jrj0iVKo%od zC-mgt;htV5ZJA1`Q~}=dGH|&BCXE;GW8-jRc6>bLjis`&A_^g_so0@x$r_R#i^Yp3 znTcmm;-Z&VW^vyBWGbZrDP^3&@Jg@%|IjJ0AE(kS4S{_Mfxp`2&rqL(ioQlCk@a$2}zY+TO{B)x-`NGWRxrewr! zIms!QKnU|$N`rH}yk1EoDA|lATr^yCtjVq!*i)%v5Xky)IE$c2r4SrN65?uc8tV@{ zlg=JMRh6^l2{W3{?w7b^Q_=XLm^(r3IMin$Ia^&mTU9<=X%cBKQyR;n(&bB;jEi2% z7DVcdYhaUDm|_ySL#A*L_1uh37-0k`&6s-PuIw5s7K7mGFz(SZfLMN+Bup$O-jHSRF0Im!IR|SEq zgTTHZa7_@nHV9l71oj7kHw1wzgG~ywX=R{MD+8@s8EDqZK)Y538n!afvXz0Rtqinn zRiJIF0&QCrXxpkl+g1hIwkpuJRe`px3bbuiplz!HZCf2^+v-5uRtMU)I?%S&fwrv< zv~6{uZL0%qTODZI>OkB20&VLHw5>1Dw!T2y`T}k13$(2-(6+un+xh}+>kG7PO`vUS z0&QCpXxo}V+tviywkFWFHG#IR3AAlZplxdcZCe{?+uA_e)&|jG_C7iinMK-<;@+O{sxw*Eld`U7q2 z545d6(6;_Q3>@9)H@=RekmM>v>qYTpv#nRXq2Iie3Wu_CSuPEMtw@RhLnWlJbYlSU#5aqHc7b9lZxL0DHf$g6%rmnmibEps15# zW>nU!Vt{!7>q-+neJ15)3O%bpVzP)eD&u671!JYWETx5LFO^E>3dutBU@}phz{*L@ ztLZf+lf@7QgOx(hYE!}#!8*lxWYeyV@JDpx9lHj1ZX2pB15a9Fo}YktMNCshv7W;fuIZ z@HS=-W>7E>rQU_04r8k1LH}r>pzE5WW@N0m8Bx1A=VgS&jBLbI>K0gvnU_q)M2s1^ zH6v4-4R-2cMg~)<>_O|Cg5)2{qFRd&;6_^j5jf;Vqhq;JF-|46Ok#_jKN=5K!*mn% zWL>Tq*^c?gkegvvJ8cNds$r0fZ}X_37?>K7TBr(z8|#~qEne~Vox8FKLTam>Zw9&4 zjC`Wxsr1ox17INrWtuuBYEY;?q z`Z#GD?0R(R2@Bb%>vC-Y*m`%mdAn;&C2hg3zR++~UmMTunCBl#@5zG3rHN@9A)9p} zt`Xnu<*!^`K4MJHl-2Go-{ zl#yCxDFzBXc`p@{gr4P6MahMMOpnwM(_=R;>B(p9owvuEfZJu%H<3VIrd$p;&T~0< zF1bVn1Xz`^bTW?8;2~6x6NqMK@W3#Qr&)q|qor}=m3s|vm$VI^mqthP-T_`op{eoQ z7K;gZgr~xT+h8Rv&!(latHeA;FE(BMeZhM@zZx0wihcRpbM7}my4)w2&-V%U;6%QP z@UGxxlDP-1o=8caO&rN7^M6?Ua;81U;bgBQa0x2z8R$aJzanKxo+%E&A-7)H|6~` zxX%WE&sXx}D?hBua|iP$kd!j%>m}uVIJhTChw_uK985=XQk~!byP@Z$a#S6DdH3L2 zb^a+egmlT>RheOKmSs01K8G_u>3{I$uhayQYViH6CFKw1Bk-SaA{fih?{hDF(B(fBqM!L+!ijM9 z5>U$gOMSSL>hj2?zs5hYYSzvVIrL;Th;#al@Q-j3l>e;epYmPwCC!D9{JAd2+3w5W zOPbjL{Fs#OQy+HdHNK0!q`3ruACvr3A8}}xB&rU7{6xNR`u%@e^M8>YgUX;TQeg|q zf17N0fkXP|>Vx@6*W-le)qE#4f36zDxu5srA^AId9H(xNQkLS+FKM5NmiLI}@BcNI ybs30+g#P3GL*8F!-FKYs^I6%D1IHiW`}gX@p%p~Bx1ju^S;r|mVOAf$r1{?ovl^oS literal 0 HcmV?d00001 diff --git a/dwm-keychord-20260717-f63cde9.diff b/dwm-keychord-20260717-f63cde9.diff new file mode 100644 index 0000000..45e8fd5 --- /dev/null +++ b/dwm-keychord-20260717-f63cde9.diff @@ -0,0 +1,272 @@ +From 9c020a20a2e1091e8b47edfea5e8795d8b451bc9 Mon Sep 17 00:00:00 2001 +From: Lukasz Kasprzak +Date: Fri, 17 Jul 2026 15:45:22 +0200 +Subject: [PATCH] keychord: bind a sequence of keys, and dispatch events while + waiting + +Original keychord patch by Hai Nguyen , updated for +dwm 6.4+ grabkeys() by Aaron Zueger . This +revision rebases onto dwm 6.8 and fixes an event-loss bug in the chord +wait loop. + +The wait loop used to discard every event that was not a KeyPress: + + while (running && !XNextEvent(dpy, &event) && !ran) + if(event.type == KeyPress) + break; + +Two consequences, both reproduced on Xephyr: + +1. Unrecoverable input freeze. grabbuttons() grabs unfocused clients + GrabModeSync/GrabModeSync, so clicking one freezes pointer AND + keyboard until the grabbing client calls XAllowEvents. dwm does that + in buttonpress() -- but if the ButtonPress is discarded here, + buttonpress() never runs. The grab stays frozen forever and the loop + can never exit, because a frozen keyboard cannot deliver the KeyPress + it is waiting for. Only killing dwm ends it; XSendEvent is discarded + by this same loop and XTEST queues behind the frozen device. + Repro: press a chord prefix, then click any unfocused client. + Observed: XGrabKeyboard -> GrabFrozen, XQueryPointer -> Button1 held. + +2. Orphaned windows. A MapRequest arriving mid-chord is dropped, so a + window opening during a chord is never managed. DestroyNotify, + Expose and ConfigureRequest are lost the same way. + +Dispatch through handler[] as run() does, breaking on KeyPress before +dispatch so keypress() cannot recurse. The `&& !ran` term is dropped: +ran is always 0 on entry and nothing in the body can set it. +--- + config.def.h | 81 ++++++++++++++++++++++++++-------------------------- + dwm.c | 79 +++++++++++++++++++++++++++++++++++++++++--------- + 2 files changed, 106 insertions(+), 54 deletions(-) + +diff --git a/config.def.h b/config.def.h +index 81c3fc0..7c7ec36 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -47,11 +47,11 @@ static const Layout layouts[] = { + + /* key definitions */ + #define MODKEY Mod1Mask +-#define TAGKEYS(KEY,TAG) \ +- { MODKEY, KEY, view, {.ui = 1 << TAG} }, \ +- { MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \ +- { MODKEY|ShiftMask, KEY, tag, {.ui = 1 << TAG} }, \ +- { MODKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui = 1 << TAG} }, ++#define TAGKEYS(KEY,TAG) \ ++ &((Keychord){1, {{MODKEY, KEY}}, view, {.ui = 1 << TAG} }), \ ++ &((Keychord){1, {{MODKEY|ControlMask, KEY}}, toggleview, {.ui = 1 << TAG} }), \ ++ &((Keychord){1, {{MODKEY|ShiftMask, KEY}}, tag, {.ui = 1 << TAG} }), \ ++ &((Keychord){1, {{MODKEY|ControlMask|ShiftMask, KEY}}, toggletag, {.ui = 1 << TAG} }), + + /* helper for spawning shell commands in the pre dwm-5.0 fashion */ + #define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } } +@@ -61,41 +61,42 @@ static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() + static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL }; + static const char *termcmd[] = { "st", NULL }; + +-static const Key keys[] = { +- /* modifier key function argument */ +- { MODKEY, XK_p, spawn, {.v = dmenucmd } }, +- { MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } }, +- { MODKEY, XK_b, togglebar, {0} }, +- { MODKEY, XK_j, focusstack, {.i = +1 } }, +- { MODKEY, XK_k, focusstack, {.i = -1 } }, +- { MODKEY, XK_i, incnmaster, {.i = +1 } }, +- { MODKEY, XK_d, incnmaster, {.i = -1 } }, +- { MODKEY, XK_h, setmfact, {.f = -0.05} }, +- { MODKEY, XK_l, setmfact, {.f = +0.05} }, +- { MODKEY, XK_Return, zoom, {0} }, +- { MODKEY, XK_Tab, view, {0} }, +- { MODKEY|ShiftMask, XK_c, killclient, {0} }, +- { MODKEY, XK_t, setlayout, {.v = &layouts[0]} }, +- { MODKEY, XK_f, setlayout, {.v = &layouts[1]} }, +- { MODKEY, XK_m, setlayout, {.v = &layouts[2]} }, +- { MODKEY, XK_space, setlayout, {0} }, +- { MODKEY|ShiftMask, XK_space, togglefloating, {0} }, +- { MODKEY, XK_0, view, {.ui = ~0 } }, +- { MODKEY|ShiftMask, XK_0, tag, {.ui = ~0 } }, +- { MODKEY, XK_comma, focusmon, {.i = -1 } }, +- { MODKEY, XK_period, focusmon, {.i = +1 } }, +- { MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } }, +- { MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } }, +- TAGKEYS( XK_1, 0) +- TAGKEYS( XK_2, 1) +- TAGKEYS( XK_3, 2) +- TAGKEYS( XK_4, 3) +- TAGKEYS( XK_5, 4) +- TAGKEYS( XK_6, 5) +- TAGKEYS( XK_7, 6) +- TAGKEYS( XK_8, 7) +- TAGKEYS( XK_9, 8) +- { MODKEY|ShiftMask, XK_q, quit, {0} }, ++static Keychord *keychords[] = { ++ /* Keys function argument */ ++ &((Keychord){1, {{MODKEY, XK_p}}, spawn, {.v = dmenucmd } }), ++ &((Keychord){1, {{MODKEY|ShiftMask, XK_Return}}, spawn, {.v = termcmd } }), ++ &((Keychord){2, {{MODKEY, XK_e}, {MODKEY, XK_e}}, spawn, {.v = termcmd } }), ++ &((Keychord){1, {{MODKEY, XK_b}}, togglebar, {0} }), ++ &((Keychord){1, {{MODKEY, XK_j}}, focusstack, {.i = +1 } }), ++ &((Keychord){1, {{MODKEY, XK_k}}, focusstack, {.i = -1 } }), ++ &((Keychord){1, {{MODKEY, XK_i}}, incnmaster, {.i = +1 } }), ++ &((Keychord){1, {{MODKEY, XK_d}}, incnmaster, {.i = -1 } }), ++ &((Keychord){1, {{MODKEY, XK_h}}, setmfact, {.f = -0.05} }), ++ &((Keychord){1, {{MODKEY, XK_l}}, setmfact, {.f = +0.05} }), ++ &((Keychord){1, {{MODKEY, XK_Return}}, zoom, {0} }), ++ &((Keychord){1, {{MODKEY, XK_Tab}}, view, {0} }), ++ &((Keychord){1, {{MODKEY|ShiftMask, XK_c}}, killclient, {0} }), ++ &((Keychord){1, {{MODKEY, XK_t}}, setlayout, {.v = &layouts[0]} }), ++ &((Keychord){1, {{MODKEY, XK_f}}, setlayout, {.v = &layouts[1]} }), ++ &((Keychord){1, {{MODKEY, XK_m}}, setlayout, {.v = &layouts[2]} }), ++ &((Keychord){1, {{MODKEY, XK_space}}, setlayout, {0} }), ++ &((Keychord){1, {{MODKEY|ShiftMask, XK_space}}, togglefloating, {0} }), ++ &((Keychord){1, {{MODKEY, XK_0}}, view, {.ui = ~0 } }), ++ &((Keychord){1, {{MODKEY|ShiftMask, XK_0}}, tag, {.ui = ~0 } }), ++ &((Keychord){1, {{MODKEY, XK_comma}}, focusmon, {.i = -1 } }), ++ &((Keychord){1, {{MODKEY, XK_period}}, focusmon, {.i = +1 } }), ++ &((Keychord){1, {{MODKEY|ShiftMask, XK_comma}}, tagmon, {.i = -1 } }), ++ &((Keychord){1, {{MODKEY|ShiftMask, XK_period}}, tagmon, {.i = +1 } }), ++ &((Keychord){1, {{MODKEY|ShiftMask, XK_q}}, quit, {0} }), ++ TAGKEYS( XK_1, 0) ++ TAGKEYS( XK_2, 1) ++ TAGKEYS( XK_3, 2) ++ TAGKEYS( XK_4, 3) ++ TAGKEYS( XK_5, 4) ++ TAGKEYS( XK_6, 5) ++ TAGKEYS( XK_7, 6) ++ TAGKEYS( XK_8, 7) ++ TAGKEYS( XK_9, 8) + }; + + /* button definitions */ +diff --git a/dwm.c b/dwm.c +index 53b393e..243b12c 100644 +--- a/dwm.c ++++ b/dwm.c +@@ -101,9 +101,14 @@ struct Client { + typedef struct { + unsigned int mod; + KeySym keysym; ++} Key; ++ ++typedef struct { ++ unsigned int n; ++ const Key keys[5]; + void (*func)(const Arg *); + const Arg arg; +-} Key; ++} Keychord; + + typedef struct { + const char *symbol; +@@ -266,6 +271,7 @@ static Display *dpy; + static Drw *drw; + static Monitor *mons, *selmon; + static Window root, wmcheckwin; ++unsigned int currentkey = 0; + + /* configuration, allows nested code to access above variables */ + #include "config.h" +@@ -954,7 +960,8 @@ grabkeys(void) + { + updatenumlockmask(); + { +- unsigned int i, j, k; ++ /* unsigned int i, j, k; */ ++ unsigned int i, c, k; + unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask }; + int start, end, skip; + KeySym *syms; +@@ -964,15 +971,18 @@ grabkeys(void) + syms = XGetKeyboardMapping(dpy, start, end - start + 1, &skip); + if (!syms) + return; ++ + for (k = start; k <= end; k++) +- for (i = 0; i < LENGTH(keys); i++) ++ for (i = 0; i < LENGTH(keychords); i++) + /* skip modifier codes, we do that ourselves */ +- if (keys[i].keysym == syms[(k - start) * skip]) +- for (j = 0; j < LENGTH(modifiers); j++) ++ if (keychords[i]->keys[currentkey].keysym == syms[(k - start) * skip]) ++ for (c = 0; c < LENGTH(modifiers); c++) + XGrabKey(dpy, k, +- keys[i].mod | modifiers[j], ++ keychords[i]->keys[currentkey].mod | modifiers[c], + root, True, + GrabModeAsync, GrabModeAsync); ++ if(currentkey > 0) ++ XGrabKey(dpy, XKeysymToKeycode(dpy, XK_Escape), AnyModifier, root, True, GrabModeAsync, GrabModeAsync); + XFree(syms); + } + } +@@ -999,17 +1009,58 @@ isuniquegeom(XineramaScreenInfo *unique, size_t n, XineramaScreenInfo *info) + void + keypress(XEvent *e) + { +- unsigned int i; ++ /* unsigned int i; */ ++ XEvent event = *e; ++ unsigned int ran = 0; + KeySym keysym; + XKeyEvent *ev; + +- ev = &e->xkey; +- keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0); +- for (i = 0; i < LENGTH(keys); i++) +- if (keysym == keys[i].keysym +- && CLEANMASK(keys[i].mod) == CLEANMASK(ev->state) +- && keys[i].func) +- keys[i].func(&(keys[i].arg)); ++ Keychord *arr1[sizeof(keychords) / sizeof(Keychord*)]; ++ Keychord *arr2[sizeof(keychords) / sizeof(Keychord*)]; ++ memcpy(arr1, keychords, sizeof(keychords)); ++ Keychord **rpointer = arr1; ++ Keychord **wpointer = arr2; ++ ++ size_t r = sizeof(keychords)/ sizeof(Keychord*); ++ ++ while(1){ ++ ev = &event.xkey; ++ keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0); ++ size_t w = 0; ++ for (int i = 0; i < r; i++){ ++ if(keysym == (*(rpointer + i))->keys[currentkey].keysym ++ && CLEANMASK((*(rpointer + i))->keys[currentkey].mod) == CLEANMASK(ev->state) ++ && (*(rpointer + i))->func){ ++ if((*(rpointer + i))->n == currentkey +1){ ++ (*(rpointer + i))->func(&((*(rpointer + i))->arg)); ++ ran = 1; ++ }else{ ++ *(wpointer + w) = *(rpointer + i); ++ w++; ++ } ++ } ++ } ++ currentkey++; ++ if(w == 0 || ran == 1) ++ break; ++ grabkeys(); ++ /* Events arriving mid-chord must be dispatched, not dropped: ++ * discarding a ButtonPress that activated the GrabModeSync grab ++ * from grabbuttons() freezes pointer and keyboard permanently, ++ * since only buttonpress()'s XAllowEvents can release it. */ ++ while (running && !XNextEvent(dpy, &event)) { ++ if (event.type == KeyPress) ++ break; ++ if (handler[event.type]) ++ handler[event.type](&event); /* call handler */ ++ } ++ r = w; ++ Keychord **holder = rpointer; ++ rpointer = wpointer; ++ wpointer = holder; ++ } ++ currentkey = 0; ++ grabkeys(); + } + + void +-- +2.47.3 + diff --git a/dwm.c b/dwm.c index 87f68a6..f549942 100644 --- a/dwm.c +++ b/dwm.c @@ -156,6 +156,7 @@ static void checkotherwm(void); static void cleanup(void); static void cleanupmon(Monitor *mon); static void clientmessage(XEvent *e); +static void colormodehandler(int sig); static void configure(Client *c); static void configurenotify(XEvent *e); static void configurerequest(XEvent *e); @@ -206,6 +207,7 @@ static int sendevent(Client *c, Atom proto); static void sendmon(Client *c, Monitor *m); static void setclientstate(Client *c, long state); static void setclienttagprop(Client *c); +static void setcolormode(void); static void setfocus(Client *c); static void setfullscreen(Client *c, int fullscreen); static void setlayout(const Arg *arg); @@ -220,6 +222,7 @@ static void sigchld(int unused); static void sighup(int unused); static void sigterm(int unused); static void spawn(const Arg *arg); +static void spawndmenu(const Arg *arg); static void tag(const Arg *arg); static void tagmon(const Arg *arg); static void tile(Monitor *m); @@ -278,11 +281,13 @@ static Atom wmatom[WMLast], netatom[NetLast]; static int restart = 0; static int running = 1; static Cur *cursor[CurLast]; -static Clr **scheme; +static Clr **scheme, **schemedark, **schemelight; static Display *dpy; static Drw *drw; static Monitor *mons, *selmon; static Window root, wmcheckwin; +static const char **dmenucmd; +static int colormodechanged; /* configuration, allows nested code to access above variables */ #include "config.h" @@ -518,9 +523,12 @@ cleanup(void) cleanupmon(mons); for (i = 0; i < CurLast; i++) drw_cur_free(drw, cursor[i]); - for (i = 0; i < LENGTH(colors); i++) - drw_scm_free(drw, scheme[i], 3); - free(scheme); + for (i = 0; i < LENGTH(colorsdark); i++) { + drw_scm_free(drw, schemedark[i], 3); + drw_scm_free(drw, schemelight[i], 3); + } + free(schemedark); + free(schemelight); XDestroyWindow(dpy, wmcheckwin); drw_free(drw); XSync(dpy, False); @@ -563,6 +571,12 @@ clientmessage(XEvent *e) } } +void +colormodehandler(int sig) +{ + colormodechanged = 1; +} + void configure(Client *c) { @@ -1369,6 +1383,10 @@ propertynotify(XEvent *e) Window trans; XPropertyEvent *ev = &e->xproperty; + if (colormodechanged) { + setcolormode(); + colormodechanged = 0; + } if ((ev->window == root) && (ev->atom == XA_WM_NAME)) updatestatus(); else if (ev->state == PropertyDelete) @@ -1598,6 +1616,32 @@ setclientstate(Client *c, long state) PropModeReplace, (unsigned char *)data, 2); } +void +setcolormode(void) +{ + static const char *file = ".lightmode"; + static char *path = NULL; + const char *home; + size_t size; + + if (!path && (home = getenv("HOME"))) { + size = strlen(home) + 1 + strlen(file) + 1; + path = malloc(size); + if (!path) + die("dwm: malloc failed"); + + snprintf(path, size, "%s/%s", home, file); + } + + if (access(path, F_OK) == 0) { + scheme = schemelight; + dmenucmd = dmenulight; + } else { + scheme = schemedark; + dmenucmd = dmenudark; + } +} + int sendevent(Client *c, Atom proto) { @@ -1704,6 +1748,11 @@ setup(void) sa.sa_handler = SIG_IGN; sigaction(SIGCHLD, &sa, NULL); + /* set color mode on SIGHUP */ + sigemptyset(&sa.sa_mask); + sa.sa_handler = colormodehandler; + sigaction(SIGHUP, &sa, NULL); + /* clean up any zombies (inherited from .xinitrc etc) immediately */ while (waitpid(-1, NULL, WNOHANG) > 0); @@ -1742,9 +1791,13 @@ setup(void) cursor[CurResize] = drw_cur_create(drw, XC_sizing); cursor[CurMove] = drw_cur_create(drw, XC_fleur); /* init appearance */ - scheme = ecalloc(LENGTH(colors), sizeof(Clr *)); - for (i = 0; i < LENGTH(colors); i++) - scheme[i] = drw_scm_create(drw, colors[i], 3); + schemedark = ecalloc(LENGTH(colorsdark), sizeof(Clr *)); + schemelight = ecalloc(LENGTH(colorslight), sizeof(Clr *)); + for (i = 0; i < LENGTH(colorsdark); i++) { + schemedark[i] = drw_scm_create(drw, colorsdark[i], 3); + schemelight[i] = drw_scm_create(drw, colorslight[i], 3); + } + setcolormode(); /* init bars */ updatebars(); updatestatus(); @@ -1897,6 +1950,13 @@ setclienttagprop(Client *c) PropModeReplace, (unsigned char *) data, 2); } +void +spawndmenu(const Arg *arg) +{ + dmenumon[0] = '0' + selmon->num; + spawn(&(const Arg){.v = dmenucmd}); +} + void tag(const Arg *arg) { diff --git a/dwm.o b/dwm.o new file mode 100644 index 0000000000000000000000000000000000000000..372358e2b5d9b85cf51a623689622f8412adc27a GIT binary patch literal 73992 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