From 5fb6d19ec29e4de303cea682f215f4f7a96ee113 Mon Sep 17 00:00:00 2001 From: Rudis Muiznieks Date: Sun, 28 Aug 2022 10:06:40 -0500 Subject: [PATCH] updated for newer zephyr sdk --- .gitignore | 1 + Dockerfile | 30 + README.md | 9 + build-env.sh | 26 + build-env/Dockerfile | 36 - build-env/build | 7 - build-env/run | 3 - build-zmk.sh | 13 + build-env/flash => flash.sh | 0 out/corne_left.uf2 | Bin 0 -> 387584 bytes out/corne_right.uf2 | Bin 0 -> 313344 bytes patches/mouse-keys.patch | 3336 +++++++++++++++++++++++++++++++++++ 12 files changed, 3415 insertions(+), 46 deletions(-) create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 README.md create mode 100755 build-env.sh delete mode 100644 build-env/Dockerfile delete mode 100755 build-env/build delete mode 100755 build-env/run create mode 100755 build-zmk.sh rename build-env/flash => flash.sh (100%) create mode 100644 out/corne_left.uf2 create mode 100644 out/corne_right.uf2 create mode 100644 patches/mouse-keys.patch diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c8e4d80 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +zmk/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..0d449a0 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,30 @@ +from ubuntu:22.04 + +env ZSDK_VERSION=0.13.2 + +run apt update +run apt install -y \ + git \ + wget \ + autoconf \ + automake \ + build-essential \ + bzip2 \ + ccache \ + device-tree-compiler \ + dfu-util \ + g++ \ + gcc \ + libtool \ + make \ + ninja-build \ + cmake \ + python3-dev \ + python3-pip \ + python3-setuptools \ + xz-utils + +run groupadd -g 1000 builder +run useradd -m -u 1000 -g 1000 -s /bin/bash builder +user builder +workdir /home/builder diff --git a/README.md b/README.md new file mode 100644 index 0000000..ddde03f --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +1. Run `build-env.sh` + - checks out a fresh `zmk` and applies patches + - creates and initializes a `zmk` docker image to use for builds + +2. Run `build-zmk.sh` + - uses the `zmk` image to build left and right binaries + +3. Run `flash.sh` + - flashes the binaries diff --git a/build-env.sh b/build-env.sh new file mode 100755 index 0000000..cc7ec03 --- /dev/null +++ b/build-env.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +rm -rf zmk +docker build -t zmk . + +git clone https://github.com/zmkfirmware/zmk.git +for p in ./patches/*.patch; do + patch -d zmk/ -p1 < "$p" +done + +docker run -it --rm -d --name zmk \ + -v "$(pwd)/zmk:/home/builder/zmk" \ + -v "$(pwd)/zmk-config:/home/builder/zmk-config" \ + zmk + +docker exec -it zmk \ + bash -c 'export PATH=~/.local/bin:$PATH && \ + pip3 install -U west pyelftools && \ + wget "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v${ZSDK_VERSION}/zephyr-toolchain-arm-${ZSDK_VERSION}-linux-x86_64-setup.run" && \ + sh "zephyr-toolchain-arm-${ZSDK_VERSION}-linux-x86_64-setup.run" --quiet -- -d ~/.local/zephyr-sdk-${ZSDK_VERSION} && \ + rm "zephyr-toolchain-arm-${ZSDK_VERSION}-linux-x86_64-setup.run" && \ + cd /home/builder/zmk && west init -l app/ && west update && \ + west zephyr-export && pip3 install --user -r zephyr/scripts/requirements-base.txt' + +docker commit zmk zmk +docker rm -vf zmk diff --git a/build-env/Dockerfile b/build-env/Dockerfile deleted file mode 100644 index ff2410c..0000000 --- a/build-env/Dockerfile +++ /dev/null @@ -1,36 +0,0 @@ -from ubuntu:20.04 - -run apt update -run DEBIAN_FRONTEND=noninteractive TZ=America/Chicago apt install -y \ - git \ - wget \ - autoconf \ - automake \ - build-essential \ - bzip2 \ - ccache \ - device-tree-compiler \ - dfu-util \ - g++ \ - gcc \ - libtool \ - make \ - ninja-build \ - cmake \ - python3-dev \ - python3-pip \ - python3-setuptools \ - xz-utils -run useradd -m rudism -user rudism -workdir /home/rudism -run pip3 install --user -U west -run echo 'export PATH=~/.local/bin:"$PATH"' >> ~/.bashrc -env ZSDK_VERSION=0.12.4 -run wget -q "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v${ZSDK_VERSION}/zephyr-toolchain-arm-${ZSDK_VERSION}-x86_64-linux-setup.run" && \ - sh "zephyr-toolchain-arm-${ZSDK_VERSION}-x86_64-linux-setup.run" --quiet -- -d ~/.local/zephyr-sdk-${ZSDK_VERSION} && \ - rm "zephyr-toolchain-arm-${ZSDK_VERSION}-x86_64-linux-setup.run" -copy requirements.txt . -run pip3 install --user -r requirements.txt -run echo source zmk/zephyr/zephyr-env.sh >> ~/.bashrc -entrypoint bash diff --git a/build-env/build b/build-env/build deleted file mode 100755 index 92f7ef1..0000000 --- a/build-env/build +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env bash - -cd /home/rudism/zmk/app || exit -west build --pristine -b nice_nano_v2 -- -DZMK_CONFIG=/home/rudism/zmk-config/config -DSHIELD=corne_left -cp /home/rudism/zmk/app/build/zephyr/zmk.uf2 /home/rudism/out/corne_left.uf2 -west build --pristine -b nice_nano_v2 -- -DZMK_CONFIG=/home/rudism/zmk-config/config -DSHIELD=corne_right -cp /home/rudism/zmk/app/build/zephyr/zmk.uf2 /home/rudism/out/corne_right.uf2 diff --git a/build-env/run b/build-env/run deleted file mode 100755 index 5615bff..0000000 --- a/build-env/run +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -docker run -it --rm -v `pwd`/build:/home/rudism/build -v `pwd`/out:/home/rudism/out -v `pwd`/zmk:/home/rudism/zmk -v `pwd`/zmk-config:/home/rudism/zmk-config zmk diff --git a/build-zmk.sh b/build-zmk.sh new file mode 100755 index 0000000..94790bb --- /dev/null +++ b/build-zmk.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +docker run -it --rm \ + -v "$(pwd)/zmk:/home/builder/zmk" \ + -v "$(pwd)/zmk-config:/home/builder/zmk-config" \ + -v "$(pwd)/out:/home/builder/out" \ + zmk bash -c 'export PATH="~/.local/bin:$PATH" && \ + source /home/builder/zmk/zephyr/zephyr-env.sh && \ + cd /home/builder/zmk/app && \ + west build --pristine -b nice_nano_v2 -- -DZMK_CONFIG=/home/builder/zmk-config -DSHIELD=corne_left && \ + cp build/zephyr/zmk.uf2 ~/out/corne_left.uf2 && \ + west build --pristine -b nice_nano_v2 -- -DZMK_CONFIG=/home/builder/zmk-config -DSHIELD=corne_right && \ + cp build/zephyr/zmk.uf2 ~/out/corne_right.uf2' diff --git a/build-env/flash b/flash.sh similarity index 100% rename from build-env/flash rename to flash.sh diff --git a/out/corne_left.uf2 b/out/corne_left.uf2 new file mode 100644 index 0000000000000000000000000000000000000000..99b682e1782f3bb11494d994b9b12991988eff95 GIT binary patch literal 387584 zcmd?SeOy#k9zTBWz4HhI4B*2E3iALufYu;dn6{1sTzRmttX->pK&f_oXvJ&|cWW7Z z3NkkoG?leAG1rGeplBmCEX}PgcV~QPQFEm%M`YVQ11J{;nBV)%NKMOrzrWwVKb+U= z%-p&6+;i{!yg#3FK2PV|hsDVuKY8G1uM#~Wq<|-c!!JHJuxT~F{^tBDqCfXHo?L!c zM)u=3xCCl`|2^)rz;U+c+^2!&Zo0)zO^ zYszgRNvdXI9^0HxeW@rGLN)Kc=}~E(YLoqqP?dB^lC@rH<4v-=x5)sf;1ag0b(tn{Q~wXLCdb+>pvzy2>CeRx7|_yFlub{@6fe_hZVvF2YNnH}G| zZs3Sl>M?3m-Z973-tb=Abs=L%mic_UPVMnoWT$sz@#pt@c#@J?(;g!1X?V*kb*Q{i zX}mXlAoIGAxi@RX`H5qAk1tI)y*GcEpJ)jF3j_G$`#b!tp#Qe4 zLeO91r~fw4|BYMpSNZ8b(07Yg9gP0FZTX-->ZZv~@3#5t3P2#{eK#=I=zBF1!#tr^ z(|6Q5=eoc%njdU<7c`G#GRsb0ZCYdF&b(&}X*m*8&@Kp^{tx2!)Ea(UL+~#Q;4cK>PwucgL8Upw z@VHwgcDp|SiW{uPUQO5748E7UL3+8)3B8&QAnVP)J|ZVNIZzjTv^7vy zFlI6--sP27?rsm~ci8?WZWH-43RixX>~vGRJiM@7rsC4q*Z;XaTv*tyQYyh^pE52J z{%*xH-2Df)Rs4%PL%irt75lFS@LbVoz3-g#Q0jJjB;`1hi#uSwDOi=X+ba`^`B$#t zhx+$VGz9<01Nh5=@aL+l?Xkr*O)C1_Ky&9~FQJW&Mp7v8R$Hi5T&)#lV8M)L%%6nO@(Y*$dJ20z*L#<|it-D;@ zwl(%gi`PkZ{rTb@#gJX&>(XL<%&K+LBK?@(Tv!#@vsC}+s%mTtrq`ukS;oWff{QCK@R z|9!9Y-_iHf8h%?t@P8tJzdQ*4Z-Lu;-{H2mm*IBUPi0g)n z^qU$C^%sh3vm?c1n(IGfH=}yND5_TwYAD?zRas({QRf(s*gD3d6|29MKl{-?gI3N+ za?3|;cbUe~bvV;$c~xOL7v|wPyO>B1^fSqP%_YOR2{`v;uLA!G?Q_TsDoYZ5zW1m^ zEP~^x#9J~PMln?k)C>1tW1Wk&_fv)T*42~I0_Q(c(p7wjao=O$K3(cKn%$$q6^0+` z-#^h1{GSZquL#1Q$>x?`MsY$vb*K!g%p^Le7c|sHQfmY+T03}?s#!3VDd#k2(1|32 zYRCq~7RhDFZnjb@iKgm^Ez%B)uG!i}3IwVU{-$I{v_z4j!oFh|e-mk+*B}z3&EFHe z=f7G>SLz`qsf|*fcAJ8Dc00~DvA#l%``Lf1hW-$aS_&cS)#x*}-|8*;^gGJ({k->5 z598LaC6&Q?ld~#ms{g!SIs;G9=I5;QN?u%b&ib0Gjc|$dUH^RqYOf4D_4ni&c3VU6 z|78GwWf1-)UEkJn=o9n(6kH0LWFKZ!ZIW0|nSYZ9T^C?41qzeVPw@U8ce9`Jf0DLH zO_s-$Ox6ryzJFZJ>&-^ZB-G@Lk(r6~d4J8#68dK!^fSN^z1CTg3OQM+tA_A%-IT@Pmxio_y=I9UwTiSpw( zv+G3d3s*@Jlk#O$CM&%flATY<18d!+`A{cuRFn~(IEdbfF@SJH--O?H+4eC048h+X zz+V-F|7W0q7PNs)H_O=;I(7ZxpN_Fi*=s8kM~k|avG>(@<(#hOOdB!zx)=5BiPh5* z>&Fry(f)mVaMaiRvp%*rompL_5p%-)NA`MUI5M|S?y+!#=P3L~Uh^Nx2s(%1voWVX zhVdo&>yGK{huN4b=WMF0k`~V;=4|Ik%E=#bRY{4&XChP}Yo+lP9gQ2naWY$(bhb)L z(pO1SEwc92ysUkV@Q=l3r1Xjx>YvD-CPvXWdZriuTp>TFFoaQ6FYD_@uKq=K4vw&E z4cE^Q{1*lASL1;P?f*Z5GSM_V!s0S5CMkqAJ2Z)AF|v+X(8;3AvxGa=d5q}jZ+$*9 zXiom>G>bZF9ysZ~u8cfqT0F15Qqt>fl;_vr*R&Y_EEknuob|VmA4z}vKKZV_Dk;Ij z8IE__1kJvUlEo56@Ane(66bb_)AC}v7)eL??#X#uvR9;<$oQIqU0#k$^YhG!Hu;m| zi=HgFTHx#6>(ws^r&IeKVv~nNC|y4)R?rB=UJs{ur+59$m1 zrN1go%pIRCs}wqBNALF%PEo~gjV{<^61>9|d-hyI@LwFjKO_i$b)+FrS!u|VSLWaJ ztx#{yr@UII3_mo|Pxn)hA=N9s?xo%g@l+cr$Q3Q3U#4SRu5MNppIs!ei$Zp2xW`n$Yu( zRAAYjW9s@(p@}MmjIOd3><;&0?^bD=MW8cWfZ`3Ko3rCK&hlTp%8rl3qkxeLYONT7>+xTeb*xRVj3 zdnFx;1zfbIXRDNpJI^jPQ321Bo4OUxyH}cv|HBvk{~`ZN1Ndu#@YmhKer4)_%K(8=RkPW)H)F-bNp zWP49aXG;q@KN3!~=?@*GAG8`-H>^SBYMq zds%W+$SV2q;fJ_N`DVdzs*NX#stl2!|2id&t(Yu^Zw;qKz0*W3{m%f?L+ffs^z&|Vq|J;t2$z=1XHi4XK;|Qaa>J>&e&WL^<6#GeU`PHbz8{fNii*Nma zGV$AQ6rQD|=$FT@W^>sbA-vD_uFk^0KlrhFf~$m^nKoZEKa3d2B3nZKJEO z)26XbFLGOCfh*MxjEN4 z%_d_F+ULDO1q-!De_%I2hhQkeZkP=_(=(N;kTMCo`(vF}QqZ|R z`lUK{x8c;;i@o}qm+#B|dI5iX_5aHP_(ufczltY`jKZLeev^^W8M^kvnSMGa7WumW zBc+;7v~lxHOTQ^lr|t5j@|Cv9&87v$1&NO+I?3$OMM})8|Y%-pbG`rXpOp9cd7HFLorgcK!G~d!SCssiIB`xBK`CY$x znpvE6(j>KP>bDKa&_20>>Cin-No3btTsO357G(X!e!0kW(9BypXr?8SY6fJYRBskF z%!YYEqYwO^Y70p-EXoi=4hVXVw)TW>CrN*DMrJdf8Lpop@?R9dUyBDGlz+9K_OAgS zU-v30TXT!>SpjUs3ir>pG)76;_Py79qbk=V~{vQ23`ch`EAK#eu`*E2S zQcUWb4M~}!M2zhGhB}#8-VoxP7bi<09Yt#{UyG(Exx4w-xVhXte4W%)^hs=dZ>gk~ z5zntmD|)6`NXoH}#jC3%YFR6JELBpKp-S44S|#bw1B{8Rw1qgUppghPLQtg0T*S0i z+G5xveQasYJ1dRY6l1Tl$(o5Vrhr+8gg#n&p6U3o5gsmmTN<1Cwv>F#Wm)@p4D$l=41P%IE&6yF3Bv!v|m!-zh1vzGHT1E zv6dW2+tfZSy|=H%PEyntzO*m2LwnBHWSiK$QumIorr>5w!A4Mclh&)E4#aPJJY&3E zXLZ9i8}RLQP+4hgjJ4ydSzEIOFXv$#SK;Tqf$pO|#&wF!D;wi8tH1%z$3C2int3GU zn{}aHb@#Cj&FZsKLgWkCYro^xf$rVxtn7P5m4{QU&c$;8+c?gVvqwsMtY3kl}9dV=eWRFFwmXs!x%7ERi&uH7~n80 z0;kNKlP%jcCuhzaWmV+$L@vFV6Xl!oZw@R^6NOEIdkLc}eSv$qH}~G0AK_lU!Mz;# z?p|&y{8t3CR zx{OBLYHLuh95D}mB#cA8M;7uW$3NkYO(OdKDuFmA$w|Q-a#CcL6ING#MIa-;6v*p1 zHV6BM^Jhr^|4ab?5kdH0mPV}M^ji9lUZvmDc3CiR5WS0ES{!VdsmN@e3p$dGZRGX}LRyYe`rdg=*Dn#&us;_)^f z_t?ry6p-BF#wO?+NZ>7{`rtUzQ$Pz0nPB)`OE%Djw{Pq zdwco+ejUJnWDx#iVBu9k``?0?n5qDB&F%K6xwq<>T)(M|LR{tV5Bx_Ne)g=?`oKXO zq5p8qZ_=$|5f}kF)n&&CsU=m`%Ji%K4#S=94($`i!>3_F0YC^A^poT{g#%txc}a~yJ8^S9IQEuBLuXgtWF?8Gtm8L z|MRg-|6^L&JKu~gxO$cG&bP{$H=eF#+;hM--pS&#zp9N~#ZiG1k`_9_J%(RiJt2L~ zExU>_W8#UnUz5OyQPTCx+735(X$JO1GERELjW{rw#A-(}ellMj2|d2`0oG<_?GMJB zwv~h=mvo7>F88=V9r*h!hkn4DZ7U-!?v_=zRsa8N0RPcJ_zUJvX9%bhd+0yzV1LR2 zcm(%hOl9NhBcuQ98WBqLY%F~yB`}tju0vZGZ`b@YHp8__NP6EHlJtt}uv?j{%2A;= z{tJ5JXQklYn8g!vuCg|q7>n6>%s$L+47Hz@NL{S`mAV(jkV>J1c;dL@osMXkI8q$3 zPhs3B&9)@a`8_+NNTR9mnZrEUYC_jIa^ZKF&5fqddv{8+3;4TkHlSufNcDu0vl2OW z3cZWqS+4S_^F#&Z_*sZBM$wk3Agj`co%Ia#wh!*}nd~=R^0b&aq@NW#& zNnsV$x7YX&XCHyLeoPSlUz5N{87+lXf0&!}B1YnDl~-|7$W(ZRPT|HgCZS`d$*<38 zmMpA74DY>M6^51pQkvi8SW&Ykq`DFr2s%1X;=r*oPYPi+N1H?DN#GJ_wxp@{rN}&q@Fsud7_p!6 z?T;8wSZbbS94_<3qy4E8rLB$&lFS;qErK5L9W1}%h&7p(hgG9bbr8(+_?u%VixfX=5UpYaJ?M*| zZ~3-JS)>uYeWPS6f(L*qfzrzU37N_pUp_lcS1K;cCKFOkpGqnV^ZPvM*C;-fWJRA! znxcX3d%a5*hwr!`X{^i-bd!0BG7wM5`(K^meURC zET%*w`(zyrnVfk~J3NSVgM;x%0y0pZKFglx@t(_)b<4%#PlcNB~&U+@3s>n zc$JY)26<$@?49DLD*Q4NH{gMpoST-DmTm3$ zB-%h14Fu~3gBty)o7UmOPs-j-tzaoax#c)3Zr##-kzCYiu*SmK}=B9g!1-yZ9qo8$WPc z;s0C!|FJ>%2cuAc9GyXb3e)QbeJM=OJKrjh{V2?L!s^)X{NAtPNRpEi_|HB}pW9Fu zFCLZVTNIV2+GN~OGX1;xBrb#rWq^HRV)tNMsnj;pHpdg&%6M zYeY4_{T}R#q8u!ID{U-ISuFRA<&~RB%0lNkNxustJaR+1&>e{IAv=u=^fxp5-jl3a za^uS)F7rLfM!3w+v(NhZll3_R-66eaS*4(fmFKnI^`9rAI=9fUqzin(_JmtyVs9kTc{EhDxsLi~OmwivyZ__eV#WCO`P z$g!g@4+zyM>wyiq)Fv|#1KH~9u9S527361F>2FHSB8%q*e0~Z;DE-t&%rCp5^fw@n z-Tlf6#sj-cqo`a8|95w3>jZCWPXLx{l2%sXVtm?o%OW`d#jM`!!lc7frPHbHp^u?(Kc%G3F(>JtN;I9 z0ROlk{P#%3b$g^c>P|?OI+h{?YV%oLWM;j$!-J@e7W(9J&Z{wS)366|oDcO1;~r$5m5$rd z@S=^yEci=`d!k}kyy9!L|5rW3cP+MA%z{M@J1p=}B9fs)v7|;&PO6e}4a({hm2jjz!&=AC-vVy(GdAB3E&?egujvMK#SkNR$6H=B3`=|zlg6Ih^eqMD{3vas-*W3 zU(HS}>^#n&K+YHBT)#(}o4Qt-2iiV^QiXB^<>S;7ZFAvEeBTg7H}vj7{#O*;*n3v` zEOJ`z9^`+8SWh4qEQ*#R1H)-R{ui$1#Qzuk|3_>`-j{z*6)aEIzb|3-xoIu_r5aDP z6{nqOTbXtOKHS2BD+Rj?WUyEjMiZUW&+7B&sR+*gTrcz6tR`yhC#H`uS|Fbx%~bUD zf?r`7Jw3pW`!TY;$ga~3u=(|2m=6%J z^B%~3Fy}#L=cO6wjUPmBSuWT-Q8041^0>lis>HCX=s#?SHSSPPe>FA>)@T;2QENv} zT4uhgvIX|&ey?&HvOR0E#@+4L=(ELHVt=>6_kFHde|L<};y=b$%o4M4G|D&8|DUVa z<5hC~-66hj8<+(^D$@Lx>0CsR?7m?P|IqxOH39rhLHGv{OUzBo84tvIf!H5@fLOpX z52ZQ%5q@v0iT=?WEWIUNhC@1d*O;Zg*}L~y&HlOgXQHLv1b0O4$Q&(3fd^L@kS7>C z3VeHY&`vjx8%3+V%uY{x))HiYy1o(!>yHLw_vi4R#qQa-!|YAgFTGrc)k@SOkyCtU zMaZ~QlD2{vE=zq5lsc4MC>82TnW)-4ra-evzDcnu?2x9GH-*72yt!KEr8fEG@a*VJmO-lY=cmg3Qr+Ke98gy~ zEV_aKUoyU6Snj_n5UWK_)}jpNe6amRjjQX%irnUrq5|_;dA+au=RT7?^euL5xPFH8 z|14$)|35tB-;Mv=wv5Ix1$ht*^ycz}8sckj<}w*G~O|76SR&{oS9Tg{T-~!6o+~PRxhI=ngra zRVVFV{%zrb}e=qW_{oQ-}!#oiJw}n)`E$v8^ zRmcwL;b$C$n9xos!hzLCX8Zyf17V&~f<=_wIQ^{9K1UHXI+z3PwSaO^lZ06VXnj zJkbU_JW?-6yhgyjCpvj9La#?1P7_mvjG)Ls`+@n}gMP_D{z-3?Aw&6uZ};;b!i&eH z3GgonDN~%7wZQNGwSXwlXzCd#goK+GdFx~7ACb|dp*sdX7)$gq^vS*$`V~r5-))8e z3jzEm1mVx*e$zly4&>g*X5awDNX;#|_w<<-#m1NxU={~`{ubqO`i@>px5m)pN0#|1 zov8n-KW|_Vmms;$e*rQbLo<7iHOy@qO?ltj*#`U{)uUv5lOIFF-ix6R_sX%a$h!vL z&w5Mo{ZhXI-%s_g#<$t~ZG!{9A>PsSs{u0Ul9SU%V4hDPJMH<>Sn3PC*7TSqnqZFqnR+K72nz@GlSGpA>|@b>tJ6<5>oJ#L$giV))n} zZX#YDps^szKzuHb|{E$Es#(>5taUkI;T8Ga+^$sPe# zSqm~MK9)3=2zs_Bf_@c{^_P(!PDj(|9;JAPn@bw$T2i7(De3C2O)ep?Ac9wUT8)T; zphu5>5ix?2u8c!TB^;C0q=%e}qz9cm;{1Pda7puToq553W|${h7(AC4*x5&Lw&+|^ z!m>Z$ho0SEhgZnVrF5A4y& z2|_)t*v?fyt3rRv$Zkwij-2q7c*IZ ztNnC*N!L@gDt~+_jx*A~`FY{-+O6(g&;O#g+{0F)7)=$DQrvKLdG6CWPs3t8Zqn1^ zKZprGbJcg}MrlM5+8k5tH2v;kEY|+(d`wMn2NkssyJP6Go?{I!AyRzEy;Xl(;lCk( zKk{b2)Bj@V=^myL)kp%9VX4$F8Oe~0e@cuqFb~Kg_vhU*?kIAVn8+RFlFl-sdAjJs z{xO#AQjCRV<+EsNIkt1)U;A8&pkGTd^ckS5@b~1Ci!X9KE#g_ucyvZuk;arRt|%IX zbw#c`|3_v1Iby!gnO4kUeF+x7ClWthVKma8`&g_o4(kA@h>`xpXTiAc^u1m!;zk8{AdWDEMo~gnr!V(A{|zboNWB zMJ()G9|e4nX*CAEU?bJ|-f)NKM&?978aHL=XJc(qy(SLjw{D7z0lu!0|%X&krnJ*A) znhfL5knw+G0RKsN=0W>UD9~q{kn6+pe3T|LW?d;GAO9}Lr@#9@J!C7(@5vJ%#q3+= zGrhkTK110kS9ESP@`K{(<{o=J@W9x57a>(9)Y4$hzGZX;33z5&Bn|07?)C<9GswR; z(N6sHbvDflj31f54J9+MFTFA1J{hi(<=t=B&`j?ld!4tdOO_dut@LBad;$I4dwLjp zYi(7{M9=Ai=a&z*%Vo#Y4eycW0-orVjb?hU#O9H~vmwBuO*v!}?$=HYR!&xVrRai%Woo8v(&DmH-jEE8L*Nbtq(5I>otFs)H@4VC| zARFirsj+w6ji=N;(?*O`%8HGWe(nV5hCx?KWgIZe`UzVKXV`v*$p6a${O`mQ56b_> zYXVUm#O!!3;!{HJf?WMcazRe}B8Wb|aScXINPiUawm@xezbreBem)>Twl4L^{d~ge z$$*KrF%CW!nOIyOf=KHG`hI_nU7Zta*NfX`*VwD=X^8G_n~i!$m(h{L>(+@q?ndw< zJ9ixJOT*UUisbX=Ne04rX{pZdei3HCa>^W$UwTEJDhHbMwWslTbJKUDQ>|WCTfrS|QyVIq3y00&QDfmRj z#toT_jT>0HK;MM>uZu#zF-=Y^jT`DzbC~ph?UgT5=9)ya!7d8)6CYD!jd@f%gds>Tre99QaXzGd@WpAv#hAsq0^~eHL z9RK!V#KM46I;+Xtwpgw#*3`%?E|Da9p~|OA#aCG)2y-t#-0DQ&x(41>rSAZ zzVEM_iT$hV;62`7dQC&%2N=emA@aXDfdAwm{3Fq$XJCEgUG+=sT#ClYr^uZ(P0Yv3 z*TvIi&GGaZSmAo{#utP8e%=h3B!PcLvzO6zM1p)WyjRz08+kunWnu{09qpZ8Uufr3 z6s~ys09yIXudNjnKxb9ZgFf7^+_|MJ3GG1 z(+aPe(4w~-Yw&gNYF6eEW3pisT*_lS~%LA?BM-#viRX59jd8WbNC6D8qT$ zBkatb&5B%wo*1GeF0aO>YUU+wESKKx(jFz=6~Y9wo#P>O{6`8 zZ;&`^LOqwJNa@Dav`2SK9M*YZS97ACrIDDFbH<1=)a24ockVi@3-dtHrXod37wTKk z2eEp$75-HL{HFxrkD2s-`c46TU7&|5NDdW0kV9E6(Syd8qS<31gB!pDS5aScO9r*K zWKjKIGN{OlDz1?@J>!Q#`3pXu&*uHt?}Dx7W_V;5&1O8te*O61mt9BI=)Bibo`rSdq*C2jS1BOmJdWr;AZebC7?9QHxQM zQ7Z+x;d(KiP8^78WykqfLJn-k{=ws_gYO}aSM%w=oCa|&>aF*MF?--;R+rU5{o1Xl z&)QPGxdr+*%L9w2Py6^+2KTeQpSd~xm*9YPZVoZHR zUaUP!GFbTW4@(oYv>~3J?zc2?Kk7cs&hlF!8{xq^XcF)7&+x>W^w2juE`95EfS(vo zl{79DnWdrAPoV9{1(D}v!O}nm`Y`?s(f_vv@J|oIzX~*2hk{%w_NJWXy7(X3WfSOG zcy<2Y?Xq`q-hbO=Y+tmW?$E|T_d|WWD9^D;s#rm+0#B?)(ZPmfORaEDp z7txP0Fh4C<$@}Hk*L~6F_e-|N(|;WPJ^J)lPzJ}WndrCJzP%WKiW-ID7m;@oE-K#? zQuHmCuL+bN6FV+4$1JiHDGG~al{Lje<&|Q-(zJ@J9LDeu)&I8#@Shfhf8i=p8Jb(O zO1>q|V1W!D@UgXWRXJ|AD(4%ND{fV8h{22_JAJL_pPNAAuTYMm`~}5@auEf6cE*Of zFnAKi=Pbs0zuPcEZ|axo$+m0tAx3V$fgba5)$zs3!=om}xlT05CdRg0mWnEtW+aR1 zb{S_CnSUYrlFSo9`2E?LzV00u$wOO5pfx?(TGC%!PpX$Rag$`w{YC~>|5_8ClZ=@I zI1~Py8}86sbsxt3!+$#oa#=6Al#|>p1!}e9-sRKfgz?P*+%MyoB>W%FpCR(UBY^)s zLHJjI4%)^FNQ{Zz-LnWYHh=C@!K<#IA(-)JuwaaIFnfMa8DW8r~MdZu&o5c}c)lFZw)~5h}Bq3KVJ<~w{?lX$29Omo0+G`V= z#@I!kPV=&R3Gef-`dUhw8Q$T*ncd6Xjp2FWb8g*BX2cYds5IVI_*Vz;XNl5-{@+EA zF0ut^%r(%hzU+DyK~>Oudi3>1`cEH+Xb>!Az1Ka64Q}B6gKh}(fVWMik40My zs;@h5KnssgOwqV{(AUS>;E{o4q{q?5Q?Tkx$k7a#e8uEb z+X%aY&WAVhSQAfodo{2#zr@>}%9=uRLbJ!ydwikTv${6~-zE4~P^=Gz?+IRpXTTmk zhIWoZ&(TH`eH`T8h_Va&B$P>QzFATCN9S9LMacD1q{mK;|mW+1wxS`5NG}3FvAJA33;AZsIJ+BkdG0hx}L! z^9Z*1b-BPX*?%4TtN)mgC;M(hiGV+9@IJJS9OPYTlwtMwSpx=9$Ub^aYsIV)THD0N zxkT_neBZ~kSxMdrmiu9ig& zQ?X{-IJyF@YwJU9#hTXm+wb6iW8ZiZ2&EP%fSv|Lv=NX;;u_t`CK4z|YaXRVF)w|33nn%v)-46VI~ z)&jUp`K~=SQy`v>^2)`!dL8`1c0?kV^sDn0v338am_^?7CUT0EbS18%ZDN*OMZaED zqD?NL*DV3xL7!EBP>it{JjTTT>yNDmWWBww%RNy`^i`lOqw)XEpJJf-egExG`EP&1YVZHa zpYUt%|IMFJ1XM?fi$u9N7Cq7tA9shWMSva8diDuDD!;GF^*Rq-Uvpo19sdUF!h>HPHRBFOE+0T?aodMPF9bsJ&l1=f%2V3qBrf2>!bR_}hZ; zXLOVAXJhy=(2ZfW6XWx9#(5dv=&t;fPx&`I!yMsEq_R<(ueIBw@jkbad;(Q_zx4Bo z`Ce!Ud5_uG*hU~P04qx)&d2t#m`kTmh^uK9vY%t#0vutwA3KJ)l7Y?lG}1TvvYYh4 z_nOaKFKkSyXV$2kp6XYj_fY4qE>P!wSb(V1YGk56{o!h1CGn^@t6fQd%IpXy^Xc$2 zKn%X_*}el~Sfq*DyirnV$J6}&Td^h!e8$|x(2VP|GCm2#+H@Eed~OoO6$#bEe8p!K)g zuZRhF3vqAF+=Tg_EkZ6X?cDoiHzi)b%79_v|tH9bB z6?G(GV$r+eYa$uH4cVTZkjJs-(wO8`aFvj}it%*w{~^jN;{uY$WbS?Me0+a2z}=;~ z?&}?tfTT}BCOtzG4M0~_vCB6ZzNtJfkwotr@ zG2tbkzg*;CYs;E9maOXvaG(QAFucg;UGF`i(y1=B|k zA}%Dq_?&5e2A{_pV;=HrB*T~ihUkBP3gACG2!BQ&K2KM~!#e7Oe&$7<%^r*enD>#5 zH!@=Gx6ZHEG2Km$^EvqJSPmttr^<^h7N)CGRQ@QdTCP^I4`OQ20a>mlkHYF{8`atB zIpgTdlD;6jUX`cHS!^6bclYS+i4^mTzMB&e4P9;z?#BVUeGIla+|#{??LGs0gst}w z1|Dkmg_=WgJwoH+LPFvcA?y>!vWGZY2|IM<)5N64d9(Y}um*{pn3Bar%uR;hpkBcK zk%(il{vt}&>t^i^WB7;a|N8>?X9wZW=*?vhbpH|ge``QAri7r9Ny zC)-bG4}1q~KG7^(+tRqM4%P$*O+1m?FV7aXVD)zCQX6mCW_!0e@ge3Tny^iV@mb2R zlXMkhs7fUhE5$G;m!xUVp;~ng)vI^m$OgPethsa9%SW$CFRQ6i%_k`ln}|bSL(J64 znN1t+cl~maVFS5yI!QjcPw`j(~nz07va%(E;+7+(M*w&XfJPIlnZg)TVJ>#S&RbO)eR)M*HyS? z7Ue-rM)g1Y*h-FPoTd#KR4fdKxw zLHIN2VQH#wl>>1ab6r(@uJ9AA_A=DtLGOdng!Tg1{eNobcpTy z?&d8EM7$OD*bFgbJYURLOiLynj?8a~Pu8`NWI}J2a@7xriTZ7`dHm{%x$14R)gE5` z4>wyo#O*)I_Hb&x>Xdu8M=y*?`KBeJLl*vX$wadb^5iuJ}=o{bDCm!4XxJ9EY`1SpNC{^Mv_k5rgTe{m*DEy*#&A|Jf(Gjn;j86IE zcUZXJ#5K_NARg>DkzF@vANwDC{7#%R`2R1rwu9>r9%ttb@(JUGY`0J?&;bFn7AMSe zlZl}h$ep1V1mpt|np2u^{p)8GURi==MwXkfsgT3=GX#IoiQzv7PdupqcVAR^l@ly8 zXMz?FOS0+Q#dvX=du&|u&ASghZsSctX(RKGc=Qnu zxYp-!Gt{keu}oxh&AKi;Wm}zRZ_ie7Ge~9FLH1^75^BbZG9mEcAZ}Ra?M~{ISK|%! z4$EZBEJ-r6h~Ly%i06eEz1^``AwDEUS-k>l(}a3_(^z<1 zJuL+Qo+yQX#v06Gffrd znGz1ojz;k6kV`k(DY6r-jYefFyyS9DJheZqG*<`|tI1aC3DC$hdTyTr(%?|g(`|_zg^xy8` zi~j%c|JMfazds0n)^F-DzH&2r&Y@>q!Ohs7`E?Ab-rp{$Wv!(00g;Wlq*~oBDB-;g zCFU;I2VxU?+30iT>(`3U`?sUc9R?TeYi`L*6uEmN&yk7yns;TY+Lh|5B6pQt!-8vE zagRg`>>t}6yz*6Oa-UwEV;J}*TMVoiQ4PCdJIYR!Gbp=J{)qBA3g+=rJrCV(&FWja z9ZyI12#6CN>*J`izYliFLDY+HRQ@2(!$e2;^Bns8_NZ#k`nrVTjnZiAZH51#0RH*G z_=8Gep3yRv52Hsu4BqM8t3dQcK)jYTme)OQ-Y6-_n3nK7#8ir4+3nNQSNk=2LS>jo zDab1M{fG_eSx$$7{%Jt#aX>yX8^~|-4f^m{TT_h8@7kRaf%R8ahGUD7jShdG&kY? zhIIn)kp90efdAYe{LP};?{D3;I6xP{&P|U`@wDt(Y_Q7@B+yDw|GMk-ax%&7R8%(x zR{VRIOloyqDd$oyoxie}Y^juF4rudfD3jAc>l*{Di&cg=TH)Idw6B!M_pa-mmzC9W zr93Z-&@+yCS)nenU1hR~<+03uO!DcPTFVz;S-0do~x0c6hVr9rSuEg2~ zzM68f-G+AKXcyv!<1fg?&8@GMr^w1B8G9d?eQyl$fptwGO zgW1RQ=m18T0n}UG!`A&E=ABM%>Q?uA=<5mHjko%al|R**U_toG6{Y>m*N_S zT!B?xyaVZwb&Vw>OK=^<8t^0~13CTdN}swPiwWTQ66(KlQRVz z{ksKgLY8ywBEQ3S3h~8Vjv706UBy@0P9hUIj&8wuC0)NgRCs&&e;NY#KNy6+a9stt z+ErdtwyRxKyk(R7{b)OVOWn)pL^+e@^;mbcq^rG_Gnt-on+r$_z#lb0oTF0>2PJFv#_Kbz*ZvYf%V+bjS3 ztpNV>g7D9VBy>8l+OuVS{j0VJP%4V#Uyq%omT{SBVnE6cA#TEdAs6pzJ@^*6^KO^S zGa`ib^{mgI3l4d{|1#d*bftW!?I%vipQ%UpqHV&NH?bC=Vjo+BDbDgHJZ;F$EP#i$ ze==-3M)|)C2*?~$_)$2EyBN_dh-o5M$y)rZpQ|2+Y@Wc_^pniyh7)d;p>=T_z1q)K zB}97`f}FsymS`QjPE9#~J(Q2hjEY%Upx75joBIRp?i*+=H;jXB*bmOQ9tuupS3Zs_ z6Z0on6==`xrT@Pj!2h8j{Fl*K;RIw|BmWD&N6Js!(xWta^zC0P*4(ejd&?%AVY4hL zR%G~@{iscSX6&LF^;;zVn0(b6S-i_6(j&Ur32E2e`w&ZDYwEm&0zGVY^cghk4g|W;+;4;x*3{$afHmNs~^n&-idr0 z9oBke`#G$s)#2jvIQ<%_iTvA-dtjXoJ*~hx4uwBr`E{Xrp>t|%+!<^i9kV#DgcxPh z&NbB9xR!*p4mUSBQksl4Ic~T(J*@EWuu*5LFoW}W=d9?Ew7HVWG9B3=DxP?>+_u@r zGLA*4j_O2a<1rqPnHiT|mdYG#zGpaM%13-GmuS1xWO=L}x_-ZGBIo2L%3ZPdjcS$q zBSZgo>h8a6qXv`hHC7Vpn zRy3YyC{%>u-7HG05;~W!d!?@o^SCRe_lUhd?0&uYM7@rZflf#(r<|; zgQ%miI6_i9PPSJK-@(6bVa^cWcmG?9~7u{L2m;b7VAb@2EOFHNs!cITE> zcrDET!AdU`ty>UdUQ$ewQ!gk|ux^=N>r|yAV%Gb07iSo@;N!uD;Q!|U{yz!Ae_l~! z(N^iWmL%z#c@tYnH@b*7#k4LdiwTL0=aO2^E0aHOIp45i@z`QA(dGPE@fMrlDzy*#Fg82g;BxtEq@)QY^!?@kqN*t#3?q3 zidJNar$hiJqtjG8Hq(TRvm36?MbY&+q7pcgJ4?D!4wHfPNf+gyvv z%CgwI@gfH9&%jRXBcO5Lw$O?1*sW@H4o4>v3SpWUWel|XR z>%^?$?h^IKZr1Opka2X}jV!ha$J~QG!I%qdHSqS@iMQAI-xR?Aks$mF6>M&?X3MPHR+M7vb2;9Rg^f9+pw!W1Kp5gmH=@3xZv z_X7Ao8iYTa{h_1u2*Zoz=U|0QP(umQ&L-YN-BL}(NQVHQs`jb8e>rnRt-7&UAz6dstj7laZ6}D=03iATj75=fd6Ab_`~ueET50zFV9ot?pUbEy?_!^ zsK}kaaK{3c%g2t@W2_zn`>_e-5foLPwy{!r*E*$%(3&0#ay481Gq9J@XOW4Ep5G$* zY0cIbm5EdDo0^S%eviRe`b5tb>D>Zy$78P4?1>AnEznW1Uq@A5S=?P030>MNi<^AW zYO;&WE`dE#09&m+ff(C z!Zv)yk(o6D_J@wvp|0v8lwZ;b3jj9SlvcO0{W$*>St7#TR}Gim03V%vFfl@#{@SnItfrEVl9gI z+Y)HE0y?WqgMj0N7JAyW$?y3(r)AmL_woCmrjInq$+_kIe7)cA*ZXyOzPMS?r+q+i z#z|NTeg%&U$;D#i4z#wYSUkp-;q|q>C97i79ywZHL-EAPg8E&3-fo9gj@7r-7?I)0 z?Z^`Q!-;s80!H2oVI#JT7Z0Onr+=x>KG3E&>+`wYqsmiDn8k=V#MqblGfBx*%OzP# zo|jw``?9Tso0cRc7c8vN=cs}z)fvC4lo)?m+d26EbpI#Y2oUFwF%8-NT>4I7s<2Bi z*P6XcD^xR{b7c9>2bR@dvEbu}U507={p}->3RxU|MTwgvtDpWN2!NvWY1CMO_dcF0&MC9L=bY8=?^zL#3R#} z|G8EL=`pT;)PWUvUUz`Is;l-XNppya-~&TN0Q2g?(+2nrW7$)ExU1}+^gk+PAJ+wq zjO%Bj@pN25j^8CdjD7V?wFBH<(`{mG0n{SX?}az(fvC4Y$`v_LN6^Lk;ZB_wvMLq>R@w!*{3}M5|L2f` zzcUK|P3mGN3(nxwrQ=a^@sXjpdSffK9og88(4$J+`~=i*(G9iaZ--lQ8QM?-t$PO8 z+wOIa7v~TDcIbHSdOldne>Y@zr+!K2tD)S2o7e=Z&p2M3GRRp8z0m?UbG-Pc0e%V{ zBcdnQpx`EjT1`TdWUT(JgZFXMyUBmSdIAO~ zGY5hDcn$mnh&Q1ea#Z~k4(+W1FI}Yf7)F+?6Ri1+=MIm291IMq4SoNIIt_YM1+a-J5#1KOSJP~BQr zuW3o2mwuB**bi@C+D++~R)Xnb*We7-L!NBcA}QIFT#zLm2z}_er|Lq$;>vbqiJs67 zPcl{;D_vld3nr`YTY8=M{qI>`GO7!ti`N0gn${%eDrYaG(a84<{l~aJM#Fq~(zWRx zNhcs)fEW+6#W`tZSmS0BO6C}krc)^V75lgh|HBIY%kYbb@i)1a?BjOj3km|r<&pIJ zKJ$+9aLswn2|{|8#YNv{in}GJXTqiJ+O8az8RIc({$Rz{?N6TZ_rUO$XRzfT{(Gv9 zpwB5fLo^-|YB!};B4232n-2Zav5>Lx`;rU(;yvj);k~Cy3S{D4g*SP|xd5Gi8m|0v zoUg}!Apkq^6n&dU5HEeR6yJQ~KY8h!f8dG|=8ov=8C$gTY_+q&RX8KU#Cs$?Dnwuf z+RDrWfpJ(PUa{cghh2vMy9)mIMBz{VH2#UNq?fmHGq&t;BkpGVUU*!!Kh1n)Z_5Q% zImcIS)9lKDPL+W?FaE;Ai*B5;eXkC_KMqVFaVpxrJHoE!1oamzTm8jk;cMjPjQQe# zlyBedh`~ytI@2oU-v~aRB9+Z9gnJDUJE+WDBkGS061T@JziJn^Q)Q0y zs^Ps(O5lYlzI=~ihQ>EsbC74Muhh?aF1T;B9brw(_OvT?Wch#JQ}F+36#n{>^^WKE zs*iGc`drCx65{7CbnSL#3rAgN*X>+)W?81_!K_*6)!+1UY>o6@4c3pJ!^V0oMqgr# zULl(0`FktIT9k0aSSuB4g#XqQN1>lT=ZOciKt3Wx4KauknohkrNyznVL8bYakm~$_ zB{WmB$)bN)i$r#3T^G)Kisq1NW_H9N))?MiH7o?Wini`MpEy*kKC@1}@D#gRRaktA zSr~E$XnW1v9vowD$*3^>nm+SlmYTCR6{b}zjak3PhojcgQCZyS5!L_SSMdK?6#h(u zc3bi$R`M6+mK*ID>l;0vIQRKmbRToO>rUy|sPZ));@!^@%aMT}>3uw6uq`Q`1dmMa z&F_5A<&iG6Zb|H`k>2YfCU|5xb8CRGroKjf z^hQSlE5wtq{{wK>$bEF7WMb z_qIc*0FzN)@9zeHBF zvs{ErKE`vgMQ`1JNLoqyWVyOAu9|PGsMa)Ys@67sQmt!D5|(3q4Q=kK(TL2&D&kk{ z_ZgxDW)F=#w|7S@)#}YltNG1;tk!J)x>{3$b>>(jvbHkBZ)vX*(g3<5niBJJ*5F*u zHEdn3YS>z>ZRo1jHP~@R{#R<8@vqp!i9NP1Z;#|QW<|^=*%Q}bk8=UO zTo2Y)!tvI~lvJsmIAsrDeBjH9GZXBvC11U9Nm@;vqt9P6H|cr}6I&+Uq=O75eE#?z z?v;f15+wWf$kq8iHaXvypJfqLf^kMgZG3GyUwm4#?6cb3;>T;j5OxJW zF4O-%R`6dQg+JQD_L##V@i&V8JT#(}qw4pBc>7vmux2Z2IEoNc@`)Kd}wsDK0nsZIQ8`0m%pS3|mhy)Du^i2BY6<@%O{3aj|As>wNw#8Ii)5pAxgoX7^CGXiOz^gr9v} zwb6Nlvth*u^Z$IR;D28f{*CuiUsDC`tO4!xSa(c)&0K0r9_^SZ@(G5vbKQD3+R?qX zYP6&>sd6Gd4z-@k!(1zBZWgd+hh!>Mt*5v`b(wxHti`zR$C5Sd7=9;T@vN(}s@|dYsmpLL zx6t@A{JY{SnwHbwlNx=;72N$VxBq;m;QxP7_%~HIEl=e6j#N+6a%&HBApS>gogS?9E;?^bpmK5rzNf3jRNj!aoz$-C~;AlpB1&LuK`@IK9xe;&ibs2ASQY zr7apHPT)o<$2`e1+>Sqq91q;__>rxPJBp9W}eW4_tSSai)54{S+zpLFYcVch{kbH_qYpEY^RF^$V~T9c6IH&52Mhu59p1=e#OOsMOM>J|m z;3xb*+G74ddTs$X{R3%hAveolhqORe_zI2nu=JF9SkIt&hPJnL|Ktf3`KIvQ@HS(M znyOZU+5W|dnfw4(@Z&Q5->2YTgWo)?|E0kPl3b>D>9dV3md;4;w~@qoW$?T-IJlsJ z)A$p>4H@bEJc3Ay)_2kVH%o>B8?32G#ne0Bm7cTTj9H%YM&6aS+PUf9$g!WN0yU5g z!hp_i*q_xB_`j9h~;wmij$f9R+(f{K*Ek%rX7!bF??Ot$`p z$e%E7WW~H6m|2!7K0aWcrU_bDrdU64GC;@8ma%KrHFiuYn*y$%cK8HGpHRNJs_d## zdWYD)1TJV+Su4OD4r^qF_#@N~i~a?1^b2BC77ZBTt>Uo|{elsN|4{}1RZ;j`Wdx}` z{Gk}Mhs8qgKMAP?&i7`` zqG^cTscJn{Q$W#*ntmEGSiHY~o?BJDHg~?`P)EFgIBtC+af3^yAg< zoOwqT?p=sl^mL6fZ0~IuBV?hvn;EQ498cA$#8z%+hNzN8m#O4Y>rd$Il<`Zb#?Q}{ zCE-r|x=*jyVO+}>_RQ60YdcY~6u%}@e6#=T{U-vtkrn^jq2T{O6#l5aC!V_hZ-LKI z6ZccJHAV8(?|E+Zm+;izwK{Y4SGA2`dT5lmuJl@BSs8^o>)L#H2tH4u*t>fXnLkHg zZW4conmiQG2k*d1;QkPO%iX3fXHS{18WRJRz;G3w9AvExxFXyevAHSpPOd)bA;gf) zH#Ej`?M!?tOxrN;CzyNO#nD=UvBzB)k9^=0&N@?mfAh<$mGk#I`<`-RYBc zdNchN`+l{cN7gDgDaogrG|{)xn^LX{8u?qm6d_^W=YWbn>YZGtP zuR}N=(K9S%_r?&a7fy3uN0HG5ru!Jf_@1}id6&2$AUgoWi4m5 zBtvnwOmWT|H3-&EYB9{?1da76>0YK1xAvnNAtDf(>RChc>Q^M*Oxquqw00hqYE@!G zznsI3@jVu6QK>~IG^`$lx>G4)dL+A|&QSpdvlKBSGI2gdvakik^#>hAep}_=A-`r% ziuh@S**=i+p<$*VqijUse@wxjNDqebH(aHoHgYw4oq)N-|j^;YPe&qOAmQU^&8*8d0daf}&uwz)L5<7)RvC^Cfoe-pL;#7p~A4T-NL{aQT#*onOKqS6)Jx8!|@chDIkb4;^` zqR>Ya{>K&k*F@nT$;%Pav9@=5t}DB)wD4kM(k=L$78#D2RU>BhE2+KV>YH|6c;Qz& zgQmC?Z<=^hq&?8>I@~=ckI$X!&wCIRq)^X^*-EME9=t40Zw^-Fg%>BuXX_3}pKW+W zz8I^4p8nxp$zAG|7V&rl{S){%8?R#=3NPZ7Tf zGjLc^uTBxa2q(|tuHPNta{K-Es{DMF_@|%4=~p`@fyM_f1`#KK(0m<{wEat zAB@7^f_9+(MSarP^7i-4M!B_dD-Gz&p+U9M-g!%$nAO{8ABqZ{!gv*-axt=O9J=#$Z$d7FWCYQtkLc5_YRh{P@22B^ z7kRWsi*GOoJvuyAkbYti#vz9P5U#VuQ+RP^@$-l+Ckg35zLHTMgPe#=&TmESZ=7Xv zgiWBV5SOM0_6WjRY)L`IH-lioS)Ql6%`WvJs>Cv)@c%-=|Dh=SU9k3?LM(TR_{gB8 zQl2qufDJfdEaI35CuEdbL`|f!XDfQQ3q2M*`-0muu6$fsT4~|=X-VlKA5Mi;HyvDF z(Y>6`cqb}zFD|}e$!#(|#&FD318PbAoUITM0|1RY#WUGy7y7``gLwz&Q3j8T1p_2! zgcp zMX27G;2Q_6)*^lt&VdbKoHavyGi;v!ycB02QTTtU;Q#9={B5hAmQtrR?|WJrXK8X= z-Kh=MbIuIv#hIc_dIY_4_XeB$%!Xy|*WlmTF2&nllU~GY0$#V{bu?c8gx4fHXET(u zM)l4(8*ywM3sWYpfOiZCh$U> zO}$fF&Yq6+wuC3aLalt45ur-as29(e`Qeu02X(o;@FUsYQ>@qyc!nAj>FtMWZJw*Z z@#3>*=#o2Bkc2Tf^NWxSmj@nT$ibaqTfG_?iH`Fl3jcp7`2Qvf|1pdQF0?ZH^ewWv zEOU*MqwH<(IrD2`JKZk5VBhtd>fb2uuVDBu z_y2Y&_`9R<-)^7u@R^~u_>=ui?a3NuwXWiF3(s?j+oc2M6jWZ|gHNyw@wqTVzOH4B zY5v=1-sW;j_~0|xx;fk-ePO>-%XKjE@yN;AYA@|i-#ikwtQlQF`;NoDbcP4RI*S=n zwP7IB!^!U+K{duq@u!2N$vp!tBvTweNZd0I_msU_5+K_FjrF))Ip14m6J1}7%ridPD+lMkJ9HLvP6|66_;V}Ia)xw> z7>WwHf*+Ul|F0GN*Wx!1umAl+I+U!xYwe`<4epl=?gK$C0a|ybsXU`B11q_!7p99( zgrYS(yP&dI#J~XbtJ)0l^TBrz2ViJ7mM4{s#{PNO|5yL9zs43{o?lDe=8p&W!9!=R z+K%fO``2H1$w?L`S?4cG5g$58dfyz}7p>8LjHiAA#T?9rPlp$hu=<=fknObnn#-L9 zHo|58Z5!0NhRzw~Gs|W|BW;03I{QDa3mZdF&n&1_9I+PHYwPcR;KdE^cgL|NN7p*F z?+S+h^8Wvgg8#ZG{7LsN4kf^o@)|KeWMA}g;-dr8cKfkJYrIq5@hv ztvszP9SDy_OKbn5r4bt-xAa})|A$PJ4A$uk?W4+#WeM0n9sB>QKU#v~%Cl>=Hj;>< z!8hbpK)9cJ=|@hb*|MbB(R}_`asaI-fMZdaT1(?lnHnq6vPA z@m@Q4SeMtHA>KQ{3#A9sDl(mH$UD3O)i~ij#1pZE4apTLWhsc%bl*KrR1YMVCBi!} zs~@?B5}lQ*_278#L@#+5YYL^_lmnXJn{1rej9f&8kt7j0$izu^QC?HfJsmryVhetW zdrx8J4}m``t(jXeo9xALGW$Si_1V4K9IDO{h5tVl{2z(JpSqS9bRwHluec(m}Y)0*m<5b7;km2W=8 zH-%oURa=^aqeA_f3eH+5InCrz!Wtj7mzUzabZ$HRMC(zl>1%Lv=%6ElGolf*ICR3l z_BVLOl;X~KL?xkWNUW4pO8?jC4s{o*(>o%)w}U^HW`5HC80LG)??TW29aw%Y9M{Q5 z@+DQ!6*I)M5jN#3AB||o1F6D4F}~2Xhja_Py)qw{&Hvvj_^-#$9iIR7EgDqC{wku@ zsM@Ip`0)rQ^R7|b#47o_h?+rWz|GN7GmXd?;1TPgGHXQF8x$8v`_Flwa=p8YZkqR$ zlxlfO8aGWN#Cn<>F-N$(NAM|k4OR5bU8%5w46nkn2l(KpYOSzUjsuWmbb8n=xEiwg zl^7j5jvGF%C{uj$jZ|Q|9{Hn?gt0S9!TKH=>!BRNU43-beO~;>^;4%cIc%^?kH$Jb z2l6@y&k}tfeK%Jo^2)Ee4FB&G{C^vTf9^`Yi zZ)CM8V&a!?Xo8$x6PyIDuME^=ql(V~|9`h;?#id6KiKco9q%ZT*JSnxXVYV}xCtvl zojua)lw)*0@#*2oGnQDyjDD&jK;K7t|I*(!)GxQa$FrmF%5}ht=gfzF$^z@uG+s#b zaMK$d`Y*ZJ>+#vPhGIf(D~TmySeDj>F!Ml`w){V3$p%?cDM!IF@Pl_m;U7@&e>4hz z>PcOwtc0GFnv0%P)lX4ADsb#&ifYtN$bctRC)9fh0Yak5k#S_W{mo^BfJ(5fq;cRL zu=&GOsm)nv|_2A57x(x9C^9{}Q za#cwyFYf^s`RpHjq-)feGQ=Yiw`E36viKclE3Ir#9F152T?@_s??(8F&ihk6K;H~| z@}OF-MTwsb-&J=}3RNH}q$qG=1WOrN>%Z?6{5M45Pv}%$j46!t{v2^M9|E0b*OJ=( zj_kG>LZvuH|AOfyhxPi)df?*ly}sy^;Aln{g7n)8BVe zzCR+6l*(VYt0d$S)4B6obl~yga^nRxYDnbPU`wmh6zQD?`Mv0q=m==HutMX!cwVuO%jW;n3jQ1Mi-+|;^5>35Z_w7d z(Q2C!W1EZYi2d$Ko_ejiV+-v1w`(gq-aqrcy7KhUGr7I0DUxZuuhA)X^g6a#)<19q$zAw(4U&E$;=F1T6k&iLztmi+F zWq|b1V%IfTRV>!1I;eV;z13P3>p7;AI@0EwYtO8%b95g&bmkBnnjx-O^#4cx-x&q} zO;Pw~qn;+sktXr?&;Y;lIbE>hwLdMn?D||)=Qh_La=$oc6z$LmY^c2RH{W3`*KVsS z_M$d}t;z9uXV#=okL|nQuKcKz^*HT&E;#MTzChL|E`jktD`ZxTkz#V|qQ9**k%%H&juUxeTSLSfiv;e}^4_ULp6D zqpF_Ra|OeHx&7~~g8ySt_&1@N`)jE6tq~q8)jXNnRw;5Zy2cD~*5IQ$gHRY$t<_^r zy)7bFOO9JSRH2(JYB*sLxVW!Wv zJ5j0Q6=@PQvCzPzS{thG&4m5+acR~b-uH9(d)zleXB@n*oJRI_(!KVjuK3^-bvfn; ztP8?*xX#;tO)!SBsbxM(mCkAs{qPoKhym1fJf>SK%TzkZ zU5EK*D%hb9hAZLEPJrgAW#Qh;2%V3K&A7|hog)hW9~Ar_kHTMXH;c!^40tK6Q;kue zP;7Aja^Eu73Ej2rl--pf9v-X{bX%y#`zqA_yAhRhNt>S#)@{iUKMAi2=$|3qi_NLu z=?S3aogW68H0t)$<~Xm4JaX^?PPV@lP}{zgoNju5ATX{OyTggPIqBk9I{d3 zEhK?Q24aGdygM9s6zSy89}nydsICUKnrm??)cQ*iv`q$Ne6Z=cLae|Eqrv0U7aS*=Y zo3FyVv!RLje==00RkyS8#6@XrwP4Hf&^nE!gW0l5StG4ll(}u^psB)n&{V#;-spM~ zF~tTWW*4)nfwzt*{Ld-)Q_|b8{-@fR`Wq(x41Re#V)40ESfj%m3!A`TJXY)(;`_2L z_ql%*+VclC3?IC0yLY7Di_ak@m;h=zi3)Ei+Y)Zy2^$+FMj3 ztN)7%{tZ$1KZ=YU$9V(h#U}?ff_@*xN14TnL2j~27>f!iCnJZtnR!9YvdrX~C5|OU zvB>CBV|>=w!oBwnGOWjyqyIW6$7b1zYre-g;gY%G3HMcq-Au+xTZdRn7jkjfAj52+ zwO3~@cEkrY+~T5FU{k!YhW4bHtAaTVh-~1kH zfGu9iLwOFe3#-DE1UV8cu0qN3bgQB*$h2}Lu39&zh8*h$F48^n-HM&!iX8$jTmJE?(g);|u}EELRQ>j3zv|ELwlc;m?${lvBn`rN)_F^CN^i+>*A);tV} znrJUh1qfBwy zkIV2sui*b=6#n4o56{)cb+n>Y79%PnXHB8NP2+Abiz^2%?tL#%UE7q&O)5p+Y?;7A zqfZ%lUNYKMU}Q4d`Q7@)(chTlQa{-!AAiRHA~~8=ja)MwpXk!>C=wcQqza#v zV?Xd5bg4c1+1J5J@l7C-8-vI|EoS-8q;$J>C*9rqq5Xj}*!?n)bE<=U_5|>|Fh;n; zvOK3h(SAhtc!vr$#l?`_>OsV=T)~ga@b6aeC!rsn|5^5WWYgA!>$IcW31b~%w@l)T zsHRF>Y))^!poOMy$L9?3Z=n@|#ptoi(C1J2vTU;vX-TzLE%LV?AkRM1`&Ia^0F5Id z_}mNdioRS#Bg&0ow=O|g(J=|xxco6%r7QJ6s$F@g>2}edy+NJTytnw`z%RBr&UIF8 zh{LCCj?j#EdQyfnV#-URlDghH`U9nBtL6bn^*1f7q({~ZBXgJ7Eu_&-NoNo{zo zHnxLCm^h4A+3*V#a>OgTq5thbHP$vM9dy2du50#5s|Z=-x0tX{r*_Yoy+^r1(t8f*^mterO{+t^=RZhj|BLNEay|SQs6gZ zUZruI);`LaT+?T_>;T+zfS$qFg< zYZ|QfO?I`YRcmu^@w4oOz9~0NcTM*sWo>aR@ZIT(^YF9#0uJX&mpUWQsq(IJPLvsH zpc8`e!AQ(8(}umtiK0=Z@)46Xu|kX}{HfD(j6EHNzrxjHLp)A&89rWFU;0lpivJmgL$)Odd`;yRi!7ARGF6;0L$HzO} zZ0r&3`F1)wUDoQ;b>@y7CwN6zp(WhA8=mF{Pob>M-qT+QZ-ogJ%dV5X%@gspTKxwO!FzsV%( zWeyhFt5}hyOHyK(KiPGkC$^F=u(@(Q(@{m-(1v+KmKTGEFMu9ydk->0@kYb=lbmSE z;#_&2buNq|&e64;cY#UaprU(YwnJbR;e^9Z4wi#i-Z#NFGpeGdB?B>{w|e8}$KPam zu*G3Gx&c|O6g8$2kGz$OxHZdzRD1A;s_uOcRg254Hy_RG6L&X!FTpBq?)tQ*1q-;8V9s@RnIK4!^59cID* z?)REohdI}Hixx4VX7O;JtzIt<>QQYVf8U0!5_9vji`^<)-UGzYkOz%ou5ak9?qMD` zHsu=MvMOd>=y~38wLjPO$ExcN?sP0$%KY1wqV|N77#@i^c1&rim@|+94uDASsz??h zfs#eUhFz5p1+0zw*Mj0XF$N-r?Q5HVS|0 z>uD9~^Voz*0%y?)&pR#R_yKNWrI;K8bXiPDi%9MSX)#)Plb3WtbA|~O9*Ut`lO0Y# z1b`Nm8xQdTSa_+w5gI*mEp}$*u|~Iu10l{hk9JCekIux-d);51Qj5i-U&mv0c3rJL_dLA54@l<%#OQI> zzZkKnUg=a|;e3X>HmlEdkG{kNc@jR$)jn?a$)&^NQ8ucICWTH1w$<{vOx)xiQTX>O z_%}u2Pd&seZj6+`+B;5s7Zq{e{XRMGBwF?%e`Sw(IT`VW{Rtm+qO`eAhNcf;{1=}IdkYq@99Z>zAmy2=Tt*37NfT>l?p8+M^%xDV0x%2 zq-+274I6j_e6S2hdeg$60wFHXc>`WTbAL%m_cC z@DC~YQ_-8@_5X?|-f?}i^nK?rpMIqG$l!g@2WY&fzKUI8J3o{L7SPd)!J108bLy|V zckSAh-x4oq%P8_o5B8Wc*kMyWIT?C;mgqvP5M~E(eMl|p3~Yx4{19HJN$l7!y>#Le&u!M1-t?fFsISdrnH;7yostZao2C$;{|b%SR=@{IRO z+i~;@$RynZ9qxy~|JrVzN%7s$`i#^PkMmK6(*f;FZ`}O2oA}@XU5i79Gmj|z2Ne9D zi^6|*Rg#D5v5-zI2I$kZ@+ULmx}w{V>^M5GsTqLJBCHBiy|jX+yse~)OqbwIyy+`x zo?DpHb7Y^Z&TF34hicz(-iuYifCb!psNIOz5*i0)g{WR+*QKo|g zJdEg&RbCc+MoTim2kUjWdPmJqsKh%x$p+m43qGMe7s#zj_fYJp@>|ZxpB+P=%`*`V z@?SDhyrym?Wa0{bT&DjGD)>Jih5s1L;jc;txxdBDH=w`i(JQLamP^-6A8N~BAo{a; z=Gp&hOBHOo?<`en^ODSf=M%AHv87r|r1z)r(>OiamBhhVZ%-E=2y?b&E4QuOR->*U z#%PMeqwypaAsK{s0;>7cqdF+93hH2AGJ9y2kM$uwDNLG%Hh4&j8qv@`33=ie!0G`W z1d8aR`=WE06fbZ7Mt5L7nRKrcm z^s`{SYNIou{P3B>>ZFniC;F-iJyQJ(@7v$2r|&_w^`>=uz!mYyx&wB*lvof~_u*3H zlC|Pn+d0@9QW&B)y!O^)i|N(*?E?&*1Y| z#Fg3W<&KlViZaDAZ{Po0^^RUu;z>OCJd6V z)`vJf`#xA*FfwQnXJA4sX9MN}lb9VMe+?mX&){nTt$fS{L>ZXGH*k#8!zR+mK5k*=$l7D zuw9mi?Xo;NMR>flGr0MiQL-iXZMNbe$v_L&79 ziFbe!$DxN0yrcUTD@c==iz8LJU-_|4$Nmov9LFB9>@S2S+b#Qp$?l-XjA9bU_T}%R z2!5aaS)H!^WbG=%h0sipUx@fnWLA$%jJL#rL zm2WxXk7f&M^1y?~)%WHqSGp%znrF&}c6Sl>)acLVS%H92x~+iAo$fbEw-(sE%5j6e zF>h@RF4B^wPcwWwVt&%GCMboUo8wT8S3`g+Zxk%Dy zO@~IGCEhqdBXXAb<(Gteyk*%-mG$SnHk&-0oyq7%m2vaH{G;r1FmXsa_BmlO$8m2#)zx??Vg%e<$WVK z%FK{evLYmj|9As@v{u?D1OAw7R^u3~H+-BeZDi^HY6bsoQTWrk zs1QC@;sGSS4Lr<-3cZ)K`83zvUPsk+UWe-r?>bkx_Z`=D-gQ-z@Ev*T$ai~*HK2|7 zVx^X`Wn)Xt;<^5@$mchUXZpvKCE+#DpCNAPSBppcHG&Uw@Q=fzE2lz+OyZNs6L)$@ zM*h)%SjTrvSgDd{4GDaYCh>(3H%mKJ7d)gpg&H~sTbT9K z1WgDPOcrM&LsUCS^3&X5Z?%=E%kOZ;ImzD3(h$W49+4^E_ZH`1H2X^0;pT<69Q1>) z)W>DxKd<1w9Y1(@{#PB9$J4r1E)Mm+Xq|rj3GVs4`j?~{`%9ABUL+vCpZ!hJHz2}C zt^uJ5y43K=pn5vuyv!`SPma6W<-Ggq z5c4C~Z4f3~*_L#1O+R~nOzF!`_CrDut%Tc6|Yc7`bcjh@i4jjUL(7g=6hB@W?2x5>%(LASz zO?x48jdg*c%&pp)JhH}rt%CobqVRu3iiK4sHMG^^xX7uq(JltJdgm+1y-FA3L!}-Y zEJ1hF?{%;vKX!9wV*C@=E_G$Q(#3GU5u6>irQLy(uC3q+zs~czw9&qH!<}i34(>QA z!UuRnUu20B`eQ20OJ8(p-GVy@8QI)Z3=EObAh9k#bHZH3@+o7?kN*B6$P|swn_TI& zM{>a?MU@2nYFDZ&6U?1hIm-R^EcnHhF^kxSz%t$szN!Yd@FVXwS8A(aK%0@>;F0h|3Bjw50C#z zf_@fz#wzew%^jAbeg5i`nYkK_{q=~~{4k)e_yJF<>+=iDpEM58*g*Y%3dWP$eLTy+ zYdoHW-4S^9wZaC0K{M}^^b3-)qOa;loMrY6n8Q=#tl=AhrTKwU&q?5HlkLa~o>x5} z1-81NQT9<3dX`w`NHa3Bq@M(aXK)eAz#r=|flE*K;P0}N!?8<#yhCd3f zGOYi0MB#4|zY8sp^h>Ijr+YO)1AKvxNXwVMD-~FFE$1)1u&VlQm3Q~uG<&y8r|fdH zm2Pp{Seso~(zab%2jgyYqjpA~F8XLZRtL-aCc1WS z*yZ8`J9_hRDbqrFx(O^U9K1&Aa(Z7MhF&=|_t1K+9{nGc1He3#iEnFQpQ=SBC`m?0 zazoDEuh}YbHN@(pF2}f31U=v_8lOl;H*KIZ@UR-NT&K)PMPr4r59^l#NMr78KCX6Z z`S#$Ii~j$Z|6>&VDd};z|Le8PmMG=1dPlnd7*oN9i+VpY`=8BsAgD>0CTn-6W+-u8 zDuyUQ!<)zhyeMx^5>*LVU0j|C^>@gg_FQPeK23JE@7jH+0A(c$U30|Jb!rC5jdBL= zvNLcAMt^L{&J7D|pLL8ny3mz_{NOEfiGNTnsQpIIwY4m#)6dL=EN$)c^R}Kqy{yZN z#aV*dHA-ODKDq}!sW#4%>S_RUNfX#2Dtzqf3SX+6cakoaNW@5DMHG>>Jl(|_N69r~ z3PzUwCsx6KR}}uQAda6{T9fV2j$*3ePss-_gWmayl-K~vY3O+=xv-eV82{77 zb3pfQADeoekBw(n&+@(HnAu5s9k;U(_s$oR%_v>`3-+4ff7z7`3DE6G6Awo?>u9Vl zaS!1b+;tH~1^vjvKTg4acNG4geXm=bDISfGZXDa7+fCzYdiiJ4WH(jLF^N})Vw+91 zrh_p+_tkK$Ew$?gfwN5)jK~XyZ7ocmID@PelK!ZZ5ikLPOd#-oKmhr>m-c=-d@7(R zk9n5lAaU^P06)GfFlzii0^dS+7?OkH-@4W#>n9%9=8%2(8a#XXKBL@+)4)2#tO@ce zZf023P_yqV$=Sf3!m3k;tabfvuv2O}lgm}l62{*Qq;}4`INEm3z2W9xv3gL@DbGEwCh6d1&AQ#*A)^89~U)xxl~g>3@wI3*>Pl6E#fY zgM8Gukp?NR_q^bF!t=Vrcr?}evWr>b&x|Pi;}!g0iNasS(!|%ooHa%s88-~-8(iK| z<8?#5Trc->@8G|CIgOd90EjWeE3+!Z+F}~w%W2fO7CmgT9TmBDo5W<`JGpSOM-P0T zf~R$|y%RlOFQb_<(21V^H^|m}tVf3W{oH!tx0u1T7CrPuRA&t9>c{TeBdHpQVaDXE zoRi*JS5LkHHeMO&T>@4YTj9M#?x-^2r-?JcO4oo$vFmUi8lCPM)OA&2v>N_=tNc6U zIs}hyf&6tqo<|h^qZIuA5`{k}BwIPmjx)m31s$R_O`;Bcw+pTKxRhcaRSwOdklS4b ztpHUWmvc{J&hL9(N&&XicP9ed6#M7ER_UpK4t$)b&^9wH{I3RO-i>($RMjkzA?D$!q z>bdb?3rhs|bgb?B0AJ3@a#a-~TXx$K<+_MFL&TSo@7*qm^2+6K_aRNX&eBeIG-hhn zF_l$q8BzErDEPk`g}+IB0u0`ra$O8mR2(cq4dA%)IW-goW`akkXliy_(L}SbU0UPZ zE^Tz0L=pBEsa0zp2=GI*1oh!-VDqCYJzV2hap@pIxZE+FDvPd*-t`|-ZYYtk=j zTGf{Bz^Dn#nhSXvEqm#Z;}1?Zx{laFmIu=JMe6z>%AJM zdS_y3mgo$bU9x6V$f2fOqWE#hA4n8G2;moB!H>)AKcf}=JyH0tbN$?v>ne6WjVS3l z=Pb|eD%J>pi7O2{;hwoPi_VB(?j}~gHnOQ3!Lw=Km$T0#X7m~N6)#`t*>>T@`_qw2 zh1XSnVE>du>#O$ic8cnm0zaO*OAo(74>e$S_PKsG)_;tKXTbbit|!AEfgKQ6;RQNe$2 z6#kt9Mz5ySTq3m^W;9HO1yJ)Z*jjo6hf#au9X$WvZGZ5;+Fk?$_eKAIx4qu+zuKPa zaht@ZOV>8eID~5(hpz1bUW8c8t0Z?nGzjt=TKwO|t66W>rX(RX8!XqN-M*}o6s7uF+FCY&{-|9A_Ha+ADc89rF zF#MPM|B@8^_eJ5qMQD}GcE4mmv@ERlxj**n!J)azjp`+8q8B#6s_QJg%h1Oz)m@cjlfg{9GBIPiO z6-i}d#X^Z)eF#1T#03w$8Msa;!+zwie*HvACO7&0V=KgX<_WA2wQ}s30kLB%L?hb) zSvUo(buEduSlIl*Q8i6n!IzoD(K0jah{8Wv!GC`g{(OkF?f!;mEno8JFKb;%g06fs zYAdF#9_Km)9qM!_)e{T*OPXj4ap*gP7(-UISSpf*b*?4{viqPGbYJvC3?PU!r z;_PBovYlYJ?2$U@v$#mU-U``P=hkd<-C3Wzmbj+qUWoH`jC?Pn{O`H$GhIJ(nu|2o z`$DPS`{j4rLa{Smc69qW*|$K)WtcQr6zQ_Fei6rd_42#g@mhj*IkO6V?RlwV09jOE z3GwCZ_v0<<9iiUik=!-hgxOw-zR;KF3Ch;LMyQ@2jn@AhjK{pK5&i|w+}Xf7ndjlL zJ(1o?h&?^v(Fio|@4YnYW8{7&1|vR={Gr~LBkCQg;$0B~B-4zll(+UHYDpgZ&kl|K zRR4FvkYwnDt05b^pI8QqVf~)_Oq$^Jv1ISW$TPD1e`6H}$$^#^>Qe?_G0<@y{eqA9QA##7UvA!OKJa@{9g20&>6A5;sT;xIt8i27WZ8#XOyj z7%)wT29;p8uVl6{;s>xt5(fy)*9-78w$R?N4rAY+hYa|i(Ekpi#$pj?Li@i8PEc@H z4HkOTYfj)yq;GN-14fS9-jH?4OXry=Gf8k1#dHNfF6;ke75rb1!k=Za9JODG`$B>b{o8)u+v4<`*62qs$ZMPOV5S8wUgqf6uI0;;B9bz2wp{$m&ln zOUCN!AMocV0j;F|q|&6aEb(uBgiK;-xc8ek7P!1@}U)Qn_-WP<+gJj1gEkR|dVsfAJx+nDc7EJH3@7dIX`%!d2t zaB_~A|9ke!gAV?vA*5ZId|jhs)Ug-GJ-Jsu?Fxqfa{Vt=!T&%M{>j1*0YgYrTRcbS z<7VDHuEp`>-i!Y80X9Jj7=^C`!x$j8qq0@9FJPOW6)G=ARMS6XmLx(J@ zf+KPa#}lhuwvvO6=|`U1tDluo@q**x(er@~i@C-^j0@i)ZmYq=&4>+hvD^2qaxI*5 z_84n^&hd5Un~v_I(_C?(*z=oGX>|G4Pj=rpKX?5rdsBr`P4UeZ()Ff%>SNje@P8CI z?%F)(xc^)Lqj>D`0DqH=bsQLG+DL9lW@IjlmXG#8dlXE&P?K;6G`~F5oXQ&~W<~V- z@Eh*u%*OH&g+KZb;~4Ws;m^Zbf8St2DZg`^xHGcDgVr>OjA4{d)EQ}AwQ6a=wn2zHpGlY91eIBAdf(u{?>X+Wp zCAFtkY+Fj>#}=thr)f{RG(TK}`eeq!QK&aa_x0vM+oroWak(U&n$9MN=%aVb>b?#% zIV^Sm@bw1d`2g7{t6+bkd!_pxQTV4R_`eZ_KaHh!JUJGL5Qa349@vv0qzKls8@4Qm zmoF8$J>-RD&ryVMs#rF7kB8e*<0Y>=vzdh=_t&7$S<3s`e z+ta?Dz-N-t{b!H<)k9YDD#Hq!efES~ul>EQA*P()t@K5cxC5D8`LZt=9wyWQ$GP|m z=+m{hubEi8(0V-utJGv`mCFrXqM2$>W*2~`pvKHBf7u8w$$r%=#F~03rd7^lcr>*_ zSejue`o#y%V(0p$)8+VqXTnw$zbcGw#)AS4C8NP=Es3oFa}T^w@rJlDNPsO zi>yPo-O`R^nU}@sceykT$k_-_0t0+1yKbLmr)u-mGHx?x!OCDWVXtY7^j3y7&FR36 zV{sT&s-2qVR2MPDf@N~22?9 z8j&&6`0@ibf!{?~#5|2Qhm}?bZg(%*Etb7Tt;hDEA5vcBQDD73gKPkH*xt#z&w_Rh zFW4n5K56Y+gJvy_<7B6KPKvK6kxT^!{7)_5c7qX6G8XW*@si#!Uee-eD4=Y^rIA#x z3jV%yab1M02@Ml9>=mq46q%X{nM#*s>aHP~S~4V4>j$G{YVu_=_0r(~zf6rN{DB+c z-x`JgII$@*+^0@l)~7~a>Qj^9ccK17UbVjm(1#Myhs>H?)U#Aijw;tdj)?!AdKkaU zMmpjpSz0=%+tMn_(i^fYz5ZXagmJy{h9Qg0`aL>9OvA!>cV()ffA(cSqK&(2Bn z#RNHRjIwr*dri`rw{2*0#QDcywK`20?CrwXWR};flYD8SI~+UfwmE0~uoF$pnZF11 zM6zL5(z{Vx(w#1T8LsufzF+_=^%eZMZ2gz1;Qv+>{yAv503^UxMeUJRl_M;yPpnS| zBamXrH)y{0zY|Ck7l$u`8>|%mw`-w^>%G~+r-5Y5=G4#s-tWe&@IERr|FPa$rOM3~ zMuRy#JFLbmYpL4!Yi|0+2T)DE5fK_;u9@X-KJl)k-}4uY+28i7h2SN70QnrqzdNmB ztZdQK3b*@#zPrGs4{{oP@cNh*SSz{-ITOhuMXnt1OhQaK$>mf1J3Q*_1fM3`44ZYO zsDh109h)Y;7+yC=e{A;Zg>$$gk4pU3*qQUOc9`5%B-=Z#VE8Xz|79uoQ_{n*|M#uI zu@zh9Oz@l6fKi2u^j7yt9@U284Y!q9)Ri0{7hgcHZdxz6d z-sD8}urq}$Z7FZ%&K%;J*3o?1KS(xV@(~Q%d47R4J&oxdurpI`s4kaceNbISY;wmv zq|LQ;62lkIFIu$ZcV-sn+T=;Et@fyL$NI5Ay?K07RT@8h zx2)aLmL+Z4l7*!-fPsP{FjCU?(gi4rjtI^es5&Xki~)5Fpf*s{BB+IemKGH#DvL;!B&BI`ZE7> zqEUBm8Z~@Jy$X5pW7>?`27a=;7J4#j)FMAM#_7v|?`9S+_aCI~CR|}W6KF!*{wwv= zn7O_tk-AbaJHqTZj2@AW~8g;`Y_m1Qp_3Lv! z!`e{4b+f26ZWdKK`+3^DS2P;~0j*`s%952kS1!w^H&B%syt|OBKW^!H8sF9Am!9GU zP!R*lgcS1mxfrW*w{F8;*dDPOty>JQpDA_EiF{oK9|NCcVki8_e=5Lc-0z>{R%NJs z12abWB#O9!3E;Z<-z?+*K?MF3eEzDY{})x82>vqq)Nq17LEqB?eCvjEti3{w3Ba%4 zXe%S*GSEEdosE@YSJ%J2eMp`SFlIs%Cj*;NzmFiAeV(ki%(g&4XV$bS=$JMWsmi&(jhefF^K!D2}VJsde)4;WiSN_taUAs>GNblH>ytt@~$xPbdp9 zUvry!P$LA^#`FhKYmRst7!cuSU2bu0cWRpwdAfCb8y2=B2DCQVmHq_ibqs>1i(~{E z*Q#GLc1<}l3sybreYPAmP3aLQ5ow+>nX>-ir*0bOe|XIe%>LKQe?w*bKa9ZNaKJPJ z9@H+*Ok|^&AVU+GPl?&y*r_Mlx)MlEonuQlOVlHoYob;*tod~1z`|Jz()nmdp(7l6 z2~~qgJg#ss9rHs^=u@o1Y~ETYWxa^JVFqC`d;rckw>vK^Py(e|$M2d>!PgM0M#U-o zk5aV4((n!Ne;2a<(I1F>_dM-NKSd26~!c|`Law=o8kJ(Fng9i%( z+o?^dum~%5X7ZgOi>TP0oUh~CLsdQOo}>aJ9- zrx8zE(ZAw9hROJU6oLOv?^Di~y~gFpkN>+QVM#d8tAMwSLHNF-OvOt1lX{?^A^Fm& z4gU(n5*vH-3g~0wp-Wzm^`zLSE=+L}ejUuu=&c1H=V2syf$n!+3Wx`Z{Z7@WETAeD z^R$s51B%0U*ut`3uY8{Y`Ow`tIDT83jT!>|a~hsO2i?!h9oeK#9Q5`twbN3R!k!M@ znCO;&w&^%c{=4>_%~N>Pg~~|>mGJO46p_(D$#sCH4ne=~G0J*=SK}ec78JwBtbb0N zNKLJbFNlHWxnJ@Ba2fx9M&M7ZUen zebDX^JN)~&MreGYj(v+nda=MmM~#PvNFUGc=%Gg4=41Ae=b4D-F^benqowCj;CaS` z6*~tb9{`n}adIS9{ym{$SQ&=)?tk2^_8L&Th->KkH8g(BkgHe6Nmn1j)lnyti>TrK z3jYx@{{M==e=xjZYwb}!-OY!PX-B8J0`Jc_;_bWfqX4z>`vB4K7=&D8Q~JptH*-SH z9*pci`R0fz`J6Xp3i{9d%Bqp@$Tgs93pJ|M_k9WDO_^jt&9}BdOfPK^-yRKY`otHM z*pXqUFUXt4UB!D8{5HBnpP~Nv??teyH(A)$PFZ+V@|s#eS?&-y!^kE&Q)zAYPsvL| zB>_;Cl8jhMLQ)TMLSPU11tki5t4BT_(=*#^!Q8>wYz5Sdi?4oD2ssCPLIb-!ysP0U z=K~FQiTw)ybQ%ADN8q1=DqJa3N$f9lY}!wGx&MCZb~U|*b(9sclheRs2BElPpSQDw zh3xb@WaSJ7wj7yV*I`d%_vt z6qB!U-`d0>6O|Tw@m|#Uc1~-mab`D>`XVeD_ouVi;P*G3!A40rstzL04e?=TSG@l? zd!AF~=g&^00hn`J<1t3E}T)UNjW^tyxWW#-|A%h?ZI@{_nz(pG5PTsHtd z`$l92<#wj=X)mV;7ephZ(&(MYCobxs`5l10A4C&k2At3VpAr}Ivr*kmkNv;2Bez%+ zXC~DulZ0DEtCK4*ywlKmp^fQ`&$ObJcoG@sZs6B->;DWH|4$?zl?&km}^dMs|;Uf<5AjBqLU6;y#ea`aI z82DR8?_SM6%d>5^*a}47-Qyg%NA-~>fSY~usmMj3Gq*~uP(UP~A?C(ku z1_7-@2XyA!`Ixo|@cejELN}%@7yE8;B(F5bi!`bZ-erqv`#p~RRWxtzJ9aOQ{Q<}B z7Yq3b$V@;e;b(Xwc$)ICcY8aDKepK>m?vW_Bj;LiPKUUW6d}8R<$txx_7RE zw!6{$kF~p-bjZ-iwGF29$ksxEfy_JA6ZB~PD?k(Lzt8 z)7POL@h#`lbv`n_ghS;$IPZ@xgbx5b$*JBPQ9lJ}V-RPT;VkD@;H=(Dm8iXJq25h_ zLP^dzl82DcCgRsj9N%K&gvTLQv^K@fI)>+uD_AXlMcJHvqriv#YyKZ4;}1LjRr^ni z&FRf@&hWe*OF;ta%T4p8xo=V3cATI-$9r-OD-2~1K>iGeZbz$(lX0d|t@!1t zk^Kw*F*5#NMBqP(HySC}MhX75rjg4h@f<#YL-AuBlO; zJRY?Ix!BtD4BeK@rt`Y7Ny2kjPcvVtjZ$_;Nk=nK+!J7pS0p(>Y>YN3fO8S%-JMcR z#uOpBM_U9*&IwOEA=rJZ(`b&*snhF)Gu`Qk4>1Vy!iXE}9ec=p@o*!zoMZ>GwB&d( z8`&@$Wqp;!2{a@W564R5$`DbB`|BiXJ>N}L#N}C#hYn*DqiDMuF=nrW^YbtU=!8$Y z=vH&#{WO~#eMvbYH35iMgDiP$~T77Q%T>ykM%h5!y^4&3cU{1 zc8hWiayF3Y%T0*37i=fp$e;%OZa5Tx{uj0TP$@!zT3xS7wYnx6jqJ-4**$;ELoBf~ z6B5A)A|t@NU=XaiS;9Jx7PE~3HK8=%XixaALUyykc~Y8rs-~M-Hv(Te^JM)1D`sn3 zoKFXD;1Lunyae9;i(lsa2f`#rj0>J>OPejJDw7`1JrLRejkNdsa5~T77Z~xMv@!^- z&EyGZNivNgJ)NCd#O}E{AJ2CKzplgICgbmmz@JEPBiM1k=x!<;`X^#|r}$-b#)of` za3S)*NoUpc7-^IpiCLduHw^j~L}^0X|1sA3s0l66!QozX289j6W0J4vJN|3YRQl!n zD5U%B3iM$+64>tWsfTU9dc-JQf7u^9E7Mu)HI!7sH=W(pAWpFDMK&Sw?e6Yq(}(9K z-bJ40>z+&}yUS2=Z-5!*>6JN%EJ);9S@wv<7y+8=HX@5?IMfIahlvM=_b>m?u`>St z2>gxaBv8QJkl0@W_HBN(@nV2*N=FO5{SMJ0+=^@df^7~qvLBCaJvL6FhV4D!P(8-} z6Br9f6$XQ__dU|PS>W^k^wL5_Pb|3nxt^auCoJ~LrO!|Gr1M&QTG^v4Botc-lFL>b=MWi;>7b8U~|nP+uP0?J_%t59rPz&FK_Opp}a09dd_4dDUGX6&*@Xu^Y zUoOjlTRVviAoYp$f4(o*Fv3uV$~fYizoJIXeKrKFrTIBIKwI{BX zAb%Lg&-EgoC?Tx_jTk{A-+)FW-5#hU`8}Le`}k-{a{NK)QG_#aWV#>t9b;hbcxWr zsv0kP4bF>RtsD8aj0N~l8=u90#`p>TvqtSQXxfbh_^&XQ!0JcxFRRnJ7Oc?kl`VW^ zRj=oXUXS#7HS`S78%=xOdC{$!tU-1M>cZ2Wamy-@VHUE!Co#)|y`}hk&PMjn*%%A^ zh!WbqcpLb?v%x(?r95s~k*Z>kDf_H;{&8)cjDNWQoECAhgk=F zU(h`kc|yXWCp(NwTOi%`v-;2DW&Dpt;BOGvE`1Z*Tgy*cQ%PAJuJ}i!lFVENWB|ar z(6=8vDc-EF5x4b95`DzsjaKsrAuLr#Bum_8f0bNw#;QG{(nuXF9X^ znv$yNp9V-~C`*%4YRh&X2452X?dgibe?=EKbQ)yJca_8b-b*WlPk&1*O&&rez|S_{ zJ0ey7-j_P7q==q)PP4U- zT2;}<8{DZX4S0{x$JVamCkRy(KT26@A3gOr;ll>E%!lNBMOW<;pd4E<{-3j*dYtfN zgInfFa^BM=YjGa$l6kYPy^l8y!h}vWXtNenVi0CaxgcKl%ilT#RN3Z}sc^3}S5!n$ zp{~=}H1Ic6IHRkN3ReW8CFv!*i!t>p{BM@=|8E5T24Qs<(Xvgwk; za;GJv8ZnN``o7mYvYJ$5UTlsl9Aeu1hjF-bS16@ZrkyI-r$6;6@x7GwUp~X4_XF}Z z>u|iq{|$Ul$aAm7yi(VtBgi^z5cI-=cVOP283TmbUDPn8G%MfQ;Rfvx z`Q6BuHHAZe>ZGL_Es)^DGN=BvQ>ro!3*#C8#Dn3`i(TZ-mq1Gfp|eNmT`#QDQAT1n z6rpPdg}R6>U$D7A;`>Aj5%T~MmprF#xq6XT)*P~i8B5z5%>dZtkncW{Le@I zgkO9lmj}tALimNuy9!i;`w`xFafp_oO?QdH8Uw0xQt9{k{^MmO8UD+5Dt#`l>j=$} zDsQOMtDDCZrrb*nWu)`EPLiQtp4q>DuS$$U_T?;}eC@mKa_uf*8ZxvWBo%rLLVf$& z$VZ}{G6Yow2Z*XEdPr~a(wSffIc^cuEQfb;PTp5Z`zKU`kCVKw2E-%D-+Z*A3ZAHm z$Y-LOGP%j(Jc_Zz;2kfjQ>c-RK0MLNYE{3&|5h3Q6A}2+$JM6Of%&M#s5QYCvzf@| zu*{*xVzrGGl&sRKE{txb&6GLW#rc(aouRi;#Ze6(JDOAtB%wr-z3p8o2gk+f)UdQ! z9#D&N=q?_Sc~i1;i_SllZ1O2bMfp{z24q7N9#w%1PZfH^|C8F`$Pg;k_03YA^(#ju z`Qq|wX~gA;tcT8|f~yDI%IkCV!abt8RV77_>jgWm`>$Uyh5sZO|1Tr(ubZAV zJ}37lztoQ_X3GW~t7=5j7Wb-LA1G~^^jH&8_BirSC z{&6$G_lx+VvhY5w>tc5f5*Bo2 zNqN6W-2qqDVBz=8)CMwV{SRZ;|0!qWK%o?O>B||}9(t~8JaR@x)9g+$)UWt|ij4nP z5%_QG_%&xH=|95zgZK|p%>v6jnij_+|Bho7&>7^RP>Dy?sX!*iwD3VMbKBqRm7S`G zv56@;JAG zP-*3Zg#e<1E#5Ds@1}1X zXYihp-#MKQ$I6lGGufN%Oe9wsUDKnG16FZ-AM|27%_ZzAyDjy0R^T_8TLdMR5-o9ErBdpAzl|BerR{24Y^@Id6Nlw7npzzTdb|10QT3m6c0Clq7X0o_AOMItdY)XN{8Er}IR3;|p zn4nK82`AysHh$h+BZ0%y$kj-=I!;)O)%kHBsrM8od6@slrwHZ(q3C>Nke4uu%Bfy{ z5?X@~{PH(%P%%D6`p#qL7#2~T(w%hte*=BbJG&t9Udl=dH6Bn`5oMWKlz8Veb;*2@ zFeU2qbF?w4lUl)65*mm?br4msU-AD`8UJr1@Mi}T-yO>GzjGQ|v72P#NeQdkhAPXj zz8>#WY$J9c$W~Q2p;58 zr3zI=al+$GB!?XBhn>pzHEM-u3up_2OaP=!9HI!Mb}#fR{Ig{ITO;td!`o&q4`dF7 zLz{Z)0%W`=d{6kPFzsah67RG$D#)TRAm+@e7Vo??8aA0j^&S2NxtB3_s4=F4)3Wns zmLYQsJDeU$eD$IQOZ!A;nx*Kx?{UyZEb_T%qFZCzXxd=?xc*Nk$mgVyvwY9<8+m$i z+EHT%dw~&XW@GM;eq?!3-`7!&dTq+Mm=jBQu7mB`-e5c*P2o<+=XlmnkNvoQA^%k% z-~T?YZav~TuVCp)RQriWPO@0aoPxQ`;=L!09v78$1W$SvPfBNKPL$O*1a(D4=XI!c zcbM!yG?vj_xb-o&Jx1P9q{{$kz+8*vZS7-qdyMNndtkA3Eug3 zeHQ9xPS$6C95{4QWlGdebWz4-u6JCWF3GA|20YdD$XzGi=PLs#R_=tssywlgf1lqM zcn>_d#djsJ1bKe{``()8ZH?Kb3TN0lz{du&nYDIBkV#1Q5oGDs&4@#Kg->*E#CdXd zM-DlA5fX{*;F4UuFVS7$jO%#5CpI`Mw&;9pngSU-65U~|lH7|`1lfUmkWF-t!;xb< z_zFgRDmu}f{n+Wi_8=Xda*2x5?JslYlxY2+rYB_S^AF8Pp-9}Z}~3ya)8XJ&(yKJeL1TBIhl&N z$m~XCP{Jk89E=ncYDdN)!vkA0&-q6;w;_DfAAPFebdIShI?pA)%_oXl7aQaTpc-op z^2TXaLl1ORq*~{d#s;-0Idc*b;c@fyyMYP6To8xvfV;iAm_3jb^w|5Fk8?_QYb9l2Nst#2`GCp-Md&qZ0nH+^_cZQ1H) zYpUFJ_M3cPpJSUKkul2PDyBxHbVR!9}!j=fWs_XVvr?k)i7Bem`5S*u37p9o6G!`Pj-o z271x7CG&BZ={3Q8P0@KxQmm-)YzWZ&(}CU3(wmQqLo4!2j-O+HEV|O;T4n!GOs{~n z(fXliJTz3w{CPCFp`+~Le9+k_ThW#7hpX-7SikHksa+5(Ipwe}vMku+tabD&{Bvad zPedlbU&!eUr&3=f!-65t`oN|o}B=ctiv7**UxayAqS!N>Rz^c+0 z>R?CTaQHDQW4=GTG;CeT|K1lXOzk)!4nS^?6l8cv^>~uQR-;flof4+3JR$0B2S_z$ z3z6gA2G^cIZV^hzT?yLIelF@NKs)NFpc=HJ*4H`@*l%gs<~AT_TR6EohfvbVdfJ-d zf4zhnbEl6*9Hw|?+gTwTAyKUc>8Oa%VWr@lbny3IxKc+dYeP`I7n3>(d6 zU|wz4`sr~;>Y0p`=0sjusjOZjMj65L77fB*etuU&M}OXgyN%Nb{0+C9#Bj;$DlKk{)kj*|H$3l|M9*^PCWJ_nSN zb;?bu3lH)kmi%VKgFn1;x)=E)$P-ed-}EK%#l7v}fmk!YM4xlYO|IIHxq@6#jNG!d zuw$_`s4W31qb#S&PPr-qko@_%=$+ZTX2VuVZW_fK>WNGh6=V|(^by!zF6BI!d+X8lC7T=kYb(|s5xI&D z?W0{Q?J<0Mb4)T>Y2D`A6^xC2w?WgX`1xzmSkacdj?@i+>`%pxCwm&~X;#`di0oF_ z<&3dMH{_0N8QkWH8}8Fo|76%?XTB!V;t-#z`W<_c&mhhE@Az{NTNt%myZLKzyk~A; z`&vcSD*Mzc(fe>mCV8m_IcVwFZTykI7yO|Bd5-UWkyre3R*6c_|2o@8LsKtl_eD}s zzrugIjDH{kf0>J9&dY&bE{PAHJzNS4tuS`AJkCE?2VFo0@!Bt2{{C{>xK>P~Hrr2% z11MDmC1kB8x*rBLA`40 zDYw<1tgj|=hox5{Q9g^TLwa#I#igr*PjmJY>U4X{0yk9+ZJ&Y(Dh4icZxWf-?ZH?k zK?pO@X{4j_Gk%YLr7~SfT;Xrn*LCuLo{T>!deOK3n~Pb$v1^Zer(>~efx8Ct_F6k7 zobbSwhdw>EXe(qj6J)htk$A_isJ5Sh1Fx*+cL#D7VeBU}0LK5A-tm73zav1I zaS!A7kodMPq%to1Op7b7-e*(5;mm8=>YUir>P&Akmgt)tB{q!YrzLDY@sQ^#=>nD6 zb~;o%QyD8HATRX?$!v{TD7E|bFW6V|Sr_(s7MF09%af0b+#xb=-0rJ=ma@+B(UV`T z-8qZdQJ%9kcXcz}_QR4J7JU4$>+sK)@jn-V zKYjVwSQkHP(Z*&6PhWm*2|YO>S!1X{@0BbJmeEIEwVyuvHR-)A2ka)&m(=ld>hF{l z+KmcmeQW9+{Ht~*C*Jo+-lH>?ZT9-u1n6Pf22qxunv*uDJ%Q z(LD=lpJ2T~*QqBGz4YX#Ak)(|R@Y+pLN~pE&Rpyo9td03f_gC$*p${ppBlbNG00aA z3Nn@@r!u-@Y&98)5_3+9dPp|q&7VRZjUq$g4g0zd{{k8R^Z3Pm{O@q~_0Z496O-jW zs?T}eiR(o5}c zk&$0hU6V|tFJ)yEWb{RTdNbkW?>fmj#9P&9sw*+V{CSlcXDQ+A%D&@aeEM*eriQ$K zx{9hMbH%sf>I!TgQxRFsvq2_NJM0x_j1Wz5&0-A%Q8u%|KC1b&en-+!p%mz*+g3?l zhcQBX&(@%p-4WDsayxRq)~;v^PsqBExr!S7r9bP+4GTVg*md|9%J>tbM<4#TC6Wv; z6Zrwc)}E{^&&Bw1*aIl$+s|O1n`a#yzQ;Pa)P|fLUtx1$Q`X4ybBypwkE#aPISwbI zcMHN}{U!PB=%OUHV!4{FdGO* zR@&bPvZ~!dRyz!`VmOoVGND1jrQ4xL*jln}(F4vJtN|6Ep+qtIklw4PVL&SrR>JSt zu~tkyM2*f8zVsw{HOuLdln}pC0c$dC&Giwf((YgAB2OD0)96=%2IYcSgLCu)OC^m6AO=O$|U_&Zr^WNK209M0Rd^b2h&@mpjrBjAd!xmfW-xWhKdo zSAk|KIvU;zv1~Yl3&v^^`j`ASQ^xkz@t2;`@R&9{cCD1DuQ6scOl+~pbX-9A^Jvj)g0mDvSN}Hz#;=NI*C4Gy;srUHziz%&3kss>V zIrU-6q^RIpkv)DAoijTn&R3kn!p9^p_i~G(sx;fxFZb?Ct_&|`-eJ-zThfkR^Y)=vX8G&FBO z=8N(T;a?1p@gtG`25r8-_e_Ay0C)P7(mb$!Z;d#_Mwy{AFj~DtawHNYYbrS{trK5x zO@B7G^vbAx&J@K)DuBR(iXQ*ajKlk#>;sBR&3zdG0KXn$}7M?P8={U!I9qYRCz3|hDW`fc2 z>+LJW(bTp!8{O`om-g_|M;%A%%e;!<2h5!g9iJeoZv}UgF@S!G$cCWKmE5=Wg8#85 zRrR=q>guHniGEm9UB7T5|Ic%Z#~R8WTPYAvCL{S@0ski0@SXE8RM1YbK@YnF+^Kt)H8DoVbmA2z_ZP{>ls@aA zILgEEqlPIuxd+rdvI5dva2i+QMCA{aGPqj#lE}8ki?*y~Zuogb6Rhvgt%591MK8!5 z<6Gv0)t-wDu8yUH&vQirr=i6$6~zv9O|3&ybIPHuu`GzLsa+6X1D>uqwIH^}vM{dZ z)Iwd2rI@iSbk#20ArA071AQR$4-=}UXQKW$W!^b`>mn)V6RAF1MzGa2K3f;Ph1wXi zh29vuh1qyeoRYLW4M3$|K1_ve<1?@^PM>*D9PfHroCuuN{3sLM$=wc|m0XbL6v5Ss8BQ*ENI5{XRlEqSAGwP2cfB~@ zpZl_yQ<35OugGofLt87Mt%%Z!W9o{5a;+l@Xh#F>YtemU)oO8&XSF!E;%Q*)Kc~LA zYPuB&bEY~O;}_%#!!pL@by{E?1&pI5jK>3GJa-niF%Br}fHE~y1#~xt)%bPLV^2$) zvAXv+MNf+ku2Vz@bE9WE75&TqZ;p)r#R&WlDF=!+7s2yUHy2#T_3`eXdNF++@Tpi;@Oed%pi-;EF`nQ;WsMcQxyZF=;jfrkdNJDxz7$px%!HK$GlGF}=2Z-C z2L@bpFemydO-ax2h+6?{e)|mf=Njc_kj4)@16Oo~agV?=e0UDhCFn_okwPtv6txl0 z5=lRi&*Ey-&Xi_`JB|=l=neb2PXBYKjQ=J4;y(S48uc>O@csawV}>PORAuabU`Qe> zIFmz~M=}4ula)+tM6T(`tH>iGFV6~R5pfT{&K{khRL1(pdr8cV3RR!EP8+fYl205y zbt5CY>tM9eg}mP%f)3urMyIp9qJ=Bq@+hmmSx3CWrMdan^SVZsk7`l#su`+$(k2@D zKTZ4~;lH>W@{kUd{x_3*k!zTA+DB&hiFh_OpUQKByG!S#jOnh4$N+`v^%m9@<$|wb zBaV&m!QkCHI}WpVZp}_yAJ=mWc)8j;9pi}@v={F{9)8};e5!vhq|dOGIr9t zpoI<7H3~k_i_9IN!#&jKHe_Ha&8kVipoLswG5R(Nq=@QKI+M88ap{>cX!UU<68 zxrE+KBYXe3_S1o5h|3ikr_GvHR8|N5!8oGdv+)Un0db^PeA&zB3eIY3p{#}eN%@md z-S_i{CqW-Mw>?rHi4~+d*+K7Q1g1Um9_^4)kM-W;>k|s=*Z#h#0+Yf33G`JbIFi)JtD*V75;N&{K=2*!=J?Dj`WdUq9?p;=i1cV&nMGn4w-RW zq_&Rbi_U+dbfp+`l;%N#9(lCc4z)i&r$`nA)S2fH zr*7nr0n@$=oHIm$WR=FP*!zYH7<-{lnzS+`?(nl}~j~>%Fo@ zq=qW^EHh#-3yEC!sJO_z$GuRP%VZ;-$jD<&;UZVwQiyz>_)cfHruWJxaV5D*Ey;uT zU_>D8);K9dppWgg7SdAt+1)g%^{!D4(r)N1b5YzEBvRzfAL6J?=fv_G z7JU4$>+qi^<4=U1KK!BGwI!Ga3Ac17^!D(~-X4xO)4K)vn?gNFQqpO;XF)Zc}f|p(3)i45h{RLfRH1P{=Mz+ELAS{25+GBNeCx zRJP`YI%E;BYBtzTaNuvXjRgnaDsEp>=B~C6KgyIh7JYE>DT~@#Q9sG^!9|Ti(^3mR z5S2Av&giPkn5on09++y?AdX$LoA{6n3JAZF|HN_{zpw=}lM()@_-3ph$h&eh z)xYNd`7-{U5%@1&ojUp#f2~tr&I#=uG(QpCb{IW%E>Mi#d44r@;YSaPz2eoQVO>As zsdaLuwDMQogM?SQIFqJAjY@I*!~5$M{NWT6KZz%qApX&n?$T^|4R*eN1{S5MGn%DZ zi)LZ+A6aV6A6V*cYyr^XZ?_3Jz9?;G#v8ru4>(xrC2YY3a@+6l{t>oa*j~oA9@{h6 z9>TV_7&Ym!Eygw-+ca#qVjGK1gN?>^d?8D{kL@{Zi?Pkbb|b&8)I(-}oQ= zMbQ-19fAMWvd7U|zr0oJOfA2sd}lo;+}4TOizYG->_v7p7GtpnReL|^;lR^Gn)>Rj z3Zv<(ovN$n_V-|XH_{><6%K9d)NJ|mtOhNf@6=pvQQHGMKCdS8ymz%fbO=+aX#z)+HpR#ywQ~u4 zOm5)Ub^H&WB>4A4;6H+TiuBK;C8e80lX1`AHo?~J5K3`$1o|qD4jb))4ZWpgOCEa) zEq?f0I^Hd|dnAlgA}}5cu8KC1)j8{WNQmX8xyoFJT?$Li5_*YdOWBeSmM}|iJ6r2i zVE#bNX@}w})&r2gF(b9E{#*(t{I5OePIpn(%8uF#)@Ah_t1hUCKiD|w$VC#-#kA3k zbS(3{i_X++u`VGqO}z9x$2xwcxpUpxJqlD4GBfI3F>PrSC%oK#5Y=f9!WNAyuwhNm zzwpP{Oz;m!;BU6QhHA~w_rh;7Lz=Z!w%{2e4`_sNJCU5e17>=+M)(SKbYw|tTSwnW z`j2jf>)08Ud7D$abD;1{w@Ml})_43mHoV@=@zYYYJ2k?y?MB@H;MLZy-qy<_TEB3$ z^{rCt*UvB*7fO)Nt#2H95-rriCt=Fsa9MD_O=r}?M`3SZt5YMe;$FN{ZG)NjQ#HcE zuGa&#&U?yA+}(0$#&uj}|9b0fi@Y<==S_ye5LAs$3*Cb;4n zN?>gdf)Y~8t9xgL_2QDV+noc;H@GPav^kknC1cuI&k8q%AHebWH3Q4%lr!u7<@EaX z<gl==BcLlU5qOm;{0)h z58I6y+r+vI=J$cQ9akis+3tL&cYcpOyVd#rGL0~{eRP1umHzf$=dH6OQ>29!naQ** z9O`J-Z0S0^-MPu_cMmGB7Zq7IF#OlA{~(VM?CA*ngQ~pdX#z_pF3W57yY{Mbn#l@0 zamlpvEHe&yUb2M7l`~b8@aD>S_`hrA031tc=GwyJQG124!Pc@Ht2-hs>_io)FHYAw zlihw*L9@y@*FD#@f$W(!yEnTyRD1j8><(w~vi%}!+%M8PqkG3PYNHUc_Z*Q%7$Njj z=jUg)Igw`~iV<$=`PbF`Z@b?=OU8i*+J7AfmUj^uE*sRa@$?SoYb$D(EnH?=W-Mnm zJ+Ok_q#93cWQ69<*KiL~Ie2LMR*434+JBuN?&%^jNx#CMtapGt6M=u9Oa^Zs;h`Qj z8u=ZDYNLZLgVyPK)AjyEmC?E+QLEWfvSjCy^GmEt{{Vzj%PF%Gysd)n-w8gXOyfjm z{*?g60G?@!X2*(5ly;n2P_)aGVE|=JJ56LlE~5XFfFR_-$!e2Uh!!gn?iUkh7cVm}TTpH+=QiyZ<7cz@A2*xXGz`3}1n;(m=40F@ zh!Pu8I8=MUfi(h=L#XrxzWJy=^he*s{E4Uz9OX!KFv5mz)D?vVgQh2zBQ|i@o0zvY zy9s3&dMV=`={}_gGV(^{k17~l2$^y`=a|;N;y><}@#iA&4?jwJ;{9_JbncYtgL4!; z1n-COP79y*pq3sm7%BG2ds91ypwC%Xq9Yu-=fHMna^deVcBhtWcM&;YMOXo?E4e}^ z{wm!M>*ORYJdrTT3KF?ILX!`u2?FDi9a{rL`>2)Bu^osfV}!JyaX_{S5PJYwAHEH{ z4xxe1@R|6d!E$eAt;i{NLcy0qO5jXMf~j-Q8os;^c|{uR(MJtqv@NXgOjptQq+2*% z-*7<9`2XjnZ(@m+n}QXfj9vC8;tF%azOIx19+2@@MBq=e?2-qU>~fCdTT=%LuXmXE zk1s}{*4AUNtN#caIV=3R>ui8s#+VmgByE2P#3PS(4b2=w1x4zlWIH5C(#BBeBu0RL zV?{-Dg1bBDp~+^(mE&r`5fczff~Nq>ldDo(%>ja`*cgj@om3Lb4g<>$$=FLQJ4wP? zwB$?*^F1zN%}ElDrme2Vm=l8v z2IUXVn|9^EoJ3*VHNFI{gRn2Rsp09snQmC{@x!je|3MjlWd#0b%aepVJ1kPqG1lm2 z{u1?j{*veSO3#AQX&zEJIk#gWGV>0hiAT^tVcQM*tj*w z6dHqiaVe@a-E%o%-YIGSQ(A-fq1cQRId=koe=qn){y%{DzU)MyNsRO!(U7R*7rX`R zldnIyQB3k|_<^P7+wZH7itbnV|4GJQ6@mYAVw%lTs;ro&+$*N&{&_J=Nwqz`YG>hm zCo52Ms4-bW-73oZjc*4y^%d2Z$7}IUS-G|}t>&b$^bY>eMNd5HMpNMskF4CE_z5M& zAtN9q%qlA`W!scdwQWkxeI08rkgR=*OvQ%#I?6g{@#+Z-abKs4H%Sz@EuvG$@)8FZg+mX#Hx1}j z1HFO!rh*pdt4c5H@YM3N{UUh;Xs*F~kL`RssR%nrPjfc6Hq^zz@Yw%;US#$Cni zIdK54CKX-5|G3&xTIPD?Y~-ACX|RGK^FNUXiQfpB`-yz`2EOH0P)7M%uj5`Akg8+`IbMsx)*W#TV;exm8F+|cNL2i35%$! zSfD-!uppIMl7v_wUb`;ab820g$FlCQr+6K^a>&^zejI-*Y)tYf&=V5g`!nu31b0p7 zz3WENn57qf39Bv88cMXM7k&uu?^ulta5AkPc6FY)4^LG^Wwlj${($Q@E3-%_%nkdx zPX1dg;~y1)|MMQ1!}WqcOvd#-RP@5fVP!8Wdf{*wd!^LX6Tpp?gl8p}rwnBCt#)fhK zAvAOq9n@K4fjQp+t`xjDK_l{*he!^BLs$Z%bqC@S;}>FLtar z)2HXhN)8oxSYcB8J<#=}^F$)Z65jUcg_|Xu6R+Yt28ggO_!0roHmd$5)u*#XAvy&rhb$Cy2GZ=Vbq?Q;}3@)zVyyD%?10d+hhpY>j}mgG>S z7INsgt8!>hXcfH5VgJ8MF=u)RT_;?9!moP}TOi3R@g~$Uy@6lX;r|yI|Ck8;|Jy_G z%65Sp;SuY}U3TPrN)}Hf>La2oQCmt6Up$nkG%rTI#Gw+84iGl<-1Nw?(}WWALZj5b zzf!dz;~}}IxA@%SZEzMqXI`o+&d;Owjee?uF$rh=q0CJ2|s#>=q86!!=RhY z)fNoFo}{fb#gkkV<81GeY80|Qs82`OClhLf)+Ti$bi_i2RI`fCqfDf2cp8nGw;Zn# zl>ICI;~^RUxCs1RO&VcfPivD_c)ok~0j=;cDmC9CRrA(m#S2fqZ7#6nTk^853}q99 z7rG)xV2#j@k@kCEazS#w0WC(N#go^x&YJBxq+agD#7^p> z+0{Pp9g#Aww@=QA^UrnC=|JEfkcVJODyEvifhij9f$&FC*Vvz&i&<@bFTz;fPV>J--&IDiZcGW zm%oXAnZ)p97TxB48u@ya{H%ttGrtx8UGbw^g~}}?UVt8dx_&$1=b^RsEZ*Sj3eE0b z#pm(wKsrspr+kb)Q+Mo%VH4<@@#_OJR6OJ)2~1L>;& z4~fE=4D>sEDKk@M{pkKyyx)U0m*(33-D0=#=g^}@^lz5bzu)6iQn$zZ2{HlyA9@&E zIT>DjC;eXpX7kE?e9QE%kO8v5yI95l2%Og;=665d58*R#F8Wq{b0xO**tTKwK2z6% z5rD-AaA!AkcIgwOjNg>-x<~Kkb~C$_s2@v4hPz01`ox3C2^8nvi=5Spw-l8zZCZs= znAe5a#_EHjmQuo3-H34^u4^2sjgb*zoOJDve#A1}z_07%|A%G#6C?1aD4npjr?0Qm zq`v;xPkK0}O@*GLrJni|a&;>zUlvs^^t28AY*V}?_wtB{US2Hq@>iXGy&Q%oF|3GE zFY6$`e;QzM7sE1epEX8`+enU{7@Zvbo7d=MY7|C{aN-^OJs2_W?1&s`9uAoDTSShc z%w3`XbXf`&n@_sad2>OOs|$H-37$H^((__q@YPoDb}5iklod9LcLfx?$lgE1a<59V z2o21?f#JVi{(nTqe?SEO@fgvgitj)_8?WhSwx%GU%x8Gg*Il7%^dU8J>ZJ+$l!fX1 zN%ubkZ(`iu-#d2q*#gO2z7@wF#~4m{`l&i(6Qql06wkbW7FA7I5*=h-Aw0dP%LB@w zgjYRm%^&lV-E>tr^a@7nEY$6)bw7tJV&A(_p}S2(gUVoAs_346o|5u6UqDrgq-FHT zETPgfE8pep3eD)6m7fL4;Kxp@JI?wbvdGQ~}SwXV2SBaDj zGiTXcSl-LghxBBtt19rVcnosdhopt;Tk#O`xnJM2dHib35zlm%q2AU3%*azOJ+ZGV zREoRXd?c?YXTx{Y{hz;s$aIwTsJ}R1C`idq$;-N+EKU%LuCd}<-D?8hyJPbS?NHqc ziJznM^FRrI>YN_XgCg)J^Dmi; z$(&5)VL^Q|lddGP_)F4wzR-7fz7c&pzLTy_T$W)#xhST0aDgZe|7<%pMw^M(cAZ8K=PPo8Lgl`!~P*`WNpAXJ$z2XeUKd=Uw_}M zVf;|1^(sA1ii?|szu&xu&z(eGRMv%#Ig_v+vGp(iU$>0EJ_7#)Vdym&P@}%|Qx^#<80#Y6NiUzDb-{|hBl%lY*Ia2`R@{_@vrkB8;|1{=i{Q87 z4_i^e!4_w|2{ZJ>{AaPBj!`7OgBrEX|54zFaz*-~7DlM-$bLw{7kh2E(~rG(I(p5W z6m3puq3;LPWp=FM-3=d!k8DMqV8Mwym0o%rxeLv>R#{A*FjKr`Q~HD za8gQAA>FXA>*W7sGX6;s_}{MQJ5TJ&xjc_8OHUDL@Nr;)DJyGffH7JU4$>+oMLt%VC6eJ_BtKeJ*8=f>noP=|WBp zv$`>!*A~*ou26G3)ucYCE>I%_OxA@5alg;5xt|(3g~uVsk$cSmy^(v_5c{b^#c;+K z5c{<@hhta9KdcRf0{R;mTGX91L{Nsfk*YxKP;Ax^$C;fS6Z-24{EU$A? zUf1+QsfKqsc$kBKn8jOVS2k0y#84Je+nXFGJW4Pm`@g+z-T%#Xy~$%U+mGIodV?i`7jj2U5MaPelMa?2L`U?11;kT9B3Agjhi zoO=aOkmK<_YSaZ(V7}nfwYlRkW*A9}v5sS?G(}Lz#JWs4IKe@sf9LxtK#qJ3TnOzn z0h|A?V?0^QM2_+QPh;E-4FC1x{}VF)sS)^-zM6=!Qo$?WrD5WYF18>YR+@=fU7;A* z-0CnE&}ODE9+-56+;86tdLgp+z*#Sg#;u$Ai|#o74=M5dQuj~wyUDCDtlqub?%{3j zfxhvnY$uhYGaLCtVOfu*^o<2tgQ!Q9OrsuZbKV&|)NGp>!8i{_;CWsz6pvo5AH zR`&;y>!ggGpeb^#8XK__T4ro_f9JM9dKlsBSNK0Ev6HA z)vCi6vlOgAEA_`oUm4w`p8K4X_4bqXF{r0OX8+ChT9?WPgkeEC;~(T@OHZo4J5KC- zAB$=#sxSk(_AI_L^i7yb|H?;Je1Cg*9xAlQ3&CqFyk7(eHluzs4k-((-6!07V5IPo z9Nu%CI zz_P@|4|AMd&>6CXX|od4oQ@}3kBoNx3jb0W{~;0hL;Et6@CWJBo#6EuGJhjeXDT1P zvJ)?CO6!hMryK@V`eyA9|bv(c=ES^7GN)mx-U16ALQ!{z0d$-psTx?|FVHnrv*{_P>%*g-!hOD$t%@&@Rk&ndEW$PKxf-X=m^yR& zvTfy4XHmx0br#;~;o8(xXJ}l{sb$-j*;12p)TT_Jm(jz#IEJrXHb~^6cEd`|R^mzT z52l1euZG7KCYtrBIi}9g;GUZbld!MGetgfUyw1>VuxY9rG75}*{E*K6mH*o#<8O?> z|GA!F=#%m2lk|q+y?s*FW5%%z9LsAk_a0l;V=B~{!^UJ+IMe`pKL?FkYC#&&3|(Q^ zc-V;|rTqT{1{DlO^i|dsEzVuM#^(EJAg(}{uOl{LoI7*Pxqk&dR6;ikTCBi)L)L_3 zy-4ODLYu_4K-QK-HYICHN!D*1TR3)x-tkPGRyf$%3IBkb3T~RI*iR2|sOA3D)-Gf!KmLPfg$`e-s59$Ou!y+vwXIe>n6u z&W`mfkwbr6L1um?u-gmlqOQS?6853hd%lcQ<6NH%pE~uq}cGTB4G>;aV-}k(iKqCHr zzyE3bN%PkGUhnswbI*3qp(wJ}p@~}lLeM#SdQ@6eYA>9P!P%2RXLq~85ii&S=X&7W z;h=LRnAga5MDm5-zcJP?XMl%@c85E70NkekC^)%*w7 zWax3qz|Q2v%w0d19h_ILvyc=pW3HNi@0z+|iHUX6HOe$qsw!m)(98?!cRKeEv|H!5 z$5iE)_noBL+&8T`W@{&BjB@8Zb*!zhS6}DW{=FwLYhitYUU}WK%S)D<@SE|1r#UVE zr=XT8>v(8dIBE9nr*PI5boRf%yZ4^-UXH`!B%xbWl4Q*!*^bj;Srb&5v^b zYlQw|rtjG&0erd#2^Ou~Oi0RCDVtLyZv zK#!BvR`krZhoZ;U2ld#f8nOs@Jx|td^7VU$55u3qQwRg5I&&h~T)m#Ijsk1AL*fmV z_FAB~D5xz>4dM0=-~CKg)T9k7N`yE~i7>B@sy!LpNed0UO!nD4E8kPLp+Ko)3{%|9 z^9$On;oF3ai}|=NB{MX$L>Q@|3UPA7#`!alCqUHoMf%UI>Nk1Fyj{=Dsqn`pr{F&_ z1-*p=zDossmv{2dZT$Zg3IDqT@bB~#cPed}6|ot6|IQ*uCNm`c`608tp6YA5=l}k+ z*Yp0hAx~$*ULH#J_x3dOV|Y+M{^;Ymgz0V{rX-u2s-{j}R!$WK)5Y=dP};+(52FPy zT4)aP8-3d0`b^&+}e?)Ihhwzfi(| zXaN3F)C9vX6D9d^4zkdiYV_#Ip6JODjzMXK?cmCcf}HHjA(mP(=Au|K!bf02ZLYykdGWN}ybEeuQk)n&=ne1xh@ z+%eSC)R-P;jxgNS6PawMjImc{PK3>O`~cf)O=wr&@BU1iAH3BwxnbLQ1ZCe!NZ+<`IWKK4sXVI~IKWW4Gb|s)T=B z0R9?&dr+_MLwt@#T#K^|h^z}b_d0m}7SP{{-^gD2mNUhExjPjy2FctF_>iCAxygfU z&rJfiO}E=t*-DUiC9nK0*p++RHVeb*HVY;lQ@j#hV+;SPJ)BpC(+ZR+O_ReXH_3*T z3URu_Eo_9mIZq~98P&2~+l37KTgj(Ui*V}-#3mLGL_QFb7^3)|5hOLl@q<{(6@vT2 zlbTpAycTl_au-dA+Aa*PD?)BCJ4P2&Rn=#F6dnIZ?+ow^~ zx23{JQ^PEIbH02JyKTOLw0hy82O8sM*cfr;xBf2l7yJq|DQW}c{)^yQD zZB~ixS5_AYmh>`L_}%{NEjGI28Qj4L>M`_gk^EQQaPiJ#E=BxZ=adheuEbqBb&Hyf zLe-c$@9VBo>}yhSgo)%2V9vLgl!^4LtuAREf?RnA|J+9Z%O(610`UKGk%r$Es>_8*O6zV5Z`~rhvwnSzIj+vrJRiQ`ivTR-sCMK@EtCAJuz5gsi~p+)Ky`VAkFJe zt9qV|nfFM=8bPNS&&$|6eD|AIg0)%~RO}hA=Q(jzrZmrwstTnxk&|o02o>*!XGVpZ zU9tH4ow$9$i`vxJ;j8q?1zehZl09ZyCu6E>dtH+`(a(S6X-r1&nOio2QPql+Vnm6e z7LDkOCU4Rm4FB!?e}#nqumJqYuS$IvTP-KdQ0<9jBrltEd}_5)JdQb=Q8-G3A-IC` zT|xH=(D{_MV&QJA6?y-LF&lLt+Uy$mj;|{XDjRE4wq$|!I=Yrs7_*aj3unxHuRqlW zq}p4*Vs)X!jXB3Cn^5zhjd!gRTdG9XNha0}`9fz);^DRc%@f7{r;Dx|6qj1hR}~9! zCI;0C^UJ@Rm*{J!2WnRJv5j?L?Ft)fQt=M28E>Z*WC=&xESjTj9W|Ee4L8Ux{l|QBe>Tex~ zcn#w6;PIT{SEv`s->Ft6=6KWf88V!7N5K~CkBR`alP3a3=ZmT%f z2)mI!>^9Hu3Cswu5vD$%_9fmp6SauXvXp zCE0RA!&mk(+QJECXGtr-HpudaBA&2H;0^zX--KdbCx8)(yK=2rBX+-K6=xfFZF z>W*Jw3NNJ>2%*KB(mOoO-t211sp+#3wq7u5cu$Z|@FFD3a7dO@+z(*Rxe|1a?nK<* zbolomTgJkEK=LEm=SABR-c4>&SFtVqWp$NZo;_U}==-cQT&J#4Au>>nHhHvJ8`LJ9 zWooId445B=oLHOL;c_uLCEtaW z9Em2X+d-}W#}zr`0`!do7?YZ+9wKg#8qVtGsZrTgQ$y{(2wE1XRUKLtS9N$jJ<#ee zXmwFXvy1KxloM2t6X@9JRX>gL%L&~I|6&P$Qvm*w1Vud~^)>a4Bqt>Y$w~h6azq1* z6ojcX9JPBXGK>1OxH?ok1KEn{;aG!_6FCob#?@iom|7&nQQ@~ zTp^9LTjw=Zy(jffxoff#wqGHu!?W*3uSp!@I0j>s?zs^;DH_|uu>IZ*&7^)}d`E}p zof|z<;bTtWklCeQ_;!J*3(K71-u{m$S60wQ7SCfzN!j8YuU%do1ABaZ_F_n@#zE7 z6Ecnq-%R_uVicr-ue6`3emQeSxTsxj9p+$S?{_fqR~!a-dnt3s^Oy-126>DxxQ+`A z(?-=Kq#qZ~Ok?6NIFDah{3oi++Un|+);qN~_<8Ic4gZ&*yXsth@yv@_CiW|5-;6l% z9hmqZ93Q!`9uyS}xH!23?IbesyBu|{b4$6nW=Ck;Rp(`w9sIw}HwVBbk>n5<`-s&1 za%2qeUi#k}3IE{%_zMdywhqs{8}NlFJlC7`pC}k){tgdc$^^149%c50J3y-`sHVT%9L7q87q6gbJh!w zvg)flUzm!hFum=B@Tj@VW4+OZoDEWTiAZFLiNbg}AEn{X2YDCi&IXs?@B0bPe;#z+ zzovlb`XuBB!rS4)`vks=g~j?v*oHzK4x!%sb%jG5#i8ka)59{l75$e;_$LP7|26!t z4&jXXiwXu(c}rcfz+Y^fAa@iCt#y>qS>u3Tt=a3jdYG;XORp2oXqkitXPwZX&72s6 zS@`nd5b*c8y42rIK|bV7xWg0V zDfIi0ch|bn@AO>15BU_vCA~v_#>|ZAITu2ZU5sTNzj(5$fANevj5!-)r?^^Y>++;` zk`Ji|B7S;;Q+&v2_>Y60K`|*Ih)J=u@5i|hgU)>?&IA9$b4jnD@j~r(EBaq6;Xg6} zf2m*NgZgz3`Yzc2f2&`2;@tB8Prv$O0lGZB(5}YO<#7ka1iXVb<_5K)siE;8_^{FJ zhx9QRm0N6ot0=YV9baSCf6W@^&}JMX?qkq=BumenNJm#&<<8eCLU8<|_E(qICkI41 zBI!y!V>otYF|KCBtH04oN8hnV*B%q<^{vidT+XH43jcKy{`Uvq&&7QWDXG!vfUZTl zf3eVjTA4CsgzY(}!uCMQYDfa8-~s(@o@1@hV7fn5s;t;xIw#0==a3CXn{-wfr4O}y zjK3W3<<1IY^+~*ji^7qyW?W^*RmC?vmg_?&r8IFIXTeoWEUx5|l6cjeBsXXLSg@F> z^(1Hv%kXVPH7{>SDz6diL4PbH>(vHhR)}#<)=ybmqRp@^eRJ)Gr_Xgf*{okAw#ezw zDwh-!Zd|x^;juQAF)}pPHfQ0}i{4$-xah})q%U^fV2xw4#2jS#tT8N$!3yVYh5s88 z{(lI-U&yD599LbW2RKaGY5}r8#sE{O>S0Sfb8iY+emXqc5rZ)bb^$_&^z#N2XH3e{ z8qPo_KwZbBXM}pKYM~XrJKI88)& z#$@cU=JkyGtC6{HqeB#83DJc_~=Tka7 zqq%KPo`}bPU~3XoHiM|T{ttf0B7=Yk1b3w99t9u z#Pb&BE$Zb%ozeF*j9*B|%NEL(685sJF(UG7Rh$p`MQ53~9LH}lXA=JGz_U!-g%c*B zhVUsD>W-8P$F=3c(X4XelUZAYnRW8`Ey9zU!44(7w=&KSB+m%Frj6Veo1xp6kYmLd z=mkE*afX!%OG1oI_W4UVLvQ2Uf`1FTy0U^_3gT?>S8ID;BE9CiZc%jZP1?Ey}I;O0t{-@|-kxxyfdwq#869evQ3cXxGe*36V3%_g;K$ zw1$bRYt`gBFp6Sqr2?-h5L&ud{O1M<{|5r_FBQ@?rNS&baL$b4`$wpGm73*MAul`k z3s0m+@fRc14xHCK9zr~!09&xAEn)6q_%H0S8I;58Q#;x)(KQZ1UI(f?vIcf_S@@AQ zSx?Y5ht^OnYW)O;|HW=x*=+AmyxzD>7*MxN70BiNKs zuwR&A+EvioxIp9z%}Z{0rh35>l5TkZT-&Yaf1`x|m;n48SC9?F(BaWv!@9i+^1~c! z%VW|-tkVhW#s6^0u;zQB*A5x*7e@(ZP59NYeHr7zZF(B^{9|p_yKGG*%DZ?Kd;)IM zg-XiK1`5+{7uwS|sz7HtrsbeL5n1_PUZ^nsapB8ZFXcvy^9ao!9a#^E^Tz{O4C)4L z#+{4xYf-W1O>BLocVMf;F7X!{bxa(?pT#~|A|FT}ls<;!2;8~F2`-hj+4XGNv#HM^ zXMBt?g1$^Ynv?do)W6}1R9w-m@ZTiiKQ;jWA;0ONB-ahkuc*h3%&G3| zGA;vjsh^o%dTq1`l+7{;gn5juw*C9PrNSj})N$_fdkch1>E|1ZCgivy%1DwUihjFG zqUbpe;u7f&iIQ1koGl^ihNrkoqQ7;Ax2=4CK;LAH6U`0JzOH)25J^wO({gWkc6Qx- z13Y)X(5|Dmzz9`79`cyW|E#&b))pLwwBcS@Hijg~B{V7);lC;BGOpYqC{6tlE7U)| zNRWe9rJL|123!gqa_9cs7XPzZ!vDbl{ELJE#Jf$@7e%NAHXhiG@4Dehg>PNzajCZr zSkWog(`y|Ds(CFan|^G@>jCrnaLnsIy1cS@$#9on8jy+Bd4o95{|qVJ<7|S?`P;di zO}XZIu2%BXu&LKPxxQ^#D*QkTuX)yDpX|Ic*zScay1Gc*SHyzV;NA>2|x`G3;C&P>Qos$L6@!6Zan zfPb)t>TPD$(25&Y&*?U&U-O*tO6Pw)AB(k^a(?SI>ADPDCtf{~FfNCkumK;6BUQxK zASR(k7;Hx!(aihn^RQkhDW$iF_9M_yuX*Hn+vyVuY_ZNq4;2gR%l!<@YvAuY&ydJ)RwfbV5-C&Kv_Bv?T5i%~mhm+#*jr<@k znb*ksC)tHJrrCvch&L8u&AWwxcq<*=Dn@@&7>sI^d|`}kpDP_1CFHye<7bbH#*89%K)q0< zga*(vWwBc{kY3I#91s%H5Uuh^c$?hoN>eY*2{pp8E=o<^S?Z7VS9M%9FiXEP_p z0pB&qI54V4dM~}m=ZX7AfKy%bsJqye?^t`{txV&K1+#vuHPnd~E$nb+m|ZaGsWlCr zqd|+B8ae+g+M<2w|Lj)${~Zbc@d5ZNVt?D87jO9cGX?#b`kVetxvf8wgZfhu`>;5V z^uU@B!boNtf*JRN8#EW+4~!0*V^kxEFYBBt?kxC$evNY2S=eN>#X^n#HDrt;osmnB zJGewqdrTNy54(*y>=0}X)3yko&qAiL8fu3$dRQc;vBMXT92W;W#4Nk;k)A9?gn1@m zToZ#2R{JBCn2v-?M}4vY#RhdN{I^Q@TLbWqEb3PzvxnJ9KBAZyivN(Mag#LmzIOE3 zME^00sG%qtXoQ(t@vXK;i}xsE`}yPsX)c!8!hrW5Z^%||wW7`z5Kp%pZ z5Tz=o(PWNtYZjO=E1fhK3#YW}t#@NqQpwAOFZJ6Q)|~9N{|y!nF1aZwO2xA(JG6j1 z_vbeGf18AVQULxZwFdY1vx%0HnkE_zu*D)C7_{`IS$W&)WM-)PeD5HyKRXifKnoe8@*cyoInSJPhNPfwQ(BUJk{x4W zd{lau#|VEtjR~^P`r~d%j;FYsUZitPiZ1f=8vi!&9BgOPaiV|!HpQb+zP9hN<}1&( z9DHECjTy4HQj+T|Krj@ej3hfn3#(9o5Bvvutc5#dl{=L8G&xD~6kb;vQf=RwwETPU zVYN9+aSg>KPM`3zQ{M95I~e`n(f|G};Xfe&f2H9uNWtsTHc*#dfF>p|KhIq=>yQetRWiPC$cG z!ZN-sQrxqw{JHv`HkB>jR)ZKnA?upw{Z5i8<+gO^$PC139ZB%lgyUJ(;#?~XvMVq? znYh0=z@wlug!6K?uJt=u0WG{K_dtsbm8oapTY>Kd%MP?C@y!(+Xz79PKG@er#5?Eb za0!dimd?bDiAsoplnT4HqAx?gck<6|^#87ezbycNsTXej-R|p`zRWUgG0I8R+KLB_ zc44|%^3f{9ItxtPHOGSn)`$#k!gPH?mUJ{RgVycG`1TI8^oAv$=i|EvzT0r@ZJc`<_g=#I z-G+9W@p%XB(B~m+f3b^WrsH!3*GZ$~@eAauep9vm%-?F&W9&Zy6SPd3O0K3(BHc1iLz!F`Gh6PEwCSG2?M3> z2c>cmIqpGa^K<&Zl3xms0sIH1jWHa2I;uB_Zq6#`!rRI38VgprseCzi$~dMcAHdU@>C(tM+nXCO$KY%Y`SmlnYOk zLod`aM$zL4FVU!FG=Cgu>5bYmTlYrW&cfb%4sUkY3{IdU?GklE?%_&<0k;h!3S z|9F`^p#Z&+<6gaY0UyDvYLqx=ZTok?M2)^bzqd*llAg4xEoKlr>DLMoA#6gVu+C4L z4DTvbh_rbXQr0qod~8H}+l7vF^e?EEEXC=p72-9-Ymrj{ z=eC0H4#R$eZ+|=X@5TN-zWsNxZ^Hh4zWp88AC7&qZ+|EDM_?c8y~Or*V}GP+t#ChL zGS=y(V|&dXUy?>f-@O?r9IAaYd~^OL%tV*-b;by+A*MVr&^xAdc?KW$k6I3+i8zLL zPvH4AWMhQ%=xuM?L(*W5``10NOlXR`m;MhKiSVBkfd4G?x=t6CMBFe6bhirq5=`IY z+y#5CLTCC1@+Z)&>^6a#AE5b^{Q9?eyc=|_&3gWlABn^0X$5-v;2wIyT0w7$N{Yf$ zEc}I6V4u;#J_CE-IQMis@k_mo;>RFGOvc_icGCY{Pxe^|t5v5dIfhIt6}mQsgH(|5G4M|coM0Ppkj&D0I32Tnj6V1r$3A0BOvgCEj79!jl>;*uMrTjR z39PdKo=KX!2;aB{-w4x@Jh5bVsnDw9Faj3tmPW$!yAjo*>sI(frzZR#4#1y@uWRiM zx?6lil*|mn5I+Zb{RmNZe_jsBS+RRTTV8lyBON7~-0QhmelK&}g(Lqfh)j^zl11S?*Yi2bdvn}FcNYt3 z=JP5`%eaCl#F*!}KiyR5pU)-G7~nd$g+%mG>pKXzef4@>wpd1X!cP z@U>(m&{B-v`>&9dK%2qBN|NlS z8q(mF!;TKFY2rY!fAG_=8TuB#BoFkcTLwBb#z#5|Fw4_Optw3{d~5->8R~HjqRLoE zZBdZefY4XwCsjFDFYKfU;P@qUHAS7x$Cl(7WOTchcs*Yp^i%8?7%TmJczN6JqW2Ot zOXBAd*rPYgafj}jpTpu?i6e}DfzSRUajG2$rE|hgsZD$9Ry#&G-cpWtdI?!5x)uHv z68_Ty@Gm{+$-ZHa*Wb%Y1vsYp*is_w|aRvX>kwn4Z)098O{Zi(>PQDFNW`Wl; z7SHvM(Q)qKJN;wf9&9bf`y;L&zD!Q!X!InSF_vM(_RwEhLhs!l_lq-AZG-r&5 zzsA5vQ;%!O;zzT`_^hWIqad?g#L6AA3Fo-y?7V3;#)>U!|IGVd&zyr8H|ai^PRra| z*LuMInl%({ufw{1vOO-$lOY}qYqAbm|gNoPbQhy@--dq3CSlAPZSMcw5HbyNaou*sizfZz{dI0{!+sEW#U7g zyZY+;4*=o!ucHP)tQ|NsfbZ65!42%-2F2h3Tfhy&eBin^fShD>*1(Xl#6+`~sMo&GgC*2@OFE9*GXA;J_?|DCF zX?-rqEjn9FR>c44`6X!TwiH@p}tBOY#-E7bp0b( zT%S7)gf9;2Sk;Q04=Pw(C)HLyHDPu=Dut?QE0vup&xg%<5i?Ii+be%^!k@o}mGK=| z7gxi&m<#LT53oK~z`A%5*2T<;O+AOgx|jv)BK8w}``fX9FZS>8?Z1nC6ZY@(?eD<; zaO|6X`#Z5e0{e-+{oU9fnF;ISMXCM0SYxM%G63LGZ8Qzou7nS#|MU*ZWQ$DjH^ zhJ0QuE3Gu9qbIeJgzqqCO@PFxgsn3CSldyimy;b$Ql%t+eyM$?EsuM)t$)mdylC~9;* zX?}0#ljpZ@hBiGW9hx6J#Z1D#+~1RbSl{KjP)p+^iPv!$b7qVoSfJ`!Pv({)7Q7U; zo(QhGdPt7y+@`kr_0GkG3&UurKK^ zFcd)^mK25mDh4BA6FwXC+l7I!3hWo&GQ%!~Jze*b|2~xP|4RV=u-CD1u#%S4-j~Jb zx;(Gf&IMiW?jYOhICuUYva?9m-ZV1@dqB7W>-`s!g>?a{b8uPKg;aM}VK}ysTa>p@ zht)$TkY$0aMDHH*OXV9OL#{bUYqJ)WMUixApi!~N_4QH?^Y!9Aq2M@&_hel%g4dK( zlYf?E0LdbF*bKP@Eq!TTZKbEu7}YxW!(&h?IM_)84eqyRgZ|By*6T?I_y)KpI~SF- z9aqskpmyk>c?{b$T?=VXMjU{%z}nq3K8m~%{Uf>+{U4CW1&d(Z%dSLH| zzqZRGt4+1NaS1b~89Fv_V1Udo2L~Ea70@%f+6Y^{*E166r9&Q+c(RcX;k3x#tLA36 zDZ!D`HBqoAQj13+!zE@QLMyjFyf>)Dv}E2*D*)L5He<&5Jv}ZO5oU)E`(+l2Gu!W5 z1I`Rho#4}3Ga3E^NET1l5x@EA8TxPvHBh@5zI;jSQ|sG)I3ix3dg735{Aets^zRoSv95 zD9CT%)+u!|$T_XZO5Go=cPso4O8CzVz`sTFM|W>XU+Kt>ohS3tDbZQz;plX)XJxf> zk|fFXO{aM~3KrPMQ7?uBK2Q51^$WyuzBj!G?+sc@?Df1sGl1xGxqtUP4H5;; z(8xs%4lDQ3`-k-#8z^cpCTpP4=E90%lWaJ7m6-$!-vIfd74q99Qoi#jOXd>S&_&z8Pq)n&7zhmfZ^{jBEd8ciD==l^;M8taV@B-Lztlpwz9Ygf19Lx*&AOj`O(c z!fs^?8%ldUJ3~7TLL;noJ9m>#_}v7r`{ZtDgIP6#G85Y2YG{YK&#3~67~46#p|A?=HrA@)f#qEBrr_@P8rzf1hS- zm-<80jA4iQ#NMBmMUb35&b?r_40EPWLj>K=Z!kh?dv*62;eh$L@IO<2!wjtapSbr7 z{wD7op1}_34H`XoXuB{&LsUMsaeP{Gsuj}wo~R!D&p|84d$^2oWH&}zTC}C{dNK~) zpLT!hA8@rHsR#d`psNSp%~1|kDQSyH#czed9UuL1b?;I{|$@o)7jNxQnGSFzBn!XRl!h_h_0 z7MhhFniZtG7)T4GS&>Eo?Fw4=Ks{+#U7pz=F|{PKk-YX%oRqVt7;+oQZW8y8H-36a z+KM$Ez2wj5J6OyZFr#5VtU(`Obd4-Slz~mvscgsUpCzhJ*=+WK%Fgyy_zTk4RIam9 z{OEp+S!rcA3n>pa4UAZ5ABQL(FvfCOXxtg+eAjy`pFw-}U6$5vh5um*|0e_R|8e5~ zt3Ma)`VVp>QqMiUHxv{$q3q9y;iX(llqIeOk{54!(@JYS;Y+vsBYCtAX!W{M+ea-- z#IqMlv7)yWtA#hlT&QFrk?*vN>vCW%s(}vo5%hf}BtXj3rbG+}!#@bwur>4LfrWGEkoV$Qu&ivU`p5pOLLre!{DV%0z5%oU}_6nK7Dn^5G zSx2*I43r9w=t(w|E!;{WO-{L=&QkMw2g>q+Z8FbWuc@3P0L{W)7u z>-`nVxhTI#cD>fTTPr%G?2R-Y=H~7fPQVVFXzCXWj#Ky%zJd*61=TJ_V)zRBj~S1ZYSwDCH|N8JyN{{Ws>;9+F= zVHhRSc=OXfi}fmzSgUg8%8SG44a&eV7HeMzRqw=>6p`|8yes9SXZV+2p{SK@ul(M- z4=T8W;lI89(-8^(SpoQyjhuR%@OrnAtUFOWr)K!6xi~7u2EM)b0P3>kxYcEU0VZ$X zpxj>!|AXC+#uQ#2(!+?H&FZ8qyPzr#*ISUWp+XpMQyb)18xq04d_B#kYSD;mLn6Qr z{M`6w_+KP$d>LCJH*Wc2f3-D~~tQ3?Oq0r+=% zKJV=GobDv#X&lIq-%+ye4Ql*x<(ySf$z)wgOpZj&oVP1qbnX{A#PQM@6D=QiwdY=% zdYb~#g`?|`fyF$fW5xBK zFOf`0`5P%GH~ArFulivno@gSjfn1Ke;3l7tv`yl3iJh6Tco}f?|$Sy!niN#aC zz*A!Jl=tW>)aXrA^0W zslkz1aAXO2wJCzn?WB>iL+AlJoFsewOk7&O23-0wacTX3vGtS4rTx^tWEpYl&Ses{ zpO9n^JLQCf{6YK(7Tp~8qkHgnxl=D~#oNsgXNz3XSCO)Z#-hE|hOzjPDF&@4fvd1s z8_a-v&B3^NSvAIHwP6)tmb^7rqvYT2=w|ePT*Civ0r+b`tDC?b<2u2uTS~#BtFUJP zKPUnHEVoO(pAzuQ{n%e&&wyRF0Nd2Z1;R?4r?~BxOzV+XuRvIZeU3YRC84N5c->wg z6yviRpEZ!jG|?nr{_P{x)uNbM8f~+0Q_m*rd2q)1~!poKyw3k zEB+72Y4>C|Qk-7;o?FLfU6OJ<1kT%~LMo6=0kWe+WKRHDFCuc&%;%t+Kal?>{tnCU z^c=ZHp5Tx%{6Qq9Jd#~`ctReJ^av!>obqqzpeje+BG92k|Ci6e_EZV_F}7 zC8AZ`^GQLEyae3}|4$|Sp9#SKCmehK1jm%%`ytqee)}1M<0J>35z2pvN=}3{xK4ks zAR8+e*NIZZ1!-Y>TcX4my%qVj;N-6oCl@0_3W$@7ks)V9F7EYlhlhozVSOn!MEj%= zHI_KU++E-hTCeBthYlhBaQ3cF&oFVMjC0=$%fLD|EQiCYGY+0)j)@+M=d!w$p;=)| zrXV8uO>?(j_`Aux9Dm<3e^C%&JYoN0Nr>z3mQ6=2lMYb^EO2Mgr0Y0q-Pj;CaKUmtoBOZxacop zaFsb~`1nc3g>uX~GQGyODc$2ah5Q`j+z0oLO?xoa(%wF2Y)UwPE-35!E@-B2z=CJt z2j|m@B@U9^Iz6p5lj49%g)Oi^!`iE(C?7-v!5@G)q=L%MmbR!)whjNGc4Osw>zlPP zHj4bAH>N0|Zsz~{Ou~O|0REe_u+wW%2Q^BHn4+k=sHBht=iZVqj$7T zlZ+|>!kH@%LlP(w)S@I%B!oZ`C=$X=MM9`32^0xEbs?dVp+!QNrU-gT5#kumbT9w! z=Mw(&0`Qk~Gl$);n|*;TNjLk%9w>#U2Q9PyQG0Ev=&`@4^am(khnQjeIoLdPR$xg`|o2H4ncgLYfEJDfUCF zko1jJ&@+N{4(KF0(m0eiH4cgjhb97vb`m6z#ropzW&iy`!he1M{u4#}uM;_vfws>J z0P7yS01W@Q4{g8BMIHc9@M^y%{s~F-tB*peuYv6Mk$Jr}$)U4d_at>qze)LqUAMBa zdp*WO{@Oh`?#Ffp*8dRvOCmB~3$YHEEk7w= zB(3kEh~+Ww`yz}~+&k-GmBlSYR4^Xf;R-w^(Lw;1pj;tBnv6qj~ZUzuzdENX@Zdt)J^^h-Q>3)(oOt) z;k_M!^zZfTIN+-m45=jV{XkCR_2f~_vD~4JJuokHEBwEd@P9r4f3;mUl)UDMyg4BC zP<+8F9h`XKX=`%5{=5vUe7-d zk#v~58+zYZ@N~rbe51{6xP{Owm9O&v+_ZDJH1&mRcMKu_~OB5fHd8iV5Z^H>$Hg2h&aDmr%Vb*cxVf1D|Aeq<2I};ms7%D=Z0k8igsAdQZ1z<2)VtZ%$U z%MW85i1P~~dLM555H$QBLnlwH-1gq?1xgm?Q;-&?WbVk%?JnTpLU+%i! zPm z%oI(|g=9^2JkQFAj64&r*M7F>Ld32PKRj5D|Q?Y~)P@!z51La0_#3 zR804^{%_pzv-6#s*GEa$djua9N@HR;#so#1ZU?&M&UeHbzVyUHs20}fJm3mR3r!70 zZu%bNW$Uv`toU$a_uT2PMt%GnlMC&Kn`g4W`<>Tc)sbV zcR4U~)FBrL6MxcK2krlqi>gghZ2+nlKsCNlnRR?#xzd(g!4A=7=xxavJ#gamNL}~EhxfDfQXeUeZ{~#k^?IFB9dG?{JPF+za?ppD$ z{vTA*xm|Y26HwPWBo}!FO^o4!3hO#`mX;PfGX(iUrXm{Elu)tHYH6LCyRjenwD$`R z-;qAz5eJT()Jc}=Zbkq9k?>y}fPaf-W<@13DF0|jzv&p=cHtxwS-l>ym*aA8t=Iep zi1=5}FuXdKF&JL?_KJE=@9KlN^1PiLzPd81nz@(ZKeQWGHq4c;WpwX8#I05gKXrv= zl%>o%8c&L~9*jvObBxfT}7h=qlNjP@=(Qi)QKp-`Da~4soRB_ zdNr~GWSR@C@>=9IPw%7G*$RXi+OYC&h5vsg{Fema51O@jAzc$KQM@HG^dXA74*i|t zr~nNev%lJJKd1^creW?G=bl=&*J|fqx9{n3xyxGHKCX

;quh^>fSu7h^|GHRnl?cvdQcs|4y`O%-Jm~_oH4<{($w?@_9PM{kBGW6Xu>8C*sVf60KKJEdjT!jJYSromBRB zmo#FL87cwy>u5a?tszC0h=g(N1Ivtf{$j+Vo|9}!oOa^KRW>b$z^f2 zAujdKkoRM4mp#`}hnqZtGaQW3_{x`!9iA%!c?d>0j4K%faL^sI#~@mV$>{Lx6*@d0 z2_ri%>eBQxlwcK{9GV&rxR9mi5y#3P-c}s@OY$GYU^BRp9_Q9XU z**OpM#8-M$_Jdu3Vtt=FOE%>a>x)kBJ&PQ;QmeCddLp_wG4~pmptODMJhqe@(<|Yt zdUoq0u=)Rtccf3k?|kU^rQbRJd)Lyj$IeS1Nn&{GJW;=tRcNu9{+rSC-`v4Jx8aZe zp!lDc0`O;I-*i5J`S_vnnCtW0MRJEqBqPDgeb(l9V5Or&f> z<|G%@6#K0_N_C=HaEq+#y6%Pl1quI`1Mp|{HJ3Gz0KBN%#->7NIw18IJE>l*$3}JA zG*#h~N(5P5iNIa#pY5K|12v!J*X4;^bGRH86fY(U;mn*2wLL05Izv-K)m703?qjOL zeD^UI3vib_v43aJ>$s~Y-SHjtPU)V%3i3`y*Xg2rLME-xKA#<(T_Uh`uUSJJY5gHN zc4BSH1hOZmWNgR;qNo!|*N&>{E!L%eG<%I8yV%=Tn|hO|r@l2I6mO}xE^CqZycbV% zQ*CO^*O{YgLefyP4kLc?qA>pM?&bgaM#BFe0r*=i_BL(N6!`9C-!sO3cJFr*b~Hbp z@ab=S)%2zL<-KeQR0n@~pOJVs)q8eOEx@&y<4MyuX6aE+nIj$0a?R6ln6$jj*1Mgi zi~{SQ98B!5j-zQuQ;#82hL-xRdwJn+s>4k_ z;2CQc-NEet_Vs_?O8EaX0ROPxtp8_pZ>35oUiBQSHNM0p#5mqSeEx#A@mwLk*SSm? zTde;BqU)T?TyOZ+TomH_RqRRgYazb##62V8Y-x`%z6U)#+a+aTZn|Jx+DDA$HD=Au z;;>GS!79C|?fef;QF=+KG^NmJ|@rz^`RA1}CU%es6UJR>hDP?-_zufSTnZqvQ zOHm2x+PlPBgQzZ!XdOHLe&?$bbr$c?pc^#_;}F$g8gwO>!LfF6S2*Sk_#)oGGp$V} z996NAy&skwC8)<9z?&hrnJ6<*H4|y>DIj$UEK=*?aAY=o&@BaL0$J(!J|YAz}e( z4CNu$C*^cd$*AheKlTz1GCbk1`Nc+>TaxdSY=filP4?fZ_$L4S6ZrmAXc(X1B6_B% zk$z>y^iQw6m`pU>-$m;VWU@lM+qA~_@FtA7k0)aEevVOlSpOd0D+wOsPr(!D{!aK3 zeO%zm;^fYoJ_woPQ+S=a75*0`{OtkwH;W#cpCQ+KoJ}sK7Fj)rwsj>|u9i)-gUT5l zs-{mY7Ls-4f(12`WRbG?UbPq08`Z_alREqBy=p_pgpJu)d0LrVE64Yn$oq^M?U1|a z1KH7LLRLVULGn0QF6Aldiw$lUb0R&XGBho_@_U@&;KN{rA3&dw1Tvw_D-=gM@!>0RANRk-ScQ zcih+4R5M$(X|oV**RLF4BS{W*)E!FHUuIFcm(~dXtBbETW|LRQm^o=*ztsMddgP*x zG{YE9q#wD$Jd-Pg+SjMEI<4)h=gF?A)nuD_;2P{c&^Gw-UeAd`_|A<;)1+#EW;_s? zbrTVKqehn+6^BD`ZUD|r4?6d$t8NCP8-cY0^v;vxrSZ{#dc)i*V+G9;@IrDD`d0X$ zi^{c=X~s~PS;MI-GFYVLBTijm5|zcDS4MX){qIK!f2w+RRmL!u*njWg^d8S&1j)yv zhGs;4{!>&K-#4hw)#WrsW`TcDpOY_#Xfm^^r>!^aIY$tIV{yoBPgWD>AP%y@$~lU~ z`W$yVz&%LPVl}YTQ+`J=dq1wA+5uF-;}=oGN0y#h$odQp!I(3Vt81#B^0<^(zjv~U z1;Qh<3XnwzdS8tOb^jQw-tNIWIUI9=+caMDMTMh&|+|_xyb_Q1f&_1|N#o^HWFv|0nf7 zbwi^5F~TkC|Lh=9zXsH=#b|p7_{c9 z{Yo37>+lTh%Gk%vliQ~6E5XWOs#B1UZ`Hg$`(Vw+`58A9wiDIkGXC4W;(r??{0jo` ze>7Khb?4Fp$dM53uwbsN=(x*RD9kVu*MCo#Y3@HlX8crmVtgSi?VkutajcEJ_TfXM zZ~vV7IJh(ugi}3mB7FQlV8TXaE3&P&4Ft#7ah-{s2M+N9>NCEG3}AAb)pj|lN5y&LUE4h1ie#j7;mG>&^`E%JJut-z5qEWdZmTcYVQ3n8u=47GDq7(YDlQ z30agwXFfFa@wVoy9nj9#iM^Zf0`=|u7u0$Mv~!l<(*};5ALa~vVQAijL|lsMxCBH5%biP)#azIghVP!s6E--n76+bp0%rrnS`)4 zvhz{4UWs8P%-vYI5_0NFkEg#E9<5v{Bo>dbof3K#SK8$3M%ru_Hw%f37e1`&7H@F-P!tCBR{lVB!q9qotfe*AuGr{J zSn5=avR8I`9_&BGdQW)uSa*#^@qew|g3I$YTHO zh}g&^{M+$N>fbN|zg-)lkFvDBVVA%4tq@%&yI4BG(pqf4bJ72u`meB=k^iqK0DpCJGNTrHnIc22nWM7V z5wRm1Di`&oUfW`&exqKyQXjf;K>FBBEm`+pACs*p-e%oe4-8G-gtma5Z+1m&lqLMz zDMRE~yXWK$+7ld`T}%Qij)=+U*_N@Ke?&~-dxh4zUo5+Yni;5tZ8!yrj!NE;TyDG9 z_9q+YdrQ6X%)d2hn!`05G zTx?4$kU>08=-sZ+jU#OX(y6b8V4E2-Al)v0J8<+8=3)!xVF&4d_`Hufr2zY097K%9V6!^)j3DSR&Z0Jk zB2SM#Dsx&U)di+_aT&D07_+A4u|6Ll zpq9D%%|eGz&T^}Jw1lyg#bQS-w-Xw^h7mQCzacB!IO1UZIqAshcQcqSGpbgx? zKezG!CJF!70`S+_dhiK?0zGxrqw17Tiq1rh)Go<~`zUlQMNh=bRdJ~bLl3@>Ae$7O zt*-GOH&w|x+5WQZ{;8XV@TsNAxt-zqS;?tdw)sd;ws{pRx9x6b*%Otz%;Rd7SFuro zyl!#_+oDCSzyZ$k&a178&PdtmO0LEG$NmG42D^FAwOlWn!JE6&Gs(J6kGv8W^n4+nc%!z!}eGlC?ImH4mX1FS}u2R)pIFxC& z->Ybvs8lpP%*dN2_K`O|Jn)Z6mZqKz)65K2HY@K{Hut<6+jsEKZTL4!_%9E@U!}W0 zysk}Uu{0@l=nYMHi+8L#xj*j>w^!CX$6I1jwsf+V@EE4~QN|L&G}pL-HgF2E11m4GBhEv(I@|>)FxSFJ)r|T9mp&etnx|d{cOMRFWBjcoRDIoQmE8J64szHRtzK*7p_u2z^{0!8$G|wP)#W z_=YbYYqM|<1Cuud_9CIN&GK*)#}OtiT@t2h#b-c-FN}YT(KW%YbL2Tj*9*9);d9Vb zF}iD>!(P6+!{fT9;aR4yvqxIb$+G4;?(uB#$*iKjmtck_Hz7)n??}NUYIQPvvnF-y z6(@1BaC|PKZEBZv2$e0roLXLu+yLDQ|DPrNR|ep}z}excroNTWa{{p~2cZ?sb&P*l z)xw5_@@y#SQbTO-w#d{W7fEAcolkWvyT*=G-=l0%EBiR2g^{Lu6>ygQdiD`;XQjbp zdkpI=GLeh>kK);Lsvpn#uXj1CTT~Gb)<2LPjr^>!56g73;dkua83Gw}w8@gJG|;_s zy2fNL8OR|T8I-Pgs-vKzk1!HheeBxPDoAqRBp)l-v+J$>9O_}j5t^Oq=Fd2-&8k%&(*;K$>-9$5k0G7>Fwl*Oe(hZsgHSx=7#r}-k2ROs0N%J znjEX|E&Ks*WRGGy<@GQK9^rpmSeiY*62?AU(imllunWw|Mr9E_DTQ-44$p!34f7IHM=^o!l2u zeX%-SW;$}P;v?&unUDPvVXCG?$VSai>1aOo^RZtdY{Bsp0mrxC_z4{6aXeao>v|r? zqxG5^dZ#+fAH?JH%Tc>n$CO<2M0Q2vT_oD?@FdXtgta@Fjo%9+a-+JJ{)Z?((*KGB z@Mm{DVIw}TZt?zMpbgX`Q#Bt|^bv*=%|u>MO=&6!VZqteA|SZO0B=B>qoR4QI^OZ~KPOBW>KLBFmN3m~t;WDKD>UK! zuh;KOVK;^~FPA;lvHUuoiPb!8L>Oisyn{^cNL9(s9{K0^38Ni{TGWssW0}iNf4fh0 z6bY~48O(-353Rwx1*t_%|HnpKv~a)9sXE$bVc4@%Cqy{d`_=a61 zMYp2=7772=0r>N;6ECJ&_YI(U88hi8O0RKI=4BW4^w}5HX@sIoP}EV6f9#_9fM~1~ z@*2?_@!=KN2F*=;VyT?3lUs(d4sh7Qfwl-6ixrz&AX73x1~~;saTnFYLRw-&ei3E( zA;2n;=JhCPUgytFpYV$_1*2*--sk_2_wM0MRayV|K9^kD^pf77v<1?pg+Nh43t9z- z(3V4+AVts_yiTC{8q^uXZLFx%aM1xTuPBTn$U7)FgW`o0>sSGcpuRd@-h_(-qGQ!@ z0#wIS+M3f_^82iF8ck$=&-Z`Y=Q%yMefBxopS9Osd#$zCs>An$f?}It{NGP}p}2iH zlCJ%J-S>FOynMs0N*%kh>ic}H2fcr!~Y`WW+F@pOU%9MR!ezv@)Yi&^%5(l z@%*k)#1oFQpEv?ZU^KSt2c@rnt0TMeD9Kb;0g2AOHCQ7e2X!5}{P1c$;{SJr=U|*~ z4-l?|RcGGq<&l1ERO$)u!YV`>l_vX#RR8bP@ZT7RKR1C7imn2$`9LPdYaT}yiF`e19wxXb z7a-rqnW>+zMr*Evt@xIHGe%bG>pkH{YEdy9RHrOoqKny5TFp|f>RWg<%GogP?DD5LGd>?YR^{Ha*yo;&ln!O(Rt(yD{JbAPB*sh#s9QGOS>Q}Z0Gp} zwMm|bDwlRJ;l);HwV>5t$y^&94JrJ8(C~jE4*z*`zEEbbV#R;%7-gWj^K%&KNwb=B z{0+1z7u;+xA1fU}*RC~`4Ibqg@{g5NLni}W3y+!k6g$oGjU9R;X=6?W=}9qgxr^IE zx#O;L6FL<^gQ|VupZ{~maF!ywu`>7SAiw)vMQ1C-M1|bzsWGdVU0s7=Ml|8{p62B`&o{kz`3xJo`j)CpE-I^@7CRm1dg=oybzZYY_ z?I3)OZnIx+*nfNj*0~!>Uq7({`JWhc4MPfl@KT!pJsF2T|NK90v)MU$U++>x$l=Rq zKDVQ19K3v?AMM?SEQ)KH1oM@o)yXr6Qr%gf{&43( zraQjXpg%sjTG#%z&U2d=D-XT13{Io!tuhPWd1=CTo(;ux7V@CZ!eBF<7*hBv8vdK( z@TZp5IZ5N@GKj}*R-unsM%f|lp)F%`f`{Pwo$QZ7V#>c#o6G57o6)z;n>l(=zh~3s z(2PzGU9B=gxx{`F8ew1NzmKtr{|-!rS3wjjd!YaKksZdSI}?OVV05T+0Gf%>>=XGq zY~2Ai@sj{Of68#=*jK82N8^G|x_=Kw8u$+Ogm?FlHb)PYnaH+?ef7UX!_-qb!R^i78KAt#a7Lr{e5|8>3@1O{GW=$ zpDZ~!%2e}p=v5z>>N_9E&>=p)uKkc;F0?~K-W8U6a$sjSL*KTVuaR)q(iQ%fdJVIB ziU`fqwRzAK{lVlq#%%RLw)u)VxpsXKE3{Ro$bV2w?FK#v+MPl%8!Q;_5FO=V`B3(!YHiYGrY9rhX(ki~)KotJ`wzEGbs zw!baX`)>8lkS*#P+d?B;dCn0HpTh$EtE+RJ4=cmXd^?td4lV!BUJd^(aro=eYesm< z>dXCt#@G~$u}@%(WwxyWw)MowTKL=&iX&7MK^HtLylT-SA;VznXAbUTx*(F>NgqUG zfWc-s0ja&+$FdYVI|z>b6JIgdGEdN*B=8<4VCK{%dVJ@+>4 z32lzRyYd?ZFJD7*(U=aZ0xNvx`VHfXPK?L+Fd34|#N!wbM0Z2Q0mHbX-fo@2E_8M~3>$HzzZk+3I)Ri4v0% zO8h;P>`cQv6w=5A{CA%JN56*u({cFUuq;WoCbW&F|B3bEn9S5Lh|^~52{VJuIw+TA z%o(PTwM~`Fbh_gcs)s3)(c2wn?*S9maUg2kxqE68V*7g95gq zUwhHNQ%|^CGUjmYtAs}wz3WqhY49yoh&01t)ep8=2Rj+wsI6hD>$(NM>#qrK{3aCh zEr@^51q}cB{vQJx{@dd4&uWO4<_Ag28gZp4y(}T;Q~R2fFPd_cX$K21zSo^yqZa}n zcKQl-&P+laNMmVQhb`^fAV=D`N2%R8==Hm#v<|(gK;d4=Rk%O>4IWyb%?t<2tA~3@ zX1~sG`ZzKSnaOvM=*j$QnyaAUUcX^{>WLJ1bF5CuR^Mh!*99zo7vf7C6da{|044W( zXW1;Qk9QdC=KWa5^=1r1@4K;9>TN#5MEs@qur{FGao$-xob_nseN* z>WhrcNv@-cqww+;4)V(#3h6d@91SV_BO3ny6Nmq;uTxxn2iF~5-qQhm*dFG<%Bt}7 zhy!D8PIINr&TFtD2B&yi*gnxdZuwj^soAiDYD=PE~Pid=rJHvNIS&R8V zhBHGQX@3Va?oDWM^MPb&4rrvMk>6ciuv{P z@Ub;R&MFE-!%sx5jbD2HhWQ_94y|`tq#cVl&l={M*1(?l=!{`Xj*IRw_-=l5Mu(LM zADt1fW}7Rjk_h2x-tO?DN;1v;G1VlEHPOO5!7r5T?Vmy0r`=(#)VHaR?}Scj1%A^= z(0z;#$<3}gdp+y-?Ddy>c0i{wr10l7{GW-#UkANOGJ8Zxwui%4ML5i*OpRHxAktNR zARL~BYs}UaOhUYzM-b0xnP-ycv`2Vh^DKk3$G;b67HRXW;T@**34w<%Z4XR#PN|)O z-o6~Y{jP*H3kq_)3!_9F7dwTC&>cJPbR(*Do|~F@%pD!k0W&*%_qTg}c^(s;G2(h!xsB`o}mc zR{dwNjfM@A+``sR&TyRgLO8q?R*oTsKd<5cY#jcN2V;>IJ_fHGmC){M!Jjvv4-rpj z7#tr|-k|d4VKoMMOka*G*KOXL<6^~6yP2E}`%d1eLW#2!N#BO&_ZLYf3s?AUcn*#V zrCiIm;o5!<|Fio|_@B{FSJL`<`Nck(b=)auGO|6dMg0%sz4UIK)BLI+nLTSg#hwS7 zMo3o4ygzpqYo+@}m;Kd|p52}sJk$Ki(oRIDc)SU|9#;E)_pCeR`8UZ~`w^rSzFR%F`wQVauzA)|$Y>i8kL&*e86Gz7 zLrD6YXT6V=rlh+cu%iDbtR>$cM~CYM>5#s)0^b@ApYFffZ{Az%p=jmi0Sm4y8Cc*) zbif07SMK)Y@15Xb*4^$>H=FQn@Y~QZCu9mp2EWNllE>mLLkfRU!+&QS{&CU&&|>M3 z<0vA_rD&bp1Png@F(S(qxR;!8@1r<;ULC||1NPgo>6}@f$36LZn5kKtdRNOPuOo@{ zchtA`Aswh~Uk^ zR|T^}@QN`u^6n`JjJ0J3N^HhJvTfAKv9`h!g53cb_Oo8TjkoafiC*#=h9`i0@{PGT z5BzvOr0~~i_&*nifAEbww8witw#WN#@M_Do_I?x6BifPy)bIrme=K3;_uoS_CIkl8 z0P=FmK3>k;XT;q5(mr)&Ek6mrGCH5w$IFkwx`)}eeA(c&5?uQOxc+ajHNr!K?v<+d zI4P%wmvz0oT;4a=&&$pMChzQl-^VE`#b8C$weoTY?q7jBPvXwGPm|%NY{FMof^YmH z;Va2soIDuXVNV~tkhd+NfybiGgEG=bi;qV$9dG~Ho3ZRt|(y440>uho}JL=YnkbsSu24y9>F*5`PnzoGb4u9`hSCl|6k(pzf=C5 zXpuy9PW6S-h8dd?dA277SaD)&>LA(u9WfJF`Zqxi-T~3Dx1Z$pe*`8tFRr}^a{HKN zN%HR#+Bgt;5pmawonvcDfWe!<;I|3)+i50f|JxbvR-1HimWVp_YMrBkgl{;Ugm>-< z2s9sog_ncp7vhPiC7#0!KLa!Tx~@y`)~bYBpB#)>;W+mJ-Z&-U-jPsDo_%kS4-BdP zZ`APL6^B2`^8vI4*I{M`S-;=gtdkzxlOl1j-io`-@~28VqBF2Df^{*)_kDujm?S>~ zORM=5d2&pW$mi~#KYHAK6aG~{dE1G*P*;EQ9`Au9yp#MtMESiQv6fl6;)mTXH}RMc z+|U)h{vzan6jxqDG9)%y@yA(my`tRIQ`gnIgec;#(TWy}M7@`X_aDg&s1M`*dzjxF zo0DCwo!37)|1_I;RYBEhtoXJmLAt`mbD!h>0a5;A5A9j&E}Abir$VY_<1;`1@u^Wm z3jZVx|L5cIk8d^Z$5z{*w%VQYT`bmiI-paAjdPVNW=L)QpcxuNqv2r~H-0}TKSaYL z!Q(0Rj}CXj15ZG~heR#4ZkC$uvX!V92lEd%!4R_|&=7Ph_tTM`1 zB*d>bqfSo#JQ~INQD!@)&Re44>lJ925QD^kw+|`&lQsNbh{IpkPxCH{@Z&f)1MQa> z|No`Xa~UE_nT(i!*hnY10Q*&y#^$tuY2_&ce~e^!S`3T5oGx&s*{xKP`eH2pdT+T={#SzKQF{`;=jqxzf0ETs_)|bnqfx(jDkh=$ z_NTzgoQg4EZM{)`E1{-Xncwc$*KqQUumh3oe+_IJ^jl)}UP1lg0{%PC{%g|k-yMg) z(Ipm{n>Xj$3OmEA6g~7fH~9FXLP@Mimv4w_w&4BXop(S#@4f-}#g$+Dv+~vdp*-;j zT}@{g@%Q{#lVe%nt#^~A#{@1;_0qLm?*i{;H_hj#%zn1vOV}G8L;Og-PpG=lGo@t` zp1v6w-M0H}@K3n7h7~cZLH<>*W8aR3uhjf>=MwVMQK^y|c$k%8D>ulM@Dsf_xC8YT zHMpUv&I<^Ad?i;t&vOc~YA;~;&$s`kX!ySvkH4DJZ?!)MqkF{x*n4V6fD=5KWt4Lh zdenQN3}=>V<9P}9k`wMV!JC5SV0B%`ml@^$1Z&_S=mv;(2y3Dr>VGl6(B(KbH}efu z(BfwYjx|+#`3B?+3S3uE1uGz5nieRK5N$#Q_KxLW83Lk%t4roM}=J`5?H1pEtP*PBlGEc_XaI4{=azzu)lm%mz6 zkweov+_#VBmUE(<+@P)9k<(g`H_}t@A(@hu{wB!5uZQqIJ-`Z$!28$$D=H~8;z~|r z3g#-@E~1n2TF1HT-JJYXgs|4$Zjr2@MN1U9rlXtp)vw%Y7#kc?_(QH@!2Xpu{KtAO z_Eez75A^D*Z}aFok~j`6c`VAyM-Z_Wv7sZY3d*GSo2X1nuN`x-Xn00%paon47D27Y zU4$Mt7BQpf3Wp5u&-cz~SY5yxIC)<5O#{O^f*(EH`4EPrP@b_B2t% z7Q-WfB(*1VsJCz6{m>_GuK(|AuDOPhyrzyHgFXTyq0c&uSfHakB6P$PdUeqIM8gX( z-?%96?K5n?RgD$lg$D2@__D0tLsWSS)&S?7%7$lPP7T|{hL-);tl_^W4*zi2*JJeG zW#@wA6A|;{*k;A}pMVeDjd6r6xSN!4_mj|b;04cNelZ0bVYFe8Cy=ZS9p8)%O431! zC=Z{q^mJ($^nFQK}#o7xy4{O{%60n;dQ+6a`lZvs{dmyNB!R)hrj#>YH!nEdn;(y?}N94Gs?%=#b<*i zwYAsd>OX^_(1Vg`OCCxSHdjfJ@Rzv$SwL&e6Tu3sIvb+?1ETBFcwPgf$uZ%*H zJD8{8^A0ehQWe1Lra{d1g{*1}FW1cGVA5tb5CyyF9*o1iE z;m>;RRXK#*XClpI6=aD0oIDZHg&`M2R^k6u&`R8@=%GERQNC;P;R+u?p3@$7(U*Z? za#X)E7`1YiM~2q=k4z2!ra1h^+J6YU&~EUAke~Hg?-8*kPS;Vujb1!e`gQO6o-E+a zBS-&*u%$N&-BLQXbDH60NrU(;WlcgMn){o9aH`u5-b5RM|s@Holl zX?N3meh7~oP$^{%qFBfg_#+5XV<>8cr{V?tci#LzOT&L}9R8lh6kB80f>(&UHg;Y8 z3ZcbqAl<)3`sj?_s(UON{!_%f&(>(z`uQ1MCSkrlG}<}3)`EHBr;rWTCfI_X3FX2s zpXQJ&aqo8t_v%80QW~WA9AKR_VEsL4O>A3?zKip*!2P8_OgFR<&n`%K_D>{pVvLE& z0P*@L8eiV_Z0Z>X%f-Wc4xUR}RqxRu`UqtZAMowCkK#w|Si#BpeIz%|hF+26#)>|Y z8!uq^&!7KiYxut!hd;^9clUAVjWzu=-(vD7K0WlZocu)JN|$M)3DWdceRmH^)93oO z-*>Qc1}nh~u2Na9_S~0ycigvCFC42^^Q%4Pdjd7u2AGvJzPV`UU-U=Rc>hy^JMKfo z{`7gs4b6NPdmP{eyb_Z-37HX)_l8F}`H#rU84kZZz>R#r$sv_tr0I`(_6={Tzm1jF z2kSjm{$IJcB8oD+&3!KXGAO4qXhEqJCpgI}fsf@Yk3{rgoIFNVu(cNrO*n zDzHN?eV~7vQVN&E8AB`nYmSD0a~%Ghyf*S$s9Hs`wwIHu&_}cux1%vh{x|(Q zLQ|d7YNuhgs9R=~*Z<7Yu02x@@4w0D`{|Gn8xl$oJ|*D%F9%MAI61q2d1!*u@c0C$ z?(w>=fu(Gt@$qu-8{saD6L;x1T_y=do#7E`uJ{MwA8xH3g#Ks`t=*;-oi@$u{9lX1U&D>H#^zYp z{()x?Ltl3WWp_e`kNIOS$DAuQS7goD$Yw}(0GfZX!f3cvwfT_WSS0*tG{$eY>N&Lg z-o3;REd4+6gG*FylhLP>0)9vu;4}++BjG3e94(x@xi16gXqFvLUe!WgWRbAY8?)CS z*Tg_OG!v9RtgdSw=X_nPsrP$35dlc<9z7`u^M?1xCe@Fi1i@~{QQe7DMA(P>Mt+{SEyUxH>^9?<%7 z%x-5yK5Aj}W;ZL!fT!`f@Jqc6QEL#XPK{T&9(BEuP#1moz2Ir_{LBu1a6kCfkivh2 zhJQ;O{+CAJYs1m#{KCL{Ei|**-23c(hY*#QD@UGZWdF==t%v^f7HrJ=?1~W*+b9&} zN}b_jkkT-wM|AM)r8&A%Mf#Rul21yNoRIzO(rDaI0_WJ?GSa_U84k@}!LiNCu(|Ib z;@@6)2EEhymTtE}cYKWhp20PL*#Xi6D{ClHoUvmBOQviecy`#_)1eyFb~9+}yWnRb zuJ~*y37J8916*-|_n+wd=4P@HN5YT9*@z?Ie-GM-9p~-_RZL8v3QglYr0~zv@P8u? z|48^V*vOgufodb?DYfZ5{5NNw{|+Gz0R+`=HM&@IHEfy#8>5G7MgS#&kZg$WQA% z+4#Nyjps&CStNWGmSyq>&c*SoukW}oAO7g(12iYxrWDMTJTGxN*`b>$m*{4mJ)C2L zrO7O$NF%F?tS)cr(6ayKYxwVr!+(QhdJ*U`#A=U(-#|VOtKHo>D~rx)u9x&wvU|shuUC8) zs_WX*&>Et=A;>`mdU&t@hwyc(x6vhmqS|NgHZ~Nx5I2~Ac8SHAzb><3hi^#r{{jvF z{c-qng@xX)mgM{Y*fSE^6Y-Rq*Uu3Nx9tC;GSjZ+(=Htr5HSka#@2Q1zl)PE@6}_J zxT3f8_OS~uft`h~XV%jC-Sx32pWdH4HYTGx&JBkLMrVTc@Qu*l;Jdfr4rciPdl`Lw z_TYL$M3R&L9_1SZi7Q;#$srF^o|ndM;ytuZKv$!$)nh#nv+8FHUXwS=YxU6zajNfq zY*ZiBThV;lPb(E8VLj{z$)~>ZSl3_mAXjdxp1+#DvI4(v;XY0F7*hC;)bKwLhyM%U z#XA!43594psDkyi!olRJm?IHJvGL#}cnI|^&e9!z1-bod_JU5_-#@CC4SKA#lbHN) zCS5rb?nFa z$v0!U0I$Q>U7hfC|BJDnz9%-XqcuR0@S#4MW&TFlge=vYl$q>M=RpD4N#NgSK)f0z z-wXS4G`u6qAL+$OlYQ9w0u|qf5=dI}T z%h0M6y@#W+BdeLbHDb$y?!Bi_O0LnUaiKKM?^KN{&`fLm;C zrZmIDU#T`f@F+3^i8|>m)NcXxd^bSUvxuG26YX>~rT$1cV^clTJ;|8gX^wYM+CXf5WpPYy77 zT;!c52K!JXyubG~XVyB-B2;Jjy2IB*G%a_?*WKcGjcyoH_**pm(UX77|IH>cd5w>o z9&H+p{A)Max#uksV)rFQ!`DUGM2GBL^=Gwp_w{d5B?RBO{XQnY8o95HN|!YvOAChx z?rdEplRxsIjAa$BETqh;lxTljC0K2;U5x$?lN6 ziu)6K<_7UnLwk~NUBgm8l|HFYK7LHuVCTx;#{Xl=CVLg4xW0`&^~6{Ah&H8a>->L58`6*T2obeLY!lH&@;n7>BH|g#)*?bcc@&XdDAH zh_U$(QFc*#kWK6gbcg>mAXv+n>{xI2bowSCw#Q2Yp%9b1@b*m9>X4sT(OcZPTIDn! zhNe5KY8^G_F!D@GME;`bU8YxTA+l1>lpq)Ih%U!HSoymE8#~Df+28{HJJ0@Gq~U)k z4u9(FQ(PIqjL;|SZ;EKPVBwYW#*_N#-78<=w&pb)!O@CWu5Vza)4P6n`Oc8lIj*)C zeQj};K^78P{DDvb>@_2ypWnaCAa^HNaksDch3*{0419W!r=*-JYs{3*x+LTPXDY5S zn*4L9tdV-DhTfk-Yn2-RXU=Nj{``0m&QHQ*=l* z-5vgW{|S|+tiif9;!VpMxB4$&_|LchS~dI+$Kg+{n`OBWxM~g?PrhN4mLffBP4Mo{ju=nS5o`zVDcF zr{$Qk%$`*x2Fo#8kVa7q6uS7LJTDt7qx7Qws)n(poYZwfDF3vHY|lyZqCPxl=cc}m z|MYZKM-=>j8IExkN7_}f<4&GNgZb`M7dKWLzp{T^&GIHjflCs81^KPU%b+x098&lf zYxut%hyOJ64f3yjR^`rHDv=pa4)|#GR!x8D`b7`6J(yShc$2xhzVX@BzNQ%kU#`9h zIRF{Aa5cQNIo9!rPmrfGlk`j@+aPv~X8qwV=m(CSF=dUYK6WNm5UN?xj`|(9eYI#& zJ&hR;RoYrjQl>2O)_NvCf^j=QR#=&XRW2Hy*KZlg)g$_I0 zar=si4?MG8 zH%aph9tgh}_4zHTd@vU4!3*I-K)%4q5@9MSL-S)TJSf5b7?zXJzHA8Ft&lnB=cjNH4wF=S)i+h$34Vf z&h-4mUxrlwAFJX2zj62zfBi$R9X<2Yi0~Bg;HJJp$p$`K*+YExa9@lU0IS{@XZ>>| z##uR(Ie-j7`}*Vg!On=!pR4xK(deTi&_{I%{NT?(?irOIRI{b0Pl0npNo2^MGV zIjy(%DvF-NmDU7#Kb%!4w_&Hr)h4&39{B0Wk@5SL?lF;5i z_3PPao8bxfPK1_#f5iGVwR?QO)*)AvuZ$HQR*X4^m1^r@MYNL6p5lq>5UaJaAkUlI zBEoMk4=X)YD_-k|B!A()xjA*VrJ=^pRUAaF@Z6SUl)8@A`N68E#q+($s+R+a*4u_q zDE2(N1Uw%b@fZ$KUPT?=jCy$&>)z$9QY>ceJQMN4IIJmWmTTSkzM05Qf|j^&|IVBL zjnnXdKMsGi12@90YeTCQmbKu2NuK{G*4wl3-GOV}bd`+{1+l+|UG#Opz8~dFR9xGb z!`uAuo-`>3ao5a69;ra;2!GgPE=q0Z*(4ml+v5Q@c_&)pHy0V7x8cfxo?`Ww;yEl) zQm}fDwTi&YJjv>({7z<1z9*L~J!aKfL3_VMAurC>M{P?P9Eih3gyBJ@O%{c0?l7hV%`wJI+ zcK-ZtyoUeZ;_%N#JLF<3z-GZ#jLn8^0yaCg$ro!;InIWiN-Fdvob`~>KN{QgBg*ni zlWVQAZH1b#1u1uFE|45bnICuo~cFG?V>~u#h>2-o@LpTZJOA2yI_-RGB-5 zbo__0*D&W?z=irQ%G0rN@YsOkt93_}+>#=hEyefZ+1!%K!DFp_^5C~k$T_6gryOoL zq!dr7YS^Ig2f2oPvFdC}J?0Yl_JS!|`9qzRFj{91E&sn#4gU|~@W)&(1%2e+qlTK+ z*-UmejCiN`&xI`R*Wgv13Af zoW(|78(0D8oiz>{T}!r5L=jw5dA)`S9nAiwLikVDQhs)ANcH~-8vY-~;ZN-}SEsGb zinX2Sa-0(~(f3OZD;2uK$}~bc)}~@&n=)kM*nA`SE%r}iKhhp5||W?Zzz~k zFneU(yNYK8-;pAmY6`GZ>@g;E_^Mck&mnXx<*Zw=a~-}J?<#lbxNh?dv3<3eQ3E6~ zI%n&Giet(}r4P2!p0i#w^)1?$=^<;F7xF6a5OciC6byIkov30zZ(&3w( z(ruodRh{X4wokBrrZ`HP+Bc5AzjbpGj)7i&-iNfGWF+(!aj+7REK%qs4<4<55`Kgo zVMzELy>gLRtkt;$3q3(SA7cVZAHY@Z|KK2k^9aza>RPw#5cb+Vk^yT5#}3GV;12}} ze4!wo2VB4eaGv~kv4;Q0arjePnqO5%fwK<_)H8){-~4P3`Y$l$QZ}uFTp;a7{%yWP z&wm>fT;~0bvmE6N(4)0AUJDEymssVfa0q)11FhY&6WTpHzTNR&!pSUZMl>M4g5G3VxexSoYkcnYGvW#_vJP+pwL z6|&+l6ps%ZIIHJiUS0m2{40a*I$2D@Q!@`K=0DQNoq^fb-1{NJeREh@@Xlf7h82eu zH#o}8l-G9+Y8lP7jSNQ|o!}B_q9^QKf&`pi*ureDug2DT^$AGH?<$R2Z^qy+s-8knE zTb%0Hh4~zgJwF{IlgnTk9yx|t>}~PisXjkA4&ZpW%lj%TMuy8V!ysKS&;q+90J-)8 zhX4HjKS@;me}ZxNXU#d-1X*5}S;LPrw%R4&qBEm~jMtcJX*LEfS&|0SvUAYROVDbS zC@}-~XAocDioE+(iM^G{z}XDU7{{S{j%2}y5$}nxPj|s*vk38aF={aMK&DH<8${G? zoSBTHl$_+*c#n>Q1fNaFWSU9OfHPy^2%-S08}-KOOmp&>$%*Ah6me2{i>1}kYH6io zR;mOHE~Ar&yuj!iF&_Ccjw(hjPQInOpchc*2asil6#iuz{zu~Q*D@$!97nt4IEO)c zM@wFlGe^LAZJFZ$9%jgc*|*>hS~o@o?i`Z9l4`4Dhd}(4S3*{|@;-lCf^?Vzkfbg!ZAfW33gJ>e%bR)`&gn*KOEy73SswNwl$Zt9@Ub zhDTPReY(KJan3-sv$}R>%^RqzC&4CYJ|K>(3QTieQF}$r9Nazov%A8$X@MzNJAO&c zEx3E?XLrSMQvw$u%JjuG_u}q{Kf5c8yCfivn}AHs<-+|tPyU;t;eR|1e>wc$`}18K+Q$elYHFVc_UEeYLt1q@|NZ_P z^*na}cl$Hd^8Da^#8_4H1RO-m|Ndt!&svFgVtipg)?mJf?P+Y^V*3!=XV^GcWTN3+ zEyiZ_?D-v^2B98q@K1@DNI zy0aM*4tE-?Ro+!zpCTMQf|9}#x>64hgsLS+R1earfg|u6<;pL`elzyv*k8El{|Ej5 zB^v&p#Nq!m+F>HvVS|0mlAqdOiWw_7;ABQLalPFrbG_`m&?otz}t${-d{MR@V`{U|L<}58|A;Y@U96(d>^B%@2z46v#h>b z@0w7^_3`CfZp&{RUhd1Y!f$U+U#IMyMfc5!yT1DF3B@8xBzvyE?FNq(-u#KIeACopCoBSv#RbJV*T6zePMlHhkof)gvbY`w= z?Y#5R+aF@3*9FEuw59SFC)r~Z>(?fUh$YXSg5B0OIk2iTLoLT)_3tkO3(h79>4+m2 zoo;Mx!T+RyPX46#jdo_Zy`9sui}$y(vA>XZ-2H{}w69K{kd)LXthrpe{6h*$(Jf`Q6@;mZJvj!M%}(9*52bA`HtaY zG3a2zLzcW3$%CpoqbAe!)slQ%%+- zth75=xcFLs{oPv)hGRSKHuMSeEh?5O;v&wD4)+XehU9^!h{;lKg&Z?<9n`N6N>18uk z2b=*%C`=avMHABll;7;@kl^`p-SwX9Jy}Z9#K*v?Cb`Sp$OvZnWN5{IyIjNn(>VOU zUN=`snLymT%w6uDtC**q3sL*WTAsT*yJk4r^`G#b4fr>a7oDfRfsIf7lq($;yaxDf z^^f#C;-88*U4_z%kRjz6?paBtM)h8)|3;4-qP%{D9AVLm{!aCqk=L7((m@Nm`{()> zj?#@YocQ82)&lAULuxu_Wr{crw4m;pB1}_4oV7P(#t|z$7hu+|AL|hp?{G6~{X&Dw zvJg>UGq3fC9oc+F%i%Mu2-#=d*SY%!%QCr9FqT#}i2<|Rkj|-d(+jx!pRfO$s^Nbs z4u3Wt7JsajH8S0&3tEgdti8%S8HrCn?YkbXrA>a0`B)4-l zDYEkBw`LsI@;LsmwfGih*?bwZWHpV|h z5zkQ4n8nb{tZ69EJuk?sq8t3t@abr>`aE4}KqeV(vuJg=h2<3Uh+>d~nlIqL^Z5TX z4gb&L@aNjN&1jK5H!5Nuwc)A;Z!<-3iiSN=lfJt_lroRAi>iXra3G3Y4T#vz6+L$s zzg#Hdmpu(>k8-S2{Gi6xEB)L>6H#tI$}QM?%U!zVx@F&mqTyGgmc304nXXLPm(I&Z zE+a4l8oOPWeC_6}!gAg!EL-dTG{np4e6}icLYsGq9Lk_Fmwuag{nCGiyug}yc?SUtC5#4)AROi~L6x+2CB^oYoH6Qp4v_*7lZceYI%s*U*MPNn9 z8kEirt^BW7X!w5~hrbZ4I?amNgs_@7$rSu>ampl%q?5Nr8tft@H<~5s1k3PE_tB?S4)o(d@t!tuP`kX?$ku<|CiOORjc*{101x>7N?O%b7w zai>2Y5L~*A$mJE{iysUTU3f4iR5Y{Vn_<2^*c1)dM!3l)c}v7Np*xsjwdoOI zvCyJhNOvB=9bJb*cP^MTTkQU`*MvBf$CP`^vRd@8+}>NJt1-#t+@e!go^Mi0?EJl~Lrj|5LL=J)zFNtFQNrEd9umhZ zpwdkFK8DqR+z76U6Yja+GoRCrDRv0<%*X2jw%~)wn;r}!r5k=Jw3VdtY9@3(R$spZiDO_DD`+& zvck=?o=|0Z{i)7%R{u_w+Q#=Zg_xC&Uk=^g$VztyO7VYJfQ|X>UF5C1qUK`Smz(62 z$nA@{jkkL~I>TSWJ?~k`%fq6-0d4S+$3mqZuF$h`^Q?zMyI0=c(%yJ|%dJ1={V~bk z4+!#@o<%78Exv>=JQLzqisPsM@Vi&OIL*t~3nhzJAU?>D!r!6c-xi1eE$Zs~#;)66 z;SmRhM#o>(a@MPmQICxmf-_EI7G~4NhQ_XIUzwqpZzg9}XivD9I;R2NDuFQZZ` zctLJ~hLA@NAGHh)Nn? z5#(vT+I1dJ=`3G|ijeVddRO1ebYFQHdPvKLS)KnfbeQ3%5G@~4_|MSr|1u7L>TNd3 zBrh1CINx-1&A_h|8)jM4yS_wgah5|^^}D?69zTb+Uq5fHvTj~9>>Q}@r#VT&TMZeo zuRn@->#?Wa#Z$?azhKTqJey=nlGhky`N`M{un`Y8$?rx5tjFTzf8gnCyxko!$<0v? zvxP4PcKmA+WR;5Myet2x6gzI%r|YO-DY64=M44PXP$ZpR$Q6#YoDM(R55EQZe+M#M zn=A8zCi#z$>Ze6S$=t$O?}rqa>dN<+{L%29e(0HDGp?A7oOQ>^+VE>+3dh(|Jf!fi z)bRf*4*x#P&P7pC$8c(M#$GbfJj*~*wB>T-=qZ67CI#91G8x%&X&;*hrmK=Ra&}64 z{bB>H9h=i{ZXrF5`9Sqj)7@*9)~=i3wjxWQYm}+-9HdE;d=hi6?^TV!x9U4H)%Q>x ze^cMJ7ig9Ci_$Ltnw4B>X25WgpURaQPS!8pv5;BXuqud`4&V7okNTNS84cv9fyA=BMQi2 z%3y!3Kx|b)o^qxvQd`i47W}HO#yR73Qq?~1RBWX3O)&wK^aW_%^djq8zx zh9L<2h5L8j{J&bm|DSRA-x%1e_V8;1g8sVWkfqVS%yvycSjkG~!3GPh4Mqqf_%Aqi z-|j}2Upqe3hX}pM9IeUS!ytVL{(s-Kd*!~CoBXdU$@aaKhLg8>Uh6y8$@gW|o4}9T z@8acuM_#Yg2YC6@NDkyOWOyz99D2RokoB06d%gk@;JGJ0Qc`@7Mf%gg(+z?9l~KMF z|J$$v5TD}PQv74w)sh}huj*^1-Y@Pa`W0ISX@MHb4-hX~ zvschhI>xm$?n8cBifVlU|DA{bOb!2U;_zRvS6J!VOE?cxWoMH-zwc|$pDJIMY^|Fm zsbzYL&R^V9pH4DP+@0O zuJSLHCle;f(nVuAatp3T#K02EZF}?e7axm;n}NYxd_$G`4Mb}+)|+HAzG80+H>Q5^ zn7ei?tZ$^gpWbJ0(e4VMJ`+RszvXM)`eo7Z8;}Rz>?NxB0c(xVsb4^&Ob+`tjxLPN zM&c*-Qq*;Kug%Z7iB>M$zw_{yH2nV+hrcm_`)V><%s6MB|{<6T4 zy;N&io8J0O$YA|C#Fd0X)#tKtZz9Uru)hfVbnMRtg`$I<4s$*tRI&M0XLaROXZflk zgctNxUbyK02mg;*8vda;{Q2&-N?Ko+JH^Urt3TSR9=sb~o+adwYjhP;3-W#a z9*-&?ichuKv09`jxM22zx;)9!D|BRFJy2PoC-*UB`@#K)D%>6r+l5iTz4sqjXUKj5 zFV!)HvTw@dZdXfHQmpb@H6mMv z-y6k7`&6~>++g+G2f1NNum@V~T{8~>IfPr3cx>rb-MJ;Aq>t|{X@ z^I3*}{dx{jQqFjus{G~Ai(SuquqJreMEHl>$E5#X>1?rMxjy~fsh)CosfUdjbL&{h zQdb1hKM*_C>Fz(B&ThGNr?T0-eXpufIL)TdI?Wcb@ja@RxuE8lvd&w8)jn+IB#Bu= zeLC*T@a6ri=%X|EJ}X6_77-UHJC1g~=qtX{R3pgEm;+L58Q%I#NU$O+lyzIkSi0ln ze9TfGVA1ep(XYYxP2y?L<}T1C(IL_3^vZPRz;+PFX)ZG~mE^$;FX9XM?>zortKokp z4uA5pH=`ZQg_-EXqSb&|^*c%tA~4g@IYq2lb4ON-1F>NnF#f{|FxZ|I&31TWi--%<#(4%;_!L(Au#);aOQchKkHPz@%Kxge*#dgu;4fgyhF9>o0It|yRW@0+ zR9a7R<)9RM0cx8t=BP4x*!m{EeFhI|8v`n_m$neDw7x$Y{@_ibrfWb=*NvKaniaBf zib_vh>9?O%9H7!!{uJ008+udJxU_;iY9D@C1{?Q%0Kc-3ekE75#Z4UQU!V{AEf+BS z=j;ES8vbYF@Tb1v#YX+Y=t5rSyj00hyVWd8*H-Ck97QI%tfv%~da?w09l5ifhVJIC zzd7|baETgR<4%18DZ~p&M#P+ywdT0+J23}X3wtsrrC5_{TvguYw{wr3N&6)$ za+E(?pIdE`_bM0p%Z8TxPwfKi+vD&rl?3z^Le_hLupwN{e$FNaVDWe5-*LTx3nCt9 zE9rdbKKbY-dhBI7vpiKY&&W^L>`o!S-O3|M%4BTCbWI2(gC6cxIBU#5%nENGql2_? zds@}3L(m2mkbNKZe}=8G88&M@+2qn5e9CTK2pShN&a6%_R*b!FF_@< zdZ0s?*K1I%*R1tU&{dL)cm!;_6N_Y?gKg6s(_bHj9*VOdZgmU&7J3)&Jlr&-`u}VV z|8L{)FR%#U>sY&w_V}so5SJsN?KY}yXOiFlvF&~;Tl62xB8T+rv391p_+_f)-GC^g zuq{l7UBSX^nlw<}QjVN)F82rS2i>B)EOO5%u5{uFZlVD`X{56)m`qV4xzZ9~|J;Bm z<+hA-&tzdzuSy6ZOHAy$=lfkJ3!` zMfk1_Dg3Y0@c%9j|4{ht2wG|iEB$BixH_JR|XwDjO}%7$0;5I*4o*d9Uk!>P9Cjm>Sn*5dA2&| z{yot6h$8f{ocwRh*vs0Qx_x!%@zoQ9d%M~6lvdHIgCBv>zQ$wiNE{E>MgRFgqUL(pU2Mvh$#>xNeDUx)svW3F)VZS%WMrAy+ z1n;j*@-_<+AK=F41iS}KbIKN9V)A91nWNJNSUhV~2k!oA7ObJXE_v z+?+F^lq?-9#zwl_S)QpXMct1GR5Q<3}ir0=SF79sPaH z+DaWf7>taQ+j_Rc9zmL-A=UruH2lAh!yo-HDYZl3?9jdPPjT`?JuYPM;$Ns$+wdmk zQnVqDHq2q4g?uvww4Z?XJJ_>BH|O{ySDDl5*jRaaAmxO-k*y!g=PX|S7THD@k z-{`M{oHeO!ymMn^Df-*?^zr!bOFt3h(X&PS+AiO+!=239rhf$9C0Dn;-RZ~@tcAKq z6uo`;@q1v~=X&)&VCCs8+#zJwcc!@I8UNF@LsGW?TqrMXL?uTD~}H?{LyurB_7iu z-erPcUKVL^T2nksjq7t7ay0rovhC4YU6UL@6!ybCCV7rxahv2>ircNu3|q5No}SSp zKr_|_o2MXWJ7-1THdRqJZ$yNcLXko8;8V(4KgRfgvh$BB_DROlB8=xGIhu2z3t|OW zlY|xFc-kV5X2vQ!sXL+=xdnczHL*s@K1k9kqDN7^kY=>H6~vB9mcvo&JvzzcXYxHg zS#@j-#iTpk;`VUzuX}e4E&rdZH2gc_@V`EPhr8ZWT3zp++CY}_XV6;QB~x3_GNosN z+dW#eC*^=$`Z_!bu{zHM$lCglYNI3kQi3pNzb>_qD!orva9q z9s8R5!d-^G?5pqHcc8N9C~5dLYXdK@h$hRsBK&TOA9&DTh-}e%+1t+*J)&e=(w)!+ zS<-8e6ZjS;4?`@$ufr=K{TX5JFNZzR038sOU(in_qT%&X@-xp7J0OD)9exg4zxgJP zVYInNRMGEOM$F+#c6fwR{fS(P8U$Z}zT-oR|IgF#KNp8TddmU$Ohk?QtRA;#1bRhR zPq|771<`tsSYGe8;=k3s!y``J;RbC$Qv57n0~#-2rN!R^I<+NFq9r-YNtH4_2@zee zHV*M2Q>6#?jKD}T4ACKzWmCkxcjj49*lMr^`~5@(L=9O$RE{Le)`&o3&@KEfann{m zr+Sg5xIsk|c7+K0FG1&{n+;o! zf`T?c=Ojv50m^cjifnf0V4G%EwsC~CO-Z+G8(R9m`5OM6armdP@5A3m1=nY80j>H# zM1(K?1hnBaY$RtrvPUnaBZK=d+1{A$h43eFuG9Q@|jzGVv`l?M7|F5z908bf}V{Sm*5=+4TBEzSmOcuZr-*1 z+|ET<|ACQ!>NPgY;gJgG+Uz!}zin{dxSHmTL#qE@t>NDlhd-^kOrm%k84LXk8d9SU z+S?4APdeDNdT_2x_Pb;j4zU1p$dKOGHvDe`+K^%0=70MJ*KLk!*a%z9&irYPXDipW zKHIb>x56<+%Ju&DU>)mnlcf!nBZB`mGZo{!MTcj7_YXchvf)OrZ?N3Fy!^X2G!^A- ztSoBPtMMS^146qljhpg6imr`Uxb`a?pMuBJx16d1h0cPGNtY&NOUNow6GcusNcw+x z7S?1{H?S_I8%V``WT4j|(f*s>b%SsFVrcdMYc%}3are%l)+z}k^r?z~h*CM?WYVE9hRExv&4X{~@ zK1cY_+@JCSXVs+wA4A7XqoE@=DZ53@^S36(|101jT)pE6@F@c`tbfZqV$>o{kq+Nspo>tt`e zwLS%Yq?7HeB+a!}nK^f-BF%-B0vS< zZo>4gUix3zYlDXzwKZXBMxOYuA^%xU4TnEKnPsCg$-Gf1cU+Y>`7FmBY)TDoRA%9- zgsU}!S4~0WWkDqGw6>>mxw0b1DrE{=gJ;bLV&_hr&$5WnK${)#<3#TH*!%9ldoky* zu5n~INu&E&)x6VeG)bb|JQ2m2!ZM zq5ePja%R~>eH43U<{TqbD==p@JJ&b}#SvA&uz;-mgR71x?qm5H2gUT#^vd}j!rTg6 z4;w05DYiT-1EnIGB;iPP?xH>TODf{Ramh?in48EVIVCrDMhD|a|B!qH5u+9YYZE ze_7v(d4qo29R7y&17$D%=$wZZjxOD8_X>i3ruAZWTNW zEqQ!Jtn7#rJM(bAI=fw;T+_i!IkjnVmZ4ga1v{B06@ zDjL2RGip^w`lvaDP%X}0zz>99oeyd3e%5USxEgMFO(maP5tT4@L%C^Wm7BoePf3-%7m0z}Lx)w~)rC0^4Qa z#5tgb^?4Mf6*=5$${!w-!VCTEk7d$S^z3!B)MycF2r~yTb4=o_?}jp@Ga=&D#IuRc z2>+^rtmZ;QnJfI9_=4rr>QV6NjF^evXF2ldnynRcQ#(H*rDip9j`7mGTzn6M@4yE3 zSQR)K)(uDaJwpor>oxrQ;_ydgwi;M=ioXc)vp*jkyQwcxpE5$`tBdfE3=ZZ|9(Een z>ok3Bp>e!E2ydN9x>EiG?+n}!)4LYV&@o=s39-^X_z;jD2=RhsORobOAH;nxibd*2 zZ26L8IlGtHB=Q-U=XN3TWHzErLvL)vz8L!y>}{k+#(o0!+1T5$&&7T+_668Gu(x1e zjeRlpHQ3v*pN;(l?B`-{$Np;UCu2|XDl7g!^1j8ti7M^?%q6$BwCM#XZGp5YP+HKG zf>uFIlQJzW3W}}>t_G^FQ*d9S-Cc|Lu7!dW(G|rj=!)X*a?!OZc3&%&R#9JF*WHB6 zE*D*^sF7CPgj=S!%jDr*7aVI{@;T7kdK>D;y-xbwYAn)tL6V=FCe4AO_59Bg&?Ki0A3cSjQ5(3JX z7adR*PRm2|zJNRu>F&3cFRxT1cOpN7gQPa(X>?9Z2))=_siBXZM*ejX}bF(51oM?;R1f0=l}O}9sj{N z{0D=y)@FGqzMpks&psbHw^s=;65)6w@65)0ra8>MV_hQaGl&qz*haqqudNBZ+|sxD z)V}a|;g+0FS~C2!f*AUQQ+eHjF#j8N*Hf?|JHKJGNYdALYhMMBCB*A(=PL)mYsmJ* z<1NS^IggpFts@U2S|8SaL6iQ=x&_O6dJM)(Uz?65i%kX8SsFf7IOeHEMwKnyrX<+64^%`Tl>m==ewD@c%n>^`))k z@ip3C+K$;)&SUL0V|^Aml9@RBagXby^;ZYsQFBcA4qE<%(7OtE#o2)72U1QewOK%X z4pwVc>=|mCH2omFzxE5L4lWoDA-@Ce+JU>m0S?x`MR$J~By4DITU$x{unhS-Xn#k? z#+;X5C;iiiPL_?hXa8y*n+)Z?=*i=T5i3Qj?;bScFSvC{e$;d;S;i7$qN7rA}Hnqxh=B2w`O0MUN z;G0a>-gUalx+{ty?Y%c8BqYJ&|DJYydfu!lr=9l?egA4+w>Tx~^!+zq(`~$FZg+B0 z8JC`u+he@xnk_C?^G8T=g8HNXeF);?Srpy((uz4$)Q$XzLo# z)@W4q6+l;`9V6RvE2*~U_-jB})E{d!O+WOc!aA2o>+wJvqdHNYB6p^wTSwA6<>J(cEZB}$rO zablv^+%9NxSp0pZttoS#Q0nKmw|VlAn{Kl6a;tg4W#fh7V&p6qccbqYPWAF?s{A+alg*g0~3?6H6LgNGeX+Y-xJRTB! zY8C0?1$fKuJGEL6k%z&6H@BU8LX8|Avr+sz-P*xs}3voLjy<^yWw*UdE7QZd>q;u)Z(-i80e^gO&SrlT2^vw)4ULuFsF-c znOF5h-^-_8?^|;^ryMg<=rT`(OerA$qlr)G;|Ind;wP^=iMQZW*bZ7VJZn}XlLm#& zh)cbv+B9Fuv+a`JImNjqAF@d|Nr#X>$T28v7eI#@gMxF@N_cm_Qjv!w+tnj~G$KMc#e^Q5#%VX5I z$1S0c2ZgDkpWDnsx5rKG3fzQIR3pm3v7k_RB*0HS6Z}BAzl`W0YtD~pAb^oIYrA7l4KN17f8V{2{A zoNKRNu!paI%=FGFr;vJxMjM{GspiRJhjevg4qNAZcr#}oqv-?RR!T2Hn=&4{y|fApvI}$Jv7e1&{=FJqr(?J6z@-!KA$*8h;_L+CVd0#efYW@mrviIJ zwH0|`w}m(I=8kk^_exn_t^qE_oP8z3jXq(DECoXXTzs{5YWgUNW z9R6&2@}aSsHk8?E6lo0g_>3__WB8I`#G#SeILEG2hF8&%I&{6pF!Iods`UCzKElFM z#i4SfdE{faKmLnYd+|q@kUR$68!#kX2$LZjVnfV^m_YuBIYQo&wmBz%g-X*b2l*(b z(r3&|&|5)g;E~wDx{O!{G+)1;+^^j|4R=jJ+p+Zd!`-B9%$RzX?!SOv=iy(g<8O(_ zALFOAUM(lidlFXCk;wXGlnNz_T#6jPFDM>4Pj+U%e}et0u-xNerFkBz7Y9F|j=uso zrFE|S1n$bfJtL%teU^C^IS<}@hR|x|QqOYvm!9nG<;V|V8)q*s8oE>ToD9;vl&hPl zh*_)%S1OX*Xnd*JQwTBJ7KRrmk)sC zgXw5P>&B;1%K7srXr=cKQPW4+td;5#! z$KI@`n0tutXl~iu}-up_Q#CNO%%nUzQpe@dIRqQByxJ<+qegDTtgseiG;vOi z%pV%frvEUSI?d2{^0YE|_^Nb7UeWghz{uQM8LQU^8x5O|J;b0HUc?)sme7&D4zPe1 zqkdy+0alYA)`DS$|D8JiNpbkYt}^HVHb0M|9)gBaDNuT_Z*=v1pY!B#$l|QPiIEoz z$fH)Xnddg(dk%J4j*-@C=Sej!%ac+)#-m35IG9{L#+!^?SQhB#H>mMKvlsqbd$HP1 zc{Zr6x>Mc`YIaxfaay}$bD!om(M|$nJ!@+gTvzFUD^ zQroAH{9wxH;!GKx2=wBeLUm?6SMWp!xS1wjQh(N1zKS(5>0%_Z2M8gR|Hzk4)Nuj7 z&RhR~q2oUy4*w}5!-)GJ?;7OanPCZ8`ea}7(0sf*UjEW%BQLEP^4YRV)^zQhX^)X0yb#sXoM+JHH`ZAf{jyw)+ z1s+T2n3CzcvU)YG9#c4bu`FzE!jpH&Tz4XuUQTxwdv)f@2cQ8v%)|5h0Ra9b{*j-EtFnEKGppLx+FcS znq>KG8FIRp1CDnGGiBII3` z-z|ucH3q&8Qh&O=ZyB-zs*#)e8&?WNBarpQ5?YRYQv%{gI^Aky`G9VrQX|F=gUqHz zv=)o>78fu9oX7v~*6~k`!(ShvMMHRtKj1x|@ctsG$@tYy>c zU81=vu|qi1R41HSQ^)r-3dqI7%pD75_qc_wg=J_@oEP_q)$sc@==~%?@0K(}KW}ZN znj<2zyVW7%GgTbPL#>fD`BdTchl(Rhe^hbgr5{xsIo=S{Cy`g*(c6yQiJmq6QabJb z`>fTQSJF-oyBY`OqO*d=zSxr^|C07Ojtdz6^ZEZhI{s;K_#?MlzdqMZ)z~#-t`qL0 zql=BzK}|oP(*bzy?b*MGjW3P&qT3gr`;NT9^>mHaZ7ci*hNP}@lD9duRUHAJU7DAP zvb~!LiJml61WO2@`j-&14&{KmY|S{JY@L2i)`X6N_(ud)0*3lr8B6;$JV}=j+`gT zGv(X5g`}KrKIQNJba#F?FV6HJgR7^+LnBVw&>9^$Ttst7KYaLxZ8kt2KuD8pht~u%+Rb5=4EkE93ma^RDkb)gyqca^DiU{SqR70r2 z01cmY2KJvJ)PW(NH9LM!OcPBx#Y6|<$~Dc97EN>k6To@=|Cc)c8FBa%Z>G6LbC$-Q z#ylH*SQMC@_HkVPSjpR#IZrsvjP}z^gsf+Nt4)n888q(3{tH&yKXq*E+jUB*dDn$^9xa(C778P(SjoL)OkowhI{k^ZEa;bo@ug;ZM4h zuOgrHAwmm2-{ul+Eu}pc=z{d;pQ(tUg^w25WJ!OcY2Rk3k>XxG-%?DML;LR1n6Bj< zcTUxHEn-O<%a3tis?q^nph}v5mY;?gkx+n(X&|75U>WNTt`2Abn@OkVH7^qRm=zs?kVplRoVqH0P7h(@ab|g9z5lw8J@s5%)BLnfn#_BBC zsW&-!_%#jvkNE#eV1K-jU+2yLU+egfio<^v#=zU^Zed0CYJ1i8jx4gl3K&;0aI>vS z#E#A&!51t&=_rlz5$6Xc<3aKmgFnY9fwFSV@V3*~A8~$Y>cy3e+i@jaj4K%mIckJAcg`FOa%oVN59QH$u)sNiQ3zR{ zf`Po+QPmrlPv#h+r_1L*qae>NP(vKGW08``8s%fPsbg8u0Y8_Ay?(*p1Kf;`;GWtA z7;`}z^YzHm{GlKEdacj*(dRp8(+-^PH5l0Qc)u8)Bt%-DZAqJ4aCl@j;(^@A>mud_ z47KT%56TAk4%W%fRJ`(QREBEXwPD)&g8GYpv%t;m;5H2)-U~HEP}{e(jP*3IhL&#{ zS&KPzsk#=L9z9z;Do=~O!CWS?JCQ%q+bY(kT}>2tg*vS8uh;RKrBq9sM;_*-OPnW@T*p0mjoW^`OQ!s)*|Hwg@`d8HI zv&*|&U;8ts_XKmHzZ64H!(Q=y;L{-Gv3@uMzpMHg`8J2Q!n>UIB+ULGd>xTf+Ma^H z{4{RUu)=?Zj{lfA{1fLURVU5K%oBS$Gx&an8r@s(VViK2YObbgdx^a@EA1gssHrn* zej5uB159JN@CjzyaX-ZfCtw%I+sNYcfNBYq4G12>CI z$_IQH_w$uP70XS_5<@HAXimd9oNs9TO!=VU56w-d%uSA~i?3N;`t4L}u>v-mQ==u;ZN_0{Nnj_4w#(KVRBj^UlrLD%f#;ad(aR+b= z4#B0-Y%YjqOg|lTq%d1K-d@!4OP;$;YvXM{a6;h9x*4Aa-|)o1^YWr4I}y*5Q}TWA zmfBR1h&?c3v_&SSUA|*~V9Ikr&t6Jrol_ zxKeCg^6!jw;zX%##P1%gW8sB{e~j%sG3th-&1}NNkjdD2!gxdHiL6m;J@3^S?%*F! z+{``B^%%_wo7v+oNtC{d+^QI=Z@+zuEch1RRda_^63JtD73-k>DX%D-WO&;8g7|dG z3&PXMFYr%)dLr%i5if90C%wR)rYMhgwKc3>W$ySh{u=x@bQ=W&G`lSH3)J?c{Gh^| zX{bLzdBIrdjCwlwSdyMQdh*=DtJgJ8l>X!r!@~-H@N32~mJ^4+Lrgiqkaaa5^|YVa z2nh{#+Tf+HxNHYB|7|x5Ird(!h_eivu2-zHMEuQ|CE#!7EFOPzW^wpyo5eO=eQfXhmk-N5gUkT!b8xR)`oW=|~rhgcm zcly42nEhXo%lmlL5HSO-Ik@&b^105%Jf=6{W^PTKn|L*5GmqKaxOymape3|TDXQPP zB)#p+$o}ZRgI`8I9AE`Kfk=>Oh}N5_Cr%*-6!rfQ{fWCd+`Vqq(A|b*Zx1j3-~Z9^ z9~+1NBd&}0TS60*mt=!fjLMoU-&re!UP2|{Z|^XNwyREXcNY2^>?@=X4z23K)lJdk zwJ*u(f168xq)>*Z^f5LdZO z;*skQb8_Gycy=CY1?qD?f*l^k{+Wqu6H*Vxkjh=gCKvl(l3&Erua9mUdiu7Zr*EUD z&$KV4RisljNS@tgXhFa9%Ky(VwJ&A)`hPgA=KpVW{Kv)Nf2mpu+*#=7Lv^)utSrE) zQp2iPB9BfMdSQU-Ddw@*9-Y=%eI20rHCh@+m-v!-GQrBbhW4+1N+$CJeanB}snK`V+}h_{3I1x|rud$O zXVKHJ!v6ss|M7A7kCC>@=Fo-#);8N`sw7G{+(+47u{WO(2*%Jpqw&*!Xga<|85)+N zY5tt5$K_3~;=s|B+~r5>_Q_n4;RrW#pNEB>9w51H2!(UHK(4j{Px{#a&C>6pTRjVX zz}1$wgyp>hPE!}PR8GdzpY8isu*(zE6&?o7jbw*WWkhuxI`t_Z34v>_0b8XMi+%5$_{wa#)(4)~x`2G@RW1^FhkDaXcEOf=22eF^t z?1F!I$u7*MLf!L}wL#yu^x!lLiTH}eypET>O?chJ6F%UaP zd?F@^@|7%fb3fH{rT)gZTB`X?{4Qkh+hm$!u6#sELL2}xio++Ag)*=|p-k4S<2vj+ zXg{)Wrk>}p;+nP1^k3;Y$>xPFVEE6M|5xew=f>f$amsZuYwAIzVg4g+gx)jE9J&+S zbOthWV3w@sH=(j4f0 z+vo|DiGrT6VMw|-Yt z)40V%mEcDl;)b+@=1>6n^X-VrxZSe|9#+T`Tke3qF2i%PhhqBZex-Gvycx0C$r5@n zj6Zm*Y5c(iIiYQ}oZvZ(>|fhZHS|(>ZU;YsoAAKyZ19{tuGD}z^yj_?L}zri{1f;d zG3`6mz}pX9?sLMsKgGc8C7$#y>7yJ`6SJU=?(Cd_fT3$oFXg6r?xTge? zL;x2ILKr^7I+AAiWQea(?f`S>>>lC?!wUaK9e;Zq{-M_O;D?CWJ7HtV z&ts0WcTeOo%tL(Uv$4AiR>1%JBxf}v?g#UZQM8tdI8XIb=!u|JPdCavRUd_iJME{o8VCC^=C+aB)ORZFc7VGau=4{)~cgUt4A@Yw|Dc(q&*`#T8F2y{N& z#!<-mGsJ1m@iy`iN$w{tfdx;XUt6TE8(#T8*Xa1?$KjvaM1K9`5p!HN&T)sRk~_C$ z+frJ;NqYi$u%EMa$Bpyfv~h;t)?B;1*f$utvtN*GvY|>SC*P{{C1g+f<}F%#w}ThZ z9)YrMkBH%MPAX5SX1Q3cE1++1jDf|0v;bfBo48LSGooyYx!UqcrpH`8)}ux~RAX|e z($2$zz}v!_EJ*#ojQ5Bv6do?j zmE6o>HUHP@_)mz#|3KZ3$BA-nB~^~N+8lbhAAF(hTX~mU)wXEmexot)Qf*$_(e)1$ zaz}cWl(s*IaaJQM)o+(5;Hw*lu=ciY>>XiquVjUsBpww)4+!o$b7*pZ^~#Y|HTYIt zxBrBBIv=(fcDb_s2YlGyd9W*E54uwP4cV+9>C=Ujo87^AZt`rD-B}A=WNTUoKa-Y@ zZSeC!#CFlw0kpV2*K_UC?=(6n{lPEnoUhr)>QPnC$Rp+LE@Oan{V{G*+Ri47^jNFX z@jLz6cy9&PvAL(&gIeZX;#ldkM}LA2z%8zl)D4Ca=pzne<^0WmJg12i5Aa8JHIutou6yvwI=ak z3}0(ISt(rbVSZiBm3XbPfExLJFUd6K|3I6=3jcLF{*&VHH-{GYiLjBDl zjp=qmWkzWvYB!y?mWDp=i%IpbYdUyM6YnpS?2-{0TwxB@{W2E1{7upslK$4(ikgzL zsX9r@^rTA2?hZ}y-;uY6){HMBNpBLiL|3#{3_b1KO5t94)HtW51a$S#o)|}AeeRW` zt5($!PjS~-rTL2Osz!~Y+_(%BHh+i9>iqp%221udl219%*P~I+_QPtj$2F|* zZ_@EEh{Ip!s9yyZEW;=XIiBm6_5@!eJZtqEa;66{snIv&38;{T z(t6*N7px@eT2SYdzKnzvb7*d#Evp9gJ-7nu@xx=padi41enPy*r*Wue`rB#@pjNG{ zM$%RM5(m5&FW}dC_&=oMUl@nK8riNw_O5H_7lh74XSdsVTEme1X2_SH<|m}<#+i_= zx5$UrKTz;+EWVZ^JBDlkA=m(Z${*Y-vrL9Vv6)Y(*rBs^VJElWVhfbjZIjcred0ES zEVQsS!TV^T2^u-`?|;$mV*b`PqPR;3t$6M>*UBxlU!C0MLo9=rC_MJ?`6yJrs<7cq;yn(!qM0<`_L6&_9RoBTIkt^8kJ8(kG^`8)D zr;RD=F>w3v%_XOM7Qx3K(qf6Do$lMM&G#1kC23+jB$zw=t2{rYPw*ptLALhKT%do> zoBt2%_)m$$A6#(OojoRj6=feQ(yC`%mvtw&=?&R6ILl21Pvzh0;3m-ciVN~9{U_M0 zMptG4(n8W-73M7WOzcu4_p98D3RI1nnpx4)b?>_;#2Zgw&v1K>$?)84e47x|_HAGK zf!=7)!i0xhzv?k1e|PkutUG!P2B0|M2PsXE8?ifh&Sk;Mu?Sh3&7hA)tTilmAR@+T z0$7IveNT)|^f+(S06{dWrqezrOXOeknX<8AhA01ORI_8#Wan(;2p%`D`-^)M{qubn zDD>LDbsqkY==e{K!yj{L)@IkeJxP{PN4EfZQxb5VbzSB)Jtot8C)gx5VFp&=QK;=Z z5P2_74pSO$LYw3F9>^;3usn@A>}Wq)jZ8eZ*KUNz?oZKp3v-)z1mQ;bou8j!AhIut zsqYdf_kd331HbCyN_iG*of396Rye9=9S0mK71179}e6o}fFb0zi~ z`?5M;%m!#*X8XYov36MD|63jZi{kK)>BHdBa~C{z{S(__9d=W#wVDlz!cB z5yw+f^Ztp18>=KYYENtX&I;rn*$a7No&Fn7Rg9G;SHB>0_H~NKu})dyxDJ_(MoCE> zoE?>bFW}dC^Z!vD|BK`BH-$ZX10<(HWmRlmJrtvfrxlO$wl+?>4&FN0uPF}=+1!SF zfz~l?M1O|SGzMbV;5#6GPrie^=r>@zQpzO4ELj0?eVy737`PtO9rUeIKO$5+vQ~ zbKniuLB63}wfhc|UoT+z&zJu;>i9e2@TajLJO2pGrnCL?+l(X?-{tldqDpfnW_v02 z+ih>~)n|jHn%^h2_f{ya6my$`s;+$KpYXxCo-FyUJn{rar7Z`}a)X$eH;^5U<$e~~ zjJc*&cB##l$G}HmHDs?eAL2&j%!)=iyS6_l)Ml>mR#;ozvRFH2g-z!2)W}zAK^tec z-%Y#zuE@AI?h1*_+WtcuhBgOOTbpgD#fYI6^b1!vBlGl*Ro^5rCPyRt``vP;{CT7+ zil@QfG_wK`AI=7)F+}vm(~K2x8>Y)^OVzp0$7PVPnq1N zBGI2zWWY)=5(qT3bVZK5L4VWQ{`1u@wX37s5WSHrO6A(q`9n>(V{$K7Y@K{204V}g z@zbl*;;x!oKf^vmkQ}}(^{lA~`K}JDU6E70!_5BsxQ_p{IQ-3s#r#}_1qTRwTOVw( zo_-+Z58*BYuqZconDR|io0{i!BZt#r)09zuHUZXNyLs0ms2KBzl4eamA+Sfj5!kDW z*(p5rh>|*=-<9%FSL9!PX5{=cV0ZU*@Q0b`ls`q}4a-#{f6;cAd^0pkdw+VJ!}T}M zUGLhf&t{DlSD;>BXz3e6l&O7N_{I;{IgM8JtNO9IwJUN7P&T)l3P5#u>+`-V^3ONA zBHz7H+B&S}|0W&(k~sV^hxTzERa!94HC-7d2w*wsf z?mo7=QGQO&-)-KR2C7Tm)d;$K5**5bmC6i11Fw^BHdiEp{(gGzf<7zOnos1eAn}}7 zTdHb*L5u(Aum4Zz_)m|+KN7qYyzw7VL7GpxmD&7#tRB+a?3?7S$ev#EmZVXFXAk&8 z{EDC-yJexsdib+%1XS2CC-Ti*k*nXLzmIEwpMQ(pN8j#xi~68-q$@JwO$Lt>A;b;T zN?nnHK1=h@6|rAG7wM;S<9>ARJMCOX+__rm>&ROJ&nujRD-!(7ruWbl`3ovZBDbjR zY_KabWe+k)!xN+(eCjJXN7|Rk6{SjsPx7RKaz3;ho++jHzl|9wCjwoc%!M?ffRr(XJFYxQ%QRRb{1G3S#I?RIAO?%IEV>{8i?jXjd|w z40Rk%M9I%`e5?4A^Pg(xf86_%YSRCw_xH8lf86>$6_won<8OIQYketrdtX1xH|5nz z>%*N8Je0eVEE6U z|4-@oUlNDEC<&pN+8lcbQBx}TJS*UiLADw+16N1uWAF|efi{!1HuZyMcusvC8R&mr z$#oR9*`%phEdr3GQU_Bp(w|4F6&vPoax{W<-_iOA?zV1kAUP6Vq+-d(sPmM%Q1giaeW2xDD7FWygjXQj4X+&FNy%iM8 zgZe;>^;~Os9#v$nH3~=AgaY{AhuRnVZ1p3;CQgkU1ht(y_B^r#@d`JSo6b!iRo>$2 z@nRb7uRpS{!B3CbyKUj z<61>brj5sSD@U6KBwD>PRL2Rtorp|8o65-`g*%a^ykh`G)J z3t`hq^l;eQz38$co@0^cY>-D=O3l zbJq>{PBcq4Y3MnmF;c+8_IQM|_LSiDBr66;$eyEk`OAz3+nm-);}D*_;TPo&W9S6DNAUlKr%S|$iN?xfxr>fFs}I6kbdx-cV^87+lF~()nDy$F;t4W z$j_rbG*?p7I8x&5F@MF~s5eopRVdn|TDuxeoZpC6c2)xOWP9Ag2%7E zK_&fzp)d)xr`IA!m4BVphlWzv2ee=@R)V z34U%0jho0wj$b{b1vYoNH*hnzw747XZMj(U^Wn{9ZMR9^2TNOW-d?q&L#p#(+A+-jCmr7US{MKrQkJsz3X$9mpo&L*dsbdCb(C89PXN}w}5 z9+_ntlK#RzQLLWPV^OtY+9NGLYvXb`P^D{rtX)2x{oMKw~X zkJ)@0GXuUmF=kx3q33O3ann&#!a?$=c>sR3^f^t<%cRdY)fvik>yj+J)iG0&*6L2} zY@W0vi`s0bZ;mgs=uSP$Z)V35ACtw)ELpi&%Z2g}&5N4yC>v0N8hN{ebdd(xg8iGf zeV4quCy>&6B(eCfX8p<4s!?JEAwQ@6j_;#eU8W<`#?W&fQd6~aC!&U)_j#+dpoua- zE@%)PM}tJ28B&#t@8(R!-8?Ty34Zb73z-1U+y6hW<9|gQ{+CN_u-S-tf6xA98_DN1 zAH~Vy;aoaG?&Lik@W`@=dH)WMlXnA&gDE{n#Bd^aS^4^`56zUfUsM}_Mwj0b77d1; zPQ%J^Gs?%7Kj6B;`THJ=VM=+?c+>PP+4)#WUe0drIgm21`+#X)_m`r1KPO!dTM_C* zsAbycZ=;uKpKGI~v z`o~$_X2F9zlvo||#h00BI-B^pxif4-)j_Mc+4C=ti0oi%;JZ@EsNU&9%>TDBAQ$fI zJp6yB<9}rw{`0dc*tmu}8g3o~UTFnK1G(z(mLT?c#b?q%z#O0p{NrG0( z0!mVY0oL2`umz369`B!nq%C5b8d?wy)-Y3=20l-jxNh##^SS7pFvJpw6 zkVW3mFQ%@M^W~Q%?^_;{%iYk?EgLKU!nMA6739Lvs3B!Du3_QkSo>(f?{zDMG;4_dkxY52tt;}gfv&r)?TNB*rlBM& zsktY8p1EUN5ARO&pe85kgRkn~!fNq{nTuUxoMwqQKkXmPxt+_@$iG!no{{7R^fPVX z_=-l9img$TqC-->T#9jKhB*7{S;jOP$&{{jXXqnljT110kI^)t&ixBOrBo30X%BaoFObevdEmjMRRW3wgmzax`z;fBpRU)@5ye&H^TTCx6@g#KBYIkh~<%9#pIPQx40zK$C z8;L8dU2npUKSxSTvVv;}{f3eK%f`vSc1?7yZ{CRY`;BFd@?;75X*ZTgA5?UA7ulPG0*o7^e@Yj$E--p9?>H*4%H<8c_Kl`mRIAh>*ZzGXACR+U)1q0i^E^% zuQsUc=^RaEvs9&qH|6CI86s|xRsamT4>t;Q=pQ7Nhy2+tFxP0c#( z^+wSLD8nFeJG$0$o8bQu<+i-IeoXnCY_nb5iGBQIYGg5V_?;)8XgI!1+&N|iv+Fc= z{}7FBm22dJ@;25XOFvul!nsVr>S?D{V7v)SWt zKF4v)*REta=5=RPTqTY#H*Vhsq_Z5@BSeoc!}SK5tHzMc_y#gAqzpaj7L0mH;4ib= z0)GsWH9?I$i01_S2ZPe=-B{)KNsFa~otJ5J^5tNtZIP6qwYpgCY}?+GXuh@lpUD2H zMyk=z27fZ}6>)uAkHLayRP^*Xx!N|IxrFED%5;dUj#IyGrGwEu?L z1s$4}v7GK)F=%c>E2hbZ>-1iaLwm?E%Hf#APHHxUe+SdyPsE;3BQFne3&m~JFnd-? zoKOv&CG8gaB58^>oR|VTRv;Q#-N#)KhA$HBVwmjo%}3_C#qtK%)-brg-zlGg49n#C zL+2OE@CLeoU+2mHFYEZ1$Kn6O*qp-HI9i$9G&DL{%f>z+mV$?0{z=R4UEE=(91e0N zX-bLnVb_@evOq#oonHcK(4~56d>egb)wH3+uw-8NMq} z&;H`6X9E_rOoGiKQyQS1ftzvweX2MbgpC(4{O8O6zt{1f9fv>J{l`nhpELc4kFc)t z2|Fov+5_E-sp~LiJliBZL%X`kkgyEIO&bqG-fF`g{|?Yf@p?aC~N7q>EZmawA| z65nWefrJ9=;+cN?qq|+MK%P`LE>9`F3YjL#c>8>;0&~&NB}YeV>%v`oh86yQ(D9ez z@aHDIamG2X$d6Gsn9nqnahn%Q>sv??FU2_Z9J|p+qxw~El_Wr>rt?#9{(xkuwTX3b{nQPwuOoe~<>%F`!Ej(VR?BK&!3crx5B=e2}$$hFK zorS*d%>y6E+|H1lE0bC}j*PAB5W>k^Av8iCT3Kj(^od^1nz_?~%rRrM<0pEVEpwO9 zvzqs2qP9fT25Vpeuv*#6*(PiJgu7}F_`5=!xgtl})XRA{^|GzI(fiBTBZ0 zl9K*ZAnmvEPYO@5P;~HeL=j}*xAYEX?6UNjIHBhub~&CK9<*!xssP80gV^hz;-1Lg zx!8jGWL!-XSCZYrHeIVUP083X%;G<`>-bm3;cvzmy*!Wsd7Cn_b`IuhBWfMsUxPIc zNRf7JVlQFlz)`MtMCj%8zTUS6I+T1ua9v3A{I*HAx4>fiNvQo=CEt6Ul0W~7azpuR zu;FryYH&(8)6_wlMQ%EBzV@u*n7zrx4tOizGceWNeVvf#Ibb>y6p(ui)gO!o%u<7& z_M;p)z{k+~>-zsMRLLiX8(iGwHy|s#JH*_x@##gzNtQJAL}cFW(rwbbzK46OXOH>> zR-{XeJ#HiS6t0@N7Z&t2Md$VXHoABAt$j^rCmtJC^M8kq|C~7d$*$*A#JPgD9%77= z`JRUpLejO$Mcze5(;d^tB!{`=|0%<`okfep0@wt&#A{|BF7Nr&sZ4QBk&?n( z(roG7Aa}_Q>DMiM&uX7$Yc_t=A|B)}yI#p<@DlZNB@0^+`x$O< z4=en4>iAd1;m^%P#YP*m=e2RALXXqRT9AX&%$1zg#{1@$moyBn#W?FYoWXhS^6OgC zjocxMyTF(`uf^_Tmn z;s&hrR#;-7b5lEe)@J0luqnCH8y#YJJXhlqLgR(9Qx&OVXuMI}zOdsKmm0CF>>_hZ z(Wl}rmIv<)_I}uwoGv}@8hv;<<2H$q0oGdX8kfI|n<(_GGqEYxAI-+M7HRgvD&+oiyYh*SIcJC7su+dZgC+(aQiJ~ z!wUabbo}SW;jcz!MrrKU3X`P;O2d>JF@Emucj_we3CVvJ>3Q;7wg>ZfG28p#@*Kwh z!33e_;iSWu-#OA_%?3zp2+;s~S49shuQ*7j|4apW1JlZ_M!tpCEmVOvp2xB8TMwEl zhMsvmt~>>q-WhtVf#f)TyBZ0qGbMg!u9Se|fXeSM!#<4qq&Q3QqGa`ZUp0kA^W~sS zvQYe8bq~#R_LLeq6Qyr-g}!~SeIt2+zA>#2;s~Toa>K5C?#cyB0O#p{Ue)oxIu8G% z7$^3W&Mgs58MVvDOjUxHZPFZYz=^Kxw*$?w7q zoo#IFKSZBDe0wLF03-<;LSj#JCa&py->ULE-Jl0>VO;rBlynS)kSjVz!}rQ4k3GE_ zxjdStNtwF0U(Mh?&AK~MdI}3sty$}=zYXK|>R}N8>4bcG% zo+bB3i!}Q*J;kQdxeFNn^YuS}((%704*!{wA-smy@wh&kK;yiM=IiF>QP7YzHIz%w zN*TT4V)mp-dPuUPazn8;S8oJ1F2n$fP8*^{s) z4t=YX=vyhiU5=g-v}?s0y>PO!sFFwMx_OPsROd zJ9Q4xiYxR~{W&7;=Xa!mpR`5Oc2Eyy?fJ?eJwI&+o^k=d&YSG;o!!=FYoJeaV9 za3eII)W$Di$9!#^z8oyXC=s&tgIU@f47H|6FE$(DLtP3ko`WkTg9Sds;L%mcTDk2M z1uo|>EbJL)sEl;xUAcQLha}gWBwj4EC z4(4h-{PzH98?5N#*8^V#&0CI{Ot?aQF43-JZVv}pfnCb^)V#A+yJI2tuhj3gxSqL# z?kqs9LBmliurJi8wQzurGqwM&y8F103BPkahovM5wz6LVRKrbDMoC~NNIg@4*cqq;ki3m8-E^Dvh5Xk(-~9M8l`OUJ*8ns@L+=g(;E zb;;o01A1f$)?!$36I8;IGTIPtR<4Arz~|5o`B2*h$wq;(DbbF8TLe? zCaEmMulrk+yW-c77!@}(${WXo$D7AWl^vGwmF8rra(Lx`->u`nAP)bE%={S~cKIZq z6Ib4hYycbE+IlL-8;|Oe*LD3O>2C6=MX|=wn-D)u7IrQl^%`3en(7E%_xj&(6-LF$Br@*2dF6RpHtZ$;aKKG`m?vFPTdq(JkCd?am zXUoGbLzpv=K4@k(YWf%jL>N7F(=j%Y>Q3MAeNbslmI67I9gmGIJGG9>KyP36u?csK zTLz7ley7sDCkuCSEjQD>#~6=0T?@0^uKC|W>-1RjW8gi=P;mjj&XfOM*YUqT4uA5R z91|_rGifYwU|O$J`ndvIV47s;d61*;CVbC?9hKJaQ3D5+?GBR4$W{cdphmN~=&9&kYg|n@` z?-BTOzO(WXMX>QWBidXzW3a8p8KdnTv^3dxoH5&6IAgJ`#+d}$J7}3`<8da*=BnR^ z>mzKdaW2{Rh?3&4!k2UmXzek@pyh_pa!u6}oj$FgwqLy(*`&NwUjx*?!29RU+0GeW zPyHmEUx({k@!6Mu4T6Kj8}o?JVSy9J#55t{A@Dbg>(E?dje)F zp>(C9&(@1n>vS%>)hNRsWJfRYie+joG^}dm1(n-jz~>fd^o;m?S`~Jf@QJ8R`xt3N zkHAywEUh2wbV%>&A6&-*pGO|ldZ|!#z7UO4Yu(FORAk8ttq*o7ph3zsWS07aR;d@Z zi3BOdk=ARS$%KKk0HZi&221i-sy&tcTZ&4DIVJkuZvNzyjXXq z?xrz}V!fX%{oytTu)nmI`mjk9zlj<$hL`TtcW5^cMUDLlEk(rSsF59r{zJSuo=*5_ zep!glrhZw$5`S77XCqw{o4nZXKanvFm4UdQ`MH^XrM$rfJ5wjlk=Ih8|AVmAWX7-E z>#~)b_fw|uVm$pGb?Kec%9q}DEJ)hp%W$SvwO&d8i&TC^dCfR6oWi9m+{MER|2K5} z7slbgNpY|ZuGOfmo#j0nh@oWwb}1(7MG1%5MQ>`>v|^yZR;C@9wXo)*03-KZF0z^V<4vKz^y(-Bov53$p^&;+k>XW$2yJ{dl_P9w&Oa>lyT7 z#BVsI{RWZ__i0tyi!}P+HEMh(Y~^j`(MYOVbEmz$A+J$!*g#9%p`aPwU}EUoy&R$i z#Lzc;SuW)cKiff>KrZQ}_|(rMXWOtlEi*|?pfGqjz`M{^)aM^o__yi!-xP=cwy=eX z1!s>;ExI^RUH@8 zq;N$MWC~%nteg2Z_y<5r9ai|ispG#W4u3ahV{9g`hOaFvj0CJ%l$QgmW%+94To>vw zg7dbaieh40W;Wl&IZk0_Q^rL>TIAy{Ta$_V6KRyUp(4~qSH$0tg{$D`$kaJ5p&To3 zz}k-M)foSIk>H0de7PWP!dVTG?A~BCYR8&BO_Vdei8B0yJ@`Je+Cv#T)-=Ove8R+@ zM-+*%$Q+m#f(0sXpTZ_|oSOHjtz$4q*+pWln7wf*Hvye>AhQ)kw8)ZxJfUss2&_vZ z!U9&Fy;ymcK_l4{3H1&u{P*biFOI_>(N=8&GH4OU{UgT3Kz3W~*|?oTu^RbQt;AKm zTHZP>^Mcbtkvq&r89e@$Ls56gx}4h+`LNg1R00{)*3aBG1%s)fBs!D|pMi^lhD5;Wc=r2GTc# z%D#v+?BT*Tfhz^YO@%yn@dj5fsA!|+1!fc)@VQZ$4397o$CDkD392V@f3L1xFl%xP zWeJT&?id(>J*|DEqi9&+|CWyb&2jjrB4bLCR}3c^jWY_N@#XA%E!Icpe=Q`x4+adHH~6~)*1Qqnk=%$d zhq?AGY>L))4mp|lLX-cVHfK{!Q)kxcpc9c=eL-v9k{r%Kx??NoTu@G`R zR-h5M2fkrKNgPA^(>sV;RUUNH_Yjy~s7x!M;x>jyg zICebp_d(i6%<>o2f7DjEqNm>7&D*yszjN$dv3!Mo{Ia8GMd5wJ3je)2{Sf6bynZjUzkSMNvm|fwrr$mP?oD?G?k10X z#my$HlebGV>k;dN?2JmI3EoJ%f#PmO@EngU1CsN1vv7fB;_jh5QRgxg9j{&P<7OUT z63a-12p>rnboUVr{1ES+W7S%C??sXGiouyx9l28N&+y4junn zX8lBLV`A-VMQx=v=X&m(W* zd0u>@nO`@Ecu|F4ZUv_)hb>!gaU8v~(8@s*bkaQT%EnzUXnf(MpV#iYad24S->Kv8 ziNilvGB(i21c4^WX0DUDOvwE_vH|1d@d?@}l@G4<8XIU-a~Vl=pGW@O?ro2N6CbJH zTtB|a)y?IBC)jRUk+niU=53o-92q(mZCUp%zVEFTSGQodAs*ZaUehpOlnPL1Ue^Fo zPRLr&!N-H8ZR50aZ7Ri&j2jFGlYyHJxVZ;O19{4yto@??f#f{!cW3|)543|D)ifZl zfMXl}ijL#>YjjL%u&b+JDFGWa#f=oVyqQUu7Hj%&@|r(%o>3Es4Xw zQ3j{AO=|$Jbrdy3BJIfkNRd^aNA^QrCW>&LG&+eQc#N1lL=k%ibc$ekL=V*B^T;)@ z)yT}-uC$UTi0fn?GvpTHtgo(_mg9Pd-|n|Q)TSA_C}-?Z-r-uFA-a_aBkE4Kvn z8>wDSpeN;=lF!1^v_$DDXBQ{%9^x1qcN&J2_$xVD;e4-yH$)u4s5XnvdKLa}sQ53? z;J*uAe^1FrJH7&UHM3)FU^g=_KPCShDK`vu8s$^%;U4^ky<~3}=C6Jas%~;+R;0O& zsb`X327h2|hh^R@5k4Wwlkh3|Pxw#1z7Pd=Z&rOJqHjdJW~y5wt=k@rRUo6q72v=x zL|Wd*Sv1a~aW)LcSR7MujK?v}GGo<-K)QwBCSW!?zk>~T*bJCm^keK%a2=R4e9&gV z>@~J&P*=`@Hr=*UvbTfg9elO5y4Gr{8+25kIq=wyi_=RIj#gFgyx6+hbZ}qwmZm7Q zhMv21TmRdy;$Nh}zh+1Fr8{$#hxW)9KKg?r1*&9^<5351Ft}{zF@$YhMk^f>l}%-n!v`K*fKd27g-nAz#hp zb8Blg2OrKf8e=Blzo(5xT-oz%brozTE*zq~iZ<@*Gzsg!jC4G)0-Vp)ZqH-p&lM{3 z{&{Vmf{!3MPpl39A>}au`{gY<%*%;S8`frUPIHRz#LAD)s(W__JP(P`3Jmh0>(D*G z{C*3bD=P71$TLyAC}5mF927!jI$F6@gVXAq2C0y){Fg?m9t?kX{m(a5{EIdC(?~s%jl}rg7p>dl8mWx3 z@3&qFA6!A%gVk44>R0H~pJ=6ZJ$=(a$aH?!3XOe?{DEw`_mn(q4~@EkdVa~)X|6{>@ z7b;DN(2G?c@;Pe4_pA?2HS{?`=+6F%4VwydtzR({#eJYWL=#O>Wda-Bw4xbf^T`FR z%$1u=o(Ccz9g=KkOU3_I4gS#9u$+?PRFB+kVHz#?0gco$ z?VXB0?>55dQ$$oDjB&x9a~7_%*YcF%1!- zLHq=^+A=FHQ!-+wI$BKzJLo0xJBR*Fx_S*_GZ{oErewbrj#C$B+0`JhEO z_ZA=7#6`1OHsUbZd893X=knM?Y_oCFR`@Srsiap}gPyGCZr%F-w^jUa)8NnSiskRj zQ}WVRH(@5QDZut^PwtaAEW>zgZ&PGEJT2>nVO40ziJ5+5%*Q*HCr1YiraO|~-7z0N z^r8dYK6nE$akaWDpnucCZN4V=(hm50gG~P|NQ)(=+7+8^vb-@s(%nlWr`<&sx`J(i zi*TR&75iCqPVQH10vi=j+A+x-O?%&k_tE8KJ2vxvXrDYCm~KB2$lmyLAa@Hi%FxoW z8o7>AZ+Kx#x&?sxl~xKoHsJq zH%=ECJ_wk4*ZS`}D*loNe?4@+uZPdQ3iqp!#*XlsE+b5?2PU+NGEG56?OjD%grc3B z08c)~tGH3=$GC}`rpewnVXxil8yLz>LhcjDMVwdU>c(O{SqC2Q5m@szOu$GG$&3o! zfxvRu@xX`In;wiiw6Y+4;LDNv`Hd{fa}ytNm~Y-!wDV$R3F35$x{!>TW~BFRCn-e~ z<1l7rwFtKDE~Di!7nj2Og8>7^3i3(A9y6q!k_Wc1RGJ+|VT4)TV!*66!$#iDF;@9t zQPhxV5&S*3_5Xza*SjkI4h{av?$fgO)qmaRo|bRl^RG+%bpQQRa{f^KUW)5k6_z-P zw~OxZ%B{1$@OGV)x}X~J+64>3xt=rJuTIPNc9LD+w!F`L=B%Ln3E~hy2INR|U4pM~ zmX=mXnn}oM$}%uSB*wa=Uw}qnK4iT?`3y8#<}p=X!P45~LG_Zu=sMlI=Kt@h_}{L< ze}1Rgc1gA(R-3bqbgyDTt5<^D*nuA1*n!?OL}n-Iy%$U`OmVEM;YM9?Y`rwNTEJZK zN$dDS=3}aK0PE`wq9akE^sXRx@=rA*-0JG@B{`viIKGm=eelwq;$W#X?|Y+_@cPCl zI$o@KL89x40s4;4&iB!8q!nTvQjsh%|0}OL6-@)yv={!ogYwUVmCC3wH5nY>%(Yg* z3l31j-+%3;DDph?0f}eaYoVH%kC^~>RrXiV_RCO5n9Z1{8oY|ddJpaZx{d$utN1U{ z;GgIwj`_4a?p32Aen1$6POT*^h(kSY4vNvbNdTa8*D*PXGFxtT23osV) zKUN4G#LgZJfA{&{-&Fh;Yw*|mSL>fIh0NDKzTN05TCuehF*y|4+}G*HSh*S;8xyf! zzk+6SJZMNdHT}J;shW#OH3O5j&PrEfMMP?jTWES5b{(DY8>(ttWYr5z4{;Z9e+&G9 z$Y_y`G9rh%g7SD}-cStc+}*)oE+ScS#WXv6Hd|e#1$E0KOk%!NJ$m zHH7{)mIgWf1R;gK@10Ho@p}d3=_@-UoHj)Q1gXOkOI?}EIGLp<*`Bb@4j5;~dZ#YA z%>A%cC}!T=VwU2c9gP@L(~4yu8!daDLln9Gwl6W}^(y@TuHwH`gFhmtUnbbn zT#FF-c~c(7UVEbyjWK^y-Z{r$9BF+AIv*H=w;+l_iY-52iV4bZLQ_oD+4-!2Eiu*E z;WN~Dt>7}kU&xW*XczoN0}&DS;qW6=&z6v%zKX6gIq)7I4N1_ZJZ;GfkOT|kPs?*( zBV93g{=!O-uF1%Rl%cQ=POQ}VQ#zlm$*UBu(pBatUL1(SAgwUpUg||KyMruo0p>EB zT(r8Y^M8dHVx{`hFuY zW9CC19sCTQmVe%CZKo;T6}EmZsjg;CY?Kd zX6aQQ>Y8hNpu$3aZHk2dzIt!C z2CV3qT208F!W{iOPmYvg8|>JWcNWxy2DM~%-6-j#Bs-INf2;~hKG-Pl*MfhX>)%1U$sC7;rtk3V*MP{~a3q2X>5+w$?l=aW*sP^C0Mh^*F?8DZ9PV zl_YJw`0TPM*RvO&EoHF2+6Ha#y1=^ZXRKKbDYm-6itMdOrP-{mgMr+sF|Ow>K3m=& zUIfni2HCcw-1fi<@c}D$^hs;vu_sY7$@YxZBGJ9hy5)hSecz4D7U6Z4&gx zu4_|m{z&R~Fu*oGyq)GFEZusE4*t556C+O+N=DS?%%D54&N4WO&*YCXu}|;n{|~D8mum3G z2>Or_?O-@GuIv&;asYj{=$nkuFP>vj^Kj*n_IsxN>>yo>RcM!(h3srf(v*^R^thLrO0gNNB9qer;Pd5=Ls}hCc0)eJ5krz#cF4p zJQ-_BGOSWLo540JRYbov0CGNYnYbry#Y?V4iUFG@q;a)H>sakyrL=XYB~co0+nvV` zH6Bl0S8Jsxp=ryw^oWztA@9LkH~G(D75{P#{^xxCnu78AL-Vc2ccd*dgE#iq$ECIS zSi0hmd1j^U-t8v%02_e5Gq!U#`pzordfSR)0OLhe?$#YQ0_ljMF`v+SMqd~us=-B{mNdYB#ze|P!M5f%Ss8vH*}=)8rfX>lWR&a1h@T5DSBj{VX4 zxMzni{>iw_SHg}5Geh$i-WPprBa-M3tc_{&IVGtG$JTIat4$lG18*MvN{QC=GmY>Ai=lFa^i3+Z*h zdxW6IB#OoL@_+?bg{A;xds*2!|CCoL5)tA*r_OP$M|+Nza-|7~8_gqbbdH_kMw<{d zx*ulzR=ey=vJIBb`iRT)hvmUPqt$9igeUYW{6A9hzf*%h+51ty`$O93RN8c18*}Eu zRPbY!h`TuwEuRf6>ks>`{;7zy3#p8`Y>WGYGmO1d{UZ9=Y}Aa?ojh6~^(-SAsAq{w z%Pb?kQg9n-DE(Z^p0uMOxiqFq_2XY?)lrmuKKd&h4gI}u3j)o+a1 zc_i?)Wj(l$l`hgV+|y1Y0M*3HFh}Y8Ns%3gnKDcHxdP3!+au=f)7qQ|?oXDLmdgzm7k;%6b&jX=|DomC8t##2 zCH4q!>zCRW5`;$ibbzGCRH|3ue^kZ4LW6&pO0`{7VyUp1MxPHGDuqf;cv|WYsz2W$ zxpHowPq;e=Lw-m2-<}M_OzW(=W0RpS?5rmbQL4@76Ag#D=7fpx8+z6kQMXR&S3SF$ zJra`=o7yOU)S~JWMbxcFKRy`wQ7O^Le=n5ZC}%dTtErJ#8pek`LAj*?(Z8`@#C`#L z6ZY@0e}nxT_A}Uh4bHj;rHR!8lvM!3QH(fgeUvY1lo#xonrUvB3M;S`mMy4fK{>kp z#oi_VIi}*jT!TMLqc!z!d}y&#s9!`+Y+#vJc1*M!S$zgKG)$h`o4{b z7z&MHNDD8*UvOO7NAT=sfxM5RzcqWE^;<5kbvDY&_Rv^Es|o{bn{fYG^c-1OOTLI$ z-?SQ~jv+P|xV=j9;4UCS1^SoP^F9U}R(hh&KPI5A|Lc_XeK!B-E~=`FjWDY{3~6oIAmuZf!Q0;EJ4wr8yY?~@O$gAM8v_YYni?Xtk?)IvI8 zb-JgvN>R3GcnI5+xApGR@Dp%+$JS-3uEEeep!En-9y|}&AFd?XAMG?Qh4q5{brI6l z6*cf(n_!D|ap?&sSHcpY2gBc;|39wczfyz$@B+cp_vqG(;v7D+`RFT%*r$ViMHDC6 zI^@ecPr9L(#cwS(BM!5_p1=63oFFtmgv@{ZsALM-@EOm_YTR#8?;il_et$+!i$|G{ zG2`c7yh~ym`=Q_2ou?bhee!Jahd$ET>X17j&D#NevhQ_`eoBKVBDF)F+8{#{?7C#G z>1zFLLx1Ulf05)=wEdtwCNK|tq-s$HO_Rqz2=I195(VdS!4oyarZytQk&R z!2&UpIY@jq1eMjhHR1}fmAmjs1b<|5#rxUEBl;ZS#`77cypt<iqUqifI1fs<#S88zuWBrzphBNsi z9AsPM;+v8UUr5Ity{i46Q1QQ8gZ~QmpR8LkYi`7>IaYeVFbVo~TcsIFe@ebPjyL>C znMa?te+&B=8k@;NZvcGyHp^BV;ezZ*xdgD=N=dQFRZ^3E%CNsYE4m1se7e+ z#G2wYDddMIx>L?>n~t?RWfY&bU;2b;O!8$9$R|;HSI+P#rWp z6$cK##4m6{QzGURUk1MfXVEB+Y~^6>S0&|O^+IS$W>wZ`Z<^xWY}Gt;s2S6|8F$-_p|ktzV>Zh$1=b3j+7>b*420CedVJb0F=%%Kz9qXFOiW& z=9UwI;gtgw^zVbrM#T6K4P6?Py}vThXUo1oLgkzGeUSa%Uud<>QhMZnw3A+7qr5Tj zm2ZpvDnt?7mIv!@)PhF&zQ9Reic;!*#lH8L=K}Z$TD^yK*Kh1Bs^Kw~V@$6jIW^^V zcBCP%u_i~!&!V`2f&hJ#{ev9kseRXkQNmU#^GsHfd~& zHiIJ5(Y??i=R*>NQP#_06~A5nODnf&lUw%!cyDh!a`w?*AREr|%qR|0ypr=-&7aP{Q=Km*E z{3|v1e~+Zlh2%NKM?x6MSwPYgLNZCgtWo|8)?1EZMnJxH2&twHWvusb3SL>Z?FwFp zL%8Mu*Uvof`$(JM`QW=4y`zP<)V8QMKpsQwx^GvzPFt0N86>Uv8XIV3x2iI_Vz5gG z{S#`(*FquyqYvEHN*oxTOCRke62TZ0{ z;MpMtnmRghDE4>IG*FBDB<{~Gm;avfT98Y0%)H^37_f6VYtLE{U3KF6hU+c2YP=f=iD zf0z^Y;;X0FxZdUe|Fnw#JsSK|ZBHn4%m5u})}+$$in@0t@c8-3w&)6zt=2sQb2)=W zH)hb$H=A_2M?pKxp%wgY9Ml0h8r^HDH;v(%I4%NZOrbLH6rTGn+Pgvc#wRP!6oD#P zZT-HTxmXRJ%5-DnfQT-Hi279ZoBjb`6yJZ7GIr~Aq5h(^jd+7+)=>`--A+17#04%; z^jESlE)e!bkp1&3j$>}YrNm$kFsJ=qx41$;eLpSV1)a0$=n;BV`)^e7uhQTzq#7+9 zavdm5D{H6aHycO}PwkfQf5B?9MIT*~^fVA3V$*MaWydI`#XizT`qRKwPd$ZTGeO3t z_yvT`onT>-^%Bo>(8V#}*|($j|IQ2PUo|s-?Io@+qm{E%!aI|{?nCMR?M6tP_Q3nM zV5x^USduh<6ueS;C7@@~6`Pfs7h%z-xUBsT)eL?H-;rW_UwG<95MAS{jbke{MTym?;k(ZGec^0 z)xu`igAL2%z}4pmEQ$HG@-h6G%e)DaPcls3(rpr68`LKdH@Nd!}YY zK)0UG`n5e<^NeIcfBr@5;WI)SMIykQA`fw=Ud5`8h2|F&NxT&!Jw*l1a8u-nMtNR` z*^Rirmx84aTO+(FYl@^)n%}_+oV1ot*UU&JJEgQWzJpE5_fESr(|zr4h}{TJ@%5w$~avw;VTdKq;6Ip%EP>(KOVD5`!! z;R}owmNBfgDsT+eJE_%NZ4B{ivu0sb1-D=_)V>l(7C$&6+)D4*5McHX0x_NqfuVN9 zl1EIjO?kp3X8yZZdGGzGJu@HLzQ&gL^g!EqXrm)qU`jlF(aglWz7>X1k)DK6Lp*B! zblj_4dkEGfCWIQ=5rGK9Y{cY>t=9NsZ1g!V8+*n>Yf;l}>N60>2G+kQE&6;3@M91O zUSM)7JPB>-RsH{$D*pFr@E_K??gGm^=-D06Z6DUU{t_GeH_uM%dqcg|b|?d|Pa&Yb#p;U!%y_fll7?xh&uJ!uOe6p46Eq%rcc=cxhU~rti|)nf+6{rrEon6|kKnry zv!qCh#LRS4p2ZypOJM42o^EC4UWLC;#s7W{{wF;tHPmOqHUfTB)mB((OZ;7m+f+f3 zly&Bzo-%0y@W=-3)}5plH`6afag*UKXj;>uoo%fbP(vbF?cC(|ZNIPye`cHKAR6I+{Q`UrSv+wO*3c$SxH7|Xm0I+;K7jF(tOj(6fJA#*xb`o%dq z^bhb6l}{@O9rCrUrkyk&q+Vk~AO^W{$i1d@w+qPgkxK4xh@#8x|U`5)z)TTi-S zi5|%|bCdCzf$q9*5Ln2ps%F?t?`*;YFC(Pwe0p~p>4#YZTyAW ze&pvq@~TH|2yJWG2WO(MFO$%+@+Y93Q=Ne2hF9&4Ayvs6XtS=27zK-+GqF!T9k5uy zXW1;?H&#UL;ddIE;&cZQE#f2a-rE%$9cXU0Fs#V4N|p+b025gn^oX!BbQRX5FUlE# z?a(+EZO!s|to=r_xRX1QXM_Jg;hTeqWyAp}G7E4C#jyKa&6KnIDPGL=4il^zX1Now zX7P4loRo(7DXk4djwA-^`=Orog@qtp?N#`nQSqgX4K|7F0nfL!$WI2xl2qui zBwHM0vfJ~>lOWCKN!zy)&$!-uTK*M$KQi+i&ss@vB~M{#!)!P2VVN^LY}{p@oszyO zSvTMHr1fg=IY*PkMo;ptv+l(D#09KRoGa8Tv%E(GIhfOBC_RiTxKrxqrj@_@T5j7J z{`PEqI};O5zKr^lQZuUNVOXhfBR_Yr(eHYar@RFpBmv)_@1ZC3D*Vr?_^;F858N<6 zd&2`xYt1@q8Z;)G?eF@Mp)t7!bEwtqJpT7*-=R-XIeY_Fe>OrNnDAyh*GkQ$SeRtBk*!ShKVIbZKezIv|hMVpUS8NmAm zf4K(jmFDbkw?#l-gyKjPs8UQ2uuCEc2)7ZT>@h zrBCTQ90phNHJ1g1m(ptHOpEry@6W#Z&=E-iA9zyvj_LT0D^N$zJ9Mt(t0qAL+^g_E zr{cd}gZ~-dji5B==L7FTA{z??rni~gTsqC~$*)t(5$M%G&fh5?3%(I?{xBQUgdVvQ zmXuWy`z~bbBaa~J8`cVf7&$n!dBoMmnvO1|g?Ndnq}iEhz$jw;RX~`r3YwVJ5#ov~ zF}_S`&vw}Y!UJ^HC|lqwvP1qu@K4sWN`#L&LkH#RaKF(7~?^4;@~!d$ybGJb2g;MV<_&;YIFb*!p9J)0sCP`o~82|LTM#GjsW~jEXm6 z(hTWU_h7Mpavh!+WiyS6^6FDaGjvbT=o-8t)6I)t`-~!KX@BKo7<0I^_1VXBX#Iw~cO+$N zy>~eCoON%&3(x>qfDCw1g8ZmmzN{nPMG*`oq;KjFT@H*??T8Vah!rM*SuqY#%!;hK zXm}B%_pZi!X+5D=;s1?_{{{{IhvCb=3Z5IP^(iY5|3Um*-qLv>u!~vTbS~h0lX6bw zSmqa=PikN*remW{dY)aO8>Krof93IrPmXZnF(0*0Xk@_li@1d-8?{qvahtI6LUtu& zbKNX&s8=<4g^OQ1)w~vY4x&lq3?)B*5f()D7)CMMlATr7K2F4ve^-aWc@cdptTu7=Q2aK2VPuayG|>txC86oJJsJM)`kxpH89ZKZ)ZpJJ4~4C?Q4~)e4t#E68K*s_)Du3U z9#QL|iNY&fE&MR?x<^;3C&o63M*7k| z%9ldYTp9Bcd5xm_`fGgaDKFI)1Lg!LO{UbCZG}7Ap>Kj2LJ!`$>3_rX72*G|2LCY5 zu}!AP?~w-mHpaX}v?uyq1Ny!0HKkq)B>sxg;-2a&0=xDvg{7|0p|?zFpa zTglmeZ=LDa>Ga#o4a0C{O1lyLjA2_3hQE9JKd<8dhz9?5`3j;oW4}dj$?IPG#`BO71bAsMd~bi~+Bam5zQ0#%g6eiB$T00luZ%t+F86!K5LrondWeUpq zucg7#Bofl%epo}ME1xS@8s+o#QOZ*u$5%IbX!Q>($k1C;M-AdiSsmts@HqQkcs}tn z{;Vzre8%5jYwA__Ur_O{)!-kFz!hyxz^smmw*-VXXB`i0SUTFSo%k}c#e^N^ES8~a z&=K#>`GalgrF8Yj`gIp7GTqS_7gXFHMr~W30d(q0LFmoh5BYjgIGy>b@{I>YfhNA~C zYq-{Cgk+;#p53P2b3=y(Zx1}wHMcROteBw8Z6>sZ=Qa~;9OgEo+IkiK%_{znYVap| z5dDWJ^iRV0xXa{ryesWj5%YG`?L<>PGA25Uo=>xDjvr;uWlpw23ZVssY%a zlxMcn$Z=DUjo9ro*!}`3;=PbDz;6fYrUAybRRM zM+>BM3DU27Rcmes(tEsHRy4}P+a%bEk;FjNqxxLdw^9wtR`hs(k3OCvvXGw7MreCB z$`YixgrFom>{BuLK#~4m^r$n3-?px?MPep*P3vUE7du)h{CpWwI^?@y_m}9hVC|>8 zr403pzG)HgGuwWLx+Dk=A3vlFx*&13M8qEr$^+Z{if;esvL&E;3EPAx7}1N+45g^m z;AA6?&^Y(_MAT_|!*%VXgWjv~zog>-xCZ}bIkyEilaP;bDT$!*1+4ph;*D3*-ynV1 z`!VP(v2QRtG}vg?y#+qEcf0gMjLN8++4k1X2+)6I8#Hdg6Z{taFyE?<$RD&y82hOo zh-;6)omIFq(bXuoz(!*`^ma_jwO3m)3pbzhQn_7t;~7|!5(gmKa@;|AEo}Um`5%xu zV}&Pp9PReQ_KT=Xmz4S7L(*jQCTXrch&;QG-TFmtGUIX;64NX@8@AWN@1*#Dd^s&H$@ZL!{#CVAQ z&g6Fa?v^kT6)k3r3y;Cy$Y+QO`)J^dB@O)e{D`%IGa`Q^N|{NnXhWnp~zj*#v08>sj20^EbQZu7r@ivK1J{<>1)(^yKoJdx&c zXdCBS$kS`QlKvX$&%9&>Y=q=(3;4c9nFXJ_c-ARE$Ib-4JY^5jAJJZ*-^a|id%`34 zhq$u{EqNC+x;~d5XbF!OO9C`rm|@XvRJ8Qqh2yn2Wo-XTiHMe}D=$C##?Bn9^~@++v~twlwcrE$*`nclLXUoDa|?|}H?7RyX@$3to62I9XKidT z@1%E&i1aflKq=xHO{qzc`|VQBjgTUlaMpw2?>_%)QSpC5ga2-Y8amb6dP*WF^5@-p ztlPYGj6CGL=}T3p>a71v?u%I)N%jYz?K~LBa+7QT<3IfT?5|1AIk3iAzrSWs&g*Mv zbw+R72-$F=tv~pJ{zCG}NvZq`Tk?dV@^RHV=qjam@p~!mc&ogngKd)BPr11lQ*1v2 zS6&cEbY;ULs9kmhz{g>1io#sI4H0NDPI!*^IK`^yo!~szq|rLh=kkfb`@U4@6vp7| zrv=z>vJ#CJPQg><)Z4F>BBcxRYxs6Z0uY0UW~qX$Xn8;UI-NJo-mCC$Rq=mPgTEQR zmat|6-wpx!P;1e0(N4G*-67b%_C2y=jh(ZTXV6Tj`zaNmNT)>JBG9oqR8HBBKhO7QBl|PgZ9q^~p`NKY`!X ztMG4A@!zb$|DNjENxbczN+uaW5kimXGdqdPeX?>8;SDca$rWU=eHO?Nb~vxr;rz66 zu9GSyQxfV&^&8a(lX#pZCeisCthz%6lgB%((tK&Q)USL$B0p9kJys@r!)4{fmh_Nvu_t)DA<1@kXKY`C<$;2rX=#=ExO z1@i=XsyiV6)y-FM;7Q_j&{!NwE7RFl_!k^yILc*2c&iXiCi}uZ=FB54a`lU-7bA~0 z&GM3Vi@R6h->%~Slm>r;I~}ti;sKiFS6~%qtdr&905iwHBYPC1Rktnhl^&J?%}NeO z(^EZiCAl{Se#4sO-@q0mp0B!HF4R=v&=zq2!^MbbT8q3}2k!-zRXMXRRhL&SBxHTgb%wF7#2# znBDUw{@m-_40xD9{UTpb7Qe3&kpT}kKpXJ)f-T1!_ z75}F-_*)32xYwGv_&(k%7P1i!glKAW$B3+r%RO)=E^U!CCotXu&1qYpp85B&`ynd? zjV~|p-(~m`_CJ-w*`pLAMzH{Ln0CFtBY8MaeNBpKuL+1S{}|W@U6N<)Her;R>&`)s za42B9EZR=JfqEwBt=Uo8*6jTOAw8VS#Qgzdf3*aqW0dqw(!qdm*^KNr@SjTZj(L)$ zZk~$`Ut{g-HA+uQbKM)P^Pn@h3C}m$Z^yeWuwVJkx4|kxzwIge1)m-s4B41w?^UiI z41ah2uT#bUcN+XRNjFJR_8aXq1AoGP7MxRm!~!ov4A08B#*AB+7B5|}v}ozfv;EU& zp5=>j&JHNjH?N*H^Qs+cvZ=3u#Mb=N>-3Iv+JeP`J$T~Mk8k22R66u}|b{v3)F>$U3 z;6a*u(E+XH6KB|}Y+FR{lK%%){C}^(Ux>3$6TCz{MV4Ci>wsnBGg7K_06rY=f0PccDA)#fEQVK)dHNTCBwvm71+HglIJ=Y9=d9yM~#p@4;>@o1iP-c*d{@Bu%k!Q|r1Lp;j$ zoI`=c;n)-2<@+AdA&v|;D$ct0Mhq@vw;$1(hSj`6I#Ja{* zyuz-`iE*V?B&wjECI8`6{GZX_Z!e{` z5T*v58F6N;yCna;l_G;(lwW?0sQbf~XQ{hRij}rnf7`I{44cDJK2Q24@j*(@y3QVJ ze-d%SM1>c(D82U#%*vj$#zOwN2Tm1lSt0 zbd;R^+&P_)lzW{$%C4?X!p7WR8BhMbO=-*@&k}PXZNS%Zhz9ais}cV{Zmn9$XGVFA zs2yj5wC)RzC5L{=CE2$J9)mNRJjVL_MXVn;+=u@?xcPS<|8*+<&uZ{L)o?GU@L9uJ z{6F4Mh5ttz?!o^f4QufKV8bQ((>+uhUTR&l#)#R$CHW7n;L(2&zwsV$5ISj;yK-eX zUL*8<#Q-!yFUjK&iQ|$yxbcQ5=$=OTJoqmNaKejTgaq3SK8Kd4akommC+*LyPj-SOvD{I_cG zNBh}DbN-u_4_O|S!#VDgsLkk`qoux}Z$d*_&eoi0`$Q=NF*_15ON&C;LCaNr3f?hT z8e~muxCgrUeO*=3aVZgF|6oU(k9YKOfu}?-OPmF*`v!6h#N(xN%?u+sXDo9NH^8t4 z6R4W#;Lp9On-jQ<^;zx-82A0wrE~O^jPMKB&l=-d+q^GT*Ss(7(?H@zUGw${?|?68 z^m3P-fXt6Pzt9>W8-5OcB{@9LS-;HzFEHm0u%NsR^1@4AZjztYie`EOrY+N?d*T0) zjXdYrW6e5BykSqS0NuuaLB;<$4gPtyMbf5e`~1&TIwg$m{^u(vIjU|ye8$8jCQd!q zc*g;x-sPvB&7Ycm-Zv3zJBd@97`Of6iq&^CF&^HQgnj<|DrYvYK!lhh^1M#?ZP)cp z!t8Kj(K!yQ@Ur}QkPR1YdRo_i=p`Wib|eQ6071lVq_z1btSyPri-4Z-C{yx(q2zzz z<*sUjW*07hJF&5&R)EIz71nd3OhF)HRIh*Zqfmtt}SAEufkui;{Ut` z|6@Mz_3J?)3x94#^gQ5lp>w*6j^{c*2?*IdEG?%hwtyvW%01eN-ZKJ`)g#YJi=>}V z`^QluZ0~ROapHOKku358W{{kY@UQgEY~BPpAqPA~w-d2hg0eZd+&9H`7kL{-6uC)= z;0q3HmSD@4;K#X>tP1Utx~|l(!BjshAWSjUB|Ai1JsV{H`R!ECwzTPZT^l!kUv&1_ zsoC#FQw@cmXZZbs=O3&|$?zL(f{c$jXyyOqR@E~sFo$nwg9G{gE9g1PwzTOd=zEv` zk3q%%4;uWrl;hDkXQ$@88~xT9)A+E~mhZKZ8G>hYMm%(MNN*>n8Wg)@XB(XAx0&Dp zc1DiLK1b=_`Q`m^%(r8$<@{~@CTrBE*_T$#*<>}Ih)>IA+uJVqFSG31;mlizv4F+{ z=17M1ji&+8L|yx(#Oi$)jBLxr$})9E_hZhY6E;Obxj7h6dU;$WN#gxgAqidptNYLn zR&-R)1@8|@uIM)evOkp*_L_E)?b^OGe6DG4i+meAOZ#V1|6dL3kqqV*t8x{N~B7wIM1ehI({!(rxEBjx%F4 z(D{$UdYiimdj9#4^BDp^e&$DHBM^Smz2P^t$SYbAp@A`fYpWXNBSDGsAqmF< zd`>_6=RUeWGj!go@Q+mSe?fzPru`gNTLnbc)k(DxyeC(RbU~^Hk8UQc3u6vG5vcO} z$Tvfi2}c3AM?jyNK@t3ClRfD7YE24bvmz;I`Vg0>1La+@u ze4nIK{OcVKR=Pe4REoE|9<>hkrb-_L)|xiBAF#fKJkI-8V68|o1RAA&klYM~>`=!y z+OcxWob?Y_M`2|KCGx-V^@m5|6N=A?P+jR7DOlQ;CX<0r5wf`2p!_sEJEBjo#rfn}G`m$7#P3kx$>YIhLwJIEJ5aZT%chT+9&}V{g zNySst@SucR_h#phdnHxI^z>`saeMIAZTyc{@&B_1{{VdcU?lBVZAG8yDROO+n9H8^ zY?D2LVt5q5@>loi2x*r!(px0Gd4}Z-u@~C|^+ggK@_8MI$j>wEx z?1G01aZzz`ap|AHQ{ZMP)1^xjPf~iYw0=+Cp0tXIJGJ*%lzS$c$C<~C8<(Zt!!pl$ zxHP?b*X=B`(PK*cBoHIM2R)ECE=(IAozsKi?>_#URQ$JV@GrVBd%}C5$XaN~)P%SI z?y@LIgDg|=ZD$%%eT}7}Kx!ju& zn1hj9$47b7oadzdpmFEl>aln^O2B|z$b7d+XFuDn)>7%I2ZFW%+rRrvQ&@pozPPe}9E@zAJb!?_Wh z+h1=AL`=yJ#9T)$(U`fVDIp^Er~#`f{hHUWHhS^{2~#p%`2o|-nf6=k*=O{*VGYhu zYwptWBz<>I)36qT{XlENak zhe>e>+aMBPWBY;}Sz#Obu)uCc`5|Q3itVycx#Cc{;@_#?`R<(pD@VDgsd`p^g`VAv zy(e$o@CU64|D7PyMeNz;=U=hJG4ZL}m^fvio{hUw&vt<(8?k30zZv-xkZ%IL4utY2 zA)iT19EJRW$fwPZYuU)3i~Qlp?>9xy9_Y)&>Bu)D|I=SHaVYYIQ2Bi1kEZ8fOGG}q zT7Ax80`N_!N zu$YNoBcJkUdk*U*xd_FtDj)1mfR^jxZ^8NX7?D=+Jz|GMGd zU&X&pga1FH^9P~6|DRp|XZig*zo+xRi{t;cT>o;l9{e}Y>7mdoKdT%5Xk*m=|ME}p zrxtO&Ud4}E^y{JJ5d+d!W~lkn2=v7`H;&Y^2pq*!^y@f2nxdXJqYvnZ^VG>|pYXzA z9lQGoUWlzCTg^L8afn0P>QJ6cvFSpaGnBWX56@2YRo{C!ly^OBSf^g4=G`00%f!8R z4^Z=XhIdu6%HZmM^MClIJ@D8Ke~giY|6euue^04@hi-kCN>?Kbr-G}4KiG(jgv1u? ze(d25uVr>-37<0EsOfLGK78}GcO&k2T*>@F29^FnhFXD`PG?{SHk56o0(hRC4%$t* z5gAmOsG4HAkcrr{u~%XrjQw)P@j)SoM{kv8P~9#h!+}r*GZx z2OmZNxHb5PX)qj#bnGLrkHl`qo`L-#%-MEgufb09gIG3!*>Ehxz6$#W>@Q=d?FQ_G zFKx$AKD-g~zkt)Zi*P(R7;`n+e4!(yt1#~?!mi!waQ??1<-LvbL!rEX;AjHh8N`wJ z_)Mh+F(sX#NhfL2MoqeZD6M^GPfK^hKS{;^RSo_`yMY?IBx}-%nlz$-DdeH@eKqNR zn)E15`lKc;Xwm~T=?G0aQj?C-q@y+ISWP-klaAMBph ztm02%nQ;F6XmHR&rf=`2k;Lz8X{rD?7i?lY)vjn5r-st%lY8F(Zulpw`0v%=AEs%VhAzW3>2ytc zgeE;wlMc80upEG%N$D^j5Ka@$;WXhHPE)yXnnnS_IA8PpS(@~0O?qZ19hOVr)-D+Z zrRh20cK^@HP`RGEb;Ey%ihsQZ|9?i8{~!5;N4VW=3lgXrF)>~pxt++ z(eAs_X!l)dwEM1fPsN^oS2z5Js`$T#Umx!O(eArwfp*`OzFyPL(C)kP(eAs_;dW1S z50Cd+%>L6fJ!g#Oy<;`$ahkM6lOC^0U#3a_Pwig&Z9TOPbi*IA85(RGfM6JZ`t4d; zXwxA)y6^@bU1{Lal?EPNY2eY71|D7M|BH6dV_oPu-@ zf&6I@-hMU~7GU_zU*o95wEtsd*QWrgFn^43`@nDmNN=P2^OjYZI79^E{DP?>&mV4WZ|$MFsXL@)iM$ z4#@e;O1T(z5_#i7Dyr$6e+BMJX`s^N- z=!QRJwAB7z*Wgb-`JE6w1<;235j~B_3*+Mn(bI&yFg`6IdM4l)t{2IndXcPLW9&HE zrG5$30Ufi3X-%hh1=&O|5&l>b6X`-WXmX5{1F^LuO?fxt7{b!U0qKmT{u8^|-^8Vj{ zJ$}&*6aSt$;CJz>etypP;O5myou{phGiTTjj=W~d-zQ(%KId=S4MU3e-nZ$_>+8?$ z^wnPV;?c|Ax~ceOf&KLrfu+2oASx2wA=Om`?iKVM*!o?ghrAK7n;8=aBb~~k`}|*G z`|tcV4m>B@md^Ld;olLJc@H2 z8t7w9I>teWU-E{)q9B}i;K)ZZ_F=ui1PK1e;oN{lfXV3SBXD#fpG+5yy^e7N-NgC^ zfgx%kOSzE={VB*%H9u|_|OLedl-9o<3Id99nRZ&NMPR`QS+le5*VH9P%)0-BLsnCg*X}v z9J@D`2VNYjkKtJqu2*3YiNX0I9OH1@5Y00aj`v3KtS_#A{IS3W&^ZRBL@@p5@Q$Ha zW%>Z+XX7__;5sMhSbr1Gcyv2nx zHF$wAAMpUv^dTE@4D%6YgPONVx%NX;wjeLeM>v&oJbO-auO)Qv%gFoil)%P+8pf4p z+co8~LgjWNuO?l?i~R6)J?5+%{?OSV{NL8#ul`t$m4hZ>d@7Kpf=_8^mmQ+rKIGMc z#@}xoJD@2yJyh;*$h+l7c|JoaP)&YI)n-na?nRCQDCyup@B{Ke(SP;sL6)wDU%r)i9 zoyFqSSBv?%*B4C9{Z+x-8}p|Xpyo`=nOkt}FLSA!8QU_)(sE~cX+e3$(vpS68DhFv zP*Awoaof_8Tg_$VrOS%SMY>Q>T2W9`l#xMCv}F7j_b$`i+taZp+IGW#l#2g*8vLo8 zvT^W^f$cwRe~T9vl-)IM+2X~7dP;F=DLo6P1*OHe7Ti``Zl<)fu$16prNxVj3(J%m zv9M%mF)OWLY+>=@@Gm*l<>)zYm|qSR}|b@T1@W=RmGI6#b3_MomMb= zo>~=uIrEovUr*h-;h(AE|GozQY54IeMMYz-DJw55UseWMDKz`%1j7vqok3%u{sTIv zlopp0EzLNpjg&AokHTp|(E<_FpPce2dcmC^ZiK5ao>-KS3EM&=)cEBe=DAsd&xR7+n@Db1W`* zEG;OxwO8RkM#cXF4gR;5foZ!{43D!Q6V(D`cPw2vT3lFIUPz7hza19}%8Cl9rG_9; zdU*{z|NV2Rug7y!oQ2EEiW#GBp&a80_4TM~O2HS-+lV~rF7$N=;0kb*-DA3@Lp|sI%`D&j+u#UOLSzPLHN@Eu< zE^-!xnaJy|%gHamh&@di^J)0O#iC_nON;LyT-6)HnT17*(06rvho#%QdlmlURQx~G z;J>Vlh&Mr{i}}tH$3k&b2GNqTf4U=9#&GH=%F)))rJ`R3%QohkrNtHHOp|0Br{e@{ zMC1Ru|4^$!acQB#VzTa#cC}^j7vuk}nyUSlUWLC!#h=Wf!}I@tV-Ej4e^6A6iM>qv5;sVFQ3h*vjl%B7i-ZHkla1kmh zHceisv#_k7SK&Wi#ow#JzqGh;;c^gRVey?y3d@TmP*0g}EiPGlTL$J`X3Whq#4^W< zVob)1q{7nq_v)Jc~SU+yd{cYwnyaGDF0p1b7Mf&%lcg^M#rgYBYH zO2!B!Yrf?cOyO?HzysB3UFbDbTpSmEsir7;9$cHR`PMFEHF^Kh_xCFNC#d)z)Ziat zg#R^urQP5|&ObvBmo(sY6$Ex@dyX(*j?zV%`sOSyE-gS7YS6N!${f<6HsSxSPgq(~ zy3kRCiOpi#l}^S9LBJAcIrxwgCxjDs&}@|QdKLZ?Rs0WW@b99D!Z9)SJ)H_m%e913 z3sR<1GF&dieT7eda1AG6GSl5CinU&J)I{^HIlv?foBhi?;^Q& zbFFmfv0JzK|0ETEnB;bi|BthUYzAz)hQgXo%NPCIe8CUfT3Cd@LLvZ`Qd+psQBvS2 z1N<0i%)~r8v12Gv#$)i2jCctW^brswLnH*d>c@X5&*_q9{OG$v)6j0ek>1%;w{G}f zrs97@ga7}qexve!KcZ!5>dn+vsLZ`F=~jhC=vFNiHf$j3|3!WJ5&Qpt@=OgI+f$)e zepfgAFIVyZNQ3|X1|z9(@wla>w_Y}`2-51~<;wV7REYJ& zV&YC|y86GXTV3Cc$z)Hi0NwD1t`05qeyqVCtFsDyAw&ZQM!bKR*C&EgR>9(B*psZt~fUL6oK7g6WA?z0-J|-JT^mM#}RWjr$fCy3u)TMBj1a? z2>A}|SHmw?EOy%J;EQS*@~W^uf&F>xF6_m>5ZHbkX(Rnj9P*VDM>v!H*N51ke4bSK?Zcs+cD%*B2io(F$3J$dVfKm6?w{!r)Y8vj$Er!yFPf9&zt zBeC!M& zJA+K@yijj-qOk4t&$R%?kH=G;IS-44D7B_{_Dl1-ER#IA^u=z^aB_-&J zus~B@{*&dGl`X&|5o^B6Cw0BWI&t;^PWwWQvnKqYxgZdL@OuMllA9-`wFJ`j2 zv#0)Y4l7=|&{+bhM%g$_2zuB057|or|4%gdgU<#?T{KZ32%i;{VZk1#0*El0*6XgH zHW##>t`uBcxEw>o50Rj%u%u+6<5ov;Y1vO)TU5Nfh?F_H-$i00r4nJzR$2m?-uIOV zm&X0@5_2wFuo%O4DcH`EC84u1j)kENN?9t>EfXpj{>{7UpZybiY~#ld>(>6s-Uj#| z*WhnXFU!EBUmdG4LW^He>Nf*KZuPA#xFCem$=CP*WT5@WmTQ=d*AovOHq+@1GBt-1Brrx zqO-}jAfO27(44P;A`}7%D9hSt+R~M!n-wapTw1Q#vgH;nGHh7dY%{0ZOiRs=G&Rk% z<+Qo~|DJQ@z8`JO(4W0>e*E9(KIc5=+{^Pn_uThA_uS`NP-KIF;^h~th6c#?0`9Xk zHnPj*=T%~6!QJ3fQC?Dvv90;=+4HI}S*Z_D*A@SK_6hv&G4VgmG0qa*0YWjvUp@NL zvJ>L44#%gXU-ugWyT*(h64|GBSa`UiA*f44E>2@5q_nssR7uXmkT6ZFEW=`td@M8^ zu2qy5mzEZn&d|{5O3)+mTVde9c1meha`fPss0jPG)VMe$Bd@fo5Q9h6EL_|oA_w0Z z6+L8V%&@rlgv2ENO7-02a{l9aD)RrniT^QK$@b**xa<^rV%7xvn79nwUcG0|+|zfK zZHiE5-16_g|9bY@Ki+chzb1}4_56-szEHPnR^!WG{=DCik^kHpwffMfcl{%>tL?4c ze++ueYq?Kg&4pOpYDfGag`PuI(C$tMM-hRiQHVhk`p8J<= zC!af?ka6q%N#`s-${g|JnsHCZKJv3CV$L@F{=J?77eCwnj{gnE?T;sZyXn~<-Zt&~ z!4*^Q8@s1h*y07rpVW8xU`qSl`vwnhm+IYT@*96$o4@4IgFpCa^U#@#c8>W~$%Hc> zPrv&&zJI9hJFxpR>)$-`er1oe*B<<7`FDR;m}33BV_x+4Uirz!n|`tXi`ve`yB=P; z;^qgA{@HWccQgLu87uPtfrA?1Yk(r|}PMv!!_T^={%j%zbXGFKx@+$}7nv2iA6@z%) zb&D!~hx}hQxMIifvK><$-Zvu3@goN9MpY}8^HD48HGD`gKoHoH>4u`Rib{R4a6#Fu z>G;vBPcdFs{Erm;?=|tyAM^ipO?G}&q2hNZz6#E?^CqfRC`REq#g#?+BrVr%!{*ZB zDmi@+rZ4)OKD*LhSdurRLhGl6M2=6_Mqn*x1eR^)SK7I3o8?#~Dr`dZC1S`5HCsmt zYwSX|}m0dCnt?@@)zY*6mbwJC@9cHAwMe$ zIHiR5etY?O`>3k7x3AULV)gQEhcJ#_-aUGR2H}B0#1>Sn_~XN3_#cogR7)1jTk_o5 z)iG0tw%bwnT4!<%gU~EynRWH@1TCozvYQcLdAyiBSsR%WwV(3scwBfPIh5tCg z|9%tym;$MZOH9BxpO8K_Ax-?ikJN9;>3(7C46(saco06s)StJHuU~ur4jnrMbPl|s zOFX{$CuL2x&9T9C2U-5DO#%4Zu3YAz2U90}ViRPs9=gXjg<7 zm8?U_I@JJe>LFR5lJy!PX}1>JZOOd{T=*e*QNqaI2A!bZmM-4|F8n77{tvq0pL_Agdlbxjn^e-Q-z($yvV6!e zG3Kg>=W0&gG9J_Ok2>ZD<2@c;%SGM_8Kda|DOvw!83!hHnPWYcm6`0Q?=*H<1voQlcWp( zqXhpSIq|=Q3&PwbxM##Qb{#&BSI-c};hy!eD)%Cuhu<#2uS=sP&yz0vrwIO!IPh;#8l- zic%1~r7g9Z2VD4175pD{;J?*&=e8jmcIhtJxY*+|(pR;o@#PV1$-x6I{Ers=e|#1B zcQ~LctT47$OHyvKxPAoBYaV-AQtz8)Z=KY`yCFUsU)s`^TEzn{{HF{4k2~?- zDm(i>8focy8k8;i(Wgs9KhdOq_C2A8NZsgH5mN84RFtpD74?lnTPO9EM@4zPQ@LU1 zDbj`i48i{iC;s>M73b+T>5q5&+w{3VW8SascF6-)(IT9iORAnM$_*ZBq@E%DydLlW zWTogtQF*P@yN(k24kvx9liuW1zrj>KbC^x3VdIOpxj8ZxT))YM|1pC9Pn`I_Tn}9| zRjkF@V)mjUNN-4I9edW_^`$~G&=+Mr=8%X+31s25Q-OGmmlZN2Ou&LihI|1d&yddf zv}fLENW(rI+XVAiFAb95e%i_XK=aV#!v9#o|49e_GvN<{{^Kz!= zDG0ZJ(T0i}yY2O2Rhg#t)t?EFwrzqQaN$2w@PEpIe@9>OmXDF+e1E41alMIM^1a)J zowIbV_Y~?7`=4}R_EI&3`_>4K8v}p~n-$F{+=G0AWho##^X}%dFOW~rnC}A2eY?4= zODDW98sJ5NUny;-GN?-JYS?Pr^4#RY|2V-v!Y{kb|0lv%gyD^j*vN%WnDa`Y6FABB z@qE>riq`!tMWZBWyBOsJx9cDYgl*RCi=-VTL7PUD6WrbkN%&%$oNnGE>?jFjDW_0Q zaQgxz!S;Fmsg-t=1hVjgY4j0*+XEm8w#{pjCnp#FvjqRAP5hI)8i10ZKQiGTg4>fJ z32v)E3ATw!3FZ;=p%V{DAWP4$gHEiHU_Qr~_0S3GOikD(wn~UxtW}0i9F#Ef&p;F<02`u7!h8%Vusvluh9j^cPDyY% zm~jl5uw_3E6f47GGjE!bhpz}&ALhr4j;ib%?8k2qydL=V3_#UhSaR-F1Jz@b3;#KS z|1&23tpSQ^v-;VBtdla*w9Hv$ci@R1lSllm;wcYi^|H2X`F#ICMVojY&jSueTyTJC X8Gfg6oVd{5v(GvGpS?yt$p3!;(JVe* literal 0 HcmV?d00001 diff --git a/out/corne_right.uf2 b/out/corne_right.uf2 new file mode 100644 index 0000000000000000000000000000000000000000..659930c6847e6e17c20b53689f3ccd5eeddc29b3 GIT binary patch literal 313344 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 z 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 +Date: Tue, 27 Apr 2021 18:24:11 +0300 +Subject: [PATCH 1/2] The original changes from #778 + +A squashed version of the original changeset from +https://github.com/zmkfirmware/zmk/pull/778 rebased on main +--- + app/CMakeLists.txt | 10 ++ + app/Kconfig | 11 ++ + app/dts/behaviors.dtsi | 5 +- + app/dts/behaviors/mouse_key_press.dtsi | 9 + + app/dts/behaviors/mouse_move.dtsi | 12 ++ + app/dts/behaviors/mouse_scroll.dtsi | 12 ++ + .../zmk,behavior-mouse-key-press.yaml | 5 + + .../behaviors/zmk,behavior-mouse-move.yaml | 13 ++ + .../behaviors/zmk,behavior-mouse-scroll.yaml | 13 ++ + app/include/dt-bindings/zmk/hid_usage_pages.h | 1 + + app/include/dt-bindings/zmk/mouse.h | 55 ++++++ + app/include/zmk/endpoints.h | 1 + + .../zmk/events/mouse_button_state_changed.h | 27 +++ + .../zmk/events/mouse_move_state_changed.h | 33 ++++ + .../zmk/events/mouse_scroll_state_changed.h | 34 ++++ + app/include/zmk/events/mouse_tick.h | 39 +++++ + app/include/zmk/hid.h | 137 ++++++++++++++- + app/include/zmk/hog.h | 1 + + app/include/zmk/mouse.h | 30 ++++ + app/src/behaviors/behavior_mouse_key_press.c | 48 ++++++ + app/src/behaviors/behavior_mouse_move.c | 57 +++++++ + app/src/behaviors/behavior_mouse_scroll.c | 58 +++++++ + app/src/endpoints.c | 35 ++++ + app/src/events/mouse_button_state_changed.c | 10 ++ + app/src/events/mouse_move_state_changed.c | 10 ++ + app/src/events/mouse_scroll_state_changed.c | 10 ++ + app/src/events/mouse_tick.c | 10 ++ + app/src/hid.c | 86 ++++++++++ + app/src/hid_listener.c | 12 +- + app/src/hog.c | 89 ++++++++++ + app/src/main.c | 8 + + app/src/mouse/Kconfig | 38 +++++ + app/src/mouse/key_listener.c | 160 ++++++++++++++++++ + app/src/mouse/main.c | 30 ++++ + app/src/mouse/tick_listener.c | 102 +++++++++++ + app/tests/mouse-keys/mmv/events.patterns | 1 + + .../mouse-keys/mmv/keycode_events.snapshot | 2 + + app/tests/mouse-keys/mmv/native_posix.keymap | 26 +++ + docs/docs/behaviors/mouse-emulation.md | 110 ++++++++++++ + docs/sidebars.js | 1 + + 40 files changed, 1342 insertions(+), 9 deletions(-) + create mode 100644 app/dts/behaviors/mouse_key_press.dtsi + create mode 100644 app/dts/behaviors/mouse_move.dtsi + create mode 100644 app/dts/behaviors/mouse_scroll.dtsi + create mode 100644 app/dts/bindings/behaviors/zmk,behavior-mouse-key-press.yaml + create mode 100644 app/dts/bindings/behaviors/zmk,behavior-mouse-move.yaml + create mode 100644 app/dts/bindings/behaviors/zmk,behavior-mouse-scroll.yaml + create mode 100644 app/include/dt-bindings/zmk/mouse.h + create mode 100644 app/include/zmk/events/mouse_button_state_changed.h + create mode 100644 app/include/zmk/events/mouse_move_state_changed.h + create mode 100644 app/include/zmk/events/mouse_scroll_state_changed.h + create mode 100644 app/include/zmk/events/mouse_tick.h + create mode 100644 app/include/zmk/mouse.h + create mode 100644 app/src/behaviors/behavior_mouse_key_press.c + create mode 100644 app/src/behaviors/behavior_mouse_move.c + create mode 100644 app/src/behaviors/behavior_mouse_scroll.c + create mode 100644 app/src/events/mouse_button_state_changed.c + create mode 100644 app/src/events/mouse_move_state_changed.c + create mode 100644 app/src/events/mouse_scroll_state_changed.c + create mode 100644 app/src/events/mouse_tick.c + create mode 100644 app/src/mouse/Kconfig + create mode 100644 app/src/mouse/key_listener.c + create mode 100644 app/src/mouse/main.c + create mode 100644 app/src/mouse/tick_listener.c + create mode 100644 app/tests/mouse-keys/mmv/events.patterns + create mode 100644 app/tests/mouse-keys/mmv/keycode_events.snapshot + create mode 100644 app/tests/mouse-keys/mmv/native_posix.keymap + create mode 100644 docs/docs/behaviors/mouse-emulation.md + +diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt +index 4b61fc7217..351505ad77 100644 +--- a/app/CMakeLists.txt ++++ b/app/CMakeLists.txt +@@ -24,6 +24,9 @@ target_sources(app PRIVATE src/stdlib.c) + target_sources(app PRIVATE src/activity.c) + target_sources(app PRIVATE src/kscan.c) + target_sources(app PRIVATE src/matrix_transform.c) ++target_sources(app PRIVATE src/mouse/key_listener.c) ++target_sources(app PRIVATE src/mouse/main.c) ++target_sources(app PRIVATE src/mouse/tick_listener.c) + target_sources(app PRIVATE src/sensors.c) + target_sources_ifdef(CONFIG_ZMK_WPM app PRIVATE src/wpm.c) + target_sources(app PRIVATE src/event_manager.c) +@@ -31,6 +34,10 @@ target_sources_ifdef(CONFIG_ZMK_EXT_POWER app PRIVATE src/ext_power_generic.c) + target_sources(app PRIVATE src/events/activity_state_changed.c) + target_sources(app PRIVATE src/events/position_state_changed.c) + target_sources(app PRIVATE src/events/sensor_event.c) ++target_sources(app PRIVATE src/events/mouse_button_state_changed.c) ++target_sources(app PRIVATE src/events/mouse_move_state_changed.c) ++target_sources(app PRIVATE src/events/mouse_tick.c) ++target_sources(app PRIVATE src/events/mouse_scroll_state_changed.c) + target_sources_ifdef(CONFIG_ZMK_WPM app PRIVATE src/events/wpm_state_changed.c) + target_sources_ifdef(CONFIG_USB_DEVICE_STACK app PRIVATE src/events/usb_conn_state_changed.c) + target_sources(app PRIVATE src/behaviors/behavior_reset.c) +@@ -53,6 +60,9 @@ if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_ROLE_CENTRAL) + target_sources(app PRIVATE src/behaviors/behavior_transparent.c) + target_sources(app PRIVATE src/behaviors/behavior_none.c) + target_sources(app PRIVATE src/behaviors/behavior_sensor_rotate_key_press.c) ++ target_sources(app PRIVATE src/behaviors/behavior_mouse_key_press.c) ++ target_sources(app PRIVATE src/behaviors/behavior_mouse_move.c) ++ target_sources(app PRIVATE src/behaviors/behavior_mouse_scroll.c) + target_sources(app PRIVATE src/combo.c) + target_sources(app PRIVATE src/behavior_queue.c) + target_sources(app PRIVATE src/conditional_layer.c) +diff --git a/app/Kconfig b/app/Kconfig +index f89d3279d1..3c59605814 100644 +--- a/app/Kconfig ++++ b/app/Kconfig +@@ -127,6 +127,10 @@ config ZMK_BLE_CONSUMER_REPORT_QUEUE_SIZE + int "Max number of consumer HID reports to queue for sending over BLE" + default 5 + ++config ZMK_BLE_MOUSE_REPORT_QUEUE_SIZE ++ int "Max number of mouse HID reports to queue for sending over BLE" ++ default 20 ++ + config ZMK_BLE_CLEAR_BONDS_ON_START + bool "Configuration that clears all bond information from the keyboard on startup." + default n +@@ -285,6 +289,13 @@ endif + #Display/LED Options + endmenu + ++menu "Mouse Options" ++ ++rsource "src/mouse/Kconfig" ++ ++#Mouse Options ++endmenu ++ + menu "Power Management" + + config ZMK_IDLE_TIMEOUT +diff --git a/app/dts/behaviors.dtsi b/app/dts/behaviors.dtsi +index b3502cbbc1..77eccf912f 100644 +--- a/app/dts/behaviors.dtsi ++++ b/app/dts/behaviors.dtsi +@@ -18,4 +18,7 @@ + #include + #include + #include +-#include +\ No newline at end of file ++#include ++#include ++#include ++#include +diff --git a/app/dts/behaviors/mouse_key_press.dtsi b/app/dts/behaviors/mouse_key_press.dtsi +new file mode 100644 +index 0000000000..8b2aacb366 +--- /dev/null ++++ b/app/dts/behaviors/mouse_key_press.dtsi +@@ -0,0 +1,9 @@ ++/ { ++ behaviors { ++ /omit-if-no-ref/ mkp: behavior_mouse_key_press { ++ compatible = "zmk,behavior-mouse-key-press"; ++ label = "MOUSE_KEY_PRESS"; ++ #binding-cells = <1>; ++ }; ++ }; ++}; +diff --git a/app/dts/behaviors/mouse_move.dtsi b/app/dts/behaviors/mouse_move.dtsi +new file mode 100644 +index 0000000000..d34329c806 +--- /dev/null ++++ b/app/dts/behaviors/mouse_move.dtsi +@@ -0,0 +1,12 @@ ++/ { ++ behaviors { ++ /omit-if-no-ref/ mmv: behavior_mouse_move { ++ compatible = "zmk,behavior-mouse-move"; ++ label = "MOUSE_MOVE"; ++ #binding-cells = <1>; ++ delay-ms = <0>; ++ time-to-max-speed-ms = <300>; ++ acceleration-exponent = <1>; ++ }; ++ }; ++}; +diff --git a/app/dts/behaviors/mouse_scroll.dtsi b/app/dts/behaviors/mouse_scroll.dtsi +new file mode 100644 +index 0000000000..fb54886dcb +--- /dev/null ++++ b/app/dts/behaviors/mouse_scroll.dtsi +@@ -0,0 +1,12 @@ ++/ { ++ behaviors { ++ /omit-if-no-ref/ mwh: msc: behavior_mouse_scroll { ++ compatible = "zmk,behavior-mouse-scroll"; ++ label = "MOUSE_SCROLL"; ++ #binding-cells = <1>; ++ delay-ms = <0>; ++ time-to-max-speed-ms = <300>; ++ acceleration-exponent = <0>; ++ }; ++ }; ++}; +diff --git a/app/dts/bindings/behaviors/zmk,behavior-mouse-key-press.yaml b/app/dts/bindings/behaviors/zmk,behavior-mouse-key-press.yaml +new file mode 100644 +index 0000000000..8540916b72 +--- /dev/null ++++ b/app/dts/bindings/behaviors/zmk,behavior-mouse-key-press.yaml +@@ -0,0 +1,5 @@ ++description: Mouse key press/release behavior ++ ++compatible: "zmk,behavior-mouse-key-press" ++ ++include: one_param.yaml +diff --git a/app/dts/bindings/behaviors/zmk,behavior-mouse-move.yaml b/app/dts/bindings/behaviors/zmk,behavior-mouse-move.yaml +new file mode 100644 +index 0000000000..73ec34ec2d +--- /dev/null ++++ b/app/dts/bindings/behaviors/zmk,behavior-mouse-move.yaml +@@ -0,0 +1,13 @@ ++description: Mouse move ++ ++compatible: "zmk,behavior-mouse-move" ++ ++include: one_param.yaml ++ ++properties: ++ delay-ms: ++ type: int ++ time-to-max-speed-ms: ++ type: int ++ acceleration-exponent: ++ type: int +diff --git a/app/dts/bindings/behaviors/zmk,behavior-mouse-scroll.yaml b/app/dts/bindings/behaviors/zmk,behavior-mouse-scroll.yaml +new file mode 100644 +index 0000000000..5a932bc590 +--- /dev/null ++++ b/app/dts/bindings/behaviors/zmk,behavior-mouse-scroll.yaml +@@ -0,0 +1,13 @@ ++description: Mouse scroll ++ ++compatible: "zmk,behavior-mouse-scroll" ++ ++include: one_param.yaml ++ ++properties: ++ delay-ms: ++ type: int ++ time-to-max-speed-ms: ++ type: int ++ acceleration-exponent: ++ type: int +diff --git a/app/include/dt-bindings/zmk/hid_usage_pages.h b/app/include/dt-bindings/zmk/hid_usage_pages.h +index 2ccdba5540..7fa54fd88b 100644 +--- a/app/include/dt-bindings/zmk/hid_usage_pages.h ++++ b/app/include/dt-bindings/zmk/hid_usage_pages.h +@@ -26,6 +26,7 @@ + #define HID_USAGE_GDV (0x06) // Generic Device Controls + #define HID_USAGE_KEY (0x07) // Keyboard/Keypad + #define HID_USAGE_LED (0x08) // LED ++#define HID_USAGE_BUTTON (0x09) // Button + #define HID_USAGE_TELEPHONY (0x0B) // Telephony Device + #define HID_USAGE_CONSUMER (0x0C) // Consumer + #define HID_USAGE_DIGITIZERS (0x0D) // Digitizers +diff --git a/app/include/dt-bindings/zmk/mouse.h b/app/include/dt-bindings/zmk/mouse.h +new file mode 100644 +index 0000000000..cf0415c9b2 +--- /dev/null ++++ b/app/include/dt-bindings/zmk/mouse.h +@@ -0,0 +1,55 @@ ++/* ++ * Copyright (c) 2020 The ZMK Contributors ++ * ++ * SPDX-License-Identifier: MIT ++ */ ++#pragma once ++ ++/* Mouse press behavior */ ++/* Left click */ ++#define MB1 (0x01) ++#define LCLK (MB1) ++ ++/* Right click */ ++#define MB2 (0x02) ++#define RCLK (MB2) ++ ++/* Middle click */ ++#define MB3 (0x04) ++#define MCLK (MB3) ++ ++#define MB4 (0x08) ++ ++#define MB5 (0x10) ++ ++#define MB6 (0x20) ++ ++#define MB7 (0x40) ++ ++#define MB8 (0x80) ++ ++/* Mouse move behavior */ ++#define MOVE_VERT(vert) ((vert)&0xFFFF) ++#define MOVE_VERT_DECODE(encoded) (int16_t)((encoded)&0x0000FFFF) ++#define MOVE_HOR(hor) (((hor)&0xFFFF) << 16) ++#define MOVE_HOR_DECODE(encoded) (int16_t)(((encoded)&0xFFFF0000) >> 16) ++ ++#define MOVE(hor, vert) (MOVE_HOR(hor) + MOVE_VERT(vert)) ++ ++#define MOVE_UP MOVE_VERT(-600) ++#define MOVE_DOWN MOVE_VERT(600) ++#define MOVE_LEFT MOVE_HOR(-600) ++#define MOVE_RIGHT MOVE_HOR(600) ++ ++/* Mouse scroll behavior */ ++#define SCROLL_VERT(vert) ((vert)&0xFFFF) ++#define SCROLL_VERT_DECODE(encoded) (int16_t)((encoded)&0x0000FFFF) ++#define SCROLL_HOR(hor) (((hor)&0xFFFF) << 16) ++#define SCROLL_HOR_DECODE(encoded) (int16_t)(((encoded)&0xFFFF0000) >> 16) ++ ++#define SCROLL(hor, vert) (SCROLL_HOR(hor) + SCROLL_VERT(vert)) ++ ++#define SCROLL_UP SCROLL_VERT(10) ++#define SCROLL_DOWN SCROLL_VERT(-10) ++#define SCROLL_LEFT SCROLL_HOR(-10) ++#define SCROLL_RIGHT SCROLL_HOR(10) +diff --git a/app/include/zmk/endpoints.h b/app/include/zmk/endpoints.h +index c8860533e1..450d7ea370 100644 +--- a/app/include/zmk/endpoints.h ++++ b/app/include/zmk/endpoints.h +@@ -13,3 +13,4 @@ int zmk_endpoints_toggle(); + enum zmk_endpoint zmk_endpoints_selected(); + + int zmk_endpoints_send_report(uint16_t usage_page); ++int zmk_endpoints_send_mouse_report(); +diff --git a/app/include/zmk/events/mouse_button_state_changed.h b/app/include/zmk/events/mouse_button_state_changed.h +new file mode 100644 +index 0000000000..7ec4d2087c +--- /dev/null ++++ b/app/include/zmk/events/mouse_button_state_changed.h +@@ -0,0 +1,27 @@ ++ ++/* ++ * Copyright (c) 2020 The ZMK Contributors ++ * ++ * SPDX-License-Identifier: MIT ++ */ ++ ++#pragma once ++ ++#include ++#include ++#include ++#include ++ ++struct zmk_mouse_button_state_changed { ++ zmk_mouse_button_t buttons; ++ bool state; ++ int64_t timestamp; ++}; ++ ++ZMK_EVENT_DECLARE(zmk_mouse_button_state_changed); ++ ++static inline struct zmk_mouse_button_state_changed_event * ++zmk_mouse_button_state_changed_from_encoded(uint32_t encoded, bool pressed, int64_t timestamp) { ++ return new_zmk_mouse_button_state_changed((struct zmk_mouse_button_state_changed){ ++ .buttons = HID_USAGE_ID(encoded), .state = pressed, .timestamp = timestamp}); ++} +diff --git a/app/include/zmk/events/mouse_move_state_changed.h b/app/include/zmk/events/mouse_move_state_changed.h +new file mode 100644 +index 0000000000..8866f81d4e +--- /dev/null ++++ b/app/include/zmk/events/mouse_move_state_changed.h +@@ -0,0 +1,33 @@ ++ ++/* ++ * Copyright (c) 2020 The ZMK Contributors ++ * ++ * SPDX-License-Identifier: MIT ++ */ ++ ++#pragma once ++ ++#include ++#include ++#include ++ ++struct zmk_mouse_move_state_changed { ++ struct vector2d max_speed; ++ struct mouse_config config; ++ bool state; ++ int64_t timestamp; ++}; ++ ++ZMK_EVENT_DECLARE(zmk_mouse_move_state_changed); ++ ++static inline struct zmk_mouse_move_state_changed_event * ++zmk_mouse_move_state_changed_from_encoded(uint32_t encoded, struct mouse_config config, ++ bool pressed, int64_t timestamp) { ++ struct vector2d max_speed = (struct vector2d){ ++ .x = MOVE_HOR_DECODE(encoded), ++ .y = MOVE_VERT_DECODE(encoded), ++ }; ++ ++ return new_zmk_mouse_move_state_changed((struct zmk_mouse_move_state_changed){ ++ .max_speed = max_speed, .config = config, .state = pressed, .timestamp = timestamp}); ++} +diff --git a/app/include/zmk/events/mouse_scroll_state_changed.h b/app/include/zmk/events/mouse_scroll_state_changed.h +new file mode 100644 +index 0000000000..fa60e8a742 +--- /dev/null ++++ b/app/include/zmk/events/mouse_scroll_state_changed.h +@@ -0,0 +1,34 @@ ++ ++/* ++ * Copyright (c) 2020 The ZMK Contributors ++ * ++ * SPDX-License-Identifier: MIT ++ */ ++ ++#pragma once ++ ++#include ++#include ++#include ++#include ++ ++struct zmk_mouse_scroll_state_changed { ++ struct vector2d max_speed; ++ struct mouse_config config; ++ bool state; ++ int64_t timestamp; ++}; ++ ++ZMK_EVENT_DECLARE(zmk_mouse_scroll_state_changed); ++ ++static inline struct zmk_mouse_scroll_state_changed_event * ++zmk_mouse_scroll_state_changed_from_encoded(uint32_t encoded, struct mouse_config config, ++ bool pressed, int64_t timestamp) { ++ struct vector2d max_speed = (struct vector2d){ ++ .x = SCROLL_HOR_DECODE(encoded), ++ .y = SCROLL_VERT_DECODE(encoded), ++ }; ++ ++ return new_zmk_mouse_scroll_state_changed((struct zmk_mouse_scroll_state_changed){ ++ .max_speed = max_speed, .config = config, .state = pressed, .timestamp = timestamp}); ++} +diff --git a/app/include/zmk/events/mouse_tick.h b/app/include/zmk/events/mouse_tick.h +new file mode 100644 +index 0000000000..c75b9b4f86 +--- /dev/null ++++ b/app/include/zmk/events/mouse_tick.h +@@ -0,0 +1,39 @@ ++ ++/* ++ * Copyright (c) 2020 The ZMK Contributors ++ * ++ * SPDX-License-Identifier: MIT ++ */ ++ ++#pragma once ++ ++#include ++#include ++#include ++#include ++ ++struct zmk_mouse_tick { ++ struct vector2d max_move; ++ struct vector2d max_scroll; ++ struct mouse_config move_config; ++ struct mouse_config scroll_config; ++ int64_t *start_time; ++ int64_t timestamp; ++}; ++ ++ZMK_EVENT_DECLARE(zmk_mouse_tick); ++ ++static inline struct zmk_mouse_tick_event *zmk_mouse_tick(struct vector2d max_move, ++ struct vector2d max_scroll, ++ struct mouse_config move_config, ++ struct mouse_config scroll_config, ++ int64_t *movement_start) { ++ return new_zmk_mouse_tick((struct zmk_mouse_tick){ ++ .max_move = max_move, ++ .max_scroll = max_scroll, ++ .move_config = move_config, ++ .scroll_config = scroll_config, ++ .start_time = movement_start, ++ .timestamp = k_uptime_get(), ++ }); ++} +diff --git a/app/include/zmk/hid.h b/app/include/zmk/hid.h +index 902b76d15a..aa26cd3a54 100644 +--- a/app/include/zmk/hid.h ++++ b/app/include/zmk/hid.h +@@ -10,11 +10,10 @@ + #include + + #include ++#include + #include + #include + +-#define ZMK_HID_KEYBOARD_NKRO_MAX_USAGE HID_USAGE_KEY_KEYPAD_EQUAL +- + #define COLLECTION_REPORT 0x03 + + static const uint8_t zmk_hid_report_desc[] = { +@@ -89,6 +88,116 @@ static const uint8_t zmk_hid_report_desc[] = { + /* INPUT (Data,Ary,Abs) */ + HID_INPUT(0x00), + HID_END_COLLECTION, ++ ++ /* USAGE_PAGE (Generic Desktop) */ ++ HID_GI_USAGE_PAGE, ++ HID_USAGE_GD, ++ /* USAGE (Mouse) */ ++ HID_LI_USAGE, ++ HID_USAGE_GD_MOUSE, ++ /* COLLECTION (Application) */ ++ HID_MI_COLLECTION, ++ COLLECTION_APPLICATION, ++ /* REPORT ID (4) */ ++ HID_GI_REPORT_ID, ++ 0x04, ++ /* USAGE (Pointer) */ ++ HID_LI_USAGE, ++ HID_USAGE_GD_POINTER, ++ /* COLLECTION (Physical) */ ++ HID_MI_COLLECTION, ++ COLLECTION_PHYSICAL, ++ /* USAGE_PAGE (Button) */ ++ HID_GI_USAGE_PAGE, ++ HID_USAGE_BUTTON, ++ /* USAGE_MINIMUM (0x1) (button 1?) */ ++ HID_LI_USAGE_MIN(1), ++ 0x1, ++ /* USAGE_MAXIMUM (0x10) (button 5? Buttons up to 8 still work) */ ++ HID_LI_USAGE_MAX(1), ++ 0x10, ++ /* LOGICAL_MINIMUM (0) */ ++ HID_GI_LOGICAL_MIN(1), ++ 0x00, ++ /* LOGICAL_MAXIMUM (1) */ ++ HID_GI_LOGICAL_MAX(1), ++ 0x01, ++ /* REPORT_SIZE (1) */ ++ HID_GI_REPORT_SIZE, ++ 0x01, ++ /* REPORT_COUNT (16) */ ++ HID_GI_REPORT_COUNT, ++ 0x10, ++ /* INPUT (Data,Var,Abs) */ ++ HID_MI_INPUT, ++ 0x02, ++ /* USAGE_PAGE (Generic Desktop) */ ++ HID_GI_USAGE_PAGE, ++ HID_USAGE_GD, ++ /* LOGICAL_MINIMUM (-32767) */ ++ HID_GI_LOGICAL_MIN(2), ++ 0x01, ++ 0x80, ++ /* LOGICAL_MAXIMUM (32767) */ ++ HID_GI_LOGICAL_MAX(2), ++ 0xFF, ++ 0x7F, ++ /* REPORT_SIZE (16) */ ++ HID_GI_REPORT_SIZE, ++ 0x10, ++ /* REPORT_COUNT (2) */ ++ HID_GI_REPORT_COUNT, ++ 0x02, ++ /* USAGE (X) */ // Vertical scroll ++ HID_LI_USAGE, ++ HID_USAGE_GD_X, ++ /* USAGE (Y) */ ++ HID_LI_USAGE, ++ HID_USAGE_GD_Y, ++ /* Input (Data,Var,Rel) */ ++ HID_MI_INPUT, ++ 0x06, ++ /* LOGICAL_MINIMUM (-127) */ ++ HID_GI_LOGICAL_MIN(1), ++ 0x81, ++ /* LOGICAL_MAXIMUM (127) */ ++ HID_GI_LOGICAL_MAX(1), ++ 0x7F, ++ /* REPORT_SIZE (8) */ ++ HID_GI_REPORT_SIZE, ++ 0x08, ++ /* REPORT_COUNT (1) */ ++ HID_GI_REPORT_COUNT, ++ 0x01, ++ /* USAGE (Wheel) */ ++ HID_LI_USAGE, ++ HID_USAGE_GD_WHEEL, ++ /* Input (Data,Var,Rel) */ ++ HID_MI_INPUT, ++ 0x06, ++ /* USAGE_PAGE (Consumer) */ // Horizontal scroll ++ HID_GI_USAGE_PAGE, ++ HID_USAGE_CONSUMER, ++ /* USAGE (AC Pan) */ ++ 0x0A, ++ 0x38, ++ 0x02, ++ /* LOGICAL_MINIMUM (-127) */ ++ HID_GI_LOGICAL_MIN(1), ++ 0x81, ++ /* LOGICAL_MAXIMUM (127) */ ++ HID_GI_LOGICAL_MAX(1), ++ 0x7F, ++ /* REPORT_COUNT (1) */ ++ HID_GI_REPORT_COUNT, ++ 0x01, ++ /* Input (Data,Var,Rel) */ ++ HID_MI_INPUT, ++ 0x06, ++ /* END COLLECTION */ ++ HID_MI_COLLECTION_END, ++ /* END COLLECTION */ ++ HID_MI_COLLECTION_END, + }; + + // struct zmk_hid_boot_report +@@ -126,6 +235,19 @@ struct zmk_hid_consumer_report { + struct zmk_hid_consumer_report_body body; + } __packed; + ++struct zmk_hid_mouse_report_body { ++ zmk_mouse_button_flags_t buttons; ++ int16_t x; ++ int16_t y; ++ int8_t scroll_y; ++ int8_t scroll_x; ++} __packed; ++ ++struct zmk_hid_mouse_report { ++ uint8_t report_id; ++ struct zmk_hid_mouse_report_body body; ++} __packed; ++ + zmk_mod_flags_t zmk_hid_get_explicit_mods(); + int zmk_hid_register_mod(zmk_mod_t modifier); + int zmk_hid_unregister_mod(zmk_mod_t modifier); +@@ -150,5 +272,16 @@ int zmk_hid_press(uint32_t usage); + int zmk_hid_release(uint32_t usage); + bool zmk_hid_is_pressed(uint32_t usage); + ++int zmk_hid_mouse_button_press(zmk_mouse_button_t button); ++int zmk_hid_mouse_button_release(zmk_mouse_button_t button); ++int zmk_hid_mouse_buttons_press(zmk_mouse_button_flags_t buttons); ++int zmk_hid_mouse_buttons_release(zmk_mouse_button_flags_t buttons); ++void zmk_hid_mouse_movement_set(int16_t x, int16_t y); ++void zmk_hid_mouse_scroll_set(int8_t x, int8_t y); ++void zmk_hid_mouse_movement_update(int16_t x, int16_t y); ++void zmk_hid_mouse_scroll_update(int8_t x, int8_t y); ++void zmk_hid_mouse_clear(); ++ + struct zmk_hid_keyboard_report *zmk_hid_get_keyboard_report(); + struct zmk_hid_consumer_report *zmk_hid_get_consumer_report(); ++struct zmk_hid_mouse_report *zmk_hid_get_mouse_report(); +diff --git a/app/include/zmk/hog.h b/app/include/zmk/hog.h +index 7523fb661a..9debc3ff31 100644 +--- a/app/include/zmk/hog.h ++++ b/app/include/zmk/hog.h +@@ -13,3 +13,4 @@ int zmk_hog_init(); + + int zmk_hog_send_keyboard_report(struct zmk_hid_keyboard_report_body *body); + int zmk_hog_send_consumer_report(struct zmk_hid_consumer_report_body *body); ++int zmk_hog_send_mouse_report(struct zmk_hid_mouse_report_body *body); +diff --git a/app/include/zmk/mouse.h b/app/include/zmk/mouse.h +new file mode 100644 +index 0000000000..f8f857441e +--- /dev/null ++++ b/app/include/zmk/mouse.h +@@ -0,0 +1,30 @@ ++/* ++ * Copyright (c) 2021 The ZMK Contributors ++ * ++ * SPDX-License-Identifier: MIT ++ */ ++ ++#pragma once ++ ++#include ++#include ++ ++typedef uint16_t zmk_mouse_button_flags_t; ++typedef uint16_t zmk_mouse_button_t; ++ ++struct mouse_config { ++ int delay_ms; ++ int time_to_max_speed_ms; ++ // acceleration exponent 0: uniform speed ++ // acceleration exponent 1: uniform acceleration ++ // acceleration exponent 2: uniform jerk ++ int acceleration_exponent; ++}; ++ ++struct vector2d { ++ float x; ++ float y; ++}; ++ ++struct k_work_q *zmk_mouse_work_q(); ++int zmk_mouse_init(); +\ No newline at end of file +diff --git a/app/src/behaviors/behavior_mouse_key_press.c b/app/src/behaviors/behavior_mouse_key_press.c +new file mode 100644 +index 0000000000..e5f2709cbf +--- /dev/null ++++ b/app/src/behaviors/behavior_mouse_key_press.c +@@ -0,0 +1,48 @@ ++/* ++ * Copyright (c) 2021 The ZMK Contributors ++ * ++ * SPDX-License-Identifier: MIT ++ */ ++ ++#define DT_DRV_COMPAT zmk_behavior_mouse_key_press ++ ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); ++ ++#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) ++ ++static int behavior_mouse_key_press_init(const struct device *dev) { return 0; }; ++ ++static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, ++ struct zmk_behavior_binding_event event) { ++ LOG_DBG("position %d keycode 0x%02X", event.position, binding->param1); ++ ++ return ZMK_EVENT_RAISE( ++ zmk_mouse_button_state_changed_from_encoded(binding->param1, true, event.timestamp)); ++} ++ ++static int on_keymap_binding_released(struct zmk_behavior_binding *binding, ++ struct zmk_behavior_binding_event event) { ++ LOG_DBG("position %d keycode 0x%02X", event.position, binding->param1); ++ return ZMK_EVENT_RAISE( ++ zmk_mouse_button_state_changed_from_encoded(binding->param1, false, event.timestamp)); ++} ++ ++static const struct behavior_driver_api behavior_mouse_key_press_driver_api = { ++ .binding_pressed = on_keymap_binding_pressed, .binding_released = on_keymap_binding_released}; ++ ++#define KP_INST(n) \ ++ DEVICE_DT_INST_DEFINE(n, behavior_mouse_key_press_init, device_pm_control_nop, NULL, NULL, \ ++ APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ ++ &behavior_mouse_key_press_driver_api); ++ ++DT_INST_FOREACH_STATUS_OKAY(KP_INST) ++ ++#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ +\ No newline at end of file +diff --git a/app/src/behaviors/behavior_mouse_move.c b/app/src/behaviors/behavior_mouse_move.c +new file mode 100644 +index 0000000000..5977a039d1 +--- /dev/null ++++ b/app/src/behaviors/behavior_mouse_move.c +@@ -0,0 +1,57 @@ ++/* ++ * Copyright (c) 2021 The ZMK Contributors ++ * ++ * SPDX-License-Identifier: MIT ++ */ ++ ++#define DT_DRV_COMPAT zmk_behavior_mouse_move ++ ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++ ++LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); ++ ++#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) ++ ++static int behavior_mouse_move_init(const struct device *dev) { return 0; }; ++ ++static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, ++ struct zmk_behavior_binding_event event) { ++ LOG_DBG("position %d keycode 0x%02X", event.position, binding->param1); ++ const struct device *dev = device_get_binding(binding->behavior_dev); ++ const struct mouse_config *config = dev->config; ++ return ZMK_EVENT_RAISE( ++ zmk_mouse_move_state_changed_from_encoded(binding->param1, *config, true, event.timestamp)); ++} ++ ++static int on_keymap_binding_released(struct zmk_behavior_binding *binding, ++ struct zmk_behavior_binding_event event) { ++ LOG_DBG("position %d keycode 0x%02X", event.position, binding->param1); ++ const struct device *dev = device_get_binding(binding->behavior_dev); ++ const struct mouse_config *config = dev->config; ++ return ZMK_EVENT_RAISE(zmk_mouse_move_state_changed_from_encoded(binding->param1, *config, ++ false, event.timestamp)); ++} ++ ++static const struct behavior_driver_api behavior_mouse_move_driver_api = { ++ .binding_pressed = on_keymap_binding_pressed, .binding_released = on_keymap_binding_released}; ++ ++#define KP_INST(n) \ ++ static struct mouse_config behavior_mouse_move_config_##n = { \ ++ .delay_ms = DT_INST_PROP(n, delay_ms), \ ++ .time_to_max_speed_ms = DT_INST_PROP(n, time_to_max_speed_ms), \ ++ .acceleration_exponent = DT_INST_PROP(n, acceleration_exponent), \ ++ }; \ ++ DEVICE_DT_INST_DEFINE(n, behavior_mouse_move_init, device_pm_control_nop, NULL, \ ++ &behavior_mouse_move_config_##n, APPLICATION, \ ++ CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_mouse_move_driver_api); ++ ++DT_INST_FOREACH_STATUS_OKAY(KP_INST) ++ ++#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ +diff --git a/app/src/behaviors/behavior_mouse_scroll.c b/app/src/behaviors/behavior_mouse_scroll.c +new file mode 100644 +index 0000000000..6416235265 +--- /dev/null ++++ b/app/src/behaviors/behavior_mouse_scroll.c +@@ -0,0 +1,58 @@ ++/* ++ * Copyright (c) 2021 The ZMK Contributors ++ * ++ * SPDX-License-Identifier: MIT ++ */ ++ ++#define DT_DRV_COMPAT zmk_behavior_mouse_scroll ++ ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++ ++LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); ++ ++#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) ++ ++static int behavior_mouse_scroll_init(const struct device *dev) { return 0; }; ++ ++static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, ++ struct zmk_behavior_binding_event event) { ++ LOG_DBG("position %d keycode 0x%02X", event.position, binding->param1); ++ const struct device *dev = device_get_binding(binding->behavior_dev); ++ const struct mouse_config *config = dev->config; ++ return ZMK_EVENT_RAISE(zmk_mouse_scroll_state_changed_from_encoded(binding->param1, *config, ++ true, event.timestamp)); ++} ++ ++static int on_keymap_binding_released(struct zmk_behavior_binding *binding, ++ struct zmk_behavior_binding_event event) { ++ LOG_DBG("position %d keycode 0x%02X", event.position, binding->param1); ++ const struct device *dev = device_get_binding(binding->behavior_dev); ++ const struct mouse_config *config = dev->config; ++ return ZMK_EVENT_RAISE(zmk_mouse_scroll_state_changed_from_encoded(binding->param1, *config, ++ false, event.timestamp)); ++} ++ ++static const struct behavior_driver_api behavior_mouse_scroll_driver_api = { ++ .binding_pressed = on_keymap_binding_pressed, .binding_released = on_keymap_binding_released}; ++ ++#define KP_INST(n) \ ++ static struct mouse_config behavior_mouse_scroll_config_##n = { \ ++ .delay_ms = DT_INST_PROP(n, delay_ms), \ ++ .time_to_max_speed_ms = DT_INST_PROP(n, time_to_max_speed_ms), \ ++ .acceleration_exponent = DT_INST_PROP(n, acceleration_exponent), \ ++ }; \ ++ DEVICE_DT_INST_DEFINE(n, behavior_mouse_scroll_init, device_pm_control_nop, NULL, \ ++ &behavior_mouse_scroll_config_##n, APPLICATION, \ ++ CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_mouse_scroll_driver_api); ++ ++DT_INST_FOREACH_STATUS_OKAY(KP_INST) ++ ++#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ +diff --git a/app/src/endpoints.c b/app/src/endpoints.c +index 3376001060..0728fff3bd 100644 +--- a/app/src/endpoints.c ++++ b/app/src/endpoints.c +@@ -144,6 +144,40 @@ int zmk_endpoints_send_report(uint16_t usage_page) { + } + } + ++int zmk_endpoints_send_mouse_report() { ++ struct zmk_hid_mouse_report *mouse_report = zmk_hid_get_mouse_report(); ++ ++ switch (current_endpoint) { ++#if IS_ENABLED(CONFIG_ZMK_USB) ++ case ZMK_ENDPOINT_USB: { ++ int err = zmk_usb_hid_send_report((uint8_t *)mouse_report, sizeof(*mouse_report)); ++ if (err) { ++ LOG_ERR("FAILED TO SEND OVER USB: %d", err); ++ } ++ return err; ++ } ++#endif /* IS_ENABLED(CONFIG_ZMK_USB) */ ++ ++#if IS_ENABLED(CONFIG_ZMK_BLE) ++ case ZMK_ENDPOINT_BLE: { ++#if IS_ENABLED(CONFIG_ZMK_MOUSE_WORK_QUEUE_DEDICATED) ++ int err = zmk_hog_send_mouse_report_direct(&mouse_report->body); ++#else ++ int err = zmk_hog_send_mouse_report(&mouse_report->body); ++#endif ++ if (err) { ++ LOG_ERR("FAILED TO SEND OVER HOG: %d", err); ++ } ++ return err; ++ } ++#endif /* IS_ENABLED(CONFIG_ZMK_BLE) */ ++ ++ default: ++ LOG_ERR("Unsupported endpoint %d", current_endpoint); ++ return -ENOTSUP; ++ } ++} ++ + #if IS_ENABLED(CONFIG_SETTINGS) + + static int endpoints_handle_set(const char *name, size_t len, settings_read_cb read_cb, +@@ -228,6 +262,7 @@ static enum zmk_endpoint get_selected_endpoint() { + static void disconnect_current_endpoint() { + zmk_hid_keyboard_clear(); + zmk_hid_consumer_clear(); ++ zmk_hid_mouse_clear(); + + zmk_endpoints_send_report(HID_USAGE_KEY); + zmk_endpoints_send_report(HID_USAGE_CONSUMER); +diff --git a/app/src/events/mouse_button_state_changed.c b/app/src/events/mouse_button_state_changed.c +new file mode 100644 +index 0000000000..e1ede41421 +--- /dev/null ++++ b/app/src/events/mouse_button_state_changed.c +@@ -0,0 +1,10 @@ ++/* ++ * Copyright (c) 2020 The ZMK Contributors ++ * ++ * SPDX-License-Identifier: MIT ++ */ ++ ++#include ++#include ++ ++ZMK_EVENT_IMPL(zmk_mouse_button_state_changed); +diff --git a/app/src/events/mouse_move_state_changed.c b/app/src/events/mouse_move_state_changed.c +new file mode 100644 +index 0000000000..faf89cb8ab +--- /dev/null ++++ b/app/src/events/mouse_move_state_changed.c +@@ -0,0 +1,10 @@ ++/* ++ * Copyright (c) 2020 The ZMK Contributors ++ * ++ * SPDX-License-Identifier: MIT ++ */ ++ ++#include ++#include ++ ++ZMK_EVENT_IMPL(zmk_mouse_move_state_changed); +diff --git a/app/src/events/mouse_scroll_state_changed.c b/app/src/events/mouse_scroll_state_changed.c +new file mode 100644 +index 0000000000..4b4170fe00 +--- /dev/null ++++ b/app/src/events/mouse_scroll_state_changed.c +@@ -0,0 +1,10 @@ ++/* ++ * Copyright (c) 2020 The ZMK Contributors ++ * ++ * SPDX-License-Identifier: MIT ++ */ ++ ++#include ++#include ++ ++ZMK_EVENT_IMPL(zmk_mouse_scroll_state_changed); +diff --git a/app/src/events/mouse_tick.c b/app/src/events/mouse_tick.c +new file mode 100644 +index 0000000000..0930b9fb90 +--- /dev/null ++++ b/app/src/events/mouse_tick.c +@@ -0,0 +1,10 @@ ++/* ++ * Copyright (c) 2020 The ZMK Contributors ++ * ++ * SPDX-License-Identifier: MIT ++ */ ++ ++#include ++#include ++ ++ZMK_EVENT_IMPL(zmk_mouse_tick); +diff --git a/app/src/hid.c b/app/src/hid.c +index c3462ddeb7..9e7451b7f4 100644 +--- a/app/src/hid.c ++++ b/app/src/hid.c +@@ -16,6 +16,9 @@ static struct zmk_hid_keyboard_report keyboard_report = { + + static struct zmk_hid_consumer_report consumer_report = {.report_id = 2, .body = {.keys = {0}}}; + ++static struct zmk_hid_mouse_report mouse_report = { ++ .report_id = 4, .body = {.buttons = 0, .x = 0, .y = 0, .scroll_x = 0, .scroll_y = 0}}; ++ + // Keep track of how often a modifier was pressed. + // Only release the modifier if the count is 0. + static int explicit_modifier_counts[8] = {0, 0, 0, 0, 0, 0, 0, 0}; +@@ -246,6 +249,85 @@ bool zmk_hid_is_pressed(uint32_t usage) { + return false; + } + ++// Keep track of how often a button was pressed. ++// Only release the button if the count is 0. ++static int explicit_button_counts[16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; ++static zmk_mod_flags_t explicit_buttons = 0; ++ ++#define SET_MOUSE_BUTTONS(btns) \ ++ { \ ++ mouse_report.body.buttons = btns; \ ++ LOG_DBG("Mouse buttons set to 0x%02X", mouse_report.body.buttons); \ ++ } ++ ++int zmk_hid_mouse_button_press(zmk_mouse_button_t button) { ++ explicit_button_counts[button]++; ++ LOG_DBG("Button %d count %d", button, explicit_button_counts[button]); ++ WRITE_BIT(explicit_buttons, button, true); ++ SET_MOUSE_BUTTONS(explicit_buttons); ++ return 0; ++} ++ ++int zmk_hid_mouse_button_release(zmk_mouse_button_t button) { ++ if (explicit_button_counts[button] <= 0) { ++ LOG_ERR("Tried to release button %d too often", button); ++ return -EINVAL; ++ } ++ explicit_button_counts[button]--; ++ LOG_DBG("Button %d count: %d", button, explicit_button_counts[button]); ++ if (explicit_button_counts[button] == 0) { ++ LOG_DBG("Button %d released", button); ++ WRITE_BIT(explicit_buttons, button, false); ++ } ++ SET_MOUSE_BUTTONS(explicit_buttons); ++ return 0; ++} ++ ++int zmk_hid_mouse_buttons_press(zmk_mouse_button_flags_t buttons) { ++ for (zmk_mod_t i = 0; i < 16; i++) { ++ if (buttons & (1 << i)) { ++ zmk_hid_mouse_button_press(i); ++ } ++ } ++ return 0; ++} ++ ++int zmk_hid_mouse_buttons_release(zmk_mouse_button_flags_t buttons) { ++ for (zmk_mod_t i = 0; i < 16; i++) { ++ if (buttons & (1 << i)) { ++ zmk_hid_mouse_button_release(i); ++ } ++ } ++ return 0; ++} ++ ++void zmk_hid_mouse_movement_set(int16_t x, int16_t y) { ++ mouse_report.body.x = x; ++ mouse_report.body.y = y; ++ LOG_DBG("Mouse movement set to 0x%02X 0x%02X ", mouse_report.body.x, mouse_report.body.y); ++} ++ ++void zmk_hid_mouse_movement_update(int16_t x, int16_t y) { ++ mouse_report.body.x += x; ++ mouse_report.body.y += y; ++ LOG_DBG("Mouse movement updated to 0x%02X 0x%02X ", mouse_report.body.x, mouse_report.body.y); ++} ++ ++void zmk_hid_mouse_scroll_set(int8_t x, int8_t y) { ++ mouse_report.body.scroll_x = x; ++ mouse_report.body.scroll_y = y; ++ LOG_DBG("Mouse scroll set to 0x%02X 0x%02X ", mouse_report.body.scroll_x, ++ mouse_report.body.scroll_y); ++} ++ ++void zmk_hid_mouse_scroll_update(int8_t x, int8_t y) { ++ mouse_report.body.scroll_x += x; ++ mouse_report.body.scroll_y += y; ++ LOG_DBG("Mouse scroll updated to 0x%02X 0x%02X ", mouse_report.body.scroll_x, ++ mouse_report.body.scroll_y); ++} ++void zmk_hid_mouse_clear() { memset(&mouse_report.body, 0, sizeof(mouse_report.body)); } ++ + struct zmk_hid_keyboard_report *zmk_hid_get_keyboard_report() { + return &keyboard_report; + } +@@ -253,3 +335,7 @@ struct zmk_hid_keyboard_report *zmk_hid_get_keyboard_report() { + struct zmk_hid_consumer_report *zmk_hid_get_consumer_report() { + return &consumer_report; + } ++ ++struct zmk_hid_mouse_report *zmk_hid_get_mouse_report() { ++ return &mouse_report; ++} +diff --git a/app/src/hid_listener.c b/app/src/hid_listener.c +index e233b0b8ed..8cde3a4323 100644 +--- a/app/src/hid_listener.c ++++ b/app/src/hid_listener.c +@@ -11,7 +11,6 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + + #include + #include +-#include + #include + #include + #include +@@ -71,13 +70,14 @@ static int hid_listener_keycode_released(const struct zmk_keycode_state_changed + } + + int hid_listener(const zmk_event_t *eh) { +- const struct zmk_keycode_state_changed *ev = as_zmk_keycode_state_changed(eh); +- if (ev) { +- if (ev->state) { +- hid_listener_keycode_pressed(ev); ++ const struct zmk_keycode_state_changed *kc_ev = as_zmk_keycode_state_changed(eh); ++ if (kc_ev) { ++ if (kc_ev->state) { ++ hid_listener_keycode_pressed(kc_ev); + } else { +- hid_listener_keycode_released(ev); ++ hid_listener_keycode_released(kc_ev); + } ++ return 0; + } + return 0; + } +diff --git a/app/src/hog.c b/app/src/hog.c +index 3dd3e874a5..f915d27a91 100644 +--- a/app/src/hog.c ++++ b/app/src/hog.c +@@ -56,6 +56,11 @@ static struct hids_report consumer_input = { + .type = HIDS_INPUT, + }; + ++static struct hids_report mouse_input = { ++ .id = 0x04, ++ .type = HIDS_INPUT, ++}; ++ + static bool host_requests_notification = false; + static uint8_t ctrl_point; + // static uint8_t proto_mode; +@@ -93,6 +98,13 @@ static ssize_t read_hids_consumer_input_report(struct bt_conn *conn, + sizeof(struct zmk_hid_consumer_report_body)); + } + ++static ssize_t read_hids_mouse_input_report(struct bt_conn *conn, const struct bt_gatt_attr *attr, ++ void *buf, uint16_t len, uint16_t offset) { ++ struct zmk_hid_mouse_report_body *report_body = &zmk_hid_get_mouse_report()->body; ++ return bt_gatt_attr_read(conn, attr, buf, len, offset, report_body, ++ sizeof(struct zmk_hid_mouse_report_body)); ++} ++ + // static ssize_t write_proto_mode(struct bt_conn *conn, + // const struct bt_gatt_attr *attr, + // const void *buf, uint16_t len, uint16_t offset, +@@ -139,6 +151,13 @@ BT_GATT_SERVICE_DEFINE( + BT_GATT_CCC(input_ccc_changed, BT_GATT_PERM_READ_ENCRYPT | BT_GATT_PERM_WRITE_ENCRYPT), + BT_GATT_DESCRIPTOR(BT_UUID_HIDS_REPORT_REF, BT_GATT_PERM_READ_ENCRYPT, read_hids_report_ref, + NULL, &consumer_input), ++ ++ BT_GATT_CHARACTERISTIC(BT_UUID_HIDS_REPORT, BT_GATT_CHRC_READ | BT_GATT_CHRC_NOTIFY, ++ BT_GATT_PERM_READ_ENCRYPT, read_hids_mouse_input_report, NULL, NULL), ++ BT_GATT_CCC(input_ccc_changed, BT_GATT_PERM_READ_ENCRYPT | BT_GATT_PERM_WRITE_ENCRYPT), ++ BT_GATT_DESCRIPTOR(BT_UUID_HIDS_REPORT_REF, BT_GATT_PERM_READ_ENCRYPT, read_hids_report_ref, ++ NULL, &mouse_input), ++ + BT_GATT_CHARACTERISTIC(BT_UUID_HIDS_CTRL_POINT, BT_GATT_CHRC_WRITE_WITHOUT_RESP, + BT_GATT_PERM_WRITE, NULL, write_ctrl_point, &ctrl_point)); + +@@ -261,6 +280,76 @@ int zmk_hog_send_consumer_report(struct zmk_hid_consumer_report_body *report) { + return 0; + }; + ++K_MSGQ_DEFINE(zmk_hog_mouse_msgq, sizeof(struct zmk_hid_mouse_report_body), ++ CONFIG_ZMK_BLE_MOUSE_REPORT_QUEUE_SIZE, 4); ++ ++void send_mouse_report_callback(struct k_work *work) { ++ struct zmk_hid_mouse_report_body report; ++ while (k_msgq_get(&zmk_hog_mouse_msgq, &report, K_NO_WAIT) == 0) { ++ struct bt_conn *conn = destination_connection(); ++ if (conn == NULL) { ++ return; ++ } ++ ++ struct bt_gatt_notify_params notify_params = { ++ .attr = &hog_svc.attrs[13], ++ .data = &report, ++ .len = sizeof(report), ++ }; ++ ++ int err = bt_gatt_notify_cb(conn, ¬ify_params); ++ if (err) { ++ LOG_DBG("Error notifying %d", err); ++ } ++ ++ bt_conn_unref(conn); ++ } ++}; ++ ++K_WORK_DEFINE(hog_mouse_work, send_mouse_report_callback); ++ ++int zmk_hog_send_mouse_report(struct zmk_hid_mouse_report_body *report) { ++ int err = k_msgq_put(&zmk_hog_mouse_msgq, report, K_NO_WAIT); ++ if (err) { ++ switch (err) { ++ case -EAGAIN: { ++ LOG_WRN("Mouse message queue full, dropping report"); ++ return err; ++ } ++ default: ++ LOG_WRN("Failed to queue mouse report to send (%d)", err); ++ return err; ++ } ++ } ++ ++ k_work_submit_to_queue(&hog_work_q, &hog_mouse_work); ++ ++ return 0; ++}; ++ ++int zmk_hog_send_mouse_report_direct(struct zmk_hid_mouse_report_body *report) { ++ struct bt_conn *conn = destination_connection(); ++ if (conn == NULL) { ++ return 1; ++ } ++ ++ struct bt_gatt_notify_params notify_params = { ++ .attr = &hog_svc.attrs[13], ++ .data = report, ++ .len = sizeof(*report), ++ }; ++ ++ int err = bt_gatt_notify_cb(conn, ¬ify_params); ++ if (err) { ++ LOG_DBG("Error notifying %d", err); ++ return err; ++ } ++ ++ bt_conn_unref(conn); ++ ++ return 0; ++}; ++ + int zmk_hog_init(const struct device *_arg) { + static const struct k_work_queue_config queue_config = {.name = "HID Over GATT Send Work"}; + k_work_queue_start(&hog_work_q, hog_q_stack, K_THREAD_STACK_SIZEOF(hog_q_stack), +diff --git a/app/src/main.c b/app/src/main.c +index ae604a7b9e..d3b3e578b3 100644 +--- a/app/src/main.c ++++ b/app/src/main.c +@@ -17,6 +17,10 @@ LOG_MODULE_REGISTER(zmk, CONFIG_ZMK_LOG_LEVEL); + #include + #include + ++#ifdef CONFIG_ZMK_MOUSE ++#include ++#endif /* CONFIG_ZMK_MOUSE */ ++ + #define ZMK_KSCAN_DEV DT_LABEL(ZMK_MATRIX_NODE_ID) + + void main(void) { +@@ -29,4 +33,8 @@ void main(void) { + #ifdef CONFIG_ZMK_DISPLAY + zmk_display_init(); + #endif /* CONFIG_ZMK_DISPLAY */ ++ ++#ifdef CONFIG_ZMK_MOUSE ++ zmk_mouse_init(); ++#endif /* CONFIG_ZMK_MOUSE */ + } +diff --git a/app/src/mouse/Kconfig b/app/src/mouse/Kconfig +new file mode 100644 +index 0000000000..1161b86b42 +--- /dev/null ++++ b/app/src/mouse/Kconfig +@@ -0,0 +1,38 @@ ++# Copyright (c) 2021 The ZMK Contributors ++# SPDX-License-Identifier: MIT ++ ++menuconfig ZMK_MOUSE ++ bool "Enable ZMK mouse emulation" ++ default n ++ ++config ZMK_MOUSE_TICK_DURATION ++ int "Mouse tick duration in ms" ++ default 8 ++ ++if ZMK_MOUSE ++ ++choice ZMK_MOUSE_WORK_QUEUE ++ prompt "Work queue selection for mouse events" ++ default ZMK_MOUSE_WORK_QUEUE_DEDICATED ++ ++config ZMK_MOUSE_WORK_QUEUE_SYSTEM ++ bool "Use default system work queue for mouse events" ++ ++config ZMK_MOUSE_WORK_QUEUE_DEDICATED ++ bool "Use dedicated work queue for mouse events" ++ ++endchoice ++ ++if ZMK_MOUSE_WORK_QUEUE_DEDICATED ++ ++config ZMK_MOUSE_DEDICATED_THREAD_STACK_SIZE ++ int "Stack size for dedicated mouse thread/queue" ++ default 2048 ++ ++config ZMK_MOUSE_DEDICATED_THREAD_PRIORITY ++ int "Thread priority for dedicated mouse thread/queue" ++ default 3 ++ ++endif # ZMK_MOUSE_WORK_QUEUE_DEDICATED ++ ++endif +diff --git a/app/src/mouse/key_listener.c b/app/src/mouse/key_listener.c +new file mode 100644 +index 0000000000..713d032352 +--- /dev/null ++++ b/app/src/mouse/key_listener.c +@@ -0,0 +1,160 @@ ++/* ++ * Copyright (c) 2021 The ZMK Contributors ++ * ++ * SPDX-License-Identifier: MIT ++ */ ++ ++#include ++#include ++ ++LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++static struct vector2d move_speed = {0}; ++static struct vector2d scroll_speed = {0}; ++static struct mouse_config move_config = (struct mouse_config){0}; ++static struct mouse_config scroll_config = (struct mouse_config){0}; ++static int64_t start_time = 0; ++ ++bool equals(const struct mouse_config *one, const struct mouse_config *other) { ++ return one->delay_ms == other->delay_ms && ++ one->time_to_max_speed_ms == other->time_to_max_speed_ms && ++ one->acceleration_exponent == other->acceleration_exponent; ++} ++ ++static void clear_mouse_state(struct k_work *work) { ++ move_speed = (struct vector2d){0}; ++ scroll_speed = (struct vector2d){0}; ++ start_time = 0; ++ zmk_hid_mouse_movement_set(0, 0); ++ zmk_hid_mouse_scroll_set(0, 0); ++ LOG_DBG("Clearing state"); ++} ++ ++K_WORK_DEFINE(mouse_clear, &clear_mouse_state); ++ ++void mouse_clear_cb(struct k_timer *dummy) { ++ k_work_submit_to_queue(zmk_mouse_work_q(), &mouse_clear); ++} ++ ++static void mouse_tick_timer_handler(struct k_work *work) { ++ zmk_hid_mouse_movement_set(0, 0); ++ zmk_hid_mouse_scroll_set(0, 0); ++ LOG_DBG("Raising mouse tick event"); ++ ZMK_EVENT_RAISE( ++ zmk_mouse_tick(move_speed, scroll_speed, move_config, scroll_config, &start_time)); ++ zmk_endpoints_send_mouse_report(); ++} ++ ++K_WORK_DEFINE(mouse_tick, &mouse_tick_timer_handler); ++ ++void mouse_timer_cb(struct k_timer *dummy) { ++ LOG_DBG("Submitting mouse work to queue"); ++ k_work_submit_to_queue(zmk_mouse_work_q(), &mouse_tick); ++} ++ ++K_TIMER_DEFINE(mouse_timer, mouse_timer_cb, mouse_clear_cb); ++ ++static int mouse_timer_ref_count = 0; ++ ++void mouse_timer_ref() { ++ if (mouse_timer_ref_count == 0) { ++ start_time = k_uptime_get(); ++ k_timer_start(&mouse_timer, K_NO_WAIT, K_MSEC(CONFIG_ZMK_MOUSE_TICK_DURATION)); ++ } ++ mouse_timer_ref_count += 1; ++} ++ ++void mouse_timer_unref() { ++ if (mouse_timer_ref_count > 0) { ++ mouse_timer_ref_count--; ++ } ++ if (mouse_timer_ref_count == 0) { ++ k_timer_stop(&mouse_timer); ++ } ++} ++ ++static void listener_mouse_move_pressed(const struct zmk_mouse_move_state_changed *ev) { ++ move_speed.x += ev->max_speed.x; ++ move_speed.y += ev->max_speed.y; ++ mouse_timer_ref(); ++} ++ ++static void listener_mouse_move_released(const struct zmk_mouse_move_state_changed *ev) { ++ move_speed.x -= ev->max_speed.x; ++ move_speed.y -= ev->max_speed.y; ++ mouse_timer_unref(); ++} ++ ++static void listener_mouse_scroll_pressed(const struct zmk_mouse_scroll_state_changed *ev) { ++ scroll_speed.x += ev->max_speed.x; ++ scroll_speed.y += ev->max_speed.y; ++ mouse_timer_ref(); ++} ++ ++static void listener_mouse_scroll_released(const struct zmk_mouse_scroll_state_changed *ev) { ++ scroll_speed.x -= ev->max_speed.x; ++ scroll_speed.y -= ev->max_speed.y; ++ mouse_timer_unref(); ++} ++ ++static void listener_mouse_button_pressed(const struct zmk_mouse_button_state_changed *ev) { ++ LOG_DBG("buttons: 0x%02X", ev->buttons); ++ zmk_hid_mouse_buttons_press(ev->buttons); ++ zmk_endpoints_send_mouse_report(); ++} ++ ++static void listener_mouse_button_released(const struct zmk_mouse_button_state_changed *ev) { ++ LOG_DBG("buttons: 0x%02X", ev->buttons); ++ zmk_hid_mouse_buttons_release(ev->buttons); ++ zmk_endpoints_send_mouse_report(); ++} ++ ++int mouse_listener(const zmk_event_t *eh) { ++ const struct zmk_mouse_move_state_changed *mmv_ev = as_zmk_mouse_move_state_changed(eh); ++ if (mmv_ev) { ++ if (!equals(&move_config, &(mmv_ev->config))) ++ move_config = mmv_ev->config; ++ ++ if (mmv_ev->state) { ++ listener_mouse_move_pressed(mmv_ev); ++ } else { ++ listener_mouse_move_released(mmv_ev); ++ } ++ return 0; ++ } ++ const struct zmk_mouse_scroll_state_changed *msc_ev = as_zmk_mouse_scroll_state_changed(eh); ++ if (msc_ev) { ++ if (!equals(&scroll_config, &(msc_ev->config))) ++ scroll_config = msc_ev->config; ++ if (msc_ev->state) { ++ listener_mouse_scroll_pressed(msc_ev); ++ } else { ++ listener_mouse_scroll_released(msc_ev); ++ } ++ return 0; ++ } ++ const struct zmk_mouse_button_state_changed *mbt_ev = as_zmk_mouse_button_state_changed(eh); ++ if (mbt_ev) { ++ if (mbt_ev->state) { ++ listener_mouse_button_pressed(mbt_ev); ++ } else { ++ listener_mouse_button_released(mbt_ev); ++ } ++ return 0; ++ } ++ return 0; ++} ++ ++ZMK_LISTENER(mouse_listener, mouse_listener); ++ZMK_SUBSCRIPTION(mouse_listener, zmk_mouse_button_state_changed); ++ZMK_SUBSCRIPTION(mouse_listener, zmk_mouse_move_state_changed); ++ZMK_SUBSCRIPTION(mouse_listener, zmk_mouse_scroll_state_changed); +diff --git a/app/src/mouse/main.c b/app/src/mouse/main.c +new file mode 100644 +index 0000000000..49208a76ef +--- /dev/null ++++ b/app/src/mouse/main.c +@@ -0,0 +1,30 @@ ++/* ++ * Copyright (c) 2020 The ZMK Contributors ++ * ++ * SPDX-License-Identifier: MIT ++ */ ++ ++#include ++#include ++ ++#if IS_ENABLED(CONFIG_ZMK_MOUSE_WORK_QUEUE_DEDICATED) ++K_THREAD_STACK_DEFINE(mouse_work_stack_area, CONFIG_ZMK_MOUSE_DEDICATED_THREAD_STACK_SIZE); ++static struct k_work_q mouse_work_q; ++#endif ++ ++struct k_work_q *zmk_mouse_work_q() { ++#if IS_ENABLED(CONFIG_ZMK_MOUSE_WORK_QUEUE_DEDICATED) ++ return &mouse_work_q; ++#else ++ return &k_sys_work_q; ++#endif ++} ++ ++int zmk_mouse_init() { ++#if IS_ENABLED(CONFIG_ZMK_MOUSE_WORK_QUEUE_DEDICATED) ++ k_work_q_start(&mouse_work_q, mouse_work_stack_area, ++ K_THREAD_STACK_SIZEOF(mouse_work_stack_area), ++ CONFIG_ZMK_MOUSE_DEDICATED_THREAD_PRIORITY); ++#endif ++ return 0; ++} +\ No newline at end of file +diff --git a/app/src/mouse/tick_listener.c b/app/src/mouse/tick_listener.c +new file mode 100644 +index 0000000000..9c76bd5d2a +--- /dev/null ++++ b/app/src/mouse/tick_listener.c +@@ -0,0 +1,102 @@ ++/* ++ * Copyright (c) 2020 The ZMK Contributors ++ * ++ * SPDX-License-Identifier: MIT ++ */ ++ ++#include ++ ++LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); ++ ++#include ++#include ++#include ++#include ++ ++#include // CLAMP ++ ++#if CONFIG_MINIMAL_LIBC ++static float powf(float base, float exponent) { ++ // poor man's power implementation rounds the exponent down to the nearest integer. ++ float power = 1.0f; ++ for (; exponent >= 1.0f; exponent--) { ++ power = power * base; ++ } ++ return power; ++} ++#else ++#include ++#endif ++ ++struct vector2d move_remainder = {0}; ++struct vector2d scroll_remainder = {0}; ++ ++static int64_t ms_since_start(int64_t start, int64_t now, int64_t delay) { ++ int64_t move_duration = now - (start + delay); ++ // start can be in the future if there's a delay ++ if (move_duration < 0) { ++ move_duration = 0; ++ } ++ return move_duration; ++} ++ ++static float speed(const struct mouse_config *config, float max_speed, int64_t duration_ms) { ++ // Calculate the speed based on MouseKeysAccel ++ // See https://en.wikipedia.org/wiki/Mouse_keys ++ if (duration_ms > config->time_to_max_speed_ms || config->time_to_max_speed_ms == 0 || ++ config->acceleration_exponent == 0) { ++ return max_speed; ++ } ++ float time_fraction = (float)duration_ms / config->time_to_max_speed_ms; ++ return max_speed * powf(time_fraction, config->acceleration_exponent); ++} ++ ++static void track_remainder(float *move, float *remainder) { ++ float new_move = *move + *remainder; ++ *remainder = new_move - (int)new_move; ++ *move = (int)new_move; ++} ++ ++static struct vector2d update_movement(struct vector2d *remainder, ++ const struct mouse_config *config, struct vector2d max_speed, ++ int64_t now, int64_t *start_time) { ++ struct vector2d move = {0}; ++ if (max_speed.x == 0 && max_speed.y == 0) { ++ *remainder = (struct vector2d){0}; ++ return move; ++ } ++ ++ int64_t move_duration = ms_since_start(*start_time, now, config->delay_ms); ++ move = (struct vector2d){ ++ .x = speed(config, max_speed.x, move_duration) * CONFIG_ZMK_MOUSE_TICK_DURATION / 1000, ++ .y = speed(config, max_speed.y, move_duration) * CONFIG_ZMK_MOUSE_TICK_DURATION / 1000, ++ }; ++ ++ track_remainder(&(move.x), &(remainder->x)); ++ track_remainder(&(move.y), &(remainder->y)); ++ ++ return move; ++} ++ ++static void mouse_tick_handler(const struct zmk_mouse_tick *tick) { ++ struct vector2d move = update_movement(&move_remainder, &(tick->move_config), tick->max_move, ++ tick->timestamp, tick->start_time); ++ zmk_hid_mouse_movement_update((int16_t)CLAMP(move.x, INT16_MIN, INT16_MAX), ++ (int16_t)CLAMP(move.y, INT16_MIN, INT16_MAX)); ++ struct vector2d scroll = update_movement(&scroll_remainder, &(tick->scroll_config), ++ tick->max_scroll, tick->timestamp, tick->start_time); ++ zmk_hid_mouse_scroll_update((int8_t)CLAMP(scroll.x, INT8_MIN, INT8_MAX), ++ (int8_t)CLAMP(scroll.y, INT8_MIN, INT8_MAX)); ++} ++ ++int zmk_mouse_tick_listener(const zmk_event_t *eh) { ++ const struct zmk_mouse_tick *tick = as_zmk_mouse_tick(eh); ++ if (tick) { ++ mouse_tick_handler(tick); ++ return 0; ++ } ++ return 0; ++} ++ ++ZMK_LISTENER(zmk_mouse_tick_listener, zmk_mouse_tick_listener); ++ZMK_SUBSCRIPTION(zmk_mouse_tick_listener, zmk_mouse_tick); +\ No newline at end of file +diff --git a/app/tests/mouse-keys/mmv/events.patterns b/app/tests/mouse-keys/mmv/events.patterns +new file mode 100644 +index 0000000000..833100f6ac +--- /dev/null ++++ b/app/tests/mouse-keys/mmv/events.patterns +@@ -0,0 +1 @@ ++s/.*hid_listener_keycode_//p +\ No newline at end of file +diff --git a/app/tests/mouse-keys/mmv/keycode_events.snapshot b/app/tests/mouse-keys/mmv/keycode_events.snapshot +new file mode 100644 +index 0000000000..259501ba3d +--- /dev/null ++++ b/app/tests/mouse-keys/mmv/keycode_events.snapshot +@@ -0,0 +1,2 @@ ++pressed: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 ++released: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +diff --git a/app/tests/mouse-keys/mmv/native_posix.keymap b/app/tests/mouse-keys/mmv/native_posix.keymap +new file mode 100644 +index 0000000000..ecf06601c0 +--- /dev/null ++++ b/app/tests/mouse-keys/mmv/native_posix.keymap +@@ -0,0 +1,26 @@ ++#include ++#include ++#include ++#include ++ ++/ { ++ keymap { ++ compatible = "zmk,keymap"; ++ label ="Default keymap"; ++ ++ default_layer { ++ bindings = < ++ &mmv MOVE_LEFT &none ++ &none &none ++ >; ++ }; ++ }; ++}; ++ ++ ++&kscan { ++ events = < ++ ZMK_MOCK_PRESS(0,0,100) ++ ZMK_MOCK_RELEASE(0,0,10) ++ >; ++}; +\ No newline at end of file +diff --git a/docs/docs/behaviors/mouse-emulation.md b/docs/docs/behaviors/mouse-emulation.md +new file mode 100644 +index 0000000000..efe095e7a0 +--- /dev/null ++++ b/docs/docs/behaviors/mouse-emulation.md +@@ -0,0 +1,110 @@ ++--- ++title: Mouse Emulation Behaviors ++sidebar_label: Mouse Emulation ++--- ++ ++## Summary ++ ++Mouse emulation behaviors send mouse movements, button presses or scroll actions. ++ ++Please view [`dt-bindings/zmk/mouse.h`](https://github.com/zmkfirmware/zmk/blob/main/app/include/dt-bindings/zmk/mouse.h) for a comprehensive list of signals. ++ ++## Configuration options ++ ++This feature should be enabled via a config option: ++ ++``` ++CONFIG_ZMK_MOUSE=y ++``` ++ ++This option enables several others. ++ ++### Dedicated thread processing ++ ++`CONFIG_ZMK_MOUSE_WORK_QUEUE_DEDICATED` is enabled by default and separates the processing of mouse signals into a dedicated thread, significantly improving performance. ++ ++### Tick rate configuration ++ ++`CONFIG_ZMK_MOUSE_TICK_DURATION` sets the tick rate for mouse polling. It is set to 8 ms. by default. ++ ++## Keycode Defines ++ ++To make it easier to encode the HID keycode numeric values, most keymaps include ++the [`dt-bindings/zmk/mouse.h`](https://github.com/zmkfirmware/zmk/blob/main/app/include/dt-bindings/zmk/mouse.h) header ++provided by ZMK near the top: ++ ++``` ++#include ++``` ++ ++Doing so allows using a set of defines such as `MOVE_UP`, `MOVE_DOWN`, `LCLK` and `SCROLL_UP` with these behaviors. ++ ++## Mouse Button Press ++ ++This behavior can press/release up to 16 mouse buttons. ++ ++### Behavior Binding ++ ++- Reference: `&mkp` ++- Parameter: A `uint16` with each bit referring to a button. ++ ++Example: ++ ++``` ++&mkp LCLK ++``` ++ ++## Mouse Movement ++ ++This behavior is used to manipulate the cursor. ++ ++### Behavior Binding ++ ++- Reference: `&mmv` ++- Parameter: A `uint32` with the first 16 bits relating to horizontal movement ++ and the last 16 - to vertical movement. ++ ++Example: ++ ++``` ++&mmv MOVE_UP ++``` ++ ++## Mouse Scrolling ++ ++This behaviour is used to scroll, both horizontally and vertically. ++ ++### Behavior Binding ++ ++- Reference: `&mwh` ++- Parameter: A `uint16` with the first 8 bits relating to horizontal movement ++ and the last 8 - to vertical movement. ++ ++Example: ++ ++``` ++&mwh SCROLL_UP ++``` ++ ++## Acceleration ++ ++Both mouse movement and scrolling have independently configurable acceleration profiles with three parameters: delay before movement, time to max speed and the acceleration exponent. ++The exponent is usually set to 0 for constant speed, 1 for uniform acceleration or 2 for uniform jerk. ++ ++These profiles can be configured inside your keymap: ++ ++``` ++&mmv { ++ time-to-max-speed-ms = <500>; ++}; ++ ++&mwh { ++ acceleration-exponent=<1>; ++}; ++ ++/ { ++ keymap { ++ ... ++ }; ++}; ++``` +diff --git a/docs/sidebars.js b/docs/sidebars.js +index 7b445a2901..5e18b05dd0 100644 +--- a/docs/sidebars.js ++++ b/docs/sidebars.js +@@ -34,6 +34,7 @@ module.exports = { + "behaviors/tap-dance", + "behaviors/caps-word", + "behaviors/key-repeat", ++ "behaviors/mouse-emulation", + "behaviors/reset", + "behaviors/bluetooth", + "behaviors/outputs", + +From f8a0c397e25cb4a4c8c1a2d91da2db0e9401ad73 Mon Sep 17 00:00:00 2001 +From: Jesper Jensen +Date: Wed, 17 Aug 2022 23:26:23 +0200 +Subject: [PATCH 2/2] Remove everything not required for buttons + +I've stripped out everything not strictly required for mouse button HID +support. This include dropping the worker thread completely, shaving +down the USB HID descriptor. Flattening the mouse/ source directory +structure and removing a bunch of event handling. + +I have kept the mouse event handling separate from the other HID event +handling since I figured that was a pretty neat split. If that's a bad +idea, do tell. + +I've also added a test case for mouse button emulation, since that was +untested before. + +The changes have been tested on a corne (split) in usb mode. Bindings on +both the left and the right side works (with the left side as master). +--- + app/CMakeLists.txt | 9 +- + app/Kconfig | 4 +- + app/dts/behaviors.dtsi | 2 - + app/dts/behaviors/mouse_move.dtsi | 12 -- + app/dts/behaviors/mouse_scroll.dtsi | 12 -- + .../behaviors/zmk,behavior-mouse-move.yaml | 13 -- + .../behaviors/zmk,behavior-mouse-scroll.yaml | 13 -- + app/include/dt-bindings/zmk/mouse.h | 26 --- + .../zmk/events/mouse_button_state_changed.h | 2 +- + .../zmk/events/mouse_move_state_changed.h | 33 ---- + .../zmk/events/mouse_scroll_state_changed.h | 34 ---- + app/include/zmk/events/mouse_tick.h | 39 ----- + app/include/zmk/hid.h | 135 ++------------- + app/include/zmk/mouse.h | 17 -- + app/src/behaviors/behavior_mouse_move.c | 57 ------- + app/src/behaviors/behavior_mouse_scroll.c | 58 ------- + app/src/endpoints.c | 4 - + app/src/events/mouse_move_state_changed.c | 10 -- + app/src/events/mouse_scroll_state_changed.c | 10 -- + app/src/events/mouse_tick.c | 10 -- + app/src/hid.c | 28 +-- + app/src/hid_listener.c | 12 +- + app/src/hog.c | 21 --- + app/src/main.c | 8 - + app/src/mouse.c | 43 +++++ + app/src/mouse/Kconfig | 38 ----- + app/src/mouse/key_listener.c | 160 ------------------ + app/src/mouse/main.c | 30 ---- + app/src/mouse/tick_listener.c | 102 ----------- + app/tests/mouse-keys/mkp/events.patterns | 1 + + .../mouse-keys/mkp/keycode_events.snapshot | 10 ++ + .../{mmv => mkp}/native_posix.keymap | 12 +- + .../mouse-keys/mkp/native_posix_64.keymap | 28 +++ + app/tests/mouse-keys/mmv/events.patterns | 1 - + .../mouse-keys/mmv/keycode_events.snapshot | 2 - + docs/docs/behaviors/mouse-emulation.md | 67 +------- + 36 files changed, 120 insertions(+), 943 deletions(-) + delete mode 100644 app/dts/behaviors/mouse_move.dtsi + delete mode 100644 app/dts/behaviors/mouse_scroll.dtsi + delete mode 100644 app/dts/bindings/behaviors/zmk,behavior-mouse-move.yaml + delete mode 100644 app/dts/bindings/behaviors/zmk,behavior-mouse-scroll.yaml + delete mode 100644 app/include/zmk/events/mouse_move_state_changed.h + delete mode 100644 app/include/zmk/events/mouse_scroll_state_changed.h + delete mode 100644 app/include/zmk/events/mouse_tick.h + delete mode 100644 app/src/behaviors/behavior_mouse_move.c + delete mode 100644 app/src/behaviors/behavior_mouse_scroll.c + delete mode 100644 app/src/events/mouse_move_state_changed.c + delete mode 100644 app/src/events/mouse_scroll_state_changed.c + delete mode 100644 app/src/events/mouse_tick.c + create mode 100644 app/src/mouse.c + delete mode 100644 app/src/mouse/Kconfig + delete mode 100644 app/src/mouse/key_listener.c + delete mode 100644 app/src/mouse/main.c + delete mode 100644 app/src/mouse/tick_listener.c + create mode 100644 app/tests/mouse-keys/mkp/events.patterns + create mode 100644 app/tests/mouse-keys/mkp/keycode_events.snapshot + rename app/tests/mouse-keys/{mmv => mkp}/native_posix.keymap (64%) + create mode 100644 app/tests/mouse-keys/mkp/native_posix_64.keymap + delete mode 100644 app/tests/mouse-keys/mmv/events.patterns + delete mode 100644 app/tests/mouse-keys/mmv/keycode_events.snapshot + +diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt +index 351505ad77..cf18f4c029 100644 +--- a/app/CMakeLists.txt ++++ b/app/CMakeLists.txt +@@ -24,9 +24,6 @@ target_sources(app PRIVATE src/stdlib.c) + target_sources(app PRIVATE src/activity.c) + target_sources(app PRIVATE src/kscan.c) + target_sources(app PRIVATE src/matrix_transform.c) +-target_sources(app PRIVATE src/mouse/key_listener.c) +-target_sources(app PRIVATE src/mouse/main.c) +-target_sources(app PRIVATE src/mouse/tick_listener.c) + target_sources(app PRIVATE src/sensors.c) + target_sources_ifdef(CONFIG_ZMK_WPM app PRIVATE src/wpm.c) + target_sources(app PRIVATE src/event_manager.c) +@@ -35,15 +32,13 @@ target_sources(app PRIVATE src/events/activity_state_changed.c) + target_sources(app PRIVATE src/events/position_state_changed.c) + target_sources(app PRIVATE src/events/sensor_event.c) + target_sources(app PRIVATE src/events/mouse_button_state_changed.c) +-target_sources(app PRIVATE src/events/mouse_move_state_changed.c) +-target_sources(app PRIVATE src/events/mouse_tick.c) +-target_sources(app PRIVATE src/events/mouse_scroll_state_changed.c) + target_sources_ifdef(CONFIG_ZMK_WPM app PRIVATE src/events/wpm_state_changed.c) + target_sources_ifdef(CONFIG_USB_DEVICE_STACK app PRIVATE src/events/usb_conn_state_changed.c) + target_sources(app PRIVATE src/behaviors/behavior_reset.c) + target_sources_ifdef(CONFIG_ZMK_EXT_POWER app PRIVATE src/behaviors/behavior_ext_power.c) + if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_ROLE_CENTRAL) + target_sources(app PRIVATE src/hid.c) ++ target_sources(app PRIVATE src/mouse.c) + target_sources(app PRIVATE src/behaviors/behavior_key_press.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_KEY_TOGGLE app PRIVATE src/behaviors/behavior_key_toggle.c) + target_sources(app PRIVATE src/behaviors/behavior_hold_tap.c) +@@ -61,8 +56,6 @@ if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_ROLE_CENTRAL) + target_sources(app PRIVATE src/behaviors/behavior_none.c) + target_sources(app PRIVATE src/behaviors/behavior_sensor_rotate_key_press.c) + target_sources(app PRIVATE src/behaviors/behavior_mouse_key_press.c) +- target_sources(app PRIVATE src/behaviors/behavior_mouse_move.c) +- target_sources(app PRIVATE src/behaviors/behavior_mouse_scroll.c) + target_sources(app PRIVATE src/combo.c) + target_sources(app PRIVATE src/behavior_queue.c) + target_sources(app PRIVATE src/conditional_layer.c) +diff --git a/app/Kconfig b/app/Kconfig +index 3c59605814..7a422c2b9c 100644 +--- a/app/Kconfig ++++ b/app/Kconfig +@@ -291,7 +291,9 @@ endmenu + + menu "Mouse Options" + +-rsource "src/mouse/Kconfig" ++config ZMK_MOUSE ++ bool "Enable ZMK mouse emulation" ++ default n + + #Mouse Options + endmenu +diff --git a/app/dts/behaviors.dtsi b/app/dts/behaviors.dtsi +index 77eccf912f..23f2fee280 100644 +--- a/app/dts/behaviors.dtsi ++++ b/app/dts/behaviors.dtsi +@@ -20,5 +20,3 @@ + #include + #include + #include +-#include +-#include +diff --git a/app/dts/behaviors/mouse_move.dtsi b/app/dts/behaviors/mouse_move.dtsi +deleted file mode 100644 +index d34329c806..0000000000 +--- a/app/dts/behaviors/mouse_move.dtsi ++++ /dev/null +@@ -1,12 +0,0 @@ +-/ { +- behaviors { +- /omit-if-no-ref/ mmv: behavior_mouse_move { +- compatible = "zmk,behavior-mouse-move"; +- label = "MOUSE_MOVE"; +- #binding-cells = <1>; +- delay-ms = <0>; +- time-to-max-speed-ms = <300>; +- acceleration-exponent = <1>; +- }; +- }; +-}; +diff --git a/app/dts/behaviors/mouse_scroll.dtsi b/app/dts/behaviors/mouse_scroll.dtsi +deleted file mode 100644 +index fb54886dcb..0000000000 +--- a/app/dts/behaviors/mouse_scroll.dtsi ++++ /dev/null +@@ -1,12 +0,0 @@ +-/ { +- behaviors { +- /omit-if-no-ref/ mwh: msc: behavior_mouse_scroll { +- compatible = "zmk,behavior-mouse-scroll"; +- label = "MOUSE_SCROLL"; +- #binding-cells = <1>; +- delay-ms = <0>; +- time-to-max-speed-ms = <300>; +- acceleration-exponent = <0>; +- }; +- }; +-}; +diff --git a/app/dts/bindings/behaviors/zmk,behavior-mouse-move.yaml b/app/dts/bindings/behaviors/zmk,behavior-mouse-move.yaml +deleted file mode 100644 +index 73ec34ec2d..0000000000 +--- a/app/dts/bindings/behaviors/zmk,behavior-mouse-move.yaml ++++ /dev/null +@@ -1,13 +0,0 @@ +-description: Mouse move +- +-compatible: "zmk,behavior-mouse-move" +- +-include: one_param.yaml +- +-properties: +- delay-ms: +- type: int +- time-to-max-speed-ms: +- type: int +- acceleration-exponent: +- type: int +diff --git a/app/dts/bindings/behaviors/zmk,behavior-mouse-scroll.yaml b/app/dts/bindings/behaviors/zmk,behavior-mouse-scroll.yaml +deleted file mode 100644 +index 5a932bc590..0000000000 +--- a/app/dts/bindings/behaviors/zmk,behavior-mouse-scroll.yaml ++++ /dev/null +@@ -1,13 +0,0 @@ +-description: Mouse scroll +- +-compatible: "zmk,behavior-mouse-scroll" +- +-include: one_param.yaml +- +-properties: +- delay-ms: +- type: int +- time-to-max-speed-ms: +- type: int +- acceleration-exponent: +- type: int +diff --git a/app/include/dt-bindings/zmk/mouse.h b/app/include/dt-bindings/zmk/mouse.h +index cf0415c9b2..4bb3064dfc 100644 +--- a/app/include/dt-bindings/zmk/mouse.h ++++ b/app/include/dt-bindings/zmk/mouse.h +@@ -27,29 +27,3 @@ + #define MB7 (0x40) + + #define MB8 (0x80) +- +-/* Mouse move behavior */ +-#define MOVE_VERT(vert) ((vert)&0xFFFF) +-#define MOVE_VERT_DECODE(encoded) (int16_t)((encoded)&0x0000FFFF) +-#define MOVE_HOR(hor) (((hor)&0xFFFF) << 16) +-#define MOVE_HOR_DECODE(encoded) (int16_t)(((encoded)&0xFFFF0000) >> 16) +- +-#define MOVE(hor, vert) (MOVE_HOR(hor) + MOVE_VERT(vert)) +- +-#define MOVE_UP MOVE_VERT(-600) +-#define MOVE_DOWN MOVE_VERT(600) +-#define MOVE_LEFT MOVE_HOR(-600) +-#define MOVE_RIGHT MOVE_HOR(600) +- +-/* Mouse scroll behavior */ +-#define SCROLL_VERT(vert) ((vert)&0xFFFF) +-#define SCROLL_VERT_DECODE(encoded) (int16_t)((encoded)&0x0000FFFF) +-#define SCROLL_HOR(hor) (((hor)&0xFFFF) << 16) +-#define SCROLL_HOR_DECODE(encoded) (int16_t)(((encoded)&0xFFFF0000) >> 16) +- +-#define SCROLL(hor, vert) (SCROLL_HOR(hor) + SCROLL_VERT(vert)) +- +-#define SCROLL_UP SCROLL_VERT(10) +-#define SCROLL_DOWN SCROLL_VERT(-10) +-#define SCROLL_LEFT SCROLL_HOR(-10) +-#define SCROLL_RIGHT SCROLL_HOR(10) +diff --git a/app/include/zmk/events/mouse_button_state_changed.h b/app/include/zmk/events/mouse_button_state_changed.h +index 7ec4d2087c..6c3adae30d 100644 +--- a/app/include/zmk/events/mouse_button_state_changed.h ++++ b/app/include/zmk/events/mouse_button_state_changed.h +@@ -23,5 +23,5 @@ ZMK_EVENT_DECLARE(zmk_mouse_button_state_changed); + static inline struct zmk_mouse_button_state_changed_event * + zmk_mouse_button_state_changed_from_encoded(uint32_t encoded, bool pressed, int64_t timestamp) { + return new_zmk_mouse_button_state_changed((struct zmk_mouse_button_state_changed){ +- .buttons = HID_USAGE_ID(encoded), .state = pressed, .timestamp = timestamp}); ++ .buttons = ZMK_HID_USAGE_ID(encoded), .state = pressed, .timestamp = timestamp}); + } +diff --git a/app/include/zmk/events/mouse_move_state_changed.h b/app/include/zmk/events/mouse_move_state_changed.h +deleted file mode 100644 +index 8866f81d4e..0000000000 +--- a/app/include/zmk/events/mouse_move_state_changed.h ++++ /dev/null +@@ -1,33 +0,0 @@ +- +-/* +- * Copyright (c) 2020 The ZMK Contributors +- * +- * SPDX-License-Identifier: MIT +- */ +- +-#pragma once +- +-#include +-#include +-#include +- +-struct zmk_mouse_move_state_changed { +- struct vector2d max_speed; +- struct mouse_config config; +- bool state; +- int64_t timestamp; +-}; +- +-ZMK_EVENT_DECLARE(zmk_mouse_move_state_changed); +- +-static inline struct zmk_mouse_move_state_changed_event * +-zmk_mouse_move_state_changed_from_encoded(uint32_t encoded, struct mouse_config config, +- bool pressed, int64_t timestamp) { +- struct vector2d max_speed = (struct vector2d){ +- .x = MOVE_HOR_DECODE(encoded), +- .y = MOVE_VERT_DECODE(encoded), +- }; +- +- return new_zmk_mouse_move_state_changed((struct zmk_mouse_move_state_changed){ +- .max_speed = max_speed, .config = config, .state = pressed, .timestamp = timestamp}); +-} +diff --git a/app/include/zmk/events/mouse_scroll_state_changed.h b/app/include/zmk/events/mouse_scroll_state_changed.h +deleted file mode 100644 +index fa60e8a742..0000000000 +--- a/app/include/zmk/events/mouse_scroll_state_changed.h ++++ /dev/null +@@ -1,34 +0,0 @@ +- +-/* +- * Copyright (c) 2020 The ZMK Contributors +- * +- * SPDX-License-Identifier: MIT +- */ +- +-#pragma once +- +-#include +-#include +-#include +-#include +- +-struct zmk_mouse_scroll_state_changed { +- struct vector2d max_speed; +- struct mouse_config config; +- bool state; +- int64_t timestamp; +-}; +- +-ZMK_EVENT_DECLARE(zmk_mouse_scroll_state_changed); +- +-static inline struct zmk_mouse_scroll_state_changed_event * +-zmk_mouse_scroll_state_changed_from_encoded(uint32_t encoded, struct mouse_config config, +- bool pressed, int64_t timestamp) { +- struct vector2d max_speed = (struct vector2d){ +- .x = SCROLL_HOR_DECODE(encoded), +- .y = SCROLL_VERT_DECODE(encoded), +- }; +- +- return new_zmk_mouse_scroll_state_changed((struct zmk_mouse_scroll_state_changed){ +- .max_speed = max_speed, .config = config, .state = pressed, .timestamp = timestamp}); +-} +diff --git a/app/include/zmk/events/mouse_tick.h b/app/include/zmk/events/mouse_tick.h +deleted file mode 100644 +index c75b9b4f86..0000000000 +--- a/app/include/zmk/events/mouse_tick.h ++++ /dev/null +@@ -1,39 +0,0 @@ +- +-/* +- * Copyright (c) 2020 The ZMK Contributors +- * +- * SPDX-License-Identifier: MIT +- */ +- +-#pragma once +- +-#include +-#include +-#include +-#include +- +-struct zmk_mouse_tick { +- struct vector2d max_move; +- struct vector2d max_scroll; +- struct mouse_config move_config; +- struct mouse_config scroll_config; +- int64_t *start_time; +- int64_t timestamp; +-}; +- +-ZMK_EVENT_DECLARE(zmk_mouse_tick); +- +-static inline struct zmk_mouse_tick_event *zmk_mouse_tick(struct vector2d max_move, +- struct vector2d max_scroll, +- struct mouse_config move_config, +- struct mouse_config scroll_config, +- int64_t *movement_start) { +- return new_zmk_mouse_tick((struct zmk_mouse_tick){ +- .max_move = max_move, +- .max_scroll = max_scroll, +- .move_config = move_config, +- .scroll_config = scroll_config, +- .start_time = movement_start, +- .timestamp = k_uptime_get(), +- }); +-} +diff --git a/app/include/zmk/hid.h b/app/include/zmk/hid.h +index aa26cd3a54..f30db315d9 100644 +--- a/app/include/zmk/hid.h ++++ b/app/include/zmk/hid.h +@@ -14,6 +14,8 @@ + #include + #include + ++#define ZMK_HID_KEYBOARD_NKRO_MAX_USAGE HID_USAGE_KEY_KEYPAD_EQUAL ++ + #define COLLECTION_REPORT 0x03 + + static const uint8_t zmk_hid_report_desc[] = { +@@ -89,115 +91,22 @@ static const uint8_t zmk_hid_report_desc[] = { + HID_INPUT(0x00), + HID_END_COLLECTION, + +- /* USAGE_PAGE (Generic Desktop) */ +- HID_GI_USAGE_PAGE, +- HID_USAGE_GD, +- /* USAGE (Mouse) */ +- HID_LI_USAGE, +- HID_USAGE_GD_MOUSE, +- /* COLLECTION (Application) */ +- HID_MI_COLLECTION, +- COLLECTION_APPLICATION, +- /* REPORT ID (4) */ +- HID_GI_REPORT_ID, +- 0x04, +- /* USAGE (Pointer) */ +- HID_LI_USAGE, +- HID_USAGE_GD_POINTER, +- /* COLLECTION (Physical) */ +- HID_MI_COLLECTION, +- COLLECTION_PHYSICAL, +- /* USAGE_PAGE (Button) */ +- HID_GI_USAGE_PAGE, +- HID_USAGE_BUTTON, +- /* USAGE_MINIMUM (0x1) (button 1?) */ +- HID_LI_USAGE_MIN(1), +- 0x1, +- /* USAGE_MAXIMUM (0x10) (button 5? Buttons up to 8 still work) */ +- HID_LI_USAGE_MAX(1), +- 0x10, +- /* LOGICAL_MINIMUM (0) */ +- HID_GI_LOGICAL_MIN(1), +- 0x00, +- /* LOGICAL_MAXIMUM (1) */ +- HID_GI_LOGICAL_MAX(1), +- 0x01, +- /* REPORT_SIZE (1) */ +- HID_GI_REPORT_SIZE, +- 0x01, +- /* REPORT_COUNT (16) */ +- HID_GI_REPORT_COUNT, +- 0x10, +- /* INPUT (Data,Var,Abs) */ +- HID_MI_INPUT, +- 0x02, +- /* USAGE_PAGE (Generic Desktop) */ +- HID_GI_USAGE_PAGE, +- HID_USAGE_GD, +- /* LOGICAL_MINIMUM (-32767) */ +- HID_GI_LOGICAL_MIN(2), +- 0x01, +- 0x80, +- /* LOGICAL_MAXIMUM (32767) */ +- HID_GI_LOGICAL_MAX(2), +- 0xFF, +- 0x7F, +- /* REPORT_SIZE (16) */ +- HID_GI_REPORT_SIZE, +- 0x10, +- /* REPORT_COUNT (2) */ +- HID_GI_REPORT_COUNT, +- 0x02, +- /* USAGE (X) */ // Vertical scroll +- HID_LI_USAGE, +- HID_USAGE_GD_X, +- /* USAGE (Y) */ +- HID_LI_USAGE, +- HID_USAGE_GD_Y, +- /* Input (Data,Var,Rel) */ +- HID_MI_INPUT, +- 0x06, +- /* LOGICAL_MINIMUM (-127) */ +- HID_GI_LOGICAL_MIN(1), +- 0x81, +- /* LOGICAL_MAXIMUM (127) */ +- HID_GI_LOGICAL_MAX(1), +- 0x7F, +- /* REPORT_SIZE (8) */ +- HID_GI_REPORT_SIZE, +- 0x08, +- /* REPORT_COUNT (1) */ +- HID_GI_REPORT_COUNT, +- 0x01, +- /* USAGE (Wheel) */ +- HID_LI_USAGE, +- HID_USAGE_GD_WHEEL, +- /* Input (Data,Var,Rel) */ +- HID_MI_INPUT, +- 0x06, +- /* USAGE_PAGE (Consumer) */ // Horizontal scroll +- HID_GI_USAGE_PAGE, +- HID_USAGE_CONSUMER, +- /* USAGE (AC Pan) */ +- 0x0A, +- 0x38, +- 0x02, +- /* LOGICAL_MINIMUM (-127) */ +- HID_GI_LOGICAL_MIN(1), +- 0x81, +- /* LOGICAL_MAXIMUM (127) */ +- HID_GI_LOGICAL_MAX(1), +- 0x7F, +- /* REPORT_COUNT (1) */ +- HID_GI_REPORT_COUNT, +- 0x01, +- /* Input (Data,Var,Rel) */ +- HID_MI_INPUT, +- 0x06, +- /* END COLLECTION */ +- HID_MI_COLLECTION_END, +- /* END COLLECTION */ +- HID_MI_COLLECTION_END, ++ HID_USAGE_PAGE(HID_USAGE_GD), ++ HID_USAGE(HID_USAGE_GD_MOUSE), ++ HID_COLLECTION(HID_COLLECTION_APPLICATION), ++ HID_REPORT_ID(0x04), ++ HID_USAGE(HID_USAGE_GD_POINTER), ++ HID_COLLECTION(HID_COLLECTION_PHYSICAL), ++ HID_USAGE_PAGE(HID_USAGE_BUTTON), ++ HID_USAGE_MIN8(0x1), ++ HID_USAGE_MAX8(0x10), ++ HID_LOGICAL_MIN8(0x00), ++ HID_LOGICAL_MAX8(0x01), ++ HID_REPORT_SIZE(0x01), ++ HID_REPORT_COUNT(0x10), ++ HID_INPUT(0x02), ++ HID_END_COLLECTION, ++ HID_END_COLLECTION, + }; + + // struct zmk_hid_boot_report +@@ -237,10 +146,6 @@ struct zmk_hid_consumer_report { + + struct zmk_hid_mouse_report_body { + zmk_mouse_button_flags_t buttons; +- int16_t x; +- int16_t y; +- int8_t scroll_y; +- int8_t scroll_x; + } __packed; + + struct zmk_hid_mouse_report { +@@ -276,10 +181,6 @@ int zmk_hid_mouse_button_press(zmk_mouse_button_t button); + int zmk_hid_mouse_button_release(zmk_mouse_button_t button); + int zmk_hid_mouse_buttons_press(zmk_mouse_button_flags_t buttons); + int zmk_hid_mouse_buttons_release(zmk_mouse_button_flags_t buttons); +-void zmk_hid_mouse_movement_set(int16_t x, int16_t y); +-void zmk_hid_mouse_scroll_set(int8_t x, int8_t y); +-void zmk_hid_mouse_movement_update(int16_t x, int16_t y); +-void zmk_hid_mouse_scroll_update(int8_t x, int8_t y); + void zmk_hid_mouse_clear(); + + struct zmk_hid_keyboard_report *zmk_hid_get_keyboard_report(); +diff --git a/app/include/zmk/mouse.h b/app/include/zmk/mouse.h +index f8f857441e..e749ac5d62 100644 +--- a/app/include/zmk/mouse.h ++++ b/app/include/zmk/mouse.h +@@ -11,20 +11,3 @@ + + typedef uint16_t zmk_mouse_button_flags_t; + typedef uint16_t zmk_mouse_button_t; +- +-struct mouse_config { +- int delay_ms; +- int time_to_max_speed_ms; +- // acceleration exponent 0: uniform speed +- // acceleration exponent 1: uniform acceleration +- // acceleration exponent 2: uniform jerk +- int acceleration_exponent; +-}; +- +-struct vector2d { +- float x; +- float y; +-}; +- +-struct k_work_q *zmk_mouse_work_q(); +-int zmk_mouse_init(); +\ No newline at end of file +diff --git a/app/src/behaviors/behavior_mouse_move.c b/app/src/behaviors/behavior_mouse_move.c +deleted file mode 100644 +index 5977a039d1..0000000000 +--- a/app/src/behaviors/behavior_mouse_move.c ++++ /dev/null +@@ -1,57 +0,0 @@ +-/* +- * Copyright (c) 2021 The ZMK Contributors +- * +- * SPDX-License-Identifier: MIT +- */ +- +-#define DT_DRV_COMPAT zmk_behavior_mouse_move +- +-#include +-#include +-#include +- +-#include +-#include +-#include +-#include +- +-LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); +- +-#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) +- +-static int behavior_mouse_move_init(const struct device *dev) { return 0; }; +- +-static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, +- struct zmk_behavior_binding_event event) { +- LOG_DBG("position %d keycode 0x%02X", event.position, binding->param1); +- const struct device *dev = device_get_binding(binding->behavior_dev); +- const struct mouse_config *config = dev->config; +- return ZMK_EVENT_RAISE( +- zmk_mouse_move_state_changed_from_encoded(binding->param1, *config, true, event.timestamp)); +-} +- +-static int on_keymap_binding_released(struct zmk_behavior_binding *binding, +- struct zmk_behavior_binding_event event) { +- LOG_DBG("position %d keycode 0x%02X", event.position, binding->param1); +- const struct device *dev = device_get_binding(binding->behavior_dev); +- const struct mouse_config *config = dev->config; +- return ZMK_EVENT_RAISE(zmk_mouse_move_state_changed_from_encoded(binding->param1, *config, +- false, event.timestamp)); +-} +- +-static const struct behavior_driver_api behavior_mouse_move_driver_api = { +- .binding_pressed = on_keymap_binding_pressed, .binding_released = on_keymap_binding_released}; +- +-#define KP_INST(n) \ +- static struct mouse_config behavior_mouse_move_config_##n = { \ +- .delay_ms = DT_INST_PROP(n, delay_ms), \ +- .time_to_max_speed_ms = DT_INST_PROP(n, time_to_max_speed_ms), \ +- .acceleration_exponent = DT_INST_PROP(n, acceleration_exponent), \ +- }; \ +- DEVICE_DT_INST_DEFINE(n, behavior_mouse_move_init, device_pm_control_nop, NULL, \ +- &behavior_mouse_move_config_##n, APPLICATION, \ +- CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_mouse_move_driver_api); +- +-DT_INST_FOREACH_STATUS_OKAY(KP_INST) +- +-#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ +diff --git a/app/src/behaviors/behavior_mouse_scroll.c b/app/src/behaviors/behavior_mouse_scroll.c +deleted file mode 100644 +index 6416235265..0000000000 +--- a/app/src/behaviors/behavior_mouse_scroll.c ++++ /dev/null +@@ -1,58 +0,0 @@ +-/* +- * Copyright (c) 2021 The ZMK Contributors +- * +- * SPDX-License-Identifier: MIT +- */ +- +-#define DT_DRV_COMPAT zmk_behavior_mouse_scroll +- +-#include +-#include +-#include +- +-#include +-#include +-#include +-#include +-#include +- +-LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); +- +-#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) +- +-static int behavior_mouse_scroll_init(const struct device *dev) { return 0; }; +- +-static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, +- struct zmk_behavior_binding_event event) { +- LOG_DBG("position %d keycode 0x%02X", event.position, binding->param1); +- const struct device *dev = device_get_binding(binding->behavior_dev); +- const struct mouse_config *config = dev->config; +- return ZMK_EVENT_RAISE(zmk_mouse_scroll_state_changed_from_encoded(binding->param1, *config, +- true, event.timestamp)); +-} +- +-static int on_keymap_binding_released(struct zmk_behavior_binding *binding, +- struct zmk_behavior_binding_event event) { +- LOG_DBG("position %d keycode 0x%02X", event.position, binding->param1); +- const struct device *dev = device_get_binding(binding->behavior_dev); +- const struct mouse_config *config = dev->config; +- return ZMK_EVENT_RAISE(zmk_mouse_scroll_state_changed_from_encoded(binding->param1, *config, +- false, event.timestamp)); +-} +- +-static const struct behavior_driver_api behavior_mouse_scroll_driver_api = { +- .binding_pressed = on_keymap_binding_pressed, .binding_released = on_keymap_binding_released}; +- +-#define KP_INST(n) \ +- static struct mouse_config behavior_mouse_scroll_config_##n = { \ +- .delay_ms = DT_INST_PROP(n, delay_ms), \ +- .time_to_max_speed_ms = DT_INST_PROP(n, time_to_max_speed_ms), \ +- .acceleration_exponent = DT_INST_PROP(n, acceleration_exponent), \ +- }; \ +- DEVICE_DT_INST_DEFINE(n, behavior_mouse_scroll_init, device_pm_control_nop, NULL, \ +- &behavior_mouse_scroll_config_##n, APPLICATION, \ +- CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_mouse_scroll_driver_api); +- +-DT_INST_FOREACH_STATUS_OKAY(KP_INST) +- +-#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ +diff --git a/app/src/endpoints.c b/app/src/endpoints.c +index 0728fff3bd..6984faa99f 100644 +--- a/app/src/endpoints.c ++++ b/app/src/endpoints.c +@@ -160,11 +160,7 @@ int zmk_endpoints_send_mouse_report() { + + #if IS_ENABLED(CONFIG_ZMK_BLE) + case ZMK_ENDPOINT_BLE: { +-#if IS_ENABLED(CONFIG_ZMK_MOUSE_WORK_QUEUE_DEDICATED) +- int err = zmk_hog_send_mouse_report_direct(&mouse_report->body); +-#else + int err = zmk_hog_send_mouse_report(&mouse_report->body); +-#endif + if (err) { + LOG_ERR("FAILED TO SEND OVER HOG: %d", err); + } +diff --git a/app/src/events/mouse_move_state_changed.c b/app/src/events/mouse_move_state_changed.c +deleted file mode 100644 +index faf89cb8ab..0000000000 +--- a/app/src/events/mouse_move_state_changed.c ++++ /dev/null +@@ -1,10 +0,0 @@ +-/* +- * Copyright (c) 2020 The ZMK Contributors +- * +- * SPDX-License-Identifier: MIT +- */ +- +-#include +-#include +- +-ZMK_EVENT_IMPL(zmk_mouse_move_state_changed); +diff --git a/app/src/events/mouse_scroll_state_changed.c b/app/src/events/mouse_scroll_state_changed.c +deleted file mode 100644 +index 4b4170fe00..0000000000 +--- a/app/src/events/mouse_scroll_state_changed.c ++++ /dev/null +@@ -1,10 +0,0 @@ +-/* +- * Copyright (c) 2020 The ZMK Contributors +- * +- * SPDX-License-Identifier: MIT +- */ +- +-#include +-#include +- +-ZMK_EVENT_IMPL(zmk_mouse_scroll_state_changed); +diff --git a/app/src/events/mouse_tick.c b/app/src/events/mouse_tick.c +deleted file mode 100644 +index 0930b9fb90..0000000000 +--- a/app/src/events/mouse_tick.c ++++ /dev/null +@@ -1,10 +0,0 @@ +-/* +- * Copyright (c) 2020 The ZMK Contributors +- * +- * SPDX-License-Identifier: MIT +- */ +- +-#include +-#include +- +-ZMK_EVENT_IMPL(zmk_mouse_tick); +diff --git a/app/src/hid.c b/app/src/hid.c +index 9e7451b7f4..acd0a2b248 100644 +--- a/app/src/hid.c ++++ b/app/src/hid.c +@@ -17,7 +17,7 @@ static struct zmk_hid_keyboard_report keyboard_report = { + static struct zmk_hid_consumer_report consumer_report = {.report_id = 2, .body = {.keys = {0}}}; + + static struct zmk_hid_mouse_report mouse_report = { +- .report_id = 4, .body = {.buttons = 0, .x = 0, .y = 0, .scroll_x = 0, .scroll_y = 0}}; ++ .report_id = 4, .body = {.buttons = 0}}; + + // Keep track of how often a modifier was pressed. + // Only release the modifier if the count is 0. +@@ -300,32 +300,6 @@ int zmk_hid_mouse_buttons_release(zmk_mouse_button_flags_t buttons) { + } + return 0; + } +- +-void zmk_hid_mouse_movement_set(int16_t x, int16_t y) { +- mouse_report.body.x = x; +- mouse_report.body.y = y; +- LOG_DBG("Mouse movement set to 0x%02X 0x%02X ", mouse_report.body.x, mouse_report.body.y); +-} +- +-void zmk_hid_mouse_movement_update(int16_t x, int16_t y) { +- mouse_report.body.x += x; +- mouse_report.body.y += y; +- LOG_DBG("Mouse movement updated to 0x%02X 0x%02X ", mouse_report.body.x, mouse_report.body.y); +-} +- +-void zmk_hid_mouse_scroll_set(int8_t x, int8_t y) { +- mouse_report.body.scroll_x = x; +- mouse_report.body.scroll_y = y; +- LOG_DBG("Mouse scroll set to 0x%02X 0x%02X ", mouse_report.body.scroll_x, +- mouse_report.body.scroll_y); +-} +- +-void zmk_hid_mouse_scroll_update(int8_t x, int8_t y) { +- mouse_report.body.scroll_x += x; +- mouse_report.body.scroll_y += y; +- LOG_DBG("Mouse scroll updated to 0x%02X 0x%02X ", mouse_report.body.scroll_x, +- mouse_report.body.scroll_y); +-} + void zmk_hid_mouse_clear() { memset(&mouse_report.body, 0, sizeof(mouse_report.body)); } + + struct zmk_hid_keyboard_report *zmk_hid_get_keyboard_report() { +diff --git a/app/src/hid_listener.c b/app/src/hid_listener.c +index 8cde3a4323..e233b0b8ed 100644 +--- a/app/src/hid_listener.c ++++ b/app/src/hid_listener.c +@@ -11,6 +11,7 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + + #include + #include ++#include + #include + #include + #include +@@ -70,14 +71,13 @@ static int hid_listener_keycode_released(const struct zmk_keycode_state_changed + } + + int hid_listener(const zmk_event_t *eh) { +- const struct zmk_keycode_state_changed *kc_ev = as_zmk_keycode_state_changed(eh); +- if (kc_ev) { +- if (kc_ev->state) { +- hid_listener_keycode_pressed(kc_ev); ++ const struct zmk_keycode_state_changed *ev = as_zmk_keycode_state_changed(eh); ++ if (ev) { ++ if (ev->state) { ++ hid_listener_keycode_pressed(ev); + } else { +- hid_listener_keycode_released(kc_ev); ++ hid_listener_keycode_released(ev); + } +- return 0; + } + return 0; + } +diff --git a/app/src/hog.c b/app/src/hog.c +index f915d27a91..1733ffa45c 100644 +--- a/app/src/hog.c ++++ b/app/src/hog.c +@@ -306,28 +306,7 @@ void send_mouse_report_callback(struct k_work *work) { + } + }; + +-K_WORK_DEFINE(hog_mouse_work, send_mouse_report_callback); +- + int zmk_hog_send_mouse_report(struct zmk_hid_mouse_report_body *report) { +- int err = k_msgq_put(&zmk_hog_mouse_msgq, report, K_NO_WAIT); +- if (err) { +- switch (err) { +- case -EAGAIN: { +- LOG_WRN("Mouse message queue full, dropping report"); +- return err; +- } +- default: +- LOG_WRN("Failed to queue mouse report to send (%d)", err); +- return err; +- } +- } +- +- k_work_submit_to_queue(&hog_work_q, &hog_mouse_work); +- +- return 0; +-}; +- +-int zmk_hog_send_mouse_report_direct(struct zmk_hid_mouse_report_body *report) { + struct bt_conn *conn = destination_connection(); + if (conn == NULL) { + return 1; +diff --git a/app/src/main.c b/app/src/main.c +index d3b3e578b3..ae604a7b9e 100644 +--- a/app/src/main.c ++++ b/app/src/main.c +@@ -17,10 +17,6 @@ LOG_MODULE_REGISTER(zmk, CONFIG_ZMK_LOG_LEVEL); + #include + #include + +-#ifdef CONFIG_ZMK_MOUSE +-#include +-#endif /* CONFIG_ZMK_MOUSE */ +- + #define ZMK_KSCAN_DEV DT_LABEL(ZMK_MATRIX_NODE_ID) + + void main(void) { +@@ -33,8 +29,4 @@ void main(void) { + #ifdef CONFIG_ZMK_DISPLAY + zmk_display_init(); + #endif /* CONFIG_ZMK_DISPLAY */ +- +-#ifdef CONFIG_ZMK_MOUSE +- zmk_mouse_init(); +-#endif /* CONFIG_ZMK_MOUSE */ + } +diff --git a/app/src/mouse.c b/app/src/mouse.c +new file mode 100644 +index 0000000000..a02d6dd0e9 +--- /dev/null ++++ b/app/src/mouse.c +@@ -0,0 +1,43 @@ ++/* ++ * Copyright (c) 2021 The ZMK Contributors ++ * ++ * SPDX-License-Identifier: MIT ++ */ ++ ++#include ++#include ++ ++LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); ++ ++#include ++#include ++#include ++#include ++ ++static void listener_mouse_button_pressed(const struct zmk_mouse_button_state_changed *ev) { ++ LOG_DBG("buttons: 0x%02X", ev->buttons); ++ zmk_hid_mouse_buttons_press(ev->buttons); ++ zmk_endpoints_send_mouse_report(); ++} ++ ++static void listener_mouse_button_released(const struct zmk_mouse_button_state_changed *ev) { ++ LOG_DBG("buttons: 0x%02X", ev->buttons); ++ zmk_hid_mouse_buttons_release(ev->buttons); ++ zmk_endpoints_send_mouse_report(); ++} ++ ++int mouse_listener(const zmk_event_t *eh) { ++ const struct zmk_mouse_button_state_changed *mbt_ev = as_zmk_mouse_button_state_changed(eh); ++ if (mbt_ev) { ++ if (mbt_ev->state) { ++ listener_mouse_button_pressed(mbt_ev); ++ } else { ++ listener_mouse_button_released(mbt_ev); ++ } ++ return 0; ++ } ++ return 0; ++} ++ ++ZMK_LISTENER(mouse_listener, mouse_listener); ++ZMK_SUBSCRIPTION(mouse_listener, zmk_mouse_button_state_changed); +diff --git a/app/src/mouse/Kconfig b/app/src/mouse/Kconfig +deleted file mode 100644 +index 1161b86b42..0000000000 +--- a/app/src/mouse/Kconfig ++++ /dev/null +@@ -1,38 +0,0 @@ +-# Copyright (c) 2021 The ZMK Contributors +-# SPDX-License-Identifier: MIT +- +-menuconfig ZMK_MOUSE +- bool "Enable ZMK mouse emulation" +- default n +- +-config ZMK_MOUSE_TICK_DURATION +- int "Mouse tick duration in ms" +- default 8 +- +-if ZMK_MOUSE +- +-choice ZMK_MOUSE_WORK_QUEUE +- prompt "Work queue selection for mouse events" +- default ZMK_MOUSE_WORK_QUEUE_DEDICATED +- +-config ZMK_MOUSE_WORK_QUEUE_SYSTEM +- bool "Use default system work queue for mouse events" +- +-config ZMK_MOUSE_WORK_QUEUE_DEDICATED +- bool "Use dedicated work queue for mouse events" +- +-endchoice +- +-if ZMK_MOUSE_WORK_QUEUE_DEDICATED +- +-config ZMK_MOUSE_DEDICATED_THREAD_STACK_SIZE +- int "Stack size for dedicated mouse thread/queue" +- default 2048 +- +-config ZMK_MOUSE_DEDICATED_THREAD_PRIORITY +- int "Thread priority for dedicated mouse thread/queue" +- default 3 +- +-endif # ZMK_MOUSE_WORK_QUEUE_DEDICATED +- +-endif +diff --git a/app/src/mouse/key_listener.c b/app/src/mouse/key_listener.c +deleted file mode 100644 +index 713d032352..0000000000 +--- a/app/src/mouse/key_listener.c ++++ /dev/null +@@ -1,160 +0,0 @@ +-/* +- * Copyright (c) 2021 The ZMK Contributors +- * +- * SPDX-License-Identifier: MIT +- */ +- +-#include +-#include +- +-LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); +- +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-static struct vector2d move_speed = {0}; +-static struct vector2d scroll_speed = {0}; +-static struct mouse_config move_config = (struct mouse_config){0}; +-static struct mouse_config scroll_config = (struct mouse_config){0}; +-static int64_t start_time = 0; +- +-bool equals(const struct mouse_config *one, const struct mouse_config *other) { +- return one->delay_ms == other->delay_ms && +- one->time_to_max_speed_ms == other->time_to_max_speed_ms && +- one->acceleration_exponent == other->acceleration_exponent; +-} +- +-static void clear_mouse_state(struct k_work *work) { +- move_speed = (struct vector2d){0}; +- scroll_speed = (struct vector2d){0}; +- start_time = 0; +- zmk_hid_mouse_movement_set(0, 0); +- zmk_hid_mouse_scroll_set(0, 0); +- LOG_DBG("Clearing state"); +-} +- +-K_WORK_DEFINE(mouse_clear, &clear_mouse_state); +- +-void mouse_clear_cb(struct k_timer *dummy) { +- k_work_submit_to_queue(zmk_mouse_work_q(), &mouse_clear); +-} +- +-static void mouse_tick_timer_handler(struct k_work *work) { +- zmk_hid_mouse_movement_set(0, 0); +- zmk_hid_mouse_scroll_set(0, 0); +- LOG_DBG("Raising mouse tick event"); +- ZMK_EVENT_RAISE( +- zmk_mouse_tick(move_speed, scroll_speed, move_config, scroll_config, &start_time)); +- zmk_endpoints_send_mouse_report(); +-} +- +-K_WORK_DEFINE(mouse_tick, &mouse_tick_timer_handler); +- +-void mouse_timer_cb(struct k_timer *dummy) { +- LOG_DBG("Submitting mouse work to queue"); +- k_work_submit_to_queue(zmk_mouse_work_q(), &mouse_tick); +-} +- +-K_TIMER_DEFINE(mouse_timer, mouse_timer_cb, mouse_clear_cb); +- +-static int mouse_timer_ref_count = 0; +- +-void mouse_timer_ref() { +- if (mouse_timer_ref_count == 0) { +- start_time = k_uptime_get(); +- k_timer_start(&mouse_timer, K_NO_WAIT, K_MSEC(CONFIG_ZMK_MOUSE_TICK_DURATION)); +- } +- mouse_timer_ref_count += 1; +-} +- +-void mouse_timer_unref() { +- if (mouse_timer_ref_count > 0) { +- mouse_timer_ref_count--; +- } +- if (mouse_timer_ref_count == 0) { +- k_timer_stop(&mouse_timer); +- } +-} +- +-static void listener_mouse_move_pressed(const struct zmk_mouse_move_state_changed *ev) { +- move_speed.x += ev->max_speed.x; +- move_speed.y += ev->max_speed.y; +- mouse_timer_ref(); +-} +- +-static void listener_mouse_move_released(const struct zmk_mouse_move_state_changed *ev) { +- move_speed.x -= ev->max_speed.x; +- move_speed.y -= ev->max_speed.y; +- mouse_timer_unref(); +-} +- +-static void listener_mouse_scroll_pressed(const struct zmk_mouse_scroll_state_changed *ev) { +- scroll_speed.x += ev->max_speed.x; +- scroll_speed.y += ev->max_speed.y; +- mouse_timer_ref(); +-} +- +-static void listener_mouse_scroll_released(const struct zmk_mouse_scroll_state_changed *ev) { +- scroll_speed.x -= ev->max_speed.x; +- scroll_speed.y -= ev->max_speed.y; +- mouse_timer_unref(); +-} +- +-static void listener_mouse_button_pressed(const struct zmk_mouse_button_state_changed *ev) { +- LOG_DBG("buttons: 0x%02X", ev->buttons); +- zmk_hid_mouse_buttons_press(ev->buttons); +- zmk_endpoints_send_mouse_report(); +-} +- +-static void listener_mouse_button_released(const struct zmk_mouse_button_state_changed *ev) { +- LOG_DBG("buttons: 0x%02X", ev->buttons); +- zmk_hid_mouse_buttons_release(ev->buttons); +- zmk_endpoints_send_mouse_report(); +-} +- +-int mouse_listener(const zmk_event_t *eh) { +- const struct zmk_mouse_move_state_changed *mmv_ev = as_zmk_mouse_move_state_changed(eh); +- if (mmv_ev) { +- if (!equals(&move_config, &(mmv_ev->config))) +- move_config = mmv_ev->config; +- +- if (mmv_ev->state) { +- listener_mouse_move_pressed(mmv_ev); +- } else { +- listener_mouse_move_released(mmv_ev); +- } +- return 0; +- } +- const struct zmk_mouse_scroll_state_changed *msc_ev = as_zmk_mouse_scroll_state_changed(eh); +- if (msc_ev) { +- if (!equals(&scroll_config, &(msc_ev->config))) +- scroll_config = msc_ev->config; +- if (msc_ev->state) { +- listener_mouse_scroll_pressed(msc_ev); +- } else { +- listener_mouse_scroll_released(msc_ev); +- } +- return 0; +- } +- const struct zmk_mouse_button_state_changed *mbt_ev = as_zmk_mouse_button_state_changed(eh); +- if (mbt_ev) { +- if (mbt_ev->state) { +- listener_mouse_button_pressed(mbt_ev); +- } else { +- listener_mouse_button_released(mbt_ev); +- } +- return 0; +- } +- return 0; +-} +- +-ZMK_LISTENER(mouse_listener, mouse_listener); +-ZMK_SUBSCRIPTION(mouse_listener, zmk_mouse_button_state_changed); +-ZMK_SUBSCRIPTION(mouse_listener, zmk_mouse_move_state_changed); +-ZMK_SUBSCRIPTION(mouse_listener, zmk_mouse_scroll_state_changed); +diff --git a/app/src/mouse/main.c b/app/src/mouse/main.c +deleted file mode 100644 +index 49208a76ef..0000000000 +--- a/app/src/mouse/main.c ++++ /dev/null +@@ -1,30 +0,0 @@ +-/* +- * Copyright (c) 2020 The ZMK Contributors +- * +- * SPDX-License-Identifier: MIT +- */ +- +-#include +-#include +- +-#if IS_ENABLED(CONFIG_ZMK_MOUSE_WORK_QUEUE_DEDICATED) +-K_THREAD_STACK_DEFINE(mouse_work_stack_area, CONFIG_ZMK_MOUSE_DEDICATED_THREAD_STACK_SIZE); +-static struct k_work_q mouse_work_q; +-#endif +- +-struct k_work_q *zmk_mouse_work_q() { +-#if IS_ENABLED(CONFIG_ZMK_MOUSE_WORK_QUEUE_DEDICATED) +- return &mouse_work_q; +-#else +- return &k_sys_work_q; +-#endif +-} +- +-int zmk_mouse_init() { +-#if IS_ENABLED(CONFIG_ZMK_MOUSE_WORK_QUEUE_DEDICATED) +- k_work_q_start(&mouse_work_q, mouse_work_stack_area, +- K_THREAD_STACK_SIZEOF(mouse_work_stack_area), +- CONFIG_ZMK_MOUSE_DEDICATED_THREAD_PRIORITY); +-#endif +- return 0; +-} +\ No newline at end of file +diff --git a/app/src/mouse/tick_listener.c b/app/src/mouse/tick_listener.c +deleted file mode 100644 +index 9c76bd5d2a..0000000000 +--- a/app/src/mouse/tick_listener.c ++++ /dev/null +@@ -1,102 +0,0 @@ +-/* +- * Copyright (c) 2020 The ZMK Contributors +- * +- * SPDX-License-Identifier: MIT +- */ +- +-#include +- +-LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); +- +-#include +-#include +-#include +-#include +- +-#include // CLAMP +- +-#if CONFIG_MINIMAL_LIBC +-static float powf(float base, float exponent) { +- // poor man's power implementation rounds the exponent down to the nearest integer. +- float power = 1.0f; +- for (; exponent >= 1.0f; exponent--) { +- power = power * base; +- } +- return power; +-} +-#else +-#include +-#endif +- +-struct vector2d move_remainder = {0}; +-struct vector2d scroll_remainder = {0}; +- +-static int64_t ms_since_start(int64_t start, int64_t now, int64_t delay) { +- int64_t move_duration = now - (start + delay); +- // start can be in the future if there's a delay +- if (move_duration < 0) { +- move_duration = 0; +- } +- return move_duration; +-} +- +-static float speed(const struct mouse_config *config, float max_speed, int64_t duration_ms) { +- // Calculate the speed based on MouseKeysAccel +- // See https://en.wikipedia.org/wiki/Mouse_keys +- if (duration_ms > config->time_to_max_speed_ms || config->time_to_max_speed_ms == 0 || +- config->acceleration_exponent == 0) { +- return max_speed; +- } +- float time_fraction = (float)duration_ms / config->time_to_max_speed_ms; +- return max_speed * powf(time_fraction, config->acceleration_exponent); +-} +- +-static void track_remainder(float *move, float *remainder) { +- float new_move = *move + *remainder; +- *remainder = new_move - (int)new_move; +- *move = (int)new_move; +-} +- +-static struct vector2d update_movement(struct vector2d *remainder, +- const struct mouse_config *config, struct vector2d max_speed, +- int64_t now, int64_t *start_time) { +- struct vector2d move = {0}; +- if (max_speed.x == 0 && max_speed.y == 0) { +- *remainder = (struct vector2d){0}; +- return move; +- } +- +- int64_t move_duration = ms_since_start(*start_time, now, config->delay_ms); +- move = (struct vector2d){ +- .x = speed(config, max_speed.x, move_duration) * CONFIG_ZMK_MOUSE_TICK_DURATION / 1000, +- .y = speed(config, max_speed.y, move_duration) * CONFIG_ZMK_MOUSE_TICK_DURATION / 1000, +- }; +- +- track_remainder(&(move.x), &(remainder->x)); +- track_remainder(&(move.y), &(remainder->y)); +- +- return move; +-} +- +-static void mouse_tick_handler(const struct zmk_mouse_tick *tick) { +- struct vector2d move = update_movement(&move_remainder, &(tick->move_config), tick->max_move, +- tick->timestamp, tick->start_time); +- zmk_hid_mouse_movement_update((int16_t)CLAMP(move.x, INT16_MIN, INT16_MAX), +- (int16_t)CLAMP(move.y, INT16_MIN, INT16_MAX)); +- struct vector2d scroll = update_movement(&scroll_remainder, &(tick->scroll_config), +- tick->max_scroll, tick->timestamp, tick->start_time); +- zmk_hid_mouse_scroll_update((int8_t)CLAMP(scroll.x, INT8_MIN, INT8_MAX), +- (int8_t)CLAMP(scroll.y, INT8_MIN, INT8_MAX)); +-} +- +-int zmk_mouse_tick_listener(const zmk_event_t *eh) { +- const struct zmk_mouse_tick *tick = as_zmk_mouse_tick(eh); +- if (tick) { +- mouse_tick_handler(tick); +- return 0; +- } +- return 0; +-} +- +-ZMK_LISTENER(zmk_mouse_tick_listener, zmk_mouse_tick_listener); +-ZMK_SUBSCRIPTION(zmk_mouse_tick_listener, zmk_mouse_tick); +\ No newline at end of file +diff --git a/app/tests/mouse-keys/mkp/events.patterns b/app/tests/mouse-keys/mkp/events.patterns +new file mode 100644 +index 0000000000..2599345c2d +--- /dev/null ++++ b/app/tests/mouse-keys/mkp/events.patterns +@@ -0,0 +1 @@ ++s/.*zmk_hid_mouse_button_//p +diff --git a/app/tests/mouse-keys/mkp/keycode_events.snapshot b/app/tests/mouse-keys/mkp/keycode_events.snapshot +new file mode 100644 +index 0000000000..ab58cc9575 +--- /dev/null ++++ b/app/tests/mouse-keys/mkp/keycode_events.snapshot +@@ -0,0 +1,10 @@ ++press: Button 0 count 1 ++press: Mouse buttons set to 0x01 ++press: Button 1 count 1 ++press: Mouse buttons set to 0x03 ++release: Button 1 count: 0 ++release: Button 1 released ++release: Mouse buttons set to 0x01 ++release: Button 0 count: 0 ++release: Button 0 released ++release: Mouse buttons set to 0x00 +diff --git a/app/tests/mouse-keys/mmv/native_posix.keymap b/app/tests/mouse-keys/mkp/native_posix.keymap +similarity index 64% +rename from app/tests/mouse-keys/mmv/native_posix.keymap +rename to app/tests/mouse-keys/mkp/native_posix.keymap +index ecf06601c0..dd55b1640f 100644 +--- a/app/tests/mouse-keys/mmv/native_posix.keymap ++++ b/app/tests/mouse-keys/mkp/native_posix.keymap +@@ -10,8 +10,8 @@ + + default_layer { + bindings = < +- &mmv MOVE_LEFT &none +- &none &none ++ &mkp LCLK &none ++ &none &mkp RCLK + >; + }; + }; +@@ -20,7 +20,9 @@ + + &kscan { + events = < +- ZMK_MOCK_PRESS(0,0,100) +- ZMK_MOCK_RELEASE(0,0,10) ++ ZMK_MOCK_PRESS (0,0,100) ++ ZMK_MOCK_PRESS (1,1,100) ++ ZMK_MOCK_RELEASE(1,1, 10) ++ ZMK_MOCK_RELEASE(0,0, 10) + >; +-}; +\ No newline at end of file ++}; +diff --git a/app/tests/mouse-keys/mkp/native_posix_64.keymap b/app/tests/mouse-keys/mkp/native_posix_64.keymap +new file mode 100644 +index 0000000000..dd55b1640f +--- /dev/null ++++ b/app/tests/mouse-keys/mkp/native_posix_64.keymap +@@ -0,0 +1,28 @@ ++#include ++#include ++#include ++#include ++ ++/ { ++ keymap { ++ compatible = "zmk,keymap"; ++ label ="Default keymap"; ++ ++ default_layer { ++ bindings = < ++ &mkp LCLK &none ++ &none &mkp RCLK ++ >; ++ }; ++ }; ++}; ++ ++ ++&kscan { ++ events = < ++ ZMK_MOCK_PRESS (0,0,100) ++ ZMK_MOCK_PRESS (1,1,100) ++ ZMK_MOCK_RELEASE(1,1, 10) ++ ZMK_MOCK_RELEASE(0,0, 10) ++ >; ++}; +diff --git a/app/tests/mouse-keys/mmv/events.patterns b/app/tests/mouse-keys/mmv/events.patterns +deleted file mode 100644 +index 833100f6ac..0000000000 +--- a/app/tests/mouse-keys/mmv/events.patterns ++++ /dev/null +@@ -1 +0,0 @@ +-s/.*hid_listener_keycode_//p +\ No newline at end of file +diff --git a/app/tests/mouse-keys/mmv/keycode_events.snapshot b/app/tests/mouse-keys/mmv/keycode_events.snapshot +deleted file mode 100644 +index 259501ba3d..0000000000 +--- a/app/tests/mouse-keys/mmv/keycode_events.snapshot ++++ /dev/null +@@ -1,2 +0,0 @@ +-pressed: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +-released: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +diff --git a/docs/docs/behaviors/mouse-emulation.md b/docs/docs/behaviors/mouse-emulation.md +index efe095e7a0..299fad4b25 100644 +--- a/docs/docs/behaviors/mouse-emulation.md ++++ b/docs/docs/behaviors/mouse-emulation.md +@@ -17,16 +17,6 @@ This feature should be enabled via a config option: + CONFIG_ZMK_MOUSE=y + ``` + +-This option enables several others. +- +-### Dedicated thread processing +- +-`CONFIG_ZMK_MOUSE_WORK_QUEUE_DEDICATED` is enabled by default and separates the processing of mouse signals into a dedicated thread, significantly improving performance. +- +-### Tick rate configuration +- +-`CONFIG_ZMK_MOUSE_TICK_DURATION` sets the tick rate for mouse polling. It is set to 8 ms. by default. +- + ## Keycode Defines + + To make it easier to encode the HID keycode numeric values, most keymaps include +@@ -37,7 +27,7 @@ provided by ZMK near the top: + #include + ``` + +-Doing so allows using a set of defines such as `MOVE_UP`, `MOVE_DOWN`, `LCLK` and `SCROLL_UP` with these behaviors. ++Doing so allows using a set of defines such as `LCLK` and `RCLK` with these behaviors. + + ## Mouse Button Press + +@@ -53,58 +43,3 @@ Example: + ``` + &mkp LCLK + ``` +- +-## Mouse Movement +- +-This behavior is used to manipulate the cursor. +- +-### Behavior Binding +- +-- Reference: `&mmv` +-- Parameter: A `uint32` with the first 16 bits relating to horizontal movement +- and the last 16 - to vertical movement. +- +-Example: +- +-``` +-&mmv MOVE_UP +-``` +- +-## Mouse Scrolling +- +-This behaviour is used to scroll, both horizontally and vertically. +- +-### Behavior Binding +- +-- Reference: `&mwh` +-- Parameter: A `uint16` with the first 8 bits relating to horizontal movement +- and the last 8 - to vertical movement. +- +-Example: +- +-``` +-&mwh SCROLL_UP +-``` +- +-## Acceleration +- +-Both mouse movement and scrolling have independently configurable acceleration profiles with three parameters: delay before movement, time to max speed and the acceleration exponent. +-The exponent is usually set to 0 for constant speed, 1 for uniform acceleration or 2 for uniform jerk. +- +-These profiles can be configured inside your keymap: +- +-``` +-&mmv { +- time-to-max-speed-ms = <500>; +-}; +- +-&mwh { +- acceleration-exponent=<1>; +-}; +- +-/ { +- keymap { +- ... +- }; +-}; +-```